|
|
|
@ -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,8 +212,6 @@ RESTART: |
|
|
|
LD HL,$A4C2 ; IS IT AN MX29F040 |
|
|
|
SBC HL,BC |
|
|
|
LD A,5 |
|
|
|
; |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
JP NZ,FAILBC ; SUPPORTED CHIP NOT FOUND |
|
|
|
; |
|
|
|
@ -227,6 +226,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 +258,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 +454,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 +491,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 +633,20 @@ OPTIOND:CALL COUTON ; TURN ON OUTPUT |
|
|
|
CP 'Y' ; PROCEED |
|
|
|
JP NZ,MENULP |
|
|
|
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 |
|
|
|
LD (MD_BANK),A ; BANK 0 |
|
|
|
@ -628,13 +667,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 +772,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 +816,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 +952,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 +975,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 +1116,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 +1153,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 +1165,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 +1178,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 |
|
|
|
|