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