|
|
|
@ -62,11 +62,13 @@ |
|
|
|
; ONTO FLASH #2. THE PURPOSE OF THIS IS TO ENABLE MAKING A BACKUP COPY OF |
|
|
|
; THE CURRENT FLASH. |
|
|
|
; |
|
|
|
; 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 |
|
|
|
; |
|
|
|
; |
|
|
|
; V.DEV 8/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM |
|
|
|
; V.DEV 13/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM |
|
|
|
; b1ackmai1er ON RETROBREWCOMPUTERS.ORG |
|
|
|
; |
|
|
|
; |
|
|
|
@ -80,12 +82,14 @@ |
|
|
|
; |
|
|
|
; MAXIMUM SERIAL SPEED LIMITATIONS |
|
|
|
; |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 2MHZ | 9600 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 4MHZ | 19200 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 5MHZ | 19200 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 8MHZ | 38400 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 10MHZ | 38400 |
|
|
|
; SBC-V2 USB-FIFO 2MHZ+ | N/A |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 2MHZ | 9600 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 4MHZ | 19200 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 5MHZ | 19200 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 8MHZ | 38400 |
|
|
|
; SBC-V2 UART NO FLOW CONTROL 10MHZ | 38400 |
|
|
|
; SBC-V2 USB-FIFO 2MHZ+ | N/A |
|
|
|
; SBC-MK4 ASCI NO FLOW CONTROL 18.432MHZ | 9600 |
|
|
|
; SBC-MK4 ASCI WITH FLOW CONTROL 18.432MHZ | 38400 |
|
|
|
; |
|
|
|
; ACKNOWLEDGEMENTS: |
|
|
|
; |
|
|
|
@ -97,6 +101,8 @@ |
|
|
|
; md.asm - ROMWBW memory disk driver |
|
|
|
; https://github.com/wwarthen/RomWBW/blob/master/Source/HBIOS/md.asm |
|
|
|
; |
|
|
|
; CRC32 - J.G. HARSTON - mdfs.net/Info/Comp/Comms/CRC32.htm |
|
|
|
; |
|
|
|
;***************************************************************************** |
|
|
|
; |
|
|
|
#INCLUDE "std.asm" |
|
|
|
@ -152,11 +158,8 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace |
|
|
|
LD (SERDEV),A |
|
|
|
; |
|
|
|
RESTART: |
|
|
|
; LD DE,$0000 ; SET UP |
|
|
|
; LD HL,$0000 ; START |
|
|
|
; CALL MD_CALBAS ; BANK AND SECTOR |
|
|
|
LD DE,$0000 |
|
|
|
LD (MD_FBAS),DE |
|
|
|
LD DE,$0000 ; SET UP START |
|
|
|
LD (MD_FBAS),DE ; BANK AND SECTOR |
|
|
|
|
|
|
|
LD HL,MD_FIDEN ; IDENTIFY CHIP |
|
|
|
CALL MD_FNCALL ; AT THIS BANK/SECTOR |
|
|
|
@ -172,7 +175,29 @@ RESTART: |
|
|
|
ADD A,A ; TIMOUT DELAY |
|
|
|
LD (TmoFct),A ; FACTOR |
|
|
|
; |
|
|
|
MENULP: CALL MENU ; DISPLAY MENU |
|
|
|
MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING |
|
|
|
LD (MD_FBAS),DE ; AT BANK 0 SECTOR 0 |
|
|
|
; |
|
|
|
LD HL,msgCRLF |
|
|
|
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 |
|
|
|
@ -195,6 +220,12 @@ MENULP: CALL MENU ; DISPLAY MENU |
|
|
|
; |
|
|
|
CP 'D' ; DUPLICATE |
|
|
|
JP Z,OPTIOND ; FLASH |
|
|
|
; |
|
|
|
CP '1' ; CALCULATE |
|
|
|
JP Z,OPTION1 ; CRC FLASH #1 |
|
|
|
; |
|
|
|
CP '2' ; CALCULATE |
|
|
|
JP Z,OPTION2 ; CRC FLASH #2 |
|
|
|
; |
|
|
|
#IF (XFUDBG) |
|
|
|
CP 'T' ; TEST TIMEOUT |
|
|
|
@ -233,22 +264,22 @@ GetNewPacket: |
|
|
|
; |
|
|
|
NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK |
|
|
|
CALL GetCharTmo |
|
|
|
jp NC,NotPacketTimeout |
|
|
|
JP NC,NotPacketTimeout |
|
|
|
; |
|
|
|
LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES? |
|
|
|
dec (HL) |
|
|
|
jp Z,FAILRT ; YES, PRINT MESSAGE AND EXIT |
|
|
|
JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT |
|
|
|
; |
|
|
|
LD C,NAK ; SEND A NAK TO THE UPLOADER |
|
|
|
CALL SEROUT |
|
|
|
JR NPloop |
|
|
|
; |
|
|
|
NotPacketTimeout: |
|
|
|
cp EOT ; DID UPLOADER SAY WE'RE FINISHED? |
|
|
|
CP EOT ; DID UPLOADER SAY WE'RE FINISHED? |
|
|
|
JP Z,Done ; YES, THEN WE'RE DONE |
|
|
|
cp CAN ; UPLOADER WANTS TO FAIL TRANSFER? |
|
|
|
jp Z,FAILCN ; YES, THEN WE'RE ALSO DONE |
|
|
|
cp SOH ; DID WE GET A START-OF-NEW-PACKET? |
|
|
|
CP CAN ; UPLOADER WANTS TO FAIL TRANSFER? |
|
|
|
JP Z,FAILCN ; YES, THEN WE'RE ALSO DONE |
|
|
|
CP SOH ; DID WE GET A START-OF-NEW-PACKET? |
|
|
|
JR NZ,NPloop ; NO, GO BACK AND TRY AGAIN |
|
|
|
; |
|
|
|
LD HL,packet ; SAVE THE RECEIVED CHAR INTO THE... |
|
|
|
@ -285,7 +316,7 @@ GetRestOfPacket: |
|
|
|
LD HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA |
|
|
|
LD B,128 |
|
|
|
XOR A |
|
|
|
csloop: add A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
csloop: ADD A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
INC HL |
|
|
|
DJNZ csloop |
|
|
|
; |
|
|
|
@ -298,8 +329,9 @@ csloop: add A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
SBC HL,BC ; NUMBERS |
|
|
|
JP NZ,FAILPN |
|
|
|
; |
|
|
|
LD HL,pktNo ; HAVE WE RECEIVED |
|
|
|
LD A,(HL) ; A BLOCK OF 32 |
|
|
|
; LD HL,pktNo ; HAVE WE RECEIVED |
|
|
|
; LD A,(HL) ; A BLOCK OF 32 |
|
|
|
LD A,C |
|
|
|
DEC A ; XMODEM PACKETS? |
|
|
|
AND %00011111 ; IF YES THEN WERE WE |
|
|
|
CP %00011111 ; HAVE ENOUGH TO |
|
|
|
@ -308,7 +340,7 @@ csloop: add A,(HL) ; JUST ADD UP THE BYTES |
|
|
|
; |
|
|
|
OR A ; EXIT IF WE GOT A |
|
|
|
JP NZ,FAILWF ; WRITE VERIFICATION ERROR |
|
|
|
|
|
|
|
; |
|
|
|
LD HL,pktNo ; UPDATE THE PACKET COUNTERS |
|
|
|
INC (HL) |
|
|
|
INC HL |
|
|
|
@ -328,7 +360,7 @@ Done: LD C,ACK ; TELL UPLOADER |
|
|
|
Done1: LD HL,msgSuccess ; BACK TO |
|
|
|
JR MSGRS ; MENU |
|
|
|
; |
|
|
|
FAILTO: LD HL,msgTimout ; TIMOUT WAITING |
|
|
|
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING |
|
|
|
JR ERRRX ; FOR CHARACTER |
|
|
|
; |
|
|
|
FAILWF: LD HL,msgFailWrt ; FLASH |
|
|
|
@ -457,7 +489,7 @@ GetCharTmo: |
|
|
|
CALL SERST ; IF THERE IS A |
|
|
|
OR A ; CHARACTER AVAILABLE |
|
|
|
JR NZ,GotChrX ; EXIT NOW OTHERWISE POLL |
|
|
|
PUSH BC |
|
|
|
GCtmoa: PUSH BC |
|
|
|
LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP |
|
|
|
TmoFct: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START |
|
|
|
GCtmob: PUSH BC |
|
|
|
@ -748,7 +780,7 @@ CONIN: PUSH HL ; CONSOLE INPUT. WAIT FOR A CHARACTER ADD RETURN IT IN A |
|
|
|
POP HL |
|
|
|
RET |
|
|
|
; |
|
|
|
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE |
|
|
|
PRTHEXB:PUSH AF ; PRINT HEX BYTE IN A TO CONSOLE |
|
|
|
PUSH DE |
|
|
|
CALL HEXASC |
|
|
|
LD C,D |
|
|
|
@ -771,12 +803,111 @@ HEXASC: LD D,A |
|
|
|
LD D,A |
|
|
|
RET |
|
|
|
; |
|
|
|
HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX |
|
|
|
HEXCONV:AND 0FH ; CONVERT LOW NIBBLE OF A TO ASCII HEX |
|
|
|
ADD A,90H |
|
|
|
DAA |
|
|
|
ADC A,40H |
|
|
|
DAA |
|
|
|
RET |
|
|
|
|
|
|
|
OPTION1:LD HL,$0000 |
|
|
|
LD (MD_FBAS),HL |
|
|
|
LD C,$00 |
|
|
|
JR CALCCRC |
|
|
|
; |
|
|
|
OPTION2:LD HL,$1000 |
|
|
|
LD (MD_FBAS),HL |
|
|
|
LD C,$10 |
|
|
|
; |
|
|
|
CALCCRC:CALL COUTON ; TURN ON OUTPUT |
|
|
|
; |
|
|
|
LD HL,msgCalc |
|
|
|
CALL PRTSTR0 |
|
|
|
; |
|
|
|
LD HL,$FFFF ; SET THE |
|
|
|
LD (CRC),HL ; START CRC |
|
|
|
LD (CRC+2),HL ; CONDITION |
|
|
|
|
|
|
|
LD B,16 ; LOOP THROUGH |
|
|
|
CRCLP1: PUSH BC ; 16 BANKS |
|
|
|
LD B,8 ; LOOP THROUGH |
|
|
|
CRCLP2: PUSH BC ; 8 SECTORS |
|
|
|
; |
|
|
|
PUSH BC |
|
|
|
CALL DISPROG ; DISPLAY PROGRESS |
|
|
|
; |
|
|
|
LD IX,sector4k ; READ |
|
|
|
LD HL,MD_FREAD ; A SECTOR |
|
|
|
CALL MD_FNCALL |
|
|
|
CALL CRC32 ; CALCULATE CRC |
|
|
|
POP BC |
|
|
|
; |
|
|
|
LD A,(MD_SECT) ; POINT |
|
|
|
ADD A,$10 ; TO NEXT |
|
|
|
LD (MD_SECT),A ; SECTOR |
|
|
|
|
|
|
|
POP BC ; NEXT |
|
|
|
DJNZ CRCLP2 ; SECTOR |
|
|
|
|
|
|
|
XOR A ; RESET SECTOR |
|
|
|
LD (MD_SECT),A ; START |
|
|
|
|
|
|
|
LD HL,MD_BANK ; POINT TO |
|
|
|
INC (HL) ; NEXT BANK |
|
|
|
|
|
|
|
POP BC ; NEXT |
|
|
|
DJNZ CRCLP1 ; BANK |
|
|
|
; |
|
|
|
LD HL,msgCRC32 ; DISPLAY |
|
|
|
CALL PRTSTR0 ; RESULT |
|
|
|
LD HL,CRC+3 |
|
|
|
LD B,4 |
|
|
|
DISPCRC:LD A,$FF |
|
|
|
XOR (HL) |
|
|
|
CALL PRTHEXB |
|
|
|
DEC HL |
|
|
|
DJNZ DISPCRC |
|
|
|
; |
|
|
|
JP MENULP |
|
|
|
; |
|
|
|
CRC32: LD IX,sector4k ; CALCULATE |
|
|
|
LD BC,4096 ; CRC32 OF |
|
|
|
LD DE,(CRC) ; EACH SECTOR |
|
|
|
LD HL,(CRC+2) |
|
|
|
BYTELP: PUSH BC |
|
|
|
LD A,(IX) |
|
|
|
XOR E |
|
|
|
LD B,8 |
|
|
|
ROTLP: SRL H |
|
|
|
RR L |
|
|
|
RR D |
|
|
|
RRA |
|
|
|
JP NC,CLEAR |
|
|
|
LD E,A |
|
|
|
LD A,H |
|
|
|
XOR $ED |
|
|
|
LD H,A |
|
|
|
LD A,L |
|
|
|
XOR $B8 |
|
|
|
LD L,A |
|
|
|
LD A,D |
|
|
|
XOR $83 |
|
|
|
LD D,A |
|
|
|
LD A,E |
|
|
|
XOR $20 |
|
|
|
CLEAR: DEC B |
|
|
|
JP NZ,ROTLP |
|
|
|
LD E,A |
|
|
|
INC IX |
|
|
|
POP BC |
|
|
|
DEC BC |
|
|
|
LD A,B |
|
|
|
OR C |
|
|
|
JP NZ,BYTELP |
|
|
|
LD (CRC),DE |
|
|
|
LD (CRC+2),HL |
|
|
|
|
|
|
|
RET |
|
|
|
; |
|
|
|
;====================================================================== |
|
|
|
; CALCULATE BANK AND ADDRESS DATA FROM MEMORY ADDRESS |
|
|
|
@ -982,14 +1113,16 @@ MD_FREAD_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
LD L,D ; ADDRESS |
|
|
|
; |
|
|
|
EX AF,AF' ; PUT DESTINATION BANK IN AF' |
|
|
|
LD A,B ; PUT SOURCE BANK IN AF |
|
|
|
; |
|
|
|
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 |
|
|
|
LD (IX+0),C ; WRITE BYTE |
|
|
|
EX AF,AF' ; ; PUT SOURCE BANK IN AF |
|
|
|
; |
|
|
|
@ -1031,7 +1164,9 @@ MD_FVE1: |
|
|
|
LD A,(HL) ; READ BYTE |
|
|
|
; |
|
|
|
EX AF,AF' ; SELECT BANK ; SWITCH TO RAM BANK |
|
|
|
PUSH AF |
|
|
|
CALL HBX_BNKSEL ; TO VERIFY AGAINST |
|
|
|
POP AF |
|
|
|
EX AF,AF' |
|
|
|
; |
|
|
|
SUB (IX+0) ; COMPARE BYTE |
|
|
|
@ -1072,7 +1207,9 @@ MD_FWRIT_R: ; THIS CODE GETS RELOCATED TO HIGH MEMORY |
|
|
|
LD L,D ; ADDRESS |
|
|
|
; |
|
|
|
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 |
|
|
|
@ -1128,6 +1265,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 |
|
|
|
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 |
|
|
|
msgCancel: .DB CR,LF,"TRANSMISSION CANCELLED",CR,LF,0 |
|
|
|
@ -1138,6 +1277,8 @@ 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" |
|
|
|
#IF (XFUDBG) |
|
|
|
.DB CR,LF,"(H) Select half speed" |
|
|
|
.DB CR,LF,"(T) Test 20s timeout" |
|
|
|
@ -1150,7 +1291,7 @@ msgYES: .DB "YES",0 |
|
|
|
msgNO: .DB "NO",0 |
|
|
|
msgPacErr: .DB CR,LF,"PACKET COUNT MISMATCH ERROR",CR,LF,0 |
|
|
|
msgChkSum .DB CR,LF,"CHECKSUM ERROR",CR,LF,0 |
|
|
|
msgRetry .DB CR,LF,"ERROR, RETRY COUNT EXCEED",CR,LF,0 |
|
|
|
msgRetry .DB CR,LF,"ERROR, RETRY COUNT EXCEEDED",CR,LF,0 |
|
|
|
msgTimout .DB CR,LF,"ERROR, RECEIVE TIMEOUT",CR,LF,0 |
|
|
|
; |
|
|
|
; Variables |
|
|
|
@ -1168,6 +1309,8 @@ pktNo1c: .DB 0 ; Current packet Number 1-complemented |
|
|
|
MD_FBAS .DW $FFFF ; CURRENT BANK AND SECTOR |
|
|
|
MD_SECT .EQU MD_FBAS ; BANK BYTE |
|
|
|
MD_BANK .EQU MD_FBAS+1 ; SECTOR BYTE |
|
|
|
CRC .DW $FFFF ; CRC32 |
|
|
|
.DW $FFFF |
|
|
|
; |
|
|
|
packet: .DB 0 ; SOH |
|
|
|
.DB 0 ; PacketN |
|
|
|
|