From 59de9a01a9ce78c3228be2039d627a6fd891e5a2 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 3 Jan 2021 22:12:13 +0800 Subject: [PATCH] Update updater.asm Fixups and optimization --- Source/HBIOS/updater.asm | 77 ++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/Source/HBIOS/updater.asm b/Source/HBIOS/updater.asm index f3c70c18..6d19c394 100644 --- a/Source/HBIOS/updater.asm +++ b/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