Browse Source

Merge pull request #183 from b1ackmai1er/dev

Updater and md improvements
pull/199/head
Wayne Warthen 5 years ago
committed by GitHub
parent
commit
8483e747ff
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 135
      Source/HBIOS/flashlib.inc
  2. 57
      Source/HBIOS/md.asm
  3. 155
      Source/HBIOS/updater.asm

135
Source/HBIOS/flashlib.inc

@ -14,6 +14,7 @@
; NO STATUS IS RETURNED ; NO STATUS IS RETURNED
;====================================================================== ;======================================================================
; ;
.DB MD_I_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
LD D,A ; SAVE CURRENT BANK LD D,A ; SAVE CURRENT BANK
@ -36,9 +37,6 @@ MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
; ;
MD_I_SZ .EQU $-MD_FIDEN_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED MD_I_SZ .EQU $-MD_FIDEN_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
.ECHO "MD_FIDEN_R occupies "
.ECHO MD_I_SZ
.ECHO " bytes.\n"
; ;
;====================================================================== ;======================================================================
; ERASE FLASH SECTOR. ; ERASE FLASH SECTOR.
@ -53,6 +51,7 @@ MD_I_SZ .EQU $-MD_FIDEN_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
; ON EXIT C RETURNS STATUS 0=SUCCESS NZ=FAIL ; ON EXIT C RETURNS STATUS 0=SUCCESS NZ=FAIL
;====================================================================== ;======================================================================
; ;
.DB MD_S_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
MD_FERAS_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FERAS_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
PUSH AF ; SAVE CURRENT BANK PUSH AF ; SAVE CURRENT BANK
@ -100,9 +99,6 @@ MD_WT6: POP AF ; RETURN TO ORIGINAL BANK
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
; ;
MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
.ECHO "MD_FERAS_R occupies "
.ECHO MD_S_SZ
.ECHO " bytes.\n"
; ;
;====================================================================== ;======================================================================
; FLASH READ SECTOR. ; FLASH READ SECTOR.
@ -120,6 +116,7 @@ MD_S_SZ .EQU $-MD_FERAS_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
; ON EXIT NO STATUS RETURNED ; ON EXIT NO STATUS RETURNED
;====================================================================== ;======================================================================
; ;
.DB MD_R_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
LD H,C ; SECTOR LD H,C ; SECTOR
@ -148,9 +145,6 @@ MD_FRD1:LD A,B ; CHANGE TO SOURCE BANK
RET RET
; ;
MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
.ECHO "MD_FREAD_R occupies "
.ECHO MD_R_SZ
.ECHO " bytes.\n"
; ;
;====================================================================== ;======================================================================
; FLASH VERIFY SECTOR. ; FLASH VERIFY SECTOR.
@ -168,6 +162,7 @@ MD_R_SZ .EQU $-MD_FREAD_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
; ON EXIT C RETURNS STATUS 0=SUCCESS NZ=FAIL ; ON EXIT C RETURNS STATUS 0=SUCCESS NZ=FAIL
;====================================================================== ;======================================================================
; ;
.DB MD_V_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
LD H,C ; SECTOR LD H,C ; SECTOR
@ -199,9 +194,6 @@ MD_FVE2:POP AF
RET RET
; ;
MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
.ECHO "MD_FVERI_R occupies "
.ECHO MD_V_SZ
.ECHO " bytes.\n"
; ;
;====================================================================== ;======================================================================
; FLASH WRITE SECTOR. ; FLASH WRITE SECTOR.
@ -219,6 +211,7 @@ MD_V_SZ .EQU $-MD_FVERI_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
; ON EXIT NO STATUS IS RETURNED ; ON EXIT NO STATUS IS RETURNED
;====================================================================== ;======================================================================
; ;
.DB MD_W_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
; ;
LD H,C ; SECTOR LD H,C ; SECTOR
@ -263,6 +256,118 @@ MD_FWR2:LD A,(HL) ; FROM THE SAME FLASH ADDRESS.
JP HBX_BNKSEL ; RETURN TO ORIGINAL BANK WHICH IS OUR RAM BIOS COPY JP HBX_BNKSEL ; RETURN TO ORIGINAL BANK WHICH IS OUR RAM BIOS COPY
; ;
MD_W_SZ .EQU $-MD_FWRIT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED MD_W_SZ .EQU $-MD_FWRIT_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
.ECHO "MD_FWRIT_R occupies "
.ECHO MD_W_SZ
.ECHO " bytes.\n"
;
;======================================================================
; ERASE FLASH CHIP.
;
; SELECT THE APPROPRIATE BANK / ADDRESS
; ISSUE ERASE COMMAND
; POLL TOGGLE BIT FOR COMPLETION STATUS.
; SELECT ORIGINAL BANK
;
; ON ENTRY BC CONTAINS BANK AND SECTOR DATA
; A CONTAINS CURRENT BANK
; ON EXIT A RETURNS STATUS 0=SUCCESS FF=FAIL
;======================================================================
;
.DB MD_E_SZ ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
MD_FERAC_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY
;
PUSH AF ; SAVE CURRENT BANK
LD A,B ; SELECT BANK
CALL HBX_BNKSEL ; TO PROGRAM
;
LD HL,$5555 ; LD A,$AA ; COMMAND
LD (HL),$AA ; LD ($5555),A ; SETUP
LD A,L ; LD A,$55
LD ($2AAA),A ; LD ($2AAA),A
LD (HL),$80 ; LD A,$80
LD (HL),$AA ; LD ($5555),A
LD A,L ; LD A,$AA
LD ($2AAA),A ; LD ($5555),A
LD (HL),$10 ; LD A,$55
; LD ($2AAA),A
; LD A,$10
; LD ($5555),A
;
FF_WT2: LD A,(HL) ; DO TWO SUCCESSIVE READS FROM THE SAME FLASH ADDRESS.
LD C,(HL) ; IF TOGGLE BIT (BIT 6)
XOR C ; IS THE SAME ON BOTH READS
BIT 6,A ; THEN ERASE IS COMPLETE SO EXIT.
JR Z,FF_WT1 ; Z TRUE IF BIT 6=0 I.E. "NO TOGGLE" WAS DETECTED.
;
LD A,C ; OPERATION IS NOT COMPLETE. CHECK TIMEOUT BIT (BIT 5).
BIT 5,C ; IF NO TIMEOUT YET THEN LOOP BACK AND KEEP CHECKING TOGGLE STATUS
JR Z,FF_WT2 ; IF BIT 5=0 THEN RETRY; NZ TRUE IF BIT 5=1
;
LD A,(HL) ; WE GOT A TIMEOUT. RECHECK TOGGLE BIT IN CASE WE DID COMPLETE
XOR (HL) ; THE OPERATION. DO TWO SUCCESSIVE READS. ARE THEY THE SAME?
BIT 6,A ; IF THEY ARE THEN OPERATION WAS COMPLETED
JR Z,FF_WT1 ; OTHERWISE ERASE OPERATION FAILED OR TIMED OUT.
;
LD (HL),$F0 ; WRITE DEVICE RESET
LD C,$FF ; SET FAIL STATUS
JR FF_WT3
;
FF_WT1: LD C,0 ; SET SUCCESS STATUS
FF_WT3: POP AF
; LD A,B ; RETURN TO ORIGINAL BANK
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY
;
MD_E_SZ .EQU $-MD_FERAC_R ; SIZE OF RELOCATABLE CODE BUFFER REQUIRED
;======================================================================
;
; RELOCATABLE CODE SPACE REQUIREMENTS CHECK
;
;======================================================================
;
MD_CSIZE .EQU 0
;
#IF (MD_W_SZ>MD_CSIZE)
MD_CSIZE .SET MD_W_SZ
#ENDIF
#IF (MD_S_SZ>MD_CSIZE)
MD_CSIZE .SET MD_S_SZ
#ENDIF
#IF (MD_I_SZ>MD_CSIZE)
MD_CSIZE .SET MD_I_SZ
#ENDIF
#IF (MD_R_SZ>MD_CSIZE)
MD_CSIZE .SET MD_R_SZ
#ENDIF
#IF (MD_V_SZ>MD_CSIZE)
MD_CSIZE .SET MD_V_SZ
#ENDIF
#IF (MD_E_SZ>MD_CSIZE)
MD_CSIZE .SET MD_E_SZ
#ENDIF
;
#IF (MD_CSIZE>64)
.ECHO "Warning: Flash code exceeds available space by "
.ECHO MD_CSIZE-64
.ECHO " bytes.\n"
.ECHO "MD_FIDEN_R "
.ECHO MD_I_SZ
.ECHO "\n"
;
.ECHO "MD_FREAD_R "
.ECHO MD_R_SZ
.ECHO "\n"
;
.ECHO "MD_FVERI_R "
.ECHO MD_V_SZ
.ECHO "\n"
;
.ECHO "MD_FERAS_R "
.ECHO MD_S_SZ
.ECHO "\n"
;
.ECHO "MD_FWRIT_R "
.ECHO MD_W_SZ
.ECHO "\n"
;
.ECHO "MD_FERAC_R "
.ECHO MD_E_SZ
.ECHO "\n"
#ENDIF

57
Source/HBIOS/md.asm

@ -835,9 +835,13 @@ FF_NXT2:
;====================================================================== ;======================================================================
; ;
MD_FNCALL: ; USING HBX_BUF FOR CODE AREA MD_FNCALL: ; USING HBX_BUF FOR CODE AREA
;
LD B,0 ; RETREIVE THE
DEC HL ; CODE SIZE TO
LD C,(HL) ; BE COPIED
INC HL ; MAXIMUM 64 BYTES
; ;
LD DE,HBX_BUF ; EXECUTE / START ADDRESS LD DE,HBX_BUF ; EXECUTE / START ADDRESS
LD BC,MD_CSIZE ; CODE SIZE. MAXIMUM 64 BYTES
LDIR ; COPY OUR RELOCATABLE CODE TO THE BUFFER LDIR ; COPY OUR RELOCATABLE CODE TO THE BUFFER
; ;
LD D,B ; PRESET DE TO ZERO TO REDUCE LD D,B ; PRESET DE TO ZERO TO REDUCE
@ -921,57 +925,6 @@ MD_FFMSGENA .DB "ENABLED$"
MD_F4KBUF .FILL 4096,$FF MD_F4KBUF .FILL 4096,$FF
MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE MD_FFSEN .DB 00h ; FLASH FILES SYSTEM ENABLE
; ;
;======================================================================
;
; RELOCATABLE CODE SPACE REQUIREMENTS CHECK
;
;======================================================================
;
#IF (MD_FDBG==1)
.ECHO "MD_FIDEN_R "
.ECHO MD_I_SZ
.ECHO "\n"
;
.ECHO "MD_FREAD_R "
.ECHO MD_R_SZ
.ECHO "\n"
;
.ECHO "MD_FVERI_R "
.ECHO MD_V_SZ
.ECHO "\n"
;
.ECHO "MD_FERAS_R "
.ECHO MD_S_SZ
.ECHO "\n"
.ECHO "MD_FWRIT_R "
.ECHO MD_W_SZ
.ECHO "\n"
#ENDIF
;
MD_CSIZE .EQU 0
;
#IF (MD_W_SZ>MD_CSIZE)
MD_CSIZE .SET MD_W_SZ
#ENDIF
#IF (MD_S_SZ>MD_CSIZE)
MD_CSIZE .SET MD_S_SZ
#ENDIF
#IF (MD_I_SZ>MD_CSIZE)
MD_CSIZE .SET MD_I_SZ
#ENDIF
#IF (MD_R_SZ>MD_CSIZE)
MD_CSIZE .SET MD_R_SZ
#ENDIF
#IF (MD_V_SZ>MD_CSIZE)
MD_CSIZE .SET MD_V_SZ
#ENDIF
;
#IF (MD_CSIZE>HBX_BUFSIZ)
.ECHO "Warning: Flash code exceeds available space by "
.ECHO MD_CSIZE-HBX_BUFSIZ
.ECHO " bytes.\n"
#ENDIF
#ENDIF #ENDIF
; ;
MD_RWFNADR .DW 0 MD_RWFNADR .DW 0

155
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,8 +212,6 @@ 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
; ;
@ -227,6 +226,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 +258,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 +454,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 +491,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 +633,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 +667,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 +772,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 +816,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 +952,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 +975,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 +1116,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 +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_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 +1165,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 +1178,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