Browse Source

Support System Update process for systems with 39SF040 flash chips

Generate an update file.
Updated docs.
md.asm minors
Update compression application
patch
b1ackmai1er 5 years ago
parent
commit
4a9fcbc4af
  1. 28
      ReadMe.md
  2. 17
      Source/HBIOS/Build.ps1
  3. 46
      Source/HBIOS/md.asm
  4. BIN
      Tools/lzsa/lzsa.exe

28
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 following is a typical example of transferring ROM image using XModem
and flashing the chip in-situ. and flashing the chip in-situ.
E>xm r rom.img
E>xm r rom.rom
XMODEM v12.5 - 07/13/86 XMODEM v12.5 - 07/13/86
RBC, 28-Aug-2019 [WBW], ASCI RBC, 28-Aug-2019 [WBW], ASCI
@ -1050,7 +1050,7 @@ and flashing the chip in-situ.
Thanks for the upload Thanks for the upload
E>flash write rom.img
E>flash write rom.rom
FLASH4 by Will Sowerbutts <will@sowerbutts.com> version 1.2.3 FLASH4 by Will Sowerbutts <will@sowerbutts.com> version 1.2.3
Using RomWBW (v2.6+) bank switching. Using RomWBW (v2.6+) bank switching.
@ -1179,6 +1179,30 @@ images.
- FAT.COM - FAT.COM
- TUNE.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 # RomWBW Distribution
All source code and distributions are maintained on GitHub. Code All source code and distributions are maintained on GitHub. Code

17
Source/HBIOS/Build.ps1

@ -92,10 +92,11 @@ $ErrorAction = 'Stop'
# Directories of required build tools (TASM & cpmtools) # Directories of required build tools (TASM & cpmtools)
$TasmPath = '..\..\tools\tasm32' $TasmPath = '..\..\tools\tasm32'
$CpmToolsPath = '..\..\tools\cpmtools' $CpmToolsPath = '..\..\tools\cpmtools'
$LzaToolsPath = '..\..\tools\lzsa'
# Add tool directories to PATH and setup TASM's TABS directory path # Add tool directories to PATH and setup TASM's TABS directory path
$env:TASMTABS = $TasmPath $env:TASMTABS = $TasmPath
$env:PATH = $TasmPath + ';' + $CpmToolsPath + ';' + $env:PATH
$env:PATH = $TasmPath + ';' + $CpmToolsPath + ';' + $LzaToolsPath + ';' + $env:PATH
# Initialize working variables # Initialize working variables
$OutDir = "../../Binary" # Output directory for final image file $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 $RomFile = "${OutDir}/${RomName}.rom" # Final name of ROM image
$ComFile = "${OutDir}/${RomName}.com" # Final name of COM image (command line loadable HBIOS/CBIOS) $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) $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. # Select the proper CBIOS to include in the ROM. UNA is special.
if ($Platform -eq "UNA") {$Bios = 'una'} else {$Bios = 'wbw'} 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 # Finally, the individual binary components are concatenated together to produce
# the final images. # the final images.
# #
$SystemFileList = "hbios_rom.bin", "osimg.bin", "osimg1.bin", "osimg.bin"
if ($Platform -eq "UNA") if ($Platform -eq "UNA")
{ {
Copy-Item 'osimg.bin' ${OutDir}\UNA_WBW_SYS.bin Copy-Item 'osimg.bin' ${OutDir}\UNA_WBW_SYS.bin
Copy-Item $RomDiskFile ${OutDir}\UNA_WBW_ROM${ROMSize}.bin Copy-Item $RomDiskFile ${OutDir}\UNA_WBW_ROM${ROMSize}.bin
Concat '..\UBIOS\UNA-BIOS.BIN','osimg.bin','..\UBIOS\FSFAT.BIN',$RomDiskFile $RomFile Concat '..\UBIOS\UNA-BIOS.BIN','osimg.bin','..\UBIOS\FSFAT.BIN',$RomDiskFile $RomFile
Remove-Item $RomDiskFile
} }
else else
{ {
Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg.bin',$RomDiskFile $RomFile Concat 'hbios_rom.bin','osimg.bin','osimg1.bin','osimg.bin',$RomDiskFile $RomFile
Concat 'hbios_app.bin','osimg_small.bin' $ComFile Concat 'hbios_app.bin','osimg_small.bin' $ComFile
# Concat 'hbios_img.bin','osimg_small.bin' $ImgFile # 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 the temporary working ROM disk file
Remove-Item $RomDiskFile
#Remove-Item $RomDiskFile

46
Source/HBIOS/md.asm

@ -472,6 +472,7 @@ MD_SECM1: ; DESIRED SECTOR IS IN BUFFER
; ;
MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR MD_LBA4K .DW $FFFF ; LBA OF CURRENT SECTOR
MD_FBAS .DW $FFFF ; BANK AND SECTOR MD_FBAS .DW $FFFF ; BANK AND SECTOR
;MD_FLOP .DW $FFFF ; ADDRESS OF LAST OPERATION CALLED
#ENDIF #ENDIF
; ;
; READ RAM / ROM ; READ RAM / ROM
@ -710,17 +711,18 @@ MD_PROBE:
#ENDIF #ENDIF
PUSH HL PUSH HL
CALL MD_CALBAS ; SETUP BANK AND SECTOR 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 CALL MD_FNCALL ; EXECUTE: IDENTIFY FLASH CHIP
LD HL,MD_TGTDEV ; IF WE MATCH WITH LD HL,MD_TGTDEV ; IF WE MATCH WITH
XOR A ; A NON 39SF040 XOR A ; A NON 39SF040
SBC HL,BC ; CHIP SET THE 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) #IF (MD_FVBS==1)
CALL MD_LAND ; LOOKUP AND DISPLAY CALL MD_LAND ; LOOKUP AND DISPLAY
#ENDIF #ENDIF
@ -798,32 +800,32 @@ FF_NXT2:
;====================================================================== ;======================================================================
; COMMON FUNCTION CALL FOR: ; 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 ; 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. ; ON EXIT BC CONTAINS THE CHIP ID BYTES.
; A NO STATUS IS RETURNED ; A NO STATUS IS RETURNED
; ;
; MD_FERAS_R - ERASE FLASH SECTOR ; MD_FERAS_R - ERASE FLASH SECTOR
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED ; 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 ; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL
; ;
; MD_FREAD_R - READ FLASH SECTOR ; MD_FREAD_R - READ FLASH SECTOR
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED ; 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 ; IX POINTS TO WHERE TO SAVE DATA
; ON EXIT A NO STATUS IS RETURNED ; 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 ; 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. ; IX POINTS TO DATA TO COMPARE.
; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL ; ON EXIT A RETURNS STATUS 0=SUCCESS NZ=FAIL
; ;
; MD_FWRIT_R - WRITE FLASH SECTOR ; MD_FWRIT_R - WRITE FLASH SECTOR
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED ; 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 ; IX POINTS TO DATA TO BE WRITTEN
; ON EXIT A NO STATUS IS RETURNED ; ON EXIT A NO STATUS IS RETURNED
; ;
@ -835,12 +837,22 @@ FF_NXT2:
; ;
MD_FNCALL: ; USING HBX_BUF FOR CODE AREA 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 DE,HBX_BUF ; EXECUTE / START ADDRESS
LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES
LDIR ; COPY OUR RELOCATABLE CODE TO THE BUFFER LDIR ; COPY OUR RELOCATABLE CODE TO THE BUFFER
; ;
LD D,B ; PRESET DE TO ZERO TO REDUCE LD D,B ; PRESET DE TO ZERO TO REDUCE
LD E,B ; CODE SIZE IN RELOCATABLE CODE LD E,B ; CODE SIZE IN RELOCATABLE CODE
;
;MD_FSAME:
; ;
LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC
; ;
@ -891,7 +903,7 @@ MD_SAVSTK .DW 0
; NO STATUS IS RETURNED ; 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 LD D,A ; SAVE CURRENT BANK
; ;
@ -914,7 +926,7 @@ MD_FIDENT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
; RET ; 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. ; ERASE FLASH SECTOR.
@ -1189,7 +1201,7 @@ MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE
;====================================================================== ;======================================================================
; ;
#IF (MD_FDBG==1) #IF (MD_FDBG==1)
.ECHO "MD_FIDENT_R "
.ECHO "MD_FIDEN_R "
.ECHO MD_I_SZ .ECHO MD_I_SZ
.ECHO "\n" .ECHO "\n"
; ;
@ -1197,7 +1209,7 @@ MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE
.ECHO MD_R_SZ .ECHO MD_R_SZ
.ECHO "\n" .ECHO "\n"
; ;
.ECHO "MD_VERI_R "
.ECHO "MD_FVERI_R "
.ECHO MD_V_SZ .ECHO MD_V_SZ
.ECHO "\n" .ECHO "\n"
; ;

BIN
Tools/lzsa/lzsa.exe

Binary file not shown.
Loading…
Cancel
Save