Browse Source

Update dbgmon.asm

Initial release for consideration. Not extensively tested. Proof of concept
pull/243/head
b1ackmai1er 4 years ago
parent
commit
5b501eb956
  1. 45
      Source/HBIOS/dbgmon.asm

45
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 "$"
;

Loading…
Cancel
Save