Browse Source

Update updater.asm

Optimize some stack usage and jumps. Enhance timeout check debug option
pull/181/head
b1ackmai1er 5 years ago
parent
commit
6773924a3a
  1. 77
      Source/HBIOS/updater.asm

77
Source/HBIOS/updater.asm

@ -65,7 +65,7 @@
; OPTION (1) AND (2) - CALCULATE AND DISPLAY CRC32 OF 1ST OR 2ND 512K ROM. ; 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 (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 ; V.DEV 13/1/2021 PHIL SUMMERS, DIFFICULTYLEVELHIGH@GMAIL.COM
@ -113,7 +113,7 @@ HBX_START .EQU $FE00
#DEFINE HB_DI DI #DEFINE HB_DI DI
#DEFINE HB_EI EI #DEFINE HB_EI EI
; ;
XFUDBG .EQU 0
XFUDBG .EQU 1
; ;
.ORG USR_LOC .ORG USR_LOC
; ;
@ -259,15 +259,14 @@ SERCLR: LD HL,msgInstr ; PROVIDE
LD DE,sector4k ; POINT TO START OF SECTOR TO WRITE LD DE,sector4k ; POINT TO START OF SECTOR TO WRITE
; ;
GetNewPacket: 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,5 ; 5 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
CALL GetCharTmo CALL GetCharTmo
JP NC,NotPacketTimeout 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 JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT
; ;
LD C,NAK ; SEND A NAK TO THE UPLOADER LD C,NAK ; SEND A NAK TO THE UPLOADER
@ -289,17 +288,17 @@ NotPacketTimeout:
CALL GetCharTmo1 ; GET CHARACTER CALL GetCharTmo1 ; GET CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER LD (HL),A ; SHOULD BE PACKET NUMBER
INC HL INC HL
JP C,FAILTO
JR C,FAILTO
; ;
CALL GetCharTmo1 ; GET CHARACTER CALL GetCharTmo1 ; GET CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER LD (HL),A ; SHOULD BE PACKET NUMBER
INC HL ; COMPLEMENT INC HL ; COMPLEMENT
JP C,FAILTO
JR C,FAILTO
; ;
LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET
GetRestOfPacket: GetRestOfPacket:
CALL GetCharTmo1 ; GET CHARACTER CALL GetCharTmo1 ; GET CHARACTER
JP C,FAILTO
JR C,FAILTO
; ;
LD (HL),A LD (HL),A
INC HL ; SAVE THE RECEIVED CHAR INTO THE... INC HL ; SAVE THE RECEIVED CHAR INTO THE...
@ -307,11 +306,11 @@ GetRestOfPacket:
INC DE ; ...POINT TO THE NEXT LOCATION INC DE ; ...POINT TO THE NEXT LOCATION
; ;
DEC C DEC C
JR NZ,GetRestOfPacket
JP NZ,GetRestOfPacket
; ;
CALL GetCharTmo1 ; GET CHARACTER CALL GetCharTmo1 ; GET CHARACTER
LD (HL),A ; SHOULD BE CHECKSUM LD (HL),A ; SHOULD BE CHECKSUM
JP C,FAILTO
JR C,FAILTO
; ;
LD HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA LD HL,packet+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD B,128 LD B,128
@ -321,17 +320,15 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
DJNZ csloop DJNZ csloop
; ;
XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO 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 HL,(pktNo) ; CHECK
LD BC,(packet+1) ; AGREEMENT LD BC,(packet+1) ; AGREEMENT
; XOR A ; PACKET ; XOR A ; PACKET
SBC HL,BC ; NUMBERS 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? DEC A ; XMODEM PACKETS?
AND %00011111 ; IF YES THEN WERE WE AND %00011111 ; IF YES THEN WERE WE
CP %00011111 ; HAVE ENOUGH TO CP %00011111 ; HAVE ENOUGH TO
@ -339,7 +336,7 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
CALL Z,WSEC ; ASSUME FLASH SUCCESSFUL CALL Z,WSEC ; ASSUME FLASH SUCCESSFUL
; ;
OR A ; EXIT IF WE GOT A 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 LD HL,pktNo ; UPDATE THE PACKET COUNTERS
INC (HL) INC (HL)
@ -351,6 +348,9 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES
; ;
JP GetNewPacket JP GetNewPacket
; ;
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING
JR ERRRX ; FOR CHARACTER
;
COUTON: LD A,$FF ; TURN ON COUTON: LD A,$FF ; TURN ON
LD (BLKCOUT),A ; OUTPUT LD (BLKCOUT),A ; OUTPUT
RET RET
@ -360,9 +360,6 @@ Done: LD C,ACK ; TELL UPLOADER
Done1: LD HL,msgSuccess ; BACK TO Done1: LD HL,msgSuccess ; BACK TO
JR MSGRS ; MENU JR MSGRS ; MENU
; ;
FAILTO: LD HL,msgTimout ; TIMEOUT WAITING
JR ERRRX ; FOR CHARACTER
;
FAILWF: LD HL,msgFailWrt ; FLASH FAILWF: LD HL,msgFailWrt ; FLASH
JR MSGRS ; VERIFY FAIL JR MSGRS ; VERIFY FAIL
; ;
@ -407,9 +404,9 @@ Die1: LD B,BF_SYSRESET ; SYSTEM RESTART
CALL $FFF0 ; CALL HBIOS CALL $FFF0 ; CALL HBIOS
RET RET
WSEC: PUSH HL ; WRITE A
PUSH BC ; FLASH
PUSH DE ; SECTOR
WSEC: ;PUSH HL ; WRITE A
;PUSH BC ; FLASH
;PUSH DE ; SECTOR
; ;
CALL DISPROG ; DISPLAY PROGRESS CALL DISPROG ; DISPLAY PROGRESS
; ;
@ -428,9 +425,9 @@ WSEC1: LD HL,MD_FERAS ; ERASE
CALL MD_FNCALL CALL MD_FNCALL
LD (VERRES),A ; SAVE STATUS LD (VERRES),A ; SAVE STATUS
; ;
NOVER: POP DE ; POINT BACK TO
LD DE,sector4k ; START OF 4K BUFFER
PUSH DE
NOVER: ;POP DE ;
LD DE,sector4k ; POINT BACK TO START OF 4K BUFFER
;PUSH DE
; ;
LD HL,MD_FBAS LD HL,MD_FBAS
LD A,(HL) ; DID WE JUST LD A,(HL) ; DID WE JUST
@ -444,12 +441,12 @@ NOVER: POP DE ; POINT BACK TO
; ;
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
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 NXTS3: LD A,(VERRES) ; EXIT WITH STATUS
POP DE
POP BC
POP HL
; POP DE
; POP BC
; POP HL
RET RET
; ;
DISPROG:LD A,(BLKCOUT) ; SKIP OUTPUT DISPROG:LD A,(BLKCOUT) ; SKIP OUTPUT
@ -680,15 +677,21 @@ OPTIONS:LD HL,msgEnterUnit ; GET
JP MENULP ; BACK TO MENU JP MENULP ; BACK TO MENU
; ;
#IF (XFUDBG) #IF (XFUDBG)
OPTIONT:LD HL,msgCRLF
OPTIONT:LD HL,msgCRLF ; TEST DELAY 32S, 16S, 8S, 4S, 2S, 1S
CALL PRTSTR0 CALL PRTSTR0
LD C,'*' ; DISPLAY START
LD B,32 ; START DELAY IS 32 SECONDS
TSTDLY: PUSH BC
LD C,'>' ; DISPLAY START
CALL CONOUT ; INDICATOR 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 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+ OPTIONH:LD A,8 ; TURN ON THE SBC-V2-004+
OUT (RTCIO),A ; CLOCK DIVIDER OUT (RTCIO),A ; CLOCK DIVIDER
@ -1281,7 +1284,7 @@ msgBegin: .DB CR,LF,"(R) Reboot"
.DB CR,LF,"(2) CRC Flash #2" .DB CR,LF,"(2) CRC Flash #2"
#IF (XFUDBG) #IF (XFUDBG)
.DB CR,LF,"(H) Select half speed" .DB CR,LF,"(H) Select half speed"
.DB CR,LF,"(T) Test 20s timeout"
.DB CR,LF,"(T) Test timeout"
#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