Browse Source

Update updater.asm

Fixups and optimization
pull/175/head
b1ackmai1er 5 years ago
parent
commit
59de9a01a9
  1. 77
      Source/HBIOS/updater.asm

77
Source/HBIOS/updater.asm

@ -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

Loading…
Cancel
Save