mirror of
https://github.com/wwarthen/RomWBW.git
synced 2026-02-06 14:11:48 -06:00
Update updater.asm
Add support for other 512K flash devices. Devices that do not support sector erase will be chip erased prior to writing. Only AM29F040 tested. Additional debug options added
This commit is contained in:
@@ -68,14 +68,16 @@
|
||||
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 32S, 16S, 8S, 4S, 2S & 1S
|
||||
;
|
||||
;
|
||||
; V.DEV 13/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
|
||||
; V.DEV 18/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
|
||||
; b1ackmai1er ON RETROBREWCOMPUTERS.ORG
|
||||
;
|
||||
;
|
||||
; NOTES:
|
||||
; TESTED WITH TERATERM XMODEM.
|
||||
; ONLY SST39F040 FLASH CHIP IS SUPPORTED DUE TO 4K SECTOR REQUIREMENT.
|
||||
; PARTIAL WRITES CAN BE COMPLETED WITH 39SF040 CHIPS
|
||||
; OTHER CHIPS REQUIRE ENTIRE FLASH TO BE ERASED BEFORE BEFORE BEING WRITTEN.
|
||||
; SBC V2-005 MEGAFLASH REQUIRED FOR 1MB FLASH SUPPORT.
|
||||
; ASSUMES BOTH CHIPS ARE SAME TYPE
|
||||
; FAILURE HANDLING HAS NOT BEEN TESTED.
|
||||
; TIMING BROADLY CALIBRATED ON A Z80 SBC-V2
|
||||
; UNABIOS NOT SUPPORTED
|
||||
@@ -183,7 +185,6 @@ RESTART:
|
||||
LD A,0
|
||||
JR Z,CHPFND ; YES IT IS ...
|
||||
;
|
||||
#IF (XFUDBG)
|
||||
LD HL,$A401 ; IS IT A 29F040
|
||||
XOR A
|
||||
SBC HL,BC
|
||||
@@ -211,12 +212,11 @@ RESTART:
|
||||
LD HL,$A4C2 ; IS IT AN MX29F040
|
||||
SBC HL,BC
|
||||
LD A,5
|
||||
;
|
||||
#ENDIF
|
||||
;
|
||||
JP NZ,FAILBC ; SUPPORTED CHIP NOT FOUND
|
||||
;
|
||||
CHPFND: LD (ERATYP),A ; SAVE ERASE TYPE
|
||||
CHPFND: LD A,2
|
||||
LD (ERATYP),A ; SAVE ERASE TYPE
|
||||
|
||||
LD BC,$F8F0 ; GET CPU SPEED
|
||||
RST 08 ; AND MULTIPLY
|
||||
@@ -227,6 +227,9 @@ CHPFND: LD (ERATYP),A ; SAVE ERASE TYPE
|
||||
;
|
||||
MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
|
||||
LD (MD_FBAS),DE ; AT BANK 0 SECTOR 0
|
||||
|
||||
LD HL,ERATYP
|
||||
RES 7,(HL)
|
||||
;
|
||||
LD HL,msgCRLF
|
||||
CALL PRTSTR0
|
||||
@@ -256,20 +259,29 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
|
||||
JP Z,OPTIOND ; FLASH
|
||||
;
|
||||
CP '1' ; CALCULATE
|
||||
JP Z,OPTION1 ; CRC FLASH #1
|
||||
JP Z,OPTION1 ; CRC 512K FLASH
|
||||
;
|
||||
CP '2' ; CALCULATE
|
||||
JP Z,OPTION2 ; CRC FLASH #2
|
||||
JP Z,OPTION2 ; CRC 1024K FLASH
|
||||
;
|
||||
#IF (XFUDBG)
|
||||
CP '3' ; CALCULATE
|
||||
JP Z,OPTION3 ; CRC FLASH #2
|
||||
;
|
||||
CP 'T' ; TEST TIMEOUT
|
||||
JP Z,OPTIONT ; LOOP
|
||||
;
|
||||
CP 'H' ; HALF
|
||||
JP Z,OPTIONH ; SPEED SWITCH
|
||||
;
|
||||
CP 'F' ; DUMP
|
||||
JP Z,OPTIONF ; BUFFER
|
||||
CP 'F' ; DEBUG
|
||||
JP Z,OPTIONF ; DUMP
|
||||
;
|
||||
CP 'E' ; ERASE
|
||||
JP Z,OPTIONE ; CHIP #1
|
||||
;
|
||||
CP 'Z' ; ERASE
|
||||
JP Z,OPTIONR ; CHIP #2
|
||||
#ENDIF
|
||||
;
|
||||
JR MENULP
|
||||
@@ -443,9 +455,21 @@ Die1: LD B,BF_SYSRESET ; SYSTEM RESTART
|
||||
|
||||
WSEC: CALL DISPROG ; DISPLAY PROGRESS
|
||||
;
|
||||
WSEC1: LD HL,MD_FERAS ; ERASE
|
||||
CALL MD_FNCALL ; AND WRITE
|
||||
LD IX,sector4k ; THIS
|
||||
WSEC1: LD A,(ERATYP) ; SECTOR
|
||||
OR A ; ERASE?
|
||||
JP Z,WSEC4
|
||||
;
|
||||
JP M,WSEC3 ; SKIP ERASE?
|
||||
;
|
||||
LD HL,MD_FERAC ; SETUP CHIP ERASE
|
||||
SET 7,A ; SET FLAG SO
|
||||
LD (ERATYP),A ; WE DONT ERASE AGAIN
|
||||
JR WSEC2
|
||||
;
|
||||
WSEC4: LD HL,MD_FERAS ; SET ERASE SECTOR
|
||||
WSEC2: CALL MD_FNCALL ; ERASE CHIP OR SECTOR
|
||||
;
|
||||
WSEC3: LD IX,sector4k ; WRITE THIS
|
||||
LD HL,MD_FWRIT ; BANK / SECTOR
|
||||
CALL MD_FNCALL
|
||||
;
|
||||
@@ -468,7 +492,12 @@ NOVER: LD DE,sector4k ; POINT BACK TO START OF 4K BUFFER
|
||||
LD (HL),A ; RESET SECTOR TO 0
|
||||
INC HL
|
||||
INC (HL) ; NEXT BANK
|
||||
JR NXTS3
|
||||
;
|
||||
CP $10 ; IF WE ARE AT THE
|
||||
JR NZ,NXTS3 ; START OF A NEW
|
||||
LD HL,ERATYP ; CHIP THEN ALLOW
|
||||
RES 7,(HL) ; CHIP ERASE BY
|
||||
JR NXTS3 ; RESETTING FLAG
|
||||
;
|
||||
NXTS2: LD A,$10 ; NEXT SECTOR
|
||||
ADD A,(HL) ; EACH SECTOR IS $1000
|
||||
@@ -605,9 +634,20 @@ OPTIOND:CALL COUTON ; TURN ON OUTPUT
|
||||
CP 'Y' ; PROCEED
|
||||
JP NZ,MENULP
|
||||
DUPL: LD HL,msgCopying
|
||||
CALL PRTSTR0
|
||||
CALL PRTSTR0
|
||||
;
|
||||
LD B,16 ; LOOP THROUGH 16 BANKS
|
||||
LD A,(ERATYP) ; CHECK IF WE
|
||||
OR A ; NEED TO DO
|
||||
JR Z,NOERA1 ; A CHIP ERASE
|
||||
;
|
||||
LD HL,$1000
|
||||
LD (MD_FBAS),HL
|
||||
LD HL,MD_FERAC ; ERASE
|
||||
CALL MD_FNCALL ; CHIP #2
|
||||
OR A
|
||||
JP FAILWF
|
||||
;
|
||||
NOERA1: LD B,16 ; LOOP THROUGH 16 BANKS
|
||||
;
|
||||
XOR A ; START AT
|
||||
LD (MD_BANK),A ; BANK 0
|
||||
@@ -628,13 +668,17 @@ NXTS: PUSH BC
|
||||
;
|
||||
LD HL,MD_BANK ; SET CHIP #2
|
||||
SET 4,(HL)
|
||||
;
|
||||
LD A,(ERATYP) ; SKIP ERASE
|
||||
OR A ; IF SECTOR ERASE
|
||||
JR NZ,NOERA2 ; IS NOT SUPPORTED
|
||||
;
|
||||
LD HL,MD_FERAS ; ERASE SECTOR
|
||||
CALL MD_FNCALL ; ON ROM #2
|
||||
OR A
|
||||
JR NZ,VERF
|
||||
;
|
||||
LD IX,sector4k ; WRITE SECTOR
|
||||
NOERA2: LD IX,sector4k ; WRITE SECTOR
|
||||
LD HL,MD_FWRIT ; ON ROM #2
|
||||
CALL MD_FNCALL
|
||||
;
|
||||
@@ -729,18 +773,22 @@ OPTIONH:LD A,8 ; TURN ON THE SBC-V2-004+
|
||||
;
|
||||
OPTIONF:LD HL,msgCRLF ; DISPLAY
|
||||
CALL PRTSTR0 ; BANK
|
||||
LD C,'B' ; SECTOR
|
||||
LD C,'b' ; SECTOR
|
||||
CALL CONOUT ; TIMEOUT
|
||||
LD A,(MD_BANK)
|
||||
LD A,(MD_BANK) ; CHIP
|
||||
CALL PRTHEXB
|
||||
LD C,'S'
|
||||
LD C,'s'
|
||||
CALL CONOUT
|
||||
LD A,(MD_SECT)
|
||||
CALL PRTHEXB
|
||||
LD C,'T'
|
||||
LD C,'t'
|
||||
CALL CONOUT
|
||||
LD A,(TmoFct)
|
||||
CALL PRTHEXB
|
||||
LD C,'c'
|
||||
CALL CONOUT
|
||||
LD A,(ERATYP)
|
||||
CALL PRTHEXB
|
||||
;
|
||||
LD HL,msgCRLF ; DISPLAY
|
||||
CALL PRTSTR0 ; ACK/NAK BYTE
|
||||
@@ -769,11 +817,27 @@ DMPBUF: LD A,(HL) ; PACKET
|
||||
LD HL,msgCRLF
|
||||
CALL PRTSTR0
|
||||
POP HL
|
||||
DMPBUF1:
|
||||
|
||||
INC HL
|
||||
DMPBUF1:INC HL
|
||||
DJNZ DMPBUF
|
||||
JP MENULP
|
||||
;
|
||||
OPTIONR:LD HL,msgErase ; DISPLAY
|
||||
CALL PRTSTR0 ; ERASE CHIP
|
||||
LD HL,$1000 ; SET CHIP
|
||||
LD (MD_FBAS),HL ; ADDRESS
|
||||
LD HL,MD_FERAC ; ERASE
|
||||
CALL MD_FNCALL ; AND WRITE
|
||||
OR A
|
||||
JP NZ,FAILWF
|
||||
JP Done1
|
||||
;
|
||||
OPTIONE:LD HL,msgErase ; DISPLAY
|
||||
CALL PRTSTR0 ; ERASE CHIP
|
||||
LD HL,MD_FERAC ; ERASE
|
||||
CALL MD_FNCALL ; AND WRITE
|
||||
OR A
|
||||
JP NZ,FAILWF
|
||||
JP Done1
|
||||
#ENDIF
|
||||
;
|
||||
SEROUT: PUSH HL ; SERIAL OUTPUT CHARACTER IN C
|
||||
@@ -889,14 +953,19 @@ HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX
|
||||
DAA
|
||||
RET
|
||||
|
||||
OPTION1:LD HL,$0000
|
||||
LD (MD_FBAS),HL
|
||||
LD C,$00
|
||||
OPTION3:LD HL,$1000 ; CRC32 STARTING
|
||||
LD (MD_FBAS),HL ; BANK $10 SECTOR $00
|
||||
LD B,16 ; 16 BANKS (512K)
|
||||
JR CALCCRC
|
||||
|
||||
OPTION1:LD HL,$0000 ; CRC32 STARTING
|
||||
LD (MD_FBAS),HL ; BANK $00 SECTOR $00
|
||||
LD B,16 ; 16 BANKS (512K)
|
||||
JR CALCCRC
|
||||
;
|
||||
OPTION2:LD HL,$1000
|
||||
LD (MD_FBAS),HL
|
||||
LD C,$10
|
||||
OPTION2:LD HL,$0000 ; CRC32 STARTING
|
||||
LD (MD_FBAS),HL ; BANK $00 SECTOR $00
|
||||
LD B,32 ; 32 BANKS (1024K)
|
||||
;
|
||||
CALCCRC:CALL COUTON ; TURN ON OUTPUT
|
||||
;
|
||||
@@ -907,8 +976,8 @@ CALCCRC:CALL COUTON ; TURN ON OUTPUT
|
||||
LD (CRC),HL ; START CRC
|
||||
LD (CRC+2),HL ; CONDITION
|
||||
|
||||
LD B,16 ; LOOP THROUGH
|
||||
CRCLP1: PUSH BC ; 16 BANKS
|
||||
; LD B,16 ;
|
||||
CRCLP1: PUSH BC ; LOOP THROUGH ALL BANKS
|
||||
LD B,8 ; LOOP THROUGH
|
||||
CRCLP2: PUSH BC ; 8 SECTORS
|
||||
;
|
||||
@@ -1048,10 +1117,15 @@ MD_FSTART: .EQU $ ; FLASH ROUTINES WHICH GET RELOCATED TO HIGH MEMORY
|
||||
; IX POINTS TO DATA TO BE WRITTEN
|
||||
; ON EXIT A NO STATUS IS RETURNED
|
||||
;
|
||||
; MD_FERAC_R - ERASE FLASH CHIP
|
||||
; ON ENTRY MD_FBAS HAS BEEN SET WITH BANK AND SECTOR BEING ACCESSED
|
||||
; HL POINTS TO THE ROUTINE TO BE RELOCATED AND CALLED
|
||||
; ON EXIT A RETURNS STATUS 0=SUCCESS FF=FAIL
|
||||
;
|
||||
; GENERAL OPERATION:
|
||||
; COPY FLASH CODE TO UPPER MEMORY
|
||||
; CALL RELOCATED FLASH CODE
|
||||
; RETURN WITH ID CODE.
|
||||
; FLASH LIBRARY CODE NEEDS TO BE RELOCATED TO UPPER MEMORY
|
||||
; STACK NEEDS TO BE SETUP IN UPPER MEMORY
|
||||
; DEPENDING ON ROUTINE, RETURNS WITH STATUS CODE IN A.
|
||||
;======================================================================
|
||||
;
|
||||
MD_FNCALL:
|
||||
@@ -1080,7 +1154,7 @@ MD_FERAS .EQU HBX_START-MD_CSIZ+MD_FERAS_R-MD_FSTART ; CALL ADDRESS FOR ERASE FL
|
||||
MD_FREAD .EQU HBX_START-MD_CSIZ+MD_FREAD_R-MD_FSTART ; CALL ADDRESS FOR READ FLASH SECTOR
|
||||
MD_FVERI .EQU HBX_START-MD_CSIZ+MD_FVERI_R-MD_FSTART ; CALL ADDRESS FOR VERIFY FLASH SECTOR
|
||||
MD_FWRIT .EQU HBX_START-MD_CSIZ+MD_FWRIT_R-MD_FSTART ; CALL ADDRESS FOR WRITE FLASH SECTOR
|
||||
;MD_FERAC .EQU HBX_START-MD_CSIZ+MD_FERAC_R-MD_FSTART ; CALL ADDRESS FOR ERASE FLASH CHIP
|
||||
MD_FERAC .EQU HBX_START-MD_CSIZ+MD_FERAC_R-MD_FSTART ; CALL ADDRESS FOR ERASE FLASH CHIP
|
||||
;
|
||||
; Message strings
|
||||
;
|
||||
@@ -1092,7 +1166,8 @@ msgBank: .DB CR,LF,"BANK ",0
|
||||
msgUnsupC: .DB CR,LF,"FLASH CHIP NOT SUPPORTED",CR,LF,0
|
||||
msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,0
|
||||
msgCopying: .DB CR,LF,"COPYING ...",CR,LF,0
|
||||
msgCalc: .DB CR,LF,"CALCULATING CRC32 ...",CR,LF,0
|
||||
msgCalc: .DB CR,LF,"CALCULATING ...",CR,LF,0
|
||||
msgErase: .DB CR,LF,"ERASING ...",CR,LF,0
|
||||
msgCRC32: .DB CR,LF,CR,LF,"CRC32 : ",0
|
||||
msgFailWrt: .DB CR,LF,"FLASH WRITE FAILED",CR,LF,0
|
||||
msgFailure: .DB CR,LF,"TRANSMISSION FAILED",CR,LF,0
|
||||
@@ -1104,12 +1179,15 @@ msgBegin: .DB CR,LF,"(R) Reboot"
|
||||
.DB CR,LF,"(U) Begin Update"
|
||||
.DB CR,LF,"(X) Exit to Rom Loader"
|
||||
.DB CR,LF,"(D) Duplicate Flash #1 to #2"
|
||||
.DB CR,LF,"(1) CRC Flash #1"
|
||||
.DB CR,LF,"(2) CRC Flash #2"
|
||||
.DB CR,LF,"(1) CRC 512K Flash"
|
||||
.DB CR,LF,"(2) CRC 1024K Flash"
|
||||
#IF (XFUDBG)
|
||||
.DB CR,LF,"(H) Select half speed"
|
||||
.DB CR,LF,"(T) Test timeout"
|
||||
.DB CR,LF,"(F) Dump last packet"
|
||||
.DB CR,LF,"(F) Dump Debug Data"
|
||||
.DB CR,LF,"(E) Erase Flash chip #1"
|
||||
.DB CR,LF,"(Z) Erase Flash chip #2"
|
||||
.DB CR,LF,"(3) CRC Flash chip #2"
|
||||
#ENDIF
|
||||
.DB CR,LF,CR,LF,"Select : ",0
|
||||
msgSuccess: .DB CR,LF,CR,LF,"COMPLETED WITHOUT ERRORS ",CR,LF,0
|
||||
|
||||
Reference in New Issue
Block a user