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 (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
@ -113,7 +113,7 @@ HBX_START .EQU $FE00
#DEFINE HB_DI DI
#DEFINE HB_EI EI
;
XFUDBG .EQU 0
XFUDBG .EQU 1
;
.ORG USR_LOC
;
@ -259,15 +259,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
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 +288,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 +306,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 +320,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 +336,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 +348,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 +360,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,9 +404,9 @@ Die1: LD B,BF_SYSRESET ; SYSTEM RESTART
CALL $FFF0 ; CALL HBIOS
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
;
@ -428,9 +425,9 @@ 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: ;POP DE ;
LD DE,sector4k ; POINT BACK TO START OF 4K BUFFER
;PUSH DE
;
LD HL,MD_FBAS
LD A,(HL) ; DID WE JUST
@ -444,12 +441,12 @@ 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
; POP DE
; POP BC
; POP HL
RET
;
DISPROG:LD A,(BLKCOUT) ; SKIP OUTPUT
@ -680,15 +677,21 @@ 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
@ -1281,7 +1284,7 @@ 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"
#ENDIF
.DB CR,LF,CR,LF,"Select : ",0
msgSuccess: .DB CR,LF,CR,LF,"COMPLETED WITHOUT ERRORS ",CR,LF,0

Loading…
Cancel
Save