.org $c000 VIDEO = $B000 JOYSTICK = $B001 COUNTER = $9FFF DDRB1 = $B002 DDRA1 = $B003 PCR1 = $B00C IFR1 = $B00D IER1 = $B00E KBIN = $B010 KBOUT = $B011 DDRB2 = $B012 DDRA2 = $B013 PCR2 = $B01C IFR2 = $B01D IER2 = $B01E LCR = $B023 FCR = $B022 USTAT = $B025 sysinit: JSR viainit JSR videoinit JSR irqinit JSR videotest JSR uartinit JMP system system: JSR kbinput viainit: LDA #$FF STA DDRB1 ; Output to MC6847 LDA #$00 STA DDRA1 ; Input from joystick LDA #$00 STA DDRB2 ; Input from keyboard LDA #$FF STA DDRA2 ; Output to keyboard LDA #$FF STA KBOUT RTS videoinit: LDA #$00 STA VIDEO ; set all control bits of MC6847 to low LDA #$00 STA COUNTER ; set video counter to zero RTS irqinit: LDA #%10000010 ; Enable interrupt on CA1 STA IER1 LDA #%00000000 ; Set CA1 Negative Active Edge STA PCR1 LDA #%10010000 ; Enable interrupt on CB1 STA IER2 LDA #%00010000 ; Set CB1 Positive Active Edge STA PCR2 RTS uartinit: LDA #%10000011 ; enable divisor latch, send break off, no parity, 1 stop bit, 8 bit data STA LCR ; store to line controller register LDA #$60 ; divisor as decimal 96 to set 1200 baud STA $B020 ; LSB of divisor latch LDA #$00 STA $B021 ; MSB of divisor latch LDA #%00000011 ; disable divisor latch STA LCR LDA #%11100000 ; enable FIFO, reset everything, FIFO trigger level 1 byte (may need adjusting) STA FCR RTS uartstat: LDA USTAT TXS LDX COUNTER STA $8000,X TSX RTS videotest: LDA #$13 STA $8000 ; print T JSR videocount LDA #$04 STA $8001 ; print E JSR videocount LDA #$12 STA $8002 ; print S JSR videocount LDA #$13 STA $8003 ; print T JSR videocount RTS videocount: LDX COUNTER ; load value of video counter to X INX ; increment video counter STX COUNTER ; store X to video counter RTS kbinput: LDA #%00000001 JSR keysub BNE kb1 LDA #%00000010 JSR keysub BNE kb2 LDA #%00000100 JSR keysub BNE kb3 LDA #%00001000 JSR keysub BNE kb4 LDA #%00010000 JSR keysub BNE kb5 LDA #%00100000 JSR keysub BNE kb6 LDA #%01000000 JSR keysub BNE kb7 LDA #%10000000 JSR keysub BNE kb8 PLA RTI kb1: kb2: kb3: kb4: kb5: kb6: kb7: kb8: keysub: STA KBOUT LDA KBIN RTS nmi: RTI irq: PHA LDA IFR1 CMP #%10000010 BEQ YAMAHA LDA IFR2 CMP #%10010000 BEQ kbinput PLA RTI .org $fffa .word nmi .word sysinit .word irq