.org $c000 sysinit: JSR viainit JSR videoinit JSR videodisplay system: JMP kbinput1 viainit: LDA #$FF STA $B002 ; set DDRB of 65C22#1 to all output LDA #$00 STA $B003 ; set DDRA of 65C22#1 to all input LDA #$00 STA $B012 ; set DDRB of 65C22#2 to all input LDA #$00 STA $B013 ; set DDRA of 65C22#2 to all input RTS videoinit: LDA #$00 STA $B000 ; set all control bits of MC6847 to low LDA #$00 STA $9FFF ; set video address to zero RTS videodisplay: 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 $9FFF ; load value of video counter to X INX ; increment video counter STX $9FFF ; store X to video counter RTS kbinput1: LDA $B02A CMP #$15 ; compare keyboard input to scan code BEQ q CMP #$1D BEQ w CMP #$24 BEQ e CMP #$2D BEQ r CMP #$2C JMP kbinput2 q: LDA #$10 LDX $9FFF STA $8000,X jsr videocount RTS w: LDA #$16 LDX $9FFF STA $8000,X jsr videocount RTS e: LDA #$04 LDX $9FFF STA $8000,X jsr videocount RTS r: LDA #$11 LDX $9FFF STA $8000,X jsr videocount RTS kbinput2: CMP #$2C BEQ t CMP #$35 BEQ y CMP #$3C BEQ u CMP #$43 BEQ i JMP kbinput3 t: LDA #$13 LDX $9FFF STA $8000,X jsr videocount RTS y: LDA #$18 LDX $9FFF STA $8000,X jsr videocount RTS u: LDA #$14 LDX $9FFF STA $8000,X jsr videocount RTS i: LDA #$08 LDX $9FFF STA $8000,X jsr videocount RTS kbinput3: CMP #$44 BEQ o CMP #$4D BEQ p CMP #$1C BEQ a CMP #$1B BEQ s JMP kbinput4 o: LDA #$0E LDX $9FFF STA $8000,X jsr videocount RTS p: LDA #$0F LDX $9FFF STA $8000,X jsr videocount RTS a: LDA #$00 LDX $9FFF STA $8000,X jsr videocount RTS s: LDA #$12 LDX $9FFF STA $8000,X jsr videocount RTS kbinput4: CMP #$23 BEQ d CMP #$2B BEQ f CMP #$34 BEQ g CMP #$33 BEQ h JMP kbinput5 d: LDA #$03 LDX $9FFF STA $8000,X jsr videocount RTS f: LDA #$05 LDX $9FFF STA $8000,X jsr videocount RTS g: LDA #$06 LDX $9FFF STA $8000,X jsr videocount RTS h: LDA #$07 LDX $9FFF STA $8000,X jsr videocount RTS kbinput5: CMP #$3B BEQ j CMP #$42 BEQ k CMP #$4B BEQ l CMP #$1A BEQ z JMP kbinput6 j: LDA #$09 LDX $9FFF STA $8000,X jsr videocount RTS k: LDA #$0A LDX $9FFF STA $8000,X jsr videocount RTS l: LDA #$0B LDX $9FFF STA $8000,X jsr videocount RTS z: LDA #$19 LDX $9FFF STA $8000,X jsr videocount RTS kbinput6: CMP #$22 BEQ x CMP #$21 BEQ c CMP #$2A BEQ v CMP #$32 BEQ b JMP kbinput7 x: LDA #$17 LDX $9FFF STA $8000,X jsr videocount RTS c: LDA #$02 LDX $9FFF STA $8000,X jsr videocount RTS v: LDA #$15 LDX $9FFF STA $8000,X jsr videocount RTS b: LDA #$01 LDX $9FFF STA $8000,X jsr videocount RTS kbinput7: CMP #$31 BEQ n CMP #$3A BEQ m JMP system n: LDA #$0D LDX $9FFF STA $8000,X jsr videocount RTS m: LDA #$0C LDX $9FFF STA $8000,X jsr videocount RTS .org $fffc .word $c000