Browse Source

Merge pull request #175 from b1ackmai1er/dev

Support System Update process for systems with 39SF040 flash chips
patch
Wayne Warthen 5 years ago
committed by GitHub
parent
commit
ce1b43fb0c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      ReadMe.md
  2. 28
      Source/Doc/GettingStarted.md
  3. 13
      Source/HBIOS/Build.ps1
  4. 35
      Source/HBIOS/md.asm
  5. 1078
      Source/HBIOS/updater.asm
  6. BIN
      Tools/lzsa/lzsa.exe

2
ReadMe.md

@ -707,7 +707,7 @@ most stable and you are less likely to encounter problems.
### Notes
- You can change media, but it must be done while at the OS command
prompt and you **must** warm start CP/M by pressing ctrl-c. This is
prompt and you **must** warm start CP/M by pressing ctrl-c. This is
a CP/M 2.2 constraint and is well documented in the DRI manuals.
- The original versions of DDT, DDTZ, and ZSID used the RST 38 vector

28
Source/Doc/GettingStarted.md

@ -1090,7 +1090,7 @@ 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
@ -1102,7 +1102,7 @@ To cancel: Ctrl-X, pause, Ctrl-X
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.
@ -1238,6 +1238,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

13
Source/HBIOS/Build.ps1

@ -105,6 +105,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 +234,29 @@ 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
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

35
Source/HBIOS/md.asm

@ -710,17 +710,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 +799,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
;
@ -891,7 +892,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 +915,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 +1190,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 +1198,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"
;

1078
Source/HBIOS/updater.asm

File diff suppressed because it is too large

BIN
Tools/lzsa/lzsa.exe

Binary file not shown.
Loading…
Cancel
Save