From ceeb2137565b9c36b97065ae12ba47fd38c95901 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Fri, 10 Sep 2021 23:23:44 +0800 Subject: [PATCH 1/8] Update dbgmon.asm Preliminary xmodem --- Source/HBIOS/dbgmon.asm | 171 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index be3d5ca6..4f6e5b9c 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -99,6 +99,8 @@ SERIALCMDLOOP: JP Z,PROGRM ; IF YES GO PROGRAM ROUTINE CP 'O' ; IS IT AN "O" (Y/N) JP Z,POUT ; PORT OUTPUT + CP 'T' ; IS IT A "T" (Y/N) + JP Z,XMLOAD ; XMODEM TRANSFER CP 'L' ; IS IT A "L" (Y/N) JP Z,HXLOAD ; INTEL HEX FORMAT LOAD DATA CP 'I' ; IS IT AN "I" (Y/N) @@ -316,6 +318,174 @@ KLOP1: JP Z,SERIALCMDLOOP ; IF SO, ALL DONE CALL COUT ; OUTPUT KEY TO SCREEN JR KLOP1 ; LOOP + +; +;__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 +XMSAVE: .EQU 0200H +; +PKTNU .DB 0 ; CALCULATED PACKET NUMBER +PKTNU1C .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 +; +XMLOAD: LD BC,$F8F0 ; GET CPU SPEED + RST 08 ; AND MULTIPLY + LD A,L ; BY 4 + PUSH AF + ADD A,A ; TO CREATE + 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 +; + LD DE,XMSAVE ; POINT TO WHERE TO SAVE FILE +; +GETNP: LD HL,RETRYC ; WE RETRY 20 TIMES BEFORE GIVING UP + LD (HL),20 +; +NPLOOP: LD B,6 ; 6 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK + CALL GCT0 + JP NC,NOTOUT ; NO TIMEOUT ? +; + DEC (HL) ; REACHED MAX NUMBER OF RETRIES? + JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT +; + LD C,NAK ; SEND A NAK TO THE UPLOADER + CALL SEROUT + JR NPLOOP +; +NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED? + JP Z,XMDONE ; YES, THEN WE'RE DONE + CP CAN ; UPLOADER WANTS TO FAIL TRANSFER? + JP Z,FAILCN ; YES, THEN WE'RE ALSO DONE + 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 +; + CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER + LD (HL),A ; SHOULD BE PACKET NUMBER + INC HL + JR C,FAILTO ; TIMOUT ERROR? +; + CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER + LD (HL),A ; SHOULD BE PACKET NUMBER + INC HL ; 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 + 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. + JP NZ,PCKRCV +; + CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER + LD (HL),A ; SHOULD BE CHECKSUM + JR C,FAILTO ; TIMOUT ERROR? +; + 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 + DJNZ CSLOOP +; + 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 +; XOR A ; PACKET + SBC HL,BC ; NUMBERS + JR NZ,FAILPN +; + LD HL,PKTNU ; UPDATE THE PACKET COUNTERS + INC (HL) + INC HL + DEC (HL) +; + LD C,ACK ; TELL UPLOADER THAT WE'RE HAPPY WITH WITH + CALL SEROUT ; PACKET AND GO BACK AND FETCH SOME MORE + JP GETNP +; +FAILCN: LD HL,TXT_CANCLERR ; TRANSFER CANCELLED + JR XMERR +FAILCS: LD HL,TXT_CKSUMERR ; CHECKSUM ERROR + JR XMERR +FAILPN: LD HL,TXT_PKNUMERR ; PACKET NUMBER ERROR + JR XMERR +FAILTO: LD HL,TXT_TMOUTERR ; TIMEOUT ERROR + JR XMERR +; +XMDONE: LD C,ACK ; TELL REMOTE + CALL SEROUT ; WE'RE DONE + LD HL,TXT_LOADED ; TELL USER +XMERR: CALL PRTSTR ; WE'RE DONE + JP SERIALCMDLOOP ; BACK TO MENU +; +; WAITS FOR UP TO B SECONDS FOR A CHARACTER TO BECOME AVAILABLE AND +; RETURNS IT IN A WITHOUT ECHO AND CARRY CLEAR. IF TIMEOUT THEN CARRY +; IT SET. +; +; 4MHZ 20 SECONDS TMOFCT = 16 +; 10MHZ 20 SECONDS TMOFCT = 39 +; +GCTO1: LD B,1 ; WAIT 1 SECOND FOR SERIAL INPUT +GCTO: CALL SERST ; IF THERE IS A + OR A ; CHARACTER AVAILABLE + JR NZ,GETCHRX ; EXIT NOW OTHERWISE POLL +GCTOA: PUSH BC + LD BC,255 ; C=CONSTANT (255) FOR INNER TIMING LOOP +TMOFCT: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START +GCTOB: PUSH BC + LD B,C +GCTOC: PUSH BC + CALL SERST + OR A ; A CHAR AVAILABLE? + JR NZ,GETCHR ; YES, GET OUT OF LOOP + POP BC + DJNZ GCTOC + POP BC + DJNZ GCTOB + POP BC + DJNZ GCTO + SCF ; SET CARRY SIGNALS + RET ; TIMEOUT OCCURRED +GETCHR: POP BC + POP BC + POP BC +GETCHRX:CALL SERIN ; GET THE CHARACTER + OR A ; CLEAR CARRY + RET ; SIGNALS SUCCESS + +TXT_PKNUMERR .TEXT "\r\nPacket Number Error$" +TXT_TMOUTERR .TEXT "\r\nTimeout Error$" +TXT_RETRYERR .TEXT "\r\nRetry Error$" +TXT_CANCLERR .TEXT "\r\nTransfer Cancelled$" ; ;__HXLOAD_____________________________________________________________________ ; @@ -1592,6 +1762,7 @@ DSKY_ENTRY: #ENDIF ; ; + .FILL 16,0 ; SET MINIMUM STACK DEPTH SLACK .EQU (MON_END - $) .FILL SLACK,00H ; From 5b501eb9565e091e7a20625fa1cff02bf861b44c Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 00:17:12 +0800 Subject: [PATCH 2/8] Update dbgmon.asm Initial release for consideration. Not extensively tested. Proof of concept --- Source/HBIOS/dbgmon.asm | 45 ++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index 4f6e5b9c..e6573ffb 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -65,6 +65,7 @@ UART_ENTRY: ; P XXXX - PROGRAM RAM STARTING AT XXXX, PROMPT FOR VALUES ; R XXXX - RUN A PROGRAM AT ADDRESS XXXX ; S XX - SET ACTIVE BANK TO XX +; T xxxx - X-MODEM TRANSFER TO MEMORY LOCATION XXXX ; X - EXIT MONITOR ; ;__COMMAND_PARSE______________________________________________________________ @@ -330,11 +331,9 @@ 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 -XMSAVE: .EQU 0200H ; PKTNU .DB 0 ; CALCULATED PACKET NUMBER PKTNU1C .DB 0 ; CALCULATED PACKET NUMBER COMPLEMENT -; RETRYC .DB 0 ; RETRY COUNT PACKET: .DB 0 ; START OF HEADER (SOH) @@ -343,7 +342,18 @@ PACKET: .DB 0 ; START OF HEADER (SOH) .FILL 128,0 ; 128 BYTES OF DATA .DB 0 ; CHECKSUM ; -XMLOAD: LD BC,$F8F0 ; GET CPU SPEED +XMLOAD: CALL WORDPARM ; GET STARTING LOCATION + JP C,ERR ; HANDLE SYNTAX ERRORS + PUSH DE ; SAVE VALUE + CALL NONBLANK ; LOOK FOR EXTRANEOUS PARAMETERS + CP 0 ; TEST FOR TERMINATING NULL + JP NZ,ERR ; ERROR IF NOT TERMINATING NULL +; + LD HL,TXT_READY ; READY FOR + CALL PRTSTR ; TRANSFER + CALL NEWLINE +; + LD BC,$F8F0 ; GET CPU SPEED RST 08 ; AND MULTIPLY LD A,L ; BY 4 PUSH AF @@ -357,21 +367,21 @@ XMLOAD: LD BC,$F8F0 ; GET CPU SPEED LD A,255-1 ; ALSO STORE THE 1-COMPLEMENT OF IT LD (PKTNU1C),A ; - LD DE,XMSAVE ; POINT TO WHERE TO SAVE FILE + POP DE ; POINT TO WHERE TO SAVE FILE ; GETNP: LD HL,RETRYC ; WE RETRY 20 TIMES BEFORE GIVING UP LD (HL),20 ; NPLOOP: LD B,6 ; 6 SECONDS OF TIMEOUT BEFORE EACH NEW BLOCK - CALL GCT0 + CALL GCTO JP NC,NOTOUT ; NO TIMEOUT ? ; DEC (HL) ; REACHED MAX NUMBER OF RETRIES? JP Z,FAILRT ; YES, PRINT MESSAGE AND EXIT ; - LD C,NAK ; SEND A NAK TO THE UPLOADER - CALL SEROUT - JR NPLOOP + LD A,NAK ; SEND A NAK TO THE UPLOADER + CALL COUT + JR NPLOOP ; GET NEXT PACKET ; NOTOUT: CP EOT ; DID UPLOADER SAY WE'RE FINISHED? JP Z,XMDONE ; YES, THEN WE'RE DONE @@ -380,7 +390,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 + LD HL,PACKET+1 ; SKIP SAVING SOH ; CALL GCTO1 ; WAIT ONE SECOND FOR A CHARACTER LD (HL),A ; SHOULD BE PACKET NUMBER @@ -428,10 +438,12 @@ CSLOOP: ADD A,(HL) ; JUST ADD UP THE BYTES INC HL DEC (HL) ; - LD C,ACK ; TELL UPLOADER THAT WE'RE HAPPY WITH WITH - CALL SEROUT ; PACKET AND GO BACK AND FETCH SOME MORE + LD A,ACK ; TELL UPLOADER THAT WE'RE HAPPY WITH WITH + CALL COUT ; PACKET AND GO BACK AND FETCH SOME MORE JP GETNP ; +FAILRT: LD HL,TXT_RETRYERR ; FAILED ON RETRY + JR XMERR FAILCN: LD HL,TXT_CANCLERR ; TRANSFER CANCELLED JR XMERR FAILCS: LD HL,TXT_CKSUMERR ; CHECKSUM ERROR @@ -441,8 +453,8 @@ FAILPN: LD HL,TXT_PKNUMERR ; PACKET NUMBER ERROR FAILTO: LD HL,TXT_TMOUTERR ; TIMEOUT ERROR JR XMERR ; -XMDONE: LD C,ACK ; TELL REMOTE - CALL SEROUT ; WE'RE DONE +XMDONE: LD A,ACK ; TELL REMOTE + CALL COUT ; WE'RE DONE LD HL,TXT_LOADED ; TELL USER XMERR: CALL PRTSTR ; WE'RE DONE JP SERIALCMDLOOP ; BACK TO MENU @@ -455,7 +467,7 @@ XMERR: CALL PRTSTR ; WE'RE DONE ; 10MHZ 20 SECONDS TMOFCT = 39 ; GCTO1: LD B,1 ; WAIT 1 SECOND FOR SERIAL INPUT -GCTO: CALL SERST ; IF THERE IS A +GCTO: CALL CST ; IF THERE IS A OR A ; CHARACTER AVAILABLE JR NZ,GETCHRX ; EXIT NOW OTHERWISE POLL GCTOA: PUSH BC @@ -464,7 +476,7 @@ TMOFCT: .EQU $-1 ; B=SPEED FACTOR WHICH GETS UPDATED AT START GCTOB: PUSH BC LD B,C GCTOC: PUSH BC - CALL SERST + CALL CST OR A ; A CHAR AVAILABLE? JR NZ,GETCHR ; YES, GET OUT OF LOOP POP BC @@ -478,7 +490,7 @@ GCTOC: PUSH BC GETCHR: POP BC POP BC POP BC -GETCHRX:CALL SERIN ; GET THE CHARACTER +GETCHRX:CALL CIN ; GET THE CHARACTER OR A ; CLEAR CARRY RET ; SIGNALS SUCCESS @@ -1188,6 +1200,7 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" .TEXT "\r\nR xxxx [[yy] [zzzz]] - Run code at address xxxx" .TEXT "\r\n Pass yy and zzzz to register A and BC" .TEXT "\r\nS xx - Set bank to xx" + .TEXT "\r\nT xxxx - X-modem transfer to memory location xxxx" .TEXT "\r\nX - Exit monitor" .TEXT "$" ; From 62e2f41100a66696fc312a0931c28f922591a60b Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 22:35:19 +0800 Subject: [PATCH 3/8] Prep for MBC DMA support --- Source/HBIOS/dma.asm | 49 ++++++++++++++++++++++++++++++++------------ Source/HBIOS/std.asm | 1 + 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/Source/HBIOS/dma.asm b/Source/HBIOS/dma.asm index df255434..e8cf8153 100644 --- a/Source/HBIOS/dma.asm +++ b/Source/HBIOS/dma.asm @@ -1,11 +1,7 @@ ;================================================================================================== -; Z80 DMA DRIVER FOR ECB-DMA +; Z80 DMA DRIVER ;================================================================================================== ; -; DUE TO LOW CLOCK SPEED CONTRAINTS OF Z80 DMA CHIP, THE HALF CLOCK FACILITY -; IS USED DURING DMA PROGRAMMING AND CONTINUOUS BLOCK TRANSFERS. -; TESTING CONDUCTED ON A SBC-V2-005 @ 10Mhz -; DMA_CONTINUOUS .equ %10111101 ; + Pulse DMA_BYTE .equ %10011101 ; + Pulse DMA_BURST .equ %11011101 ; + Pulse @@ -26,7 +22,19 @@ DMA_RESET .equ $c3 ;DMA_ENABLE_AFTER_RETI .equ $b7 ;DMA_REINIT_STATUS_BYTE .equ $8b ; -DMA_FBACK .equ TRUE +DMA_FBACK .equ TRUE ; ALLOW FALLBACK TO SOFTWARE +DMA_USEHS .equ TRUE ; USE CLOCK DIVIDER +; +#IF (DMAMODE=DMAMODE_MBC) +DMA_RDY .EQU %00000000 +DMA_FORCE .EQU 1 +;DMA_USEHS .SET FALSE +#ENDIF +#IF (DMAMODE=DMAMODE_ECB) +DMA_RDY .EQU %00001000 +DMA_FORCE .EQU 0 +DMA_USEHS .SET TRUE +#ENDIF ; ;================================================================================================== ; DMA INITIALIZATION CODE @@ -38,12 +46,14 @@ DMA_INIT: LD A, DMABASE CALL PRTHEXBYTE ; - xor a + LD A,DMA_FORCE out (DMABASE+1),a ; force ready off ; +#IF (DMA_USEHS) ld a,(HB_RTCVAL) or %00001000 ; half out (RTCIO),a ; clock +#ENDIF ; call DMAProbe ; do we have a dma? jr nz,DMA_NOTFOUND @@ -58,11 +68,13 @@ DMA_INIT: xor a ; set status ; DMA_EXIT: +#IF (DMA_USEHS) push af ld a,(HB_RTCVAL) and %11110111 ; full out (RTCIO),a ; clock pop af +#ENDIF ret ; DMA_NOTFOUND: @@ -132,7 +144,7 @@ DMACode ;.db DMA_DISABLE ; R6-Command Disable DMA .dw 0 ; R4-Port B, Destination address .db %00001100 ; R4-Pulse byte follows, Pulse generated .db 0 ; R4-Pulse offset - .db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH + .db %10010010+DMA_RDY; R5-Stop on end of block, ce/wait multiplexed, READY active config .db DMA_LOAD ; R6-Command Load ; .db DMA_FORCE_READY ; R6-Command Force ready ; .db DMA_ENABLE ; R6-Command Enable DMA @@ -151,9 +163,11 @@ DMALDIR: ld b,DMACopy_Len ; dma command ld c,DMABASE ; block ; +#IF (DMA_USEHS) ld a,(HB_RTCVAL) or %00001000 ; half out (RTCIO),a ; clock +#ENDIF di otir ; load and execute dma ei @@ -163,12 +177,13 @@ DMALDIR: in a,(DMABASE) ; set non-zero and %00111011 ; if failed sub %00011011 - +#IF (DMA_USEHS) push af ld a,(HB_RTCVAL) and %11110111 ; full out (RTCIO),a ; clock pop af +#ENDIF ret ; DMACopy ;.db DMA_DISABLE ; R6-Command Disable DMA @@ -182,7 +197,7 @@ DMALength .dw 0 ; R0-Block length DMADest .dw 0 ; R4-Port B, Destination address .db %00001100 ; R4-Pulse byte follows, Pulse generated .db 0 ; R4-Pulse offset -; .db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH +; .db %10010010+DMA_RDY;R5-Stop on end of block, ce/wait multiplexed, READY active config .db DMA_LOAD ; R6-Command Load .db DMA_FORCE_READY ; R6-Command Force ready .db DMA_ENABLE ; R6-Command Enable DMA @@ -201,9 +216,11 @@ DMAOTIR: ld b,DMAOut_Len ; dma command ld c,DMABASE ; block ; +#IF (DMA_USEHS) ld a,(HB_RTCVAL) or %00001000 ; half out (RTCIO),a ; clock +#ENDIF di otir ; load and execute dma ei @@ -214,11 +231,13 @@ DMAOTIR: and %00111011 ; if failed sub %00011011 ; +#IF (DMA_USEHS) push af ld a,(HB_RTCVAL) and %11110111 ; full out (RTCIO),a ; clock pop af +#ENDIF ret ; DMAOutCode ;.db DMA_DISABLE ; R6-Command Disable DMA @@ -235,7 +254,7 @@ DMAOutDest .db 0 ; R4-Port B, Destination port ; .db %00001100 ; R4-Pulse byte follows, Pulse generated ; .db 0 ; R4-Pulse offset - .db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH + .db %10010010+DMA_RDY;R5-Stop on end of block, ce/wait multiplexed, READY active config .db DMA_LOAD ; R6-Command Load .db %00000101 ; R0-Port A is Source .db DMA_LOAD ; R6-Command Load @@ -256,9 +275,11 @@ DMAINIR: ld b,DMAIn_Len ; dma command ld c,DMABASE ; block ; +#IF (DMA_USEHS) ld a,(HB_RTCVAL) or %00001000 ; half out (RTCIO),a ; clock +#ENDIF di otir ; load and execute dma ei @@ -269,11 +290,13 @@ DMAINIR: and %00111011 ; if failed sub %00011011 ; +#IF (DMA_USEHS) push af ld a,(HB_RTCVAL) and %11110111 ; full out (RTCIO),a ; clock pop af +#ENDIF ret ; DMAInCode ;.db DMA_DISABLE ; R6-Command Disable DMA @@ -287,7 +310,7 @@ DMAInLength .dw 0 ; R0-Block length DMAInSource .db 0 ; R4-Port B, Destination port ; .db %00001100 ; R4-Pulse byte follows, Pulse generated ; .db 0 ; R4-Pulse offset - .db %10011010 ; R5-Stop on end of block, ce/wait multiplexed, READY active HIGH + .db %10010010+DMA_RDY;R5-Stop on end of block, ce/wait multiplexed, READY active config .db DMA_LOAD ; R6-Command Load .db DMA_FORCE_READY ; R6-Command Force ready .db DMA_ENABLE ; R6-Command Enable DMA @@ -295,7 +318,7 @@ DMAInSource .db 0 ; R4-Port B, Destination port DMAIn_Len .equ $-DMAInCode ; ;================================================================================================== -; DEBUG - READ START, DESTINATION AN COUNT REGISTERS +; DEBUG - READ START, DESTINATION AND COUNT REGISTERS ;================================================================================================== ; #IF (0) diff --git a/Source/HBIOS/std.asm b/Source/HBIOS/std.asm index 5c2ab4f7..c40f87de 100644 --- a/Source/HBIOS/std.asm +++ b/Source/HBIOS/std.asm @@ -225,6 +225,7 @@ DMAMODE_ECB .EQU 1 ; ECB-DMA WOLFGANG KABATZKE'S Z80 DMA ECB BOARD DMAMODE_Z180 .EQU 2 ; Z180 INTEGRATED DMA DMAMODE_Z280 .EQU 3 ; Z280 INTEGRATED DMA DMAMODE_RC .EQU 4 ; RC2014 Z80 DMA +DMAMODE_MBC .EQU 5 ; MBC ; ; SERIAL DEVICE CONFIGURATION CONSTANTS ; From 5c44fcd88e67b3377beec949fb16ae2aa91ce3f8 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 22:38:48 +0800 Subject: [PATCH 4/8] xmodem + dump changes x-modem transfer only included if dsky not enabled. dump will now dump 100h bytes if no end address entered. --- Source/HBIOS/dbgmon.asm | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/Source/HBIOS/dbgmon.asm b/Source/HBIOS/dbgmon.asm index e6573ffb..72bd561f 100644 --- a/Source/HBIOS/dbgmon.asm +++ b/Source/HBIOS/dbgmon.asm @@ -33,6 +33,9 @@ BUFLEN .EQU 40 ; INPUT LINE LENGTH ; #IF DSKYENABLE #DEFINE USEDELAY +ENA_XM .SET FALSE ; NO ROOM FOR BOTH DSKY+XMODEM +#ELSE +ENA_XM .EQU TRUE ; INCLUDE XMODEM IF SPACE AVAILABLE #ENDIF ; #INCLUDE "util.asm" @@ -100,8 +103,10 @@ SERIALCMDLOOP: JP Z,PROGRM ; IF YES GO PROGRAM ROUTINE CP 'O' ; IS IT AN "O" (Y/N) JP Z,POUT ; PORT OUTPUT +#IF (ENA_XM) CP 'T' ; IS IT A "T" (Y/N) JP Z,XMLOAD ; XMODEM TRANSFER +#ENDIF CP 'L' ; IS IT A "L" (Y/N) JP Z,HXLOAD ; INTEL HEX FORMAT LOAD DATA CP 'I' ; IS IT AN "I" (Y/N) @@ -319,7 +324,7 @@ KLOP1: JP Z,SERIALCMDLOOP ; IF SO, ALL DONE CALL COUT ; OUTPUT KEY TO SCREEN JR KLOP1 ; LOOP - +#IF (ENA_XM) ; ;__XMLOAD_____________________________________________________________________ ; @@ -498,6 +503,7 @@ TXT_PKNUMERR .TEXT "\r\nPacket Number Error$" TXT_TMOUTERR .TEXT "\r\nTimeout Error$" TXT_RETRYERR .TEXT "\r\nRetry Error$" TXT_CANCLERR .TEXT "\r\nTransfer Cancelled$" +#ENDIF ; ;__HXLOAD_____________________________________________________________________ ; @@ -608,7 +614,8 @@ PIN: ;__DUMPMEM____________________________________________________________________ ; ; PRINT A MEMORY DUMP, USER OPTION "D" -; SYNTAX: D +; SYNTAX: D [END ADR] +; IF NO END ADDRESS, DUMP 100H BYTES ;_____________________________________________________________________________ ; DUMPMEM: @@ -616,12 +623,14 @@ DUMPMEM: JP C,ERR ; HANDLE ERRORS PUSH DE ; SAVE IT CALL WORDPARM ; GET END ADDRESS - JP C,ERR ; HANDLE ERRORS - PUSH DE ; SAVE IT - - POP DE ; DE := END ADDRESS - POP HL ; HL := START ADDRESS - + POP HL ; RECOVER START + JR NC,GDATA ; +; + LD D,H ; DEFAULT TO 100H + LD E,L ; BYTES IF NO + INC D ; END ADDRESS + DEC DE ; IS GIVEN +; GDATA: INC DE ; BUMP DE FOR LATER COMPARE CALL NEWLINE ; @@ -1188,7 +1197,7 @@ TXT_BADNUM .TEXT " *Invalid Hex Byte Value*$" TXT_MINIHELP .TEXT " (? for Help)$" TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" .TEXT "\r\nB - Boot system" - .TEXT "\r\nD xxxx yyyy - Dump memory from xxxx to yyyy" + .TEXT "\r\nD xxxx [yyyy] - Dump memory from xxxx to yyyy" .TEXT "\r\nF xxxx yyyy zz - Fill memory from xxxx to yyyy with zz" .TEXT "\r\nH - Halt system" .TEXT "\r\nI xxxx - Input from port xxxx" @@ -1200,7 +1209,9 @@ TXT_HELP .TEXT "\r\nMonitor Commands (all values in hex):" .TEXT "\r\nR xxxx [[yy] [zzzz]] - Run code at address xxxx" .TEXT "\r\n Pass yy and zzzz to register A and BC" .TEXT "\r\nS xx - Set bank to xx" +#IF (ENA_XM) .TEXT "\r\nT xxxx - X-modem transfer to memory location xxxx" +#ENDIF .TEXT "\r\nX - Exit monitor" .TEXT "$" ; From f2664d31b0767d90d5953a9e2c9d53dc685e9f0b Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 22:56:24 +0800 Subject: [PATCH 5/8] Update cfg_mbc.asm --- Source/HBIOS/cfg_mbc.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/HBIOS/cfg_mbc.asm b/Source/HBIOS/cfg_mbc.asm index c5d10367..7fcd75b5 100644 --- a/Source/HBIOS/cfg_mbc.asm +++ b/Source/HBIOS/cfg_mbc.asm @@ -232,4 +232,4 @@ SPKENABLE .EQU TRUE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_MBC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) From 217be93785999ab2d09717873fdccef45cb3a62e Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 23:04:11 +0800 Subject: [PATCH 6/8] config updates for mbc dma --- Source/HBIOS/cfg_dyno.asm | 2 +- Source/HBIOS/cfg_ezz80.asm | 2 +- Source/HBIOS/cfg_master.asm | 2 +- Source/HBIOS/cfg_mk4.asm | 2 +- Source/HBIOS/cfg_n8.asm | 2 +- Source/HBIOS/cfg_rcz180.asm | 2 +- Source/HBIOS/cfg_rcz280.asm | 2 +- Source/HBIOS/cfg_rcz80.asm | 2 +- Source/HBIOS/cfg_sbc.asm | 2 +- Source/HBIOS/cfg_scz180.asm | 2 +- Source/HBIOS/cfg_zeta.asm | 2 +- Source/HBIOS/cfg_zeta2.asm | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Source/HBIOS/cfg_dyno.asm b/Source/HBIOS/cfg_dyno.asm index 76854aa0..ae48766a 100644 --- a/Source/HBIOS/cfg_dyno.asm +++ b/Source/HBIOS/cfg_dyno.asm @@ -193,4 +193,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_ezz80.asm b/Source/HBIOS/cfg_ezz80.asm index d5c05616..1cf8073f 100644 --- a/Source/HBIOS/cfg_ezz80.asm +++ b/Source/HBIOS/cfg_ezz80.asm @@ -228,4 +228,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_master.asm b/Source/HBIOS/cfg_master.asm index 9aa9f50d..e0571ca0 100644 --- a/Source/HBIOS/cfg_master.asm +++ b/Source/HBIOS/cfg_master.asm @@ -300,4 +300,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_mk4.asm b/Source/HBIOS/cfg_mk4.asm index 2561adfb..17a76d84 100644 --- a/Source/HBIOS/cfg_mk4.asm +++ b/Source/HBIOS/cfg_mk4.asm @@ -233,4 +233,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_n8.asm b/Source/HBIOS/cfg_n8.asm index 596e65a1..0f57a588 100644 --- a/Source/HBIOS/cfg_n8.asm +++ b/Source/HBIOS/cfg_n8.asm @@ -231,4 +231,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_rcz180.asm b/Source/HBIOS/cfg_rcz180.asm index 8ba39dbb..27f08b6f 100644 --- a/Source/HBIOS/cfg_rcz180.asm +++ b/Source/HBIOS/cfg_rcz180.asm @@ -241,4 +241,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_rcz280.asm b/Source/HBIOS/cfg_rcz280.asm index 0f212d6b..89d8b440 100644 --- a/Source/HBIOS/cfg_rcz280.asm +++ b/Source/HBIOS/cfg_rcz280.asm @@ -257,4 +257,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_Z280 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_rcz80.asm b/Source/HBIOS/cfg_rcz80.asm index 0498e4f2..ee362ff8 100644 --- a/Source/HBIOS/cfg_rcz80.asm +++ b/Source/HBIOS/cfg_rcz80.asm @@ -246,4 +246,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_RC ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_sbc.asm b/Source/HBIOS/cfg_sbc.asm index 5e21ac26..83d5b9cc 100644 --- a/Source/HBIOS/cfg_sbc.asm +++ b/Source/HBIOS/cfg_sbc.asm @@ -232,4 +232,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_ECB ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_scz180.asm b/Source/HBIOS/cfg_scz180.asm index 72c20acc..ebcb045a 100644 --- a/Source/HBIOS/cfg_scz180.asm +++ b/Source/HBIOS/cfg_scz180.asm @@ -236,4 +236,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_Z180 ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_zeta.asm b/Source/HBIOS/cfg_zeta.asm index 8b1aa2af..7a84a8e9 100644 --- a/Source/HBIOS/cfg_zeta.asm +++ b/Source/HBIOS/cfg_zeta.asm @@ -168,4 +168,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) diff --git a/Source/HBIOS/cfg_zeta2.asm b/Source/HBIOS/cfg_zeta2.asm index 7f71ec8a..c595edff 100644 --- a/Source/HBIOS/cfg_zeta2.asm +++ b/Source/HBIOS/cfg_zeta2.asm @@ -180,4 +180,4 @@ SPKENABLE .EQU FALSE ; SPK: ENABLE RTC LATCH IOBIT SOUND DRIVER (SPK.ASM) ; DMAENABLE .EQU FALSE ; DMA: ENABLE DMA DRIVER (DMA.ASM) DMABASE .EQU $E0 ; DMA: DMA BASE ADDRESS -DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC) +DMAMODE .EQU DMAMODE_NONE ; DMA: DMA MODE (NONE|ECB|Z180|Z280|RC|MBC) From 443c1cf2330859e29dce4d5b311648eacb504061 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 23:45:38 +0800 Subject: [PATCH 7/8] Update uf.asm --- Source/HBIOS/uf.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/HBIOS/uf.asm b/Source/HBIOS/uf.asm index c0f04c63..049167c0 100644 --- a/Source/HBIOS/uf.asm +++ b/Source/HBIOS/uf.asm @@ -64,7 +64,7 @@ UF_INIT: OR A ; REQUIRES TERMINAL PROGRAM RET NZ ; TO HAVE INITIALIZED PORT CALL PRTSTRD ; ON PC SIDE. - .TEXT " No connection$" + .TEXT " NO CONNECTION$" RET ; ; INPUT A CHARACTER AND RETURN IT IN E From a7a0168655e81c5766590061808d34bda93bfce8 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 12 Sep 2021 01:51:31 +0800 Subject: [PATCH 8/8] Update dbgmon.asm Eliminate need for 128 byte packet buffer --- Source/HBIOS/dbgmon.asm | 63 ++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 33 deletions(-) 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)