Browse Source

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
pull/183/head
b1ackmai1er 5 years ago
parent
commit
47d2ff82a9
  1. 158
      Source/HBIOS/updater.asm

158
Source/HBIOS/updater.asm

@ -68,14 +68,16 @@
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 32S, 16S, 8S, 4S, 2S & 1S ; 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 ; b1ackmai1er ON RETROBREWCOMPUTERS.ORG
; ;
; ;
; NOTES: ; NOTES:
; TESTED WITH TERATERM XMODEM. ; 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. ; SBC V2-005 MEGAFLASH REQUIRED FOR 1MB FLASH SUPPORT.
; ASSUMES BOTH CHIPS ARE SAME TYPE
; FAILURE HANDLING HAS NOT BEEN TESTED. ; FAILURE HANDLING HAS NOT BEEN TESTED.
; TIMING BROADLY CALIBRATED ON A Z80 SBC-V2 ; TIMING BROADLY CALIBRATED ON A Z80 SBC-V2
; UNABIOS NOT SUPPORTED ; UNABIOS NOT SUPPORTED
@ -183,7 +185,6 @@ RESTART:
LD A,0 LD A,0
JR Z,CHPFND ; YES IT IS ... JR Z,CHPFND ; YES IT IS ...
; ;
#IF (XFUDBG)
LD HL,$A401 ; IS IT A 29F040 LD HL,$A401 ; IS IT A 29F040
XOR A XOR A
SBC HL,BC SBC HL,BC
@ -211,12 +212,11 @@ RESTART:
LD HL,$A4C2 ; IS IT AN MX29F040 LD HL,$A4C2 ; IS IT AN MX29F040
SBC HL,BC SBC HL,BC
LD A,5 LD A,5
;
#ENDIF
; ;
JP NZ,FAILBC ; SUPPORTED CHIP NOT FOUND 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 LD BC,$F8F0 ; GET CPU SPEED
RST 08 ; AND MULTIPLY RST 08 ; AND MULTIPLY
@ -227,6 +227,9 @@ CHPFND: LD (ERATYP),A ; SAVE ERASE TYPE
; ;
MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
LD (MD_FBAS),DE ; AT BANK 0 SECTOR 0 LD (MD_FBAS),DE ; AT BANK 0 SECTOR 0
LD HL,ERATYP
RES 7,(HL)
; ;
LD HL,msgCRLF LD HL,msgCRLF
CALL PRTSTR0 CALL PRTSTR0
@ -256,20 +259,29 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING
JP Z,OPTIOND ; FLASH JP Z,OPTIOND ; FLASH
; ;
CP '1' ; CALCULATE CP '1' ; CALCULATE
JP Z,OPTION1 ; CRC FLASH #1
JP Z,OPTION1 ; CRC 512K FLASH
; ;
CP '2' ; CALCULATE CP '2' ; CALCULATE
JP Z,OPTION2 ; CRC FLASH #2
JP Z,OPTION2 ; CRC 1024K FLASH
; ;
#IF (XFUDBG) #IF (XFUDBG)
CP '3' ; CALCULATE
JP Z,OPTION3 ; CRC FLASH #2
;
CP 'T' ; TEST TIMEOUT CP 'T' ; TEST TIMEOUT
JP Z,OPTIONT ; LOOP JP Z,OPTIONT ; LOOP
; ;
CP 'H' ; HALF CP 'H' ; HALF
JP Z,OPTIONH ; SPEED SWITCH 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 #ENDIF
; ;
JR MENULP JR MENULP
@ -443,9 +455,21 @@ Die1: LD B,BF_SYSRESET ; SYSTEM RESTART
WSEC: CALL DISPROG ; DISPLAY PROGRESS 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 LD HL,MD_FWRIT ; BANK / SECTOR
CALL MD_FNCALL 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 LD (HL),A ; RESET SECTOR TO 0
INC HL INC HL
INC (HL) ; NEXT BANK 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 NXTS2: LD A,$10 ; NEXT SECTOR
ADD A,(HL) ; EACH SECTOR IS $1000 ADD A,(HL) ; EACH SECTOR IS $1000
@ -605,9 +634,20 @@ OPTIOND:CALL COUTON ; TURN ON OUTPUT
CP 'Y' ; PROCEED CP 'Y' ; PROCEED
JP NZ,MENULP JP NZ,MENULP
DUPL: LD HL,msgCopying DUPL: LD HL,msgCopying
CALL PRTSTR0
CALL PRTSTR0
;
LD A,(ERATYP) ; CHECK IF WE
OR A ; NEED TO DO
JR Z,NOERA1 ; A CHIP ERASE
; ;
LD B,16 ; LOOP THROUGH 16 BANKS
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 XOR A ; START AT
LD (MD_BANK),A ; BANK 0 LD (MD_BANK),A ; BANK 0
@ -628,13 +668,17 @@ NXTS: PUSH BC
; ;
LD HL,MD_BANK ; SET CHIP #2 LD HL,MD_BANK ; SET CHIP #2
SET 4,(HL) 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 LD HL,MD_FERAS ; ERASE SECTOR
CALL MD_FNCALL ; ON ROM #2 CALL MD_FNCALL ; ON ROM #2
OR A OR A
JR NZ,VERF JR NZ,VERF
; ;
LD IX,sector4k ; WRITE SECTOR
NOERA2: LD IX,sector4k ; WRITE SECTOR
LD HL,MD_FWRIT ; ON ROM #2 LD HL,MD_FWRIT ; ON ROM #2
CALL MD_FNCALL CALL MD_FNCALL
; ;
@ -729,18 +773,22 @@ OPTIONH:LD A,8 ; TURN ON THE SBC-V2-004+
; ;
OPTIONF:LD HL,msgCRLF ; DISPLAY OPTIONF:LD HL,msgCRLF ; DISPLAY
CALL PRTSTR0 ; BANK CALL PRTSTR0 ; BANK
LD C,'B' ; SECTOR
LD C,'b' ; SECTOR
CALL CONOUT ; TIMEOUT CALL CONOUT ; TIMEOUT
LD A,(MD_BANK)
LD A,(MD_BANK) ; CHIP
CALL PRTHEXB CALL PRTHEXB
LD C,'S'
LD C,'s'
CALL CONOUT CALL CONOUT
LD A,(MD_SECT) LD A,(MD_SECT)
CALL PRTHEXB CALL PRTHEXB
LD C,'T'
LD C,'t'
CALL CONOUT CALL CONOUT
LD A,(TmoFct) LD A,(TmoFct)
CALL PRTHEXB CALL PRTHEXB
LD C,'c'
CALL CONOUT
LD A,(ERATYP)
CALL PRTHEXB
; ;
LD HL,msgCRLF ; DISPLAY LD HL,msgCRLF ; DISPLAY
CALL PRTSTR0 ; ACK/NAK BYTE CALL PRTSTR0 ; ACK/NAK BYTE
@ -769,11 +817,27 @@ DMPBUF: LD A,(HL) ; PACKET
LD HL,msgCRLF LD HL,msgCRLF
CALL PRTSTR0 CALL PRTSTR0
POP HL POP HL
DMPBUF1:
INC HL
DMPBUF1:INC HL
DJNZ DMPBUF DJNZ DMPBUF
JP MENULP 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 #ENDIF
; ;
SEROUT: PUSH HL ; SERIAL OUTPUT CHARACTER IN C SEROUT: PUSH HL ; SERIAL OUTPUT CHARACTER IN C
@ -889,14 +953,19 @@ HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX
DAA DAA
RET 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 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 CALCCRC:CALL COUTON ; TURN ON OUTPUT
; ;
@ -907,8 +976,8 @@ CALCCRC:CALL COUTON ; TURN ON OUTPUT
LD (CRC),HL ; START CRC LD (CRC),HL ; START CRC
LD (CRC+2),HL ; CONDITION 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 LD B,8 ; LOOP THROUGH
CRCLP2: PUSH BC ; 8 SECTORS 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 ; IX POINTS TO DATA TO BE WRITTEN
; ON EXIT A NO STATUS IS RETURNED ; 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: ; 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: 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_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_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_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 ; Message strings
; ;
@ -1092,7 +1166,8 @@ msgBank: .DB CR,LF,"BANK ",0
msgUnsupC: .DB CR,LF,"FLASH CHIP NOT SUPPORTED",CR,LF,0 msgUnsupC: .DB CR,LF,"FLASH CHIP NOT SUPPORTED",CR,LF,0
msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,0 msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,0
msgCopying: .DB CR,LF,"COPYING ...",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 msgCRC32: .DB CR,LF,CR,LF,"CRC32 : ",0
msgFailWrt: .DB CR,LF,"FLASH WRITE FAILED",CR,LF,0 msgFailWrt: .DB CR,LF,"FLASH WRITE FAILED",CR,LF,0
msgFailure: .DB CR,LF,"TRANSMISSION 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,"(U) Begin Update"
.DB CR,LF,"(X) Exit to Rom Loader" .DB CR,LF,"(X) Exit to Rom Loader"
.DB CR,LF,"(D) Duplicate Flash #1 to #2" .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) #IF (XFUDBG)
.DB CR,LF,"(H) Select half speed" .DB CR,LF,"(H) Select half speed"
.DB CR,LF,"(T) Test timeout" .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 #ENDIF
.DB CR,LF,CR,LF,"Select : ",0 .DB CR,LF,CR,LF,"Select : ",0
msgSuccess: .DB CR,LF,CR,LF,"COMPLETED WITHOUT ERRORS ",CR,LF,0 msgSuccess: .DB CR,LF,CR,LF,"COMPLETED WITHOUT ERRORS ",CR,LF,0

Loading…
Cancel
Save