|
|
|
@ -65,7 +65,7 @@ |
|
|
|
; OPTION (1) AND (2) - CALCULATE AND DISPLAY CRC32 OF 1ST OR 2ND 512K ROM. |
|
|
|
; |
|
|
|
; OPTION (H) - DEBUG OPTION - SWITCH ON CPU CLOCK DIVIDER ON SBC-V2-004+ |
|
|
|
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 20 SECONDS. * = START AND FINISH |
|
|
|
; OPTION (T) - DEBUG OPTION - TEST TIMER FOR 32S, 16S, 8S, 4S, 2S & 1S |
|
|
|
; |
|
|
|
; |
|
|
|
; V.DEV 13/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM |
|
|
|
@ -80,7 +80,20 @@ |
|
|
|
; TIMING BROADLY CALIBRATED ON A Z80 SBC-V2 |
|
|
|
; UNABIOS NOT SUPPORTED |
|
|
|
; |
|
|
|
; MAXIMUM SERIAL SPEED LIMITATIONS |
|
|
|
; TERATERM: |
|
|
|
; |
|
|
|
; MACROS CAN BE USED TO AUTOMATE SENDING ROM UPDATES OR ROMS IMAGES. |
|
|
|
; TRANSMISSION STARTUP IS MORE RELIABLE WHEN THE CHECKSUM OPTION (1) IS SPECIFIED |
|
|
|
; |
|
|
|
; EXAMPLE MACRO FILE TO SEND *.UPD FILE, SELECT CHECKSUM MODE AND DISPLAY CRC32 |
|
|
|
; |
|
|
|
; ;XMODEM send, checksum, display CRC32 |
|
|
|
; xmodemsend '\\DESKTOP-FI43VI2\Users\Phillip\Documents\GitHub\RomWBW\Binary\SBC_std_cust.upd' 1 |
|
|
|
; crc32file crc '\\DESKTOP-FI43VI2\Users\Phillip\Documents\GitHub\RomWBW\Binary\SBC_std_cust.rom' |
|
|
|
; sprintf '0x%08X' crc |
|
|
|
; messagebox inputstr 'CRC32' |
|
|
|
; |
|
|
|
; MAXIMUM SERIAL SPEED LIMITATIONS: |
|
|
|
; |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 2MHZ | 9600 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 4MHZ | 19200 |
|
|
|
@ -132,10 +145,7 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace |
|
|
|
; |
|
|
|
LD (oldSP),SP ; SETUP STACK BELOW HBIOS |
|
|
|
LD SP,HBX_START-MD_CSIZ ; ALLOW FOR RELOCATABLE CODE AREA |
|
|
|
|
|
|
|
LD HL,msgHeader ; PRINT |
|
|
|
CALL PRTSTR0 ; GREETING |
|
|
|
|
|
|
|
; |
|
|
|
LD HL,MD_FSTART ; COPY FLASH |
|
|
|
LD DE,HBX_START-MD_CSIZ ; ROUTINES TO |
|
|
|
LD BC,MD_CSIZ ; HIGH MEMORY |
|
|
|
@ -156,6 +166,9 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace |
|
|
|
RST 08 ; TO USE AS |
|
|
|
LD A,E ; DEFAULT |
|
|
|
LD (SERDEV),A |
|
|
|
; |
|
|
|
LD HL,msgHeader ; PRINT |
|
|
|
CALL PRTSTR0 ; GREETING |
|
|
|
; |
|
|
|
RESTART: |
|
|
|
LD DE,$0000 ; SET UP START |
|
|
|
@ -163,10 +176,47 @@ RESTART: |
|
|
|
|
|
|
|
LD HL,MD_FIDEN ; IDENTIFY CHIP |
|
|
|
CALL MD_FNCALL ; AT THIS BANK/SECTOR |
|
|
|
LD HL,$B7BF ; FAIL |
|
|
|
XOR A ; IF FLASH |
|
|
|
SBC HL,BC ; CHIP IS |
|
|
|
JP NZ,FAILBC ; NOT SUPPORTED |
|
|
|
|
|
|
|
LD HL,$B7BF ; IS IT A 39SF040 |
|
|
|
XOR A |
|
|
|
SBC HL,BC |
|
|
|
LD A,0 |
|
|
|
JR Z,CHPFND ; YES IT IS ... |
|
|
|
; |
|
|
|
#IF (XFUDBG) |
|
|
|
LD HL,$A401 ; IS IT A 29F040 |
|
|
|
XOR A |
|
|
|
SBC HL,BC |
|
|
|
LD A,1 |
|
|
|
JR Z,CHPFND ; YES IT IS ... |
|
|
|
; |
|
|
|
LD HL,$131F ; IS IT AN AT49F040 |
|
|
|
XOR A |
|
|
|
SBC HL,BC |
|
|
|
LD A,2 |
|
|
|
JR Z,CHPFND ; YES IT IS |
|
|
|
; |
|
|
|
LD HL,$A41F ; IS IT AN AT29C040 |
|
|
|
XOR A |
|
|
|
SBC HL,BC |
|
|
|
LD A,3 |
|
|
|
JR Z,CHPFND ; YES IT IS |
|
|
|
; |
|
|
|
LD HL,$E220 ; IS IT AN M29F040 |
|
|
|
XOR A |
|
|
|
SBC HL,BC |
|
|
|
LD A,4 |
|
|
|
JR Z,CHPFND ; YES IT IS |
|
|
|
; |
|
|
|
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 |
|
|
|
|
|
|
|
LD BC,$F8F0 ; GET CPU SPEED |
|
|
|
RST 08 ; AND MULTIPLY |
|
|
|
@ -182,22 +232,6 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING |
|
|
|
CALL PRTSTR0 |
|
|
|
CALL MENU ; DISPLAY MENU |
|
|
|
; |
|
|
|
#IF (XFUDBG) |
|
|
|
LD C,'B' |
|
|
|
CALL CONOUT |
|
|
|
LD A,(MD_BANK) |
|
|
|
CALL PRTHEXB |
|
|
|
LD C,'S' |
|
|
|
CALL CONOUT |
|
|
|
LD A,(MD_SECT) |
|
|
|
CALL PRTHEXB |
|
|
|
LD C,'T' |
|
|
|
CALL CONOUT |
|
|
|
LD A,(TmoFct) |
|
|
|
CALL PRTHEXB |
|
|
|
LD C,':' |
|
|
|
CALL CONOUT |
|
|
|
#ENDIF |
|
|
|
CALL GETINP ; GET SELECTION |
|
|
|
; |
|
|
|
CP 'U' ; BEGIN |
|
|
|
@ -233,6 +267,9 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING |
|
|
|
; |
|
|
|
CP 'H' ; HALF |
|
|
|
JP Z,OPTIONH ; SPEED SWITCH |
|
|
|
; |
|
|
|
CP 'F' ; DUMP |
|
|
|
JP Z,OPTIONF ; BUFFER |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
JR MENULP |
|
|
|
@ -259,15 +296,14 @@ SERCLR: LD HL,msgInstr ; PROVIDE |
|
|
|
LD DE,sector4k ; POINT TO START OF SECTOR TO WRITE |
|
|
|
; |
|
|
|
GetNewPacket: |
|
|
|
LD A,20 ; WE RETRY 20 TIMES BEFORE GIVING UP |
|
|
|
LD (retrycnt),A |
|
|
|
LD HL,retrycnt ; WE RETRY 20 TIMES BEFORE GIVING UP |
|
|
|
LD (HL),20 |
|
|
|
; |
|
|
|
NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK |
|
|
|
NPloop: LD B,6 ; 6 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK |
|
|
|
CALL GetCharTmo |
|
|
|
JP NC,NotPacketTimeout |
|
|
|
; |
|
|
|
LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES? |
|
|
|
dec (HL) |
|
|
|
DEC (HL) ; REACHED MAX NUMBER OF RETRIES? |
|
|
|
JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT |
|
|
|
; |
|
|
|
LD C,NAK ; SEND A NAK TO THE UPLOADER |
|
|
|
@ -289,17 +325,17 @@ NotPacketTimeout: |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
LD (HL),A ; SHOULD BE PACKET NUMBER |
|
|
|
INC HL |
|
|
|
JP C,FAILTO |
|
|
|
JR C,FAILTO |
|
|
|
; |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
LD (HL),A ; SHOULD BE PACKET NUMBER |
|
|
|
INC HL ; COMPLEMENT |
|
|
|
JP C,FAILTO |
|
|
|
JR C,FAILTO |
|
|
|
; |
|
|
|
LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET |
|
|
|
GetRestOfPacket: |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
JP C,FAILTO |
|
|
|
JR C,FAILTO |
|
|
|
; |
|
|
|
LD (HL),A |
|
|
|
INC HL ; SAVE THE RECEIVED CHAR INTO THE... |
|
|
|
@ -307,11 +343,11 @@ GetRestOfPacket: |
|
|
|
INC DE ; ...POINT TO THE NEXT LOCATION |
|
|
|
; |
|
|
|
DEC C |
|
|
|
JR NZ,GetRestOfPacket |
|
|
|
JP NZ,GetRestOfPacket |
|
|
|
; |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
LD (HL),A ; SHOULD BE CHECKSUM |
|
|
|
JP C,FAILTO |
|
|
|
JR C,FAILTO |
|
|
|
; |
|
|
|
LD HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA |
|
|
|
LD B,128 |
|
|
|
@ -321,17 +357,15 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
DJNZ csloop |
|
|
|
; |
|
|
|
XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO |
|
|
|
JP NZ,FAILCS ; BY XORING IT TO OUR SUM WE CHECK FOR EQUALITY |
|
|
|
JR NZ,FAILCS ; BY XORING IT TO OUR SUM WE CHECK FOR EQUALITY |
|
|
|
; |
|
|
|
LD HL,(pktNo) ; CHECK |
|
|
|
LD BC,(packet+1) ; AGREEMENT |
|
|
|
; XOR A ; PACKET |
|
|
|
SBC HL,BC ; NUMBERS |
|
|
|
JP NZ,FAILPN |
|
|
|
JR NZ,FAILPN |
|
|
|
; |
|
|
|
; LD HL,pktNo ; HAVE WE RECEIVED |
|
|
|
; LD A,(HL) ; A BLOCK OF 32 |
|
|
|
LD A,C |
|
|
|
LD A,C ; HAVE WE RECEIVED A BLOCK OF 32 |
|
|
|
DEC A ; XMODEM PACKETS? |
|
|
|
AND %00011111 ; IF YES THEN WERE WE |
|
|
|
CP %00011111 ; HAVE ENOUGH TO |
|
|
|
@ -339,7 +373,7 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
CALL Z,WSEC ; ASSUME FLASH SUCCESSFUL |
|
|
|
; |
|
|
|
OR A ; EXIT IF WE GOT A |
|
|
|
JP NZ,FAILWF ; WRITE VERIFICATION ERROR |
|
|
|
JR NZ,FAILWF ; WRITE VERIFICATION ERROR |
|
|
|
; |
|
|
|
LD HL,pktNo ; UPDATE THE PACKET COUNTERS |
|
|
|
INC (HL) |
|
|
|
@ -351,6 +385,9 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
; |
|
|
|
JP GetNewPacket |
|
|
|
; |
|
|
|
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING |
|
|
|
JR ERRRX ; FOR CHARACTER |
|
|
|
; |
|
|
|
COUTON: LD A,$FF ; TURN ON |
|
|
|
LD (BLKCOUT),A ; OUTPUT |
|
|
|
RET |
|
|
|
@ -360,9 +397,6 @@ Done: LD C,ACK ; TELL UPLOADER |
|
|
|
Done1: LD HL,msgSuccess ; BACK TO |
|
|
|
JR MSGRS ; MENU |
|
|
|
; |
|
|
|
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING |
|
|
|
JR ERRRX ; FOR CHARACTER |
|
|
|
; |
|
|
|
FAILWF: LD HL,msgFailWrt ; FLASH |
|
|
|
JR MSGRS ; VERIFY FAIL |
|
|
|
; |
|
|
|
@ -407,11 +441,7 @@ Die1: LD B,BF_SYSRESET ; SYSTEM RESTART |
|
|
|
CALL $FFF0 ; CALL HBIOS |
|
|
|
RET |
|
|
|
|
|
|
|
WSEC: PUSH HL ; WRITE A |
|
|
|
PUSH BC ; FLASH |
|
|
|
PUSH DE ; SECTOR |
|
|
|
; |
|
|
|
CALL DISPROG ; DISPLAY PROGRESS |
|
|
|
WSEC: CALL DISPROG ; DISPLAY PROGRESS |
|
|
|
; |
|
|
|
WSEC1: LD HL,MD_FERAS ; ERASE |
|
|
|
CALL MD_FNCALL ; AND WRITE |
|
|
|
@ -428,9 +458,7 @@ WSEC1: LD HL,MD_FERAS ; ERASE |
|
|
|
CALL MD_FNCALL |
|
|
|
LD (VERRES),A ; SAVE STATUS |
|
|
|
; |
|
|
|
NOVER: POP DE ; POINT BACK TO |
|
|
|
LD DE,sector4k ; START OF 4K BUFFER |
|
|
|
PUSH DE |
|
|
|
NOVER: LD DE,sector4k ; POINT BACK TO START OF 4K BUFFER |
|
|
|
; |
|
|
|
LD HL,MD_FBAS |
|
|
|
LD A,(HL) ; DID WE JUST |
|
|
|
@ -444,12 +472,9 @@ NOVER: POP DE ; POINT BACK TO |
|
|
|
; |
|
|
|
NXTS2: LD A,$10 ; NEXT SECTOR |
|
|
|
ADD A,(HL) ; EACH SECTOR IS $1000 |
|
|
|
LD (HL),A ; BUT WE JUST INCREASE HIGH BYTE |
|
|
|
LD (HL),A ; SO WE JUST INCREASE HIGH BYTE |
|
|
|
; |
|
|
|
NXTS3: LD A,(VERRES) ; EXIT WITH STATUS |
|
|
|
POP DE |
|
|
|
POP BC |
|
|
|
POP HL |
|
|
|
RET |
|
|
|
; |
|
|
|
DISPROG:LD A,(BLKCOUT) ; SKIP OUTPUT |
|
|
|
@ -680,21 +705,75 @@ OPTIONS:LD HL,msgEnterUnit ; GET |
|
|
|
JP MENULP ; BACK TO MENU |
|
|
|
; |
|
|
|
#IF (XFUDBG) |
|
|
|
OPTIONT:LD HL,msgCRLF |
|
|
|
OPTIONT:LD HL,msgCRLF ; TEST DELAY 32S, 16S, 8S, 4S, 2S, 1S |
|
|
|
CALL PRTSTR0 |
|
|
|
LD C,'*' ; DISPLAY START |
|
|
|
LD B,32 ; START DELAY IS 32 SECONDS |
|
|
|
TSTDLY: PUSH BC |
|
|
|
LD C,'>' ; DISPLAY START |
|
|
|
CALL CONOUT ; INDICATOR |
|
|
|
LD B,20 ; DELAY 20 |
|
|
|
CALL GetCharTmo ; SECONDS |
|
|
|
LD C,'*' ; DISPLAY FINISH |
|
|
|
LD A,B |
|
|
|
CALL PRTHEXB |
|
|
|
CALL GetCharTmo ; DELAY B SECONDS |
|
|
|
LD C,'<' ; DISPLAY STOP |
|
|
|
CALL CONOUT ; INDICATOR |
|
|
|
JP MENULP ; BACK TO MENU |
|
|
|
POP BC |
|
|
|
SRL B ; NEXT DELAY IS HALF PREVIOUS |
|
|
|
JR NZ,TSTDLY ; RETURN TO MENU |
|
|
|
JP MENULP ; WHEN DELAY GETS TO 1 SECOND |
|
|
|
; |
|
|
|
OPTIONH:LD A,8 ; TURN ON THE SBC-V2-004+ |
|
|
|
OUT (RTCIO),A ; CLOCK DIVIDER |
|
|
|
LD HL,TmoFct ; AND ADJUST |
|
|
|
SRL (HL) ; DELAY FACTOR (/2) |
|
|
|
JP MENULP ; BACK TO MENU |
|
|
|
; |
|
|
|
OPTIONF:LD HL,msgCRLF ; DISPLAY |
|
|
|
CALL PRTSTR0 ; BANK |
|
|
|
LD C,'B' ; SECTOR |
|
|
|
CALL CONOUT ; TIMEOUT |
|
|
|
LD A,(MD_BANK) |
|
|
|
CALL PRTHEXB |
|
|
|
LD C,'S' |
|
|
|
CALL CONOUT |
|
|
|
LD A,(MD_SECT) |
|
|
|
CALL PRTHEXB |
|
|
|
LD C,'T' |
|
|
|
CALL CONOUT |
|
|
|
LD A,(TmoFct) |
|
|
|
CALL PRTHEXB |
|
|
|
; |
|
|
|
LD HL,msgCRLF ; DISPLAY |
|
|
|
CALL PRTSTR0 ; ACK/NAK BYTE |
|
|
|
LD HL,packet ; DISPLAY |
|
|
|
LD B,3 ; LAST |
|
|
|
DMPBUF2:LD A,(HL) ; NUMBERS |
|
|
|
CALL PRTHEXB |
|
|
|
LD C,' ' |
|
|
|
CALL CONOUT |
|
|
|
INC HL |
|
|
|
DJNZ DMPBUF2 |
|
|
|
LD HL,msgCRLF |
|
|
|
CALL PRTSTR0 |
|
|
|
LD B,128 ; DISPLAY |
|
|
|
LD HL,packet+3 ; LAST |
|
|
|
DMPBUF: LD A,(HL) ; PACKET |
|
|
|
CALL PRTHEXB ; CONTENTS |
|
|
|
LD C,' ' |
|
|
|
CALL CONOUT |
|
|
|
LD A,B |
|
|
|
SUB 2 |
|
|
|
AND %00001111 |
|
|
|
CP %00001111 |
|
|
|
JR NZ,DMPBUF1 |
|
|
|
PUSH HL |
|
|
|
LD HL,msgCRLF |
|
|
|
CALL PRTSTR0 |
|
|
|
POP HL |
|
|
|
DMPBUF1: |
|
|
|
|
|
|
|
INC HL |
|
|
|
DJNZ DMPBUF |
|
|
|
JP MENULP |
|
|
|
#ENDIF |
|
|
|
; |
|
|
|
SEROUT: PUSH HL ; SERIAL OUTPUT CHARACTER IN C |
|
|
|
@ -976,19 +1055,14 @@ MD_FSTART: .EQU $ ; FLASH ROUTINES WHICH GET RELOCATED TO HIGH MEMORY |
|
|
|
;====================================================================== |
|
|
|
; |
|
|
|
MD_FNCALL: |
|
|
|
LD DE,$0000 |
|
|
|
LD DE,$0000 ; PRESET DE TO SAVE SPACE |
|
|
|
LD BC,(MD_FBAS) ; PUT BANK AND SECTOR DATA IN BC |
|
|
|
; |
|
|
|
EX AF,AF' |
|
|
|
PUSH AF |
|
|
|
LD A,(HB_CURBNK) ; WE ARE STARTING IN HB_CURBNK |
|
|
|
; |
|
|
|
HB_DI |
|
|
|
CALL MD_FJPHL |
|
|
|
HB_EI |
|
|
|
; |
|
|
|
POP AF |
|
|
|
EX AF,AF' |
|
|
|
; |
|
|
|
LD A,C ; RETURN WITH STATUS IN A |
|
|
|
RET |
|
|
|
@ -1046,7 +1120,7 @@ MD_FIDEN_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
; |
|
|
|
MD_FERAS_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
; |
|
|
|
EX AF,AF' ; SAVE CURRENT BANK |
|
|
|
PUSH AF ; SAVE CURRENT BANK |
|
|
|
LD A,B ; SELECT BANK |
|
|
|
CALL HBX_BNKSEL ; TO PROGRAM |
|
|
|
; |
|
|
|
@ -1087,7 +1161,7 @@ MD_WT4: LD A,(HL) ; DO TWO SUCCESSIVE READS |
|
|
|
JR MD_WT6 |
|
|
|
MD_WT5: LD C,L ; SET SUCCESS STATUS |
|
|
|
; |
|
|
|
MD_WT6: EX AF,AF' ; RETURN TO ORIGINAL BANK |
|
|
|
MD_WT6: POP AF ; RETURN TO ORIGINAL BANK |
|
|
|
JP HBX_BNKSEL ; WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
@ -1112,19 +1186,17 @@ MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
LD H,C ; SECTOR |
|
|
|
LD L,D ; ADDRESS |
|
|
|
; |
|
|
|
EX AF,AF' ; PUT DESTINATION BANK IN AF' |
|
|
|
; |
|
|
|
PUSH AF ; SAVE CURRENT BANK |
|
|
|
MD_FRD1: |
|
|
|
LD A,B ; PUT SOURCE BANK IN AF |
|
|
|
CALL HBX_BNKSEL ; READ ; SWITCH TO SOURCE BANK |
|
|
|
LD C,(HL) ; BYTE |
|
|
|
; |
|
|
|
EX AF,AF' ; SELECT BANK ; SWITCH DESTINATION BANK |
|
|
|
PUSH AF |
|
|
|
CALL HBX_BNKSEL ; TO WRITE |
|
|
|
POP AF |
|
|
|
POP AF ; RESTORE CURRENT BANK |
|
|
|
PUSH AF ; AND SAVE A COPY FOR NEXT LOOP |
|
|
|
CALL HBX_BNKSEL ; SELECT BANK TO WRITE TO |
|
|
|
; |
|
|
|
LD (IX+0),C ; WRITE BYTE |
|
|
|
EX AF,AF' ; ; PUT SOURCE BANK IN AF |
|
|
|
; |
|
|
|
INC HL ; NEXT SOURCE LOCATION |
|
|
|
INC IX ; NEXT DESTINATION LOCATION |
|
|
|
@ -1133,6 +1205,7 @@ MD_FRD1: |
|
|
|
BIT 4,D ; WE HAVE DONE ONE SECTOR |
|
|
|
JR Z,MD_FRD1 |
|
|
|
; |
|
|
|
POP AF |
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
@ -1156,20 +1229,19 @@ MD_FVERI_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
LD H,C ; SECTOR |
|
|
|
LD L,D ; ADDRESS |
|
|
|
; |
|
|
|
EX AF,AF' ; PUT SOURCE BANK IN AF' (RAM) |
|
|
|
; |
|
|
|
PUSH AF ; SAVE CURRENT BANK |
|
|
|
MD_FVE1: |
|
|
|
LD A,B ; SELECT BANK |
|
|
|
CALL HBX_BNKSEL ; TO READ ; SWITCH TO FLASH BANK |
|
|
|
LD A,(HL) ; READ BYTE |
|
|
|
CALL HBX_BNKSEL ; TO READ |
|
|
|
LD C,(HL) ; READ BYTE |
|
|
|
; |
|
|
|
EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK |
|
|
|
PUSH AF |
|
|
|
POP AF ; RESTORE CURRENT BANK |
|
|
|
PUSH AF ; AND SAVE A COPY FOR NEXT LOOP |
|
|
|
CALL HBX_BNKSEL ; TO VERIFY AGAINST |
|
|
|
POP AF |
|
|
|
EX AF,AF' |
|
|
|
; |
|
|
|
LD A,C |
|
|
|
SUB (IX+0) ; COMPARE BYTE |
|
|
|
LD C,A ; SET STATUS |
|
|
|
JR NZ,MD_FVE2 ; EXIT IF MISMATCH |
|
|
|
; |
|
|
|
INC HL ; NEXT SOURCE LOCATION |
|
|
|
@ -1179,10 +1251,7 @@ MD_FVE1: |
|
|
|
BIT 4,D ; WE HAVE DONE ONE SECTOR |
|
|
|
JR Z,MD_FVE1 |
|
|
|
; |
|
|
|
MD_FVE2: |
|
|
|
LD C,A ; SET STATUS |
|
|
|
EX AF,AF' |
|
|
|
; |
|
|
|
MD_FVE2:POP AF |
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
@ -1206,11 +1275,9 @@ MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
LD H,C ; SECTOR |
|
|
|
LD L,D ; ADDRESS |
|
|
|
; |
|
|
|
PUSH AF ; SAVE CURRENT BANK |
|
|
|
MD_FWRI1: |
|
|
|
PUSH AF |
|
|
|
CALL HBX_BNKSEL ; SELECT BANK TO READ |
|
|
|
POP AF |
|
|
|
EX AF,AF' ; SAVE CURRENT BANK |
|
|
|
; |
|
|
|
LD C,(IX+0) ; READ IN BYTE |
|
|
|
; |
|
|
|
@ -1237,12 +1304,14 @@ MD_FW7: LD A,(HL) ; FROM THE SAME FLASH ADDRESS. |
|
|
|
INC HL ; NEXT DESTINATION LOCATION |
|
|
|
INC IX ; NEXT SOURCE LOCATION |
|
|
|
; |
|
|
|
EX AF,AF' ; RESTORE CURRENT BANK |
|
|
|
POP AF ; RESTORE CURRENT BANK |
|
|
|
PUSH AF ; AND SAVE A COPY FOR NEXT LOOP |
|
|
|
; |
|
|
|
INC DE ; CONTINUE WRITING UNTIL |
|
|
|
BIT 4,D ; WE HAVE DONE ONE SECTOR |
|
|
|
JR Z,MD_FWRI1 |
|
|
|
; |
|
|
|
POP AF ; RESTORE CURRENT BANK |
|
|
|
JP HBX_BNKSEL ; RETURN TO ORIGINAL BANK WHICH IS OUR RAM BIOS COPY |
|
|
|
; |
|
|
|
MD_FEND .EQU $ |
|
|
|
@ -1281,7 +1350,8 @@ msgBegin: .DB CR,LF,"(R) Reboot" |
|
|
|
.DB CR,LF,"(2) CRC Flash #2" |
|
|
|
#IF (XFUDBG) |
|
|
|
.DB CR,LF,"(H) Select half speed" |
|
|
|
.DB CR,LF,"(T) Test 20s timeout" |
|
|
|
.DB CR,LF,"(T) Test timeout" |
|
|
|
.DB CR,LF,"(F) Dump last packet" |
|
|
|
#ENDIF |
|
|
|
.DB CR,LF,CR,LF,"Select : ",0 |
|
|
|
msgSuccess: .DB CR,LF,CR,LF,"COMPLETED WITHOUT ERRORS ",CR,LF,0 |
|
|
|
@ -1301,6 +1371,7 @@ SERDEV: .DB $00 ; HBIOS SERIAL DEVICE NUMBER USED FOR XMODEM TRANSFER |
|
|
|
WRTVER: .DB $FF ; WRITE VERIFY OPTION FLAG |
|
|
|
VERRES: .DB $00 ; WRITE VERIFY RESULT |
|
|
|
BLKCOUT: .DB $FF ; BLOCK TEXT OUTPUT DURING TRANSFER IF ZERO |
|
|
|
ERATYP .DB $00 ; HOLDS THE ERASE TYPE FLAG FOR VARIOUS CHIPS |
|
|
|
oldSP: .DW 0 ; The orginal SP to be restored before exiting |
|
|
|
retrycnt: .DB 0 ; Counter for retries before giving up |
|
|
|
chksum: .DB 0 ; For calculating the checksum of the packet |
|
|
|
|