;; ;; Read input from the keyboard, and echo to console. ;; IOBASE = $8800 IOSTATUS = IOBASE + 1 IOCMD = IOBASE + 2 IOCTRL = IOBASE + 3 .segment "CODE" .org $C000 START: CLI LDA #$09 STA IOCMD ; Set command status LDA #$1A STA IOCTRL ; 0 stop bits, 8 bit word, 2400 baud ;; ;; Infinite idle loop, waiting for interrupt. ;; IDLE: LDA #$FF TAX IDLE1: DEX BNE IDLE1 JMP IDLE ;; ;; IRQ handler ;; IRQ: LDA IOBASE ; Get the character in the ACIA. PHA ; Save accumulator ECHO1: LDA IOSTATUS ; Read the ACIA status AND #$10 ; Is the tx register empty? BEQ ECHO1 ; No, wait for it to empty PLA ; Otherwise, load saved accumulator, STA IOBASE ; write to output, RTI ; and return ; system vectors .segment "VECTORS" .org $FFFA .word IRQ ; NMI vector .word START ; RESET vector .word IRQ ; IRQ vector