Browse Source

Support System Update process for systems with 39SF040 flash chips

Generate an update file.
Updated docs.
md.asm minors
Update compression application
pull/175/head
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
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 <will@sowerbutts.com> 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

17
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

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_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"
;

BIN
Tools/lzsa/lzsa.exe

Binary file not shown.
Loading…
Cancel
Save