Yes, it is the key press immediately following the crash that sticks the IRQ line low.
Here is my complete label space.
Code:
;*************
;UART Labels *
;*************
;COM1. Main UART
COM1_DAT = $5000
COM1_STA = COM1_DAT+1
COM1_CON = COM1_DAT+3
COM1_COM = COM1_DAT+2
;************************
;Display port VIA Labels*
;************************
VIA_1PORTB = $6000
VIA_1PORTA = VIA_1PORTB+1
VIA_1DDRB = VIA_1PORTB+2
VIA_1DDRA = VIA_1PORTB+3
;******************
;0 page variables *
;******************
STRING_PTR .DS $02 ;pointer to current output message string
STRING_INDEX .DS $01 ;index into input buffer
LINE_CNT .DS $01 ;clear screen line count
ARG_INDEX .DS $03 ;indices into command line string to arguments
ARG_CNT .DS $01 ;number of command line arguments
CMD_INDEX .DS $02 ;index into command string list
SELECTED_CMD .DS $02 ;pointer to selected command routine
CMDLN_ERROR .DS $01 ;command line error condition
ARG_TEMP .DS $04 ;holds the 4 bit decoded character values of input arguments
ARG_VALUE .DS $02 ;the final 16 bit numeric value of the arguments
ADR_START .DS $02 ;holds lower limit of commandline memory ops.
ADR_END .DS $02 ;holds upper limit of commandline memory ops.
HEX_INPUT .DS $02
HEX_HIGH .DS $01 ;holds ascii representation of high nibble of displayed hex byte
HEX_LOW .DS $01 ;holds ascii representation of low nibble of displayed hex byte
HEX_DSPLY .DS $28 ;holds strings of hex/ascii data to be displayed
SCRN_BF_TOP .DS $02 ;top of ring buffer that contains screen contents. Physical top of screen.
SCRN_BF_CUR .DS $02 ;pointer to current cursor position in display buffer
ROW .DS $01 ;current cursor row position
COLUMN .DS $01 ;current cursor column position
CHARACTER .DS $01 ;current character to be displayed
BUG_LITE .DS $01 ;debug status light on VIA_1 PA0
READ_FLAG .DS $01
;***************************
;memory starting at page 2 *
;***************************
.ORG $0200
SCRN_BUF .DS $C80 ;Screen buffer. 3,200 bytes for an 80*40 character display.
;Placed at start of page for ease of inderect indexing
SCRN_BUF_ENDL = $80 ;C80 is 3,200 for a 3,200 byte 80*40 character screen buffer
SCRN_BUF_ENDH = $0E
COM1_RXBUF .DS $100 ;UART input buffer
;**********************
;ROM data starts here *
;**********************
.ORG $8000
;*****************
;command strings *
;*****************
commands:
cmd_empty: .BYTE $00 ;empty:user pressed enter with no characters
cmd_write: .BYTE "write", $00 ;command to write to memory
cmd_read: .BYTE "read", $00 ;command to read from memory
cmd_test: .BYTE "test", $00 ;command for system self-test
cmd_clr: .BYTE "clr", $00 ;command to clear screen
cmd_list_end: .BYTE $FF ;marker for end of list
;******************************
; pointers to command strings *
;******************************
cmd_indices:
empty_index: .WORD cmd_empty
write_index: .WORD cmd_write
read_index: .WORD cmd_read
test_index: .WORD cmd_test
clr_index .WORD cmd_clr
;******************************
;pointers to command routines *
;******************************
cmd_routines:
empty_rtn_ptr: .WORD empty_rtn
write_rtn_ptr: .WORD write_rtn
read_rtn_ptr: .WORD read_rtn
test_rtn_ptr: .WORD test_rtn
clr_rtn_ptr .WORD clr_rtn
no_cmd_rtn_ptr: .WORD no_cmd_rtn
;************
;UI strings *
;************
strings:
prompt: .BYTE $0D, $0A, $0A, "WOPRjr:" ,$00 ;commandline prompt
empty_msg .BYTE $0D, $0A, $00 ;empty string
message: .BYTE $0D, $0A, "You entered: ", $00 ;input response message
write_msg: .BYTE $0D, $0A, "writing", $00 ;temp write message
read_msg: .BYTE $0D, $0A, $0A, "No arguments entered." ;line 1 of default read message
read_msg2: .BYTE $0D, $0A,"Enter a single HEX address, or 2 addresses as a range", $00 ;line 2
test_msg: .BYTE $0D, $0A, "testing", $00
clr_msg: .BYTE $0D, $0A, "clearing", $00 ;temp clear screen message
nl_cr: .BYTE $0D, $0A, $00 ;newline, carriage return
no_cmd_msg: .BYTE $0D, $0A, $0A, "Unknown command", $00 ;default message for unknown string
bad_args_msg: .BYTE $0D, $0A, $0A, "Bad, or too many arguments", $00 ;wrong or too many arguments