From 6773924a3a3f907f21da4544ddb2bb08fd67d730 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Wed, 13 Jan 2021 15:30:50 +0800 Subject: [PATCH] Update updater.asm Optimize some stack usage and jumps. Enhance timeout check debug option --- Source/HBIOS/updater.asm | 77 +++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/Source/HBIOS/updater.asm b/Source/HBIOS/updater.asm index 1d0013f4..3fe4f6b0 100644 --- a/Source/HBIOS/updater.asm +++ b/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