10 PRINT"{CLS}PRESS ANY OF {RVS}W{RVSOFF},{RVS}A{RVSOFF},{RVS}S{RVSOFF},{RVS}D{RVSOFF},SPACE." 20 PRINT"{DWN}---WSADB" 30 SYS {ASMSTART} ;collect flags for WSAD and SPACE in byte KBD PA = $E810 PB = $E812 VIDEO = $8000 SEI LOOP LDA #0 ;initialize KBD vector STA KBD ;read "W": row 3 col 0 LDA #3 LDX #%00000001 JSR READKEY ;read "S": row 5 col 0 LDA #5 ;X is still %00000001 JSR READKEY ;read "A": row 4 col 0 LDA #4 ;X is still %00000001 JSR READKEY ;read "D": row 4 col 1 LDA #4 LDX #%00000010 JSR READKEY ;read SPACE: row 9 col 2 LDA #9 LDX #%00000100 JSR READKEY ;KBD holds 0-0-0-W-S-A-D-SPACE (active high) ;now dump bits to screen LDY #8 ;8 bits to display DISPBIT LDA #0 ROR KBD ADC #$30 STA VIDEO+119,Y DEY BNE DISPBIT LDA #9 ;check STOP key (row 9 col 4) STA PA LDA PB AND #%00010000 BNE LOOP ;redo, unless STOP pressed CLI RTS READKEY CLC ;clear carry STA PA ;row in A TXA ;col in X AND PB BNE READKEYSL SEC ;set carry, if key is pressed READKEYSL ROL KBD ;shift left with carry now in bit 0 RTS KBD .BYTE 0