Browse Source

Update updater.asm

Xmodem receive loop optmization
pull/187/head
b1ackmai1er 5 years ago
parent
commit
c3c3782f27
  1. 56
      Source/HBIOS/updater.asm

56
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"

Loading…
Cancel
Save