Browse Source

Update dbgmon.asm

Eliminate need for 128 byte packet buffer
pull/243/head
b1ackmai1er 4 years ago
parent
commit
a7a0168655
  1. 63
      Source/HBIOS/dbgmon.asm

63
Source/HBIOS/dbgmon.asm

@ -324,28 +324,27 @@ KLOP1:
JP Z,SERIALCMDLOOP ; IF SO, ALL DONE JP Z,SERIALCMDLOOP ; IF SO, ALL DONE
CALL COUT ; OUTPUT KEY TO SCREEN CALL COUT ; OUTPUT KEY TO SCREEN
JR KLOP1 ; LOOP JR KLOP1 ; LOOP
;
#IF (ENA_XM) #IF (ENA_XM)
; ;
;__XMLOAD_____________________________________________________________________ ;__XMLOAD_____________________________________________________________________
; ;
; LOAD A FILE INTO MEMORY FROM THE SERIAL PORT USING X-MODEM PROTOCOL ; LOAD A FILE INTO MEMORY FROM THE SERIAL PORT USING X-MODEM PROTOCOL
; ;
;
SOH: .EQU 'A'-40h ; ^A CTRL-A SOH: .EQU 'A'-40h ; ^A CTRL-A
EOT: .EQU 'D'-40h ; ^D = End of Transmission EOT: .EQU 'D'-40h ; ^D = End of Transmission
ACK: .EQU 'F'-40h ; ^F = Positive Acknowledgement ACK: .EQU 'F'-40h ; ^F = Positive Acknowledgement
NAK: .EQU 'U'-40h ; ^U = Negative Acknowledgement NAK: .EQU 'U'-40h ; ^U = Negative Acknowledgement
CAN: .EQU 'X'-40h ; ^X = Cancel CAN: .EQU 'X'-40h ; ^X = Cancel
; ;
PKTNU .DB 0 ; CALCULATED PACKET NUMBER
PKTNU1C .DB 0 ; CALCULATED PACKET NUMBER COMPLEMENT
CPKTN .DB 0 ; CALCULATED PACKET NUMBER
CPKTN1C .DB 0 ; CALCULATED PACKET NUMBER COMPLEMENT
RETRYC .DB 0 ; RETRY COUNT RETRYC .DB 0 ; RETRY COUNT
PACKET: .DB 0 ; START OF HEADER (SOH)
.DB 0 ; RECEIVED PACKET NUMBER
.DB 0 ; RECEIVED PACKET NUMBER COMPLEMENT
.FILL 128,0 ; 128 BYTES OF DATA
.DB 0 ; CHECKSUM
RPKTN: .DB 0 ; RECEIVED PACKET NUMBER
RPKTN1C:.DB 0 ; RECEIVED PACKET NUMBER COMPLEMENT
PKTCS .DB 0 ; CHECKSUM
;
PSADDR: .DW 0 ; START OF PACKET ADDR
; ;
XMLOAD: CALL WORDPARM ; GET STARTING LOCATION XMLOAD: CALL WORDPARM ; GET STARTING LOCATION
JP C,ERR ; HANDLE SYNTAX ERRORS JP C,ERR ; HANDLE SYNTAX ERRORS
@ -366,13 +365,12 @@ XMLOAD: CALL WORDPARM ; GET STARTING LOCATION
ADD A,A ; TIMEOUT DELAY ADD A,A ; TIMEOUT DELAY
LD (TMOFCT),A ; FACTOR LD (TMOFCT),A ; FACTOR
POP AF POP AF
LD A,1 ; THE FIRST PACKET IS NUMBER 1
LD (PKTNU),A
LD A,255-1 ; ALSO STORE THE 1-COMPLEMENT OF IT
LD (PKTNU1C),A
; ;
POP DE ; POINT TO WHERE TO SAVE FILE
LD BC,$FE01 ; SET FIRST NUMBER TO 1
LD (CPKTN),BC ; ALSO STORE THE 1-COMPLEMENT
;
POP DE ; POINT TO WHERE TO SAVE THE PACKET
LD (PSADDR),DE ; SAVE IF FOR THE CHECKSUM CALCULATION
; ;
GETNP: LD HL,RETRYC ; WE RETRY 20 TIMES BEFORE GIVING UP GETNP: LD HL,RETRYC ; WE RETRY 20 TIMES BEFORE GIVING UP
LD (HL),20 LD (HL),20
@ -386,7 +384,7 @@ NPLOOP: LD B,6 ; 6 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK
; ;
LD A,NAK ; SEND A NAK TO THE UPLOADER LD A,NAK ; SEND A NAK TO THE UPLOADER
CALL COUT CALL COUT
JR NPLOOP ; GET NEXT PACKET
JR NPLOOP ; LOOP UNTIL WE GET A GET A CHARACTOR OR TIMEOUT
; ;
NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED? NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED?
JP Z,XMDONE ; YES, THEN WE'RE DONE JP Z,XMDONE ; YES, THEN WE'RE DONE
@ -395,7 +393,7 @@ NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED?
CP SOH ; DID WE GET A START-OF-NEW-PACKET? CP SOH ; DID WE GET A START-OF-NEW-PACKET?
JR NZ,NPLOOP ; NO, GO BACK AND TRY AGAIN JR NZ,NPLOOP ; NO, GO BACK AND TRY AGAIN
; ;
LD HL,PACKET+1 ; SKIP SAVING SOH
LD HL,RPKTN ; WE SAVE PACKET NUMBER HERE
; ;
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER LD (HL),A ; SHOULD BE PACKET NUMBER
@ -403,42 +401,41 @@ NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED?
JR C,FAILTO ; TIMOUT ERROR? JR C,FAILTO ; TIMOUT ERROR?
; ;
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
LD (HL),A ; SHOULD BE PACKET NUMBER
INC HL ; COMPLEMENT
LD (HL),A ; SHOULD BE PACKET NUMBER COMPLEMENT
JR C,FAILTO ; TIMOUT ERROR? JR C,FAILTO ; TIMOUT ERROR?
;
LD C,0 ; GET 128 MORE CHARACTERS FOR A FULL PACKET
PCKRCV: ; C=0=256 TO ALLOW FOR DOUBLE DECREMENT
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
LD C,128 ; GET 128 MORE CHARACTERS FOR A FULL PACKET
PCKRCV: CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
JR C,FAILTO ; TIMOUT ERROR? JR C,FAILTO ; TIMOUT ERROR?
;
LD (HL),A ; SAVE THE RECEIVED CHAR INTO THE
LDI ; PACKET BUFFER AND DESTINATION (DE)
;
DEC C ; C GETS DECREMENTED TWICE EACH LOOP.
LD (DE),A ; SAVE THE RECEIVED CHAR
INC DE
DEC C
JP NZ,PCKRCV JP NZ,PCKRCV
; ;
CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER
LD (HL),A ; SHOULD BE CHECKSUM
JR C,FAILTO ; TIMOUT ERROR? JR C,FAILTO ; TIMOUT ERROR?
LD (PKTCS),A ; SHOULD BE CHECKSUM
; ;
LD HL,PACKET+3 ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD HL,(PSADDR) ; CALCULATE CHECKSUM FROM 128 BYTES OF DATA
LD B,128 LD B,128
XOR A XOR A
CSLOOP: ADD A,(HL) ; JUST ADD UP THE BYTES CSLOOP: ADD A,(HL) ; JUST ADD UP THE BYTES
INC HL INC HL
DJNZ CSLOOP DJNZ CSLOOP
; ;
LD (PSADDR),DE ; SAVE THE NEW PACKET START ADDRESS
;
LD HL,PKTCS
XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO
JR 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,(PKTNU) ; CHECK
LD BC,(PACKET+1) ; AGREEMENT
LD HL,(CPKTN) ; CHECK
LD BC,(RPKTN) ; AGREEMENT
; XOR A ; PACKET ; XOR A ; PACKET
SBC HL,BC ; NUMBERS SBC HL,BC ; NUMBERS
JR NZ,FAILPN JR NZ,FAILPN
; ;
LD HL,PKTNU ; UPDATE THE PACKET COUNTERS
LD HL,CPKTN ; UPDATE THE PACKET COUNTERS
INC (HL) INC (HL)
INC HL INC HL
DEC (HL) DEC (HL)

Loading…
Cancel
Save