diff --git a/ReadMe.md b/ReadMe.md index 21ccd7d7..64d961a1 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1038,7 +1038,7 @@ system, you can use the FLASH application to update your ROM. The following is a typical example of transferring ROM image using XModem and flashing the chip in-situ. - E>xm r rom.img + E>xm r rom.rom XMODEM v12.5 - 07/13/86 RBC, 28-Aug-2019 [WBW], ASCI @@ -1050,7 +1050,7 @@ and flashing the chip in-situ. Thanks for the upload - E>flash write rom.img + E>flash write rom.rom FLASH4 by Will Sowerbutts version 1.2.3 Using RomWBW (v2.6+) bank switching. @@ -1179,6 +1179,30 @@ images. - FAT.COM - TUNE.COM +# System Update + +If the system running ROMWBW utilizes the SST39SF040 Flash chip then it is possible to do a System Update in place of +a System Upgrade in some cases. + +A System Update would involve only updating the BIOS, ROM applications and CP/M system. + +A System Update may be more favorable than a System Upgrade in cases such as: + + - Overwriting of the ROM drive is not desired. + - Space is unavailable to hold a full ROMWBW ROM. + - To mimimize time taken to transfer and flash a full ROM. + - Configuration changes are only minor and do not impact disk applications. + +The ROMWBW build process generates a system upgrade file along with the normal ROM image and can be identified by the +extension ".upd". It will be 128Kb in size. In comparison the normal ROM image will have the extension ".rom" and be +512Kb or 1024Kb in size. + +Transferring and flashing the System Update is accomplished in the same manner as described above in *Upgrading* with +the required difference being that the flash application needs to be directed to complete a partial flash using the +/p command line switch. + +`E>flash write rom.upd /p` + # RomWBW Distribution All source code and distributions are maintained on GitHub. Code diff --git a/Source/HBIOS/Build.ps1 b/Source/HBIOS/Build.ps1 index bd74126c..764efbe1 100644 --- a/Source/HBIOS/Build.ps1 +++ b/Source/HBIOS/Build.ps1 @@ -92,10 +92,11 @@ $ErrorAction = 'Stop' # Directories of required build tools (TASM & cpmtools) $TasmPath = '..\..\tools\tasm32' $CpmToolsPath = '..\..\tools\cpmtools' +$LzaToolsPath = '..\..\tools\lzsa' # Add tool directories to PATH and setup TASM's TABS directory path $env:TASMTABS = $TasmPath -$env:PATH = $TasmPath + ';' + $CpmToolsPath + ';' + $env:PATH +$env:PATH = $TasmPath + ';' + $CpmToolsPath + ';' + $LzaToolsPath + ';' + $env:PATH # Initialize working variables $OutDir = "../../Binary" # Output directory for final image file @@ -105,6 +106,7 @@ $RomDiskFile = "RomDisk.tmp" # Temporary filename used to create ROM disk image $RomFile = "${OutDir}/${RomName}.rom" # Final name of ROM image $ComFile = "${OutDir}/${RomName}.com" # Final name of COM image (command line loadable HBIOS/CBIOS) $ImgFile = "${OutDir}/${RomName}.img" # Final name of IMG image (memory loadable HBIOS/CBIOS image) +$UpdFile = "${OutDir}/${RomName}.upd" # Final name of System ROM image # Select the proper CBIOS to include in the ROM. UNA is special. if ($Platform -eq "UNA") {$Bios = 'una'} else {$Bios = 'wbw'} @@ -233,19 +235,30 @@ cpmchattr -f $RomFmt $RomDiskFile r 0:*.* # Finally, the individual binary components are concatenated together to produce # the final images. # +$SystemFileList = "hbios_rom.bin", "osimg.bin", "osimg1.bin", "osimg.bin" if ($Platform -eq "UNA") { Copy-Item 'osimg.bin' ${OutDir}\UNA_WBW_SYS.bin Copy-Item $RomDiskFile ${OutDir}\UNA_WBW_ROM${ROMSize}.bin Concat '..\UBIOS\UNA-BIOS.BIN','osimg.bin','..\UBIOS\FSFAT.BIN',$RomDiskFile $RomFile + Remove-Item $RomDiskFile } else { Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg.bin',$RomDiskFile $RomFile Concat 'hbios_app.bin','osimg_small.bin' $ComFile # Concat 'hbios_img.bin','osimg_small.bin' $ImgFile + Remove-Item $RomDiskFile + Set-Content $UpdFile -Value $null + foreach ($InputFile in $SystemFileList) + { + Copy-Item $InputFile $RomDiskFile +# lzsa -f2 -r $InputFile $RomDiskFile + Add-Content $UpdFile -Value ([System.IO.File]::ReadAllBytes($RomDiskFile)) -Encoding byte + Remove-Item $RomDiskFile + } } # Remove the temporary working ROM disk file -Remove-Item $RomDiskFile +#Remove-Item $RomDiskFile diff --git a/Source/HBIOS/md.asm b/Source/HBIOS/md.asm index 47160004..c03ac7cb 100644 --- a/Source/HBIOS/md.asm +++ b/Source/HBIOS/md.asm @@ -472,6 +472,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER ; MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR MD_FBAS .DW $FFFF ; BANK AND SECTOR +;MD_FLOP .DW $FFFF ; ADDRESS OF LAST OPERATION CALLED #ENDIF ; ; READ RAM / ROM @@ -710,17 +711,18 @@ MD_PROBE: #ENDIF PUSH HL CALL MD_CALBAS ; SETUP BANK AND SECTOR - LD HL,MD_FIDENT_R ; PUT ROUTINE TO CALL + LD HL,MD_FIDEN_R ; PUT ROUTINE TO CALL CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP LD HL,MD_TGTDEV ; IF WE MATCH WITH XOR A ; A NON 39SF040 SBC HL,BC ; CHIP SET THE - LD A,(MD_FFSEN) ; R/W FLAG TO R/O - OR H - OR L ; A NON ZERO VALUE - LD (MD_FFSEN),A ; MEANS WE CAN'T - POP HL ; ENABLE FLASH WRITING + JR Z,MD_PR2 ; R/W FLAG TO R/O + LD HL,MD_FFSEN ; A NON ZERO VALUE + SET 0,(HL) ; MEANS WE CAN'T + ; ENABLE FLASH WRITING; +MD_PR2: + POP HL #IF (MD_FVBS==1) CALL MD_LAND ; LOOKUP AND DISPLAY #ENDIF @@ -798,32 +800,32 @@ FF_NXT2: ;====================================================================== ; COMMON FUNCTION CALL FOR: ; -; MD_FIDENT_R - IDENTIFY FLASH CHIP +; MD_FIDEN_R - IDENTIFY FLASH CHIP ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED -; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED +; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED ; ON EXIT BC CONTAINS THE CHIP ID BYTES. ; A NO STATUS IS RETURNED ; ; MD_FERAS_R - ERASE FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED -; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED +; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED ; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ; MD_FREAD_R - READ FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED -; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED +; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED ; IX POINTS TO WHERE TO SAVE DATA ; ON EXIT A NO STATUS IS RETURNED ; -; MD_VERI_R - VERIFY FLASH SECTOR +; MD_FVERI_R - VERIFY FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED -; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED +; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED ; IX POINTS TO DATA TO COMPARE. ; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ; MD_FWRIT_R - WRITE FLASH SECTOR ; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED -; HL POINTS TO THE ROUTINE TO RELOCATED AND CALLED +; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED ; IX POINTS TO DATA TO BE WRITTEN ; ON EXIT A NO STATUS IS RETURNED ; @@ -835,12 +837,22 @@ FF_NXT2: ; MD_FNCALL: ; USING HBX_BUF FOR CODE AREA ; +; EX DE,HL ; IF WE ARE +; LD HL,(MD_FLOP) ; REPEATING THE +; XOR A ; SAME OPERATION +; SBC HL,DE ; AS PREVIOUS +; EX DE,HL ; DONT COPY +; JR Z,MD_FSAME ; IF THE SAME, DE=0 +; LD (MD_FLOP),HL ; SAVE CURRENT OPERATION FOR NEXT TIME + LD DE,HBX_BUF ; EXECUTE / START ADDRESS LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES LDIR ; COPY OUR RELOCATABLE CODE TO THE BUFFER ; LD D,B ; PRESET DE TO ZERO TO REDUCE LD E,B ; CODE SIZE IN RELOCATABLE CODE +; +;MD_FSAME: ; LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC ; @@ -891,7 +903,7 @@ MD_SAVSTK .DW 0 ; NO STATUS IS RETURNED ;====================================================================== ; -MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY +MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY ; LD D,A ; SAVE CURRENT BANK ; @@ -914,7 +926,7 @@ MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY ; ; RET ; -MD_I_SZ .EQU $-MD_FIDENT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED +MD_I_SZ .EQU $-MD_FIDEN_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED ; ;====================================================================== ; ERASE FLASH SECTOR. @@ -1189,7 +1201,7 @@ MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE ;====================================================================== ; #IF (MD_FDBG==1) - .ECHO "MD_FIDENT_R " + .ECHO "MD_FIDEN_R " .ECHO MD_I_SZ .ECHO "\n" ; @@ -1197,7 +1209,7 @@ MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE .ECHO MD_R_SZ .ECHO "\n" ; - .ECHO "MD_VERI_R " + .ECHO "MD_FVERI_R " .ECHO MD_V_SZ .ECHO "\n" ; diff --git a/Tools/lzsa/lzsa.exe b/Tools/lzsa/lzsa.exe index 1c1927d7..f7ad5895 100644 Binary files a/Tools/lzsa/lzsa.exe and b/Tools/lzsa/lzsa.exe differ