|
|
|
@ -120,10 +120,10 @@ BSPC: .EQU 'H'-40h ; ^H = Backspace |
|
|
|
; |
|
|
|
; Start of code |
|
|
|
; |
|
|
|
ld (oldSP),SP ; SETUP STACK BELOW HBIOS |
|
|
|
ld SP,HBX_START-MD_CSIZ ; ALLOW FOR RELOCATABLE CODE AREA |
|
|
|
LD (oldSP),SP ; SETUP STACK BELOW HBIOS |
|
|
|
LD SP,HBX_START-MD_CSIZ ; ALLOW FOR RELOCATABLE CODE AREA |
|
|
|
|
|
|
|
ld HL,msgHeader ; PRINT |
|
|
|
LD HL,msgHeader ; PRINT |
|
|
|
CALL PRTSTR0 ; GREETING |
|
|
|
|
|
|
|
LD HL,MD_FSTART ; COPY FLASH |
|
|
|
@ -185,10 +185,7 @@ CLRSER: CALL SERST ; EMPTY SERIAL BUFFER |
|
|
|
CALL SERIN |
|
|
|
JR CLRSER |
|
|
|
; |
|
|
|
SERCLR: XOR A ; CLEAR VERIFY |
|
|
|
LD (VERRES),A ; FAILURE FLAG |
|
|
|
; |
|
|
|
LD HL,msgInstr ; PROVIDE |
|
|
|
SERCLR: LD HL,msgInstr ; PROVIDE |
|
|
|
CALL PRTSTR0 ; INSTRUCTION |
|
|
|
; |
|
|
|
LD A,(SERDEV) ; IF CONSOLE AND SERIAL |
|
|
|
@ -204,14 +201,14 @@ SERCLR: XOR A ; CLEAR VERIFY |
|
|
|
LD DE,sector4k ; POINT TO START OF SECTOR TO WRITE |
|
|
|
; |
|
|
|
GetNewPacket: |
|
|
|
ld A,20 ; WE RETRY 20 TIMES BEFORE GIVING UP |
|
|
|
LD A,20 ; WE RETRY 20 TIMES BEFORE GIVING UP |
|
|
|
LD (retrycnt),A |
|
|
|
; |
|
|
|
NPloop: LD B,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK |
|
|
|
CALL GetCharTmo |
|
|
|
jp NC,NotPacketTimeout |
|
|
|
; |
|
|
|
ld HL,retrycnt ; REACHED MAX NUMBER OF RETRIES? |
|
|
|
LD HL,retrycnt ; REACHED MAX NUMBER OF RETRIES? |
|
|
|
dec (HL) |
|
|
|
jp Z,FAILRT ; YES, PRINT MESSAGE AND EXIT |
|
|
|
; |
|
|
|
@ -227,28 +224,23 @@ NotPacketTimeout: |
|
|
|
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... |
|
|
|
ld (HL),A ; ...PACKET BUFFER AND... |
|
|
|
LD HL,packet ; SAVE THE RECEIVED CHAR INTO THE... |
|
|
|
LD (HL),A ; ...PACKET BUFFER AND... |
|
|
|
INC HL ; ...POINT TO THE NEXT LOCATION |
|
|
|
; |
|
|
|
LD B,1 ; GET CHARACTER |
|
|
|
CALL GetCharTmo ; SHOULD BE PACKET NUMBER |
|
|
|
ld (HL),A |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
LD (HL),A ; SHOULD BE PACKET NUMBER |
|
|
|
INC HL |
|
|
|
JP C,FAILTO |
|
|
|
; |
|
|
|
LD B,1 ; GET CHARACTER |
|
|
|
CALL GetCharTmo ; SHOULD BE PACKET NUMBER |
|
|
|
ld (HL),A ; COMPLEMENT |
|
|
|
INC HL |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
LD (HL),A ; SHOULD BE PACKET NUMBER |
|
|
|
INC HL ; COMPLEMENT |
|
|
|
JP C,FAILTO |
|
|
|
; |
|
|
|
LD B,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET |
|
|
|
LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET |
|
|
|
GetRestOfPacket: |
|
|
|
push BC ; GET CHARACTER |
|
|
|
LD B,1 |
|
|
|
CALL GetCharTmo |
|
|
|
pop BC |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
JP C,FAILTO |
|
|
|
; |
|
|
|
LD (HL),A |
|
|
|
@ -256,15 +248,15 @@ GetRestOfPacket: |
|
|
|
LD (DE),A ; ...PACKET BUFFER AND... |
|
|
|
INC DE ; ...POINT TO THE NEXT LOCATION |
|
|
|
; |
|
|
|
DJNZ GetRestOfPacket |
|
|
|
DEC C |
|
|
|
JR NZ,GetRestOfPacket |
|
|
|
; |
|
|
|
LD B,1 ; GET CHARACTER |
|
|
|
CALL GetCharTmo ; SHOULD BE CHECKSUM |
|
|
|
LD (HL),A |
|
|
|
CALL GetCharTmo1 ; GET CHARACTER |
|
|
|
LD (HL),A ; SHOULD BE CHECKSUM |
|
|
|
JP C,FAILTO |
|
|
|
; |
|
|
|
ld HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA |
|
|
|
ld B,128 |
|
|
|
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 |
|
|
|
inc HL |
|
|
|
@ -290,7 +282,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 |
|
|
|
LD HL,pktNo ; UPDATE THE PACKET COUNTERS |
|
|
|
INC (HL) |
|
|
|
INC HL |
|
|
|
dec (HL) |
|
|
|
@ -351,7 +343,7 @@ Die: LD A,$FF |
|
|
|
CALL PRTSTR0 ; Prints message and exits from program |
|
|
|
LD C,BF_SYSRES_WARM ; WARM START |
|
|
|
Die1: LD B,BF_SYSRESET ; SYSTEM RESTART |
|
|
|
ld SP,(oldSP) |
|
|
|
LD SP,(oldSP) |
|
|
|
CALL $FFF0 ; CALL HBIOS |
|
|
|
RET |
|
|
|
|
|
|
|
@ -398,7 +390,6 @@ WSEC1: LD HL,MD_FERAS ; ERASE |
|
|
|
LD HL,MD_FVERI ; WRITE |
|
|
|
CALL MD_FNCALL |
|
|
|
LD (VERRES),A ; SAVE STATUS |
|
|
|
CALL PRTHEXB |
|
|
|
; |
|
|
|
NOVER: POP DE ; POINT BACK TO |
|
|
|
LD DE,sector4k ; START OF 4K BUFFER |
|
|
|
@ -431,25 +422,27 @@ NXTS3: LD A,(VERRES) ; EXIT WITH STATUS |
|
|
|
; 4MHZ 20 SECONDS B=16 |
|
|
|
; 10MHZ 20 SECONDS B=39 |
|
|
|
; |
|
|
|
GetCharTmo1: |
|
|
|
LD B,1 |
|
|
|
GetCharTmo: |
|
|
|
CALL SERST ; IF THER IS A |
|
|
|
CALL SERST ; IF THERE IS A |
|
|
|
OR A ; CHARACTER AVAILABLE |
|
|
|
JR NZ,GotChrX ; EXIT NO OTHERWISE POLL |
|
|
|
JR NZ,GotChrX ; EXIT NOW OTHERWISE POLL |
|
|
|
PUSH BC |
|
|
|
ld BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP |
|
|
|
LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP |
|
|
|
TmoFct: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START |
|
|
|
GCtmob: PUSH BC |
|
|
|
ld B,C |
|
|
|
LD B,C |
|
|
|
GCtmoc: PUSH BC |
|
|
|
CALL SERST |
|
|
|
OR A ; A CHAR AVAILABLE? |
|
|
|
JR NZ,GotChar ; YES, GET OUT OF LOOP |
|
|
|
POP BC |
|
|
|
djnz GCtmoc |
|
|
|
DJNZ GCtmoc |
|
|
|
POP BC |
|
|
|
djnz GCtmob |
|
|
|
DJNZ GCtmob |
|
|
|
POP BC |
|
|
|
djnz GetCharTmo |
|
|
|
DJNZ GetCharTmo |
|
|
|
scf ; SET CARRY SIGNALS TIMEOUT |
|
|
|
RET |
|
|
|
; |
|
|
|
@ -457,7 +450,7 @@ GotChar:POP BC |
|
|
|
POP BC |
|
|
|
POP BC |
|
|
|
GotChrX:CALL SERIN |
|
|
|
or A ; CLEAR CARRY SIGNALS SUCCESS |
|
|
|
OR A ; CLEAR CARRY SIGNALS SUCCESS |
|
|
|
RET |
|
|
|
; |
|
|
|
GETINP: CALL CONIN ; GET A CHARACTER |
|
|
|
@ -483,7 +476,7 @@ GETINP2:CALL CONIN |
|
|
|
AND ~$20 ; CONVERT CHARACTER TO LOWER |
|
|
|
GETINP3:RET |
|
|
|
; |
|
|
|
PRTSTR0:ld A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL 0 |
|
|
|
PRTSTR0:LD A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL 0 |
|
|
|
or A ; CHECK IF GOT ZERO? |
|
|
|
RET Z ; IF ZERO RETURN TO CALLER |
|
|
|
LD C,A |
|
|
|
@ -1031,7 +1024,7 @@ msgUnsupC: .DB CR,LF,"FLASH CHIP NOT SUPPORTED",CR,LF,0 |
|
|
|
msgReboot: .DB CR,LF,"REBOOTING ...",CR,LF,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 FAILCN",CR,LF,0 |
|
|
|
msgCancel: .DB CR,LF,"TRANSMISSION CANCELLED",CR,LF,0 |
|
|
|
msgConsole: .DB CR,LF,"(C) Set Console Device : ",0 |
|
|
|
msgIODevice: .DB CR,LF,"(S) Set Serial Device : ",0 |
|
|
|
msgWriteV: .DB CR,LF,"(V) Toggle Write Verify : ",0 |
|
|
|
|