From c3c3782f274f2a1b84d807a303d410f136cec76f Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Thu, 28 Jan 2021 19:11:24 +0800 Subject: [PATCH] Update updater.asm Xmodem receive loop optmization --- Source/HBIOS/updater.asm | 56 +++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/Source/HBIOS/updater.asm b/Source/HBIOS/updater.asm index 1dea76ea..f53bd3ab 100644 --- a/Source/HBIOS/updater.asm +++ b/Source/HBIOS/updater.asm @@ -229,10 +229,7 @@ MENULP: LD DE,$0000 ; ENSURE WE ARE STARTING LD HL,ERATYP ; RESET THE ERASE RES 7,(HL) ; SKIP FLAG ; - LD HL,msgCRLF - CALL PRTSTR0 CALL MENU ; DISPLAY MENU -; CALL GETINP ; GET SELECTION ; CP 'U' ; BEGIN @@ -328,9 +325,13 @@ NotPacketTimeout: CP SOH ; DID WE GET A START-OF-NEW-PACKET? JR NZ,NPloop ; NO, GO BACK AND TRY AGAIN ; +#IF (XFUDBG) LD HL,packet ; SAVE THE RECEIVED CHAR INTO THE... LD (HL),A ; ...PACKET BUFFER AND... INC HL ; ...POINT TO THE NEXT LOCATION +#ELSE + LD HL,packet+1 ; SKIP SAVING +#ENDIF ; CALL GetCharTmo1 ; GET CHARACTER LD (HL),A ; SHOULD BE PACKET NUMBER @@ -342,17 +343,16 @@ NotPacketTimeout: INC HL ; COMPLEMENT JR C,FAILTO ; - LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET -GetRestOfPacket: + LD C,0 ; GET 128 MORE CHARACTERS FOR A FULL PACKET +GetRestOfPacket: ; C=0=256 TO ALLOW FOR DOUBLE DECREMENT CALL GetCharTmo1 ; GET CHARACTER JR C,FAILTO ; - LD (HL),A - INC HL ; SAVE THE RECEIVED CHAR INTO THE... - LD (DE),A ; ...PACKET BUFFER AND... - INC DE ; ...POINT TO THE NEXT LOCATION + LD (HL),A ; SAVE THE RECEIVED CHAR INTO THE + LDI ; PACKET BUFFER AND FLASH SECTOR BUFFER +; + DEC C ; C GETS DECREMENTED TWICE EACH LOOP. ; - DEC C JP NZ,GetRestOfPacket ; CALL GetCharTmo1 ; GET CHARACTER @@ -379,9 +379,8 @@ csloop: ADD A,(HL) ; JUST ADD UP THE BYTES DEC A ; XMODEM PACKETS? AND %00011111 ; IF YES THEN WERE WE CP %00011111 ; HAVE ENOUGH TO - LD A,0 ; WRITE A FLASH SECTOR + LD A,H ; WRITE A FLASH SECTOR CALL Z,WSEC ; ASSUME FLASH SUCCESSFUL -; OR A ; EXIT IF WE GOT A JR NZ,FAILWF ; WRITE VERIFICATION ERROR ; @@ -590,14 +589,15 @@ GETINP2:CALL CONIN GETINP3:RET ; PRTSTR0:LD A,(HL) ; PRINT MESSAGE POINTED TOP HL UNTIL 0 - or A ; CHECK IF GOT ZERO? + OR A ; CHECK IF GOT ZERO? RET Z ; IF ZERO RETURN TO CALLER LD C,A CALL CONOUT ; ELSE PRINT THE CHARACTER INC HL JP PRTSTR0 ; -MENU: LD HL,msgConsole ; DISPLAY +MENU: CALL COUTON + LD HL,msgConsole ; DISPLAY CALL PRTSTR0 ; CONSOLE LD A,(CONDEV) ; DEVICE ADD A,'0' @@ -876,28 +876,27 @@ SERIN: PUSH HL ; SERIAL INPUT. WAIT FOR A CHARACTER ADD RETURN IT IN A POP HL RET ; -CONOUT: PUSH HL ; CONSOLE OUTPUT CHARACTER IN C - PUSH DE ; OUTPUT IS BLOCKED DURING THE - PUSH BC ; FILE TRANSFER WHEN THE - PUSH AF - LD A,(BLKCOUT) ; CONSOLE AND SERIAL LINE - OR A ; ARE THE SAME - JR Z,CONOUT1 +CONOUT: PUSH AF ; OUTPUT IS BLOCKED DURING THE + LD A,(BLKCOUT) ; FILE TRANSFER WHEN THE + OR A ; CONSOLE AND SERIAL LINE + JR Z,CONOUT1 ; ARE THE SAME + PUSH HL ; CONSOLE OUTPUT CHARACTER IN C + PUSH DE + PUSH BC LD E,C LD B,$01 LD HL,CONDEV LD C,(HL) RST 08 -CONOUT1:POP AF POP BC POP DE POP HL +CONOUT1:POP AF RET ; CONST: PUSH HL ; CONSOLE STATUS. RETURN CHARACTERS AVAILABLE IN A PUSH DE PUSH BC - LD E,C LD B,$02 LD HL,CONDEV LD C,(HL) @@ -910,7 +909,6 @@ CONST: PUSH HL ; CONSOLE STATUS. RETURN CHARACTERS AVAILABLE IN A CONIN: PUSH HL ; CONSOLE INPUT. WAIT FOR A CHARACTER ADD RETURN IT IN A PUSH DE PUSH BC - LD E,C LD B,$00 LD HL,CONDEV LD C,(HL) @@ -991,16 +989,16 @@ CRCLP2: PUSH BC ; 8 SECTORS LD A,(MD_SECT) ; POINT ADD A,$10 ; TO NEXT LD (MD_SECT),A ; SECTOR - +; POP BC ; NEXT DJNZ CRCLP2 ; SECTOR - +; XOR A ; RESET SECTOR LD (MD_SECT),A ; START - +; LD HL,MD_BANK ; POINT TO INC (HL) ; NEXT BANK - +; POP BC ; NEXT DJNZ CRCLP1 ; BANK ; @@ -1170,7 +1168,7 @@ msgCRC32: .DB CR,LF,CR,LF,"CRC32 : ",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 CANCELLED",CR,LF,0 -msgConsole: .DB CR,LF,"(C) Set Console Device : ",0 +msgConsole: .DB CR,LF,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 msgBegin: .DB CR,LF,"(R) Reboot"