 sttl Bad Interrupt Handlers
 pag
*
* Bad interrupt handlers
*

* Report unhandled interrupts

unhand bsr panic
 fcc 'IRQ ',0
unswi bsr panic
 fcc 'SWI ',0
unswi2 bsr panic
 fcc 'SWI2',0
unswi3 bsr panic
 fcc 'SWI3',0
unnmi bsr panic
 fcc 'NMI ',0
unfirq bsr panic
 fcc 'FIRQ',0
 bsr panic
 fcc 'CHPR',0

* Panic processing

panic seti mask ints
 tst scrtrm reset ints
 ldx #panicy point to string
 bsr pdata print it
 puls x get message
 bsr pdata print it
 lds #romstk set rom stack
 jmp montor init rom

 sttl Terminal I/O
 pag

* String display routine

newlin bsr outch output cr
 lda #$a setup line feed
putch bsr outch output it
pdata lda 0,x+ get string character
 beq pdata2 end of string?
 cmpa #$d is it cr?
 beq newlin
 bra putch go output char
pdata2 rts return

* Output a space

outsp pshs a save a
 lda #$20 setup space
 bsr outch output it
 puls a,pc return

* Output a hex byte

hexbyt pshs a save byte
 lsra shift right 4 bits
 lsra
 lsra
 lsra
 bsr hexdig output it
 puls a restore digit

* Output a digit in hex

hexdig anda #$0f mask low bits
 adda #'0 make ascii digit
 cmpa #'9 is it digit?
 bls outch
 adda #7 add letter bias
 bra outch

* Test for an input character

inchck pshs a save a
 lbsr ttyget get terminal state
 lda ttybuf+tt_spd check for character present
 lsla carry = character present
 puls a,pc return

* Input a character with echo

inch pshs b save register
 ldb #O_RQRD request read data
 lbsr fio_msg -- character comes back in A
 puls b restore register
 anda #$7f mask parity
 beq inch ignore nulls
 cmpa #'a is it lower case?
 blo outch
 cmpa #'z
 bhi outch
 suba #$20 make upper case

* Output character routine

outch pshs d save registers
 ldb #O_WRC Set write one character
 lbsr fio_msg send message & wait for response
 puls d,pc return

* Initialize the terminal

tinit ldb #O_CLOSE make sure terminal closed
 lbsr fio_msg
 ldb #O_OPEN open terminal
 lbra fio_msg

raw_mode lbsr ttyget get terminal state
 lda ttybuf+tt_flg set RAW mode
 ora #RAW
 sta ttybuf+tt_flg
 lbra ttyset set new terminal mode

* messages

hello fcb $d
 fcc 'SWTPc UniFLEX Boot ROM 11/18/84, IOP Version ',0
prompt fcb $d
 fcc '%',0
sorry fcc '??',0
panicy fcb $d
 fcc 'Panic -> ',0

*
* ttyget - Get terminal state into "ttybuf"
* ttyset - Set terminal state from "ttybuf"
*
ttyget pshs d,x save registers
 ldb #O_TTYG ttyget command
 bsr fio_msg
 ldx #ttybuf result buffer pointer
 ldb #6 size of data
10 bsr FIFOgeta get data
 sta ,x+ put in buffer
 decb done?
 bne 10b
 puls d,x,pc return

ttyset pshs d,x save registers
 ldx #ttybuf source buffer
 ldb #6
10 lda ,x+ move data to FIFO
 lbsr FIFOputa
 decb
 bne 10b
 ldb #O_TTYS ttyset command
 bsr fio_msg
 puls d,x,pc return

 lib ../fio_sim
