From 5b501eb9565e091e7a20625fa1cff02bf861b44c Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 11 Sep 2021 00:17:12 +0800 Subject: [PATCH] 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 "$" ;