10 PRINT"{CLS}PRESS ANY OF {RVS}W{RVSOFF},{RVS}A{RVSOFF},{RVS}S{RVSOFF},{RVS}D{RVSOFF}." 20 PRINT"{DOWN}KEYS DOWN:" 30 SYS {ASMSTART} PA = $E810 PB = $E812 CRB = $E813 VIDEO = $8000 LOOP JSR FETCHKEYS ;check W: row 3 col 0 LDY #0x20 LDA KEYROWS+3 AND #%00000001 BNE OUTW LDY #$97 ;screencode reverse W: $17 + $80 OUTW STY VIDEO+93 ;check A: row 4 col 0 LDY #0x20 LDA KEYROWS+4 AND #%00000001 BNE OUTA LDY #$81 OUTA STY VIDEO+95 ;check S: row 5 col 0 LDY #0x20 LDA KEYROWS+5 AND #%00000001 BNE OUTS LDY #$93 OUTS STY VIDEO+97 ;check D: row 4 col 1 LDY #0x20 LDA KEYROWS+4 AND #%00000010 BNE OUTD LDY #$84 OUTD STY VIDEO+99 ;check STOP key: row 9 col 4 LDA KEYROWS+9 AND #%00010000 BNE LOOP ;redo unless STOP RTS FETCHKEYS SEI ;fetch all key rows and store them at KEYROWS LDA PA ;set up PA for row 0 LDA #$35 ;set up CRB (Control Register B) STA CRB AND #$F0 STA PA LDX #0 READROW LDA PB ;read row STA KEYROWS,X ;store it INX CPX #10 ;10 rows done? BEQ ROWSDONE INC PA ;set up next row BNE READROW ;and loop (unconditionally) ROWSDONE CLI RTS KEYROWS ;store of 10 bytes for 10 key rows (active low) .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .BYTE $FF .END