diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 72bd561f..af3f28aa 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -324,28 +324,27 @@ KLOP1: JP Z,SERIALCMDLOOP ; IF SO, ALL DONE CALL COUT ; OUTPUT KEY TO SCREEN JR KLOP1 ; LOOP +; #IF (ENA_XM) ; ;__XMLOAD_____________________________________________________________________ ; ; LOAD A FILE INTO MEMORY FROM THE SERIAL PORT USING X-MODEM PROTOCOL ; -; SOH: .EQU 'A'-40h ; ^A CTRL-A EOT: .EQU 'D'-40h ; ^D = End of Transmission ACK: .EQU 'F'-40h ; ^F = Positive Acknowledgement NAK: .EQU 'U'-40h ; ^U = Negative Acknowledgement 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 - -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 JP C,ERR ; HANDLE SYNTAX ERRORS @@ -366,13 +365,12 @@ XMLOAD: CALL WORDPARM ; GET STARTING LOCATION ADD A,A ; TIMEOUT DELAY LD (TMOFCT),A ; FACTOR 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 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 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? 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? 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 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? ; 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? -; - 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? -; - 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 ; CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER - LD (HL),A ; SHOULD BE CHECKSUM 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 XOR A CSLOOP: ADD A,(HL) ; JUST ADD UP THE BYTES INC HL DJNZ CSLOOP ; + LD (PSADDR),DE ; SAVE THE NEW PACKET START ADDRESS +; + LD HL,PKTCS XOR (HL) ; HL POINTS TO THE RECEIVED CHECKSUM SO 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 SBC HL,BC ; NUMBERS JR NZ,FAILPN ; - LD HL,PKTNU ; UPDATE THE PACKET COUNTERS + LD HL,CPKTN ; UPDATE THE PACKET COUNTERS INC (HL) INC HL DEC (HL)