; v_scan 6502 assembler subroutine for
; Optical Character Recognition
; Robin Broad
; This program inputs 16 bits of data from the data stream
; and displays the resulting two bytes on the screen
; Trigger pulse on CA1, data bit on PRA0
; data stored in byte1(bottom of image) and byte 2
;
.OR $0800 program origin
DDRA .EQ $C403 data direction register
DDRB .EQ $C402
PRA .EQ $C401 peripheral register
PRB .EQ $C400
PCR .EQ $C40C peripheral control register
IFR .EQ $C40D interrupt flag register
BYTE1 .EQ $1000 bottom half of image
BYTE2 .EQ $1001 top half of image
PRBYTE .EQ $FDDA prints contents of accumulator A on the screen
CROUT .EQ $FD8E sends a carriage return to the screen
;
START LDA #$01 IFR1 will be set by 0 to 1 transition
STA PCR
LDA #$00 PRA0(data) and PRA1(spare) inputs
STA DDRA
LDA #$FF
STA DDRB B-side all outputs
VSCAN LDA PRA dummy read makes sure that the flag is clear
LDX #$10 data bit counter set to 16
LDA #$02 look for CA1 interrupt flag
WAIT BIT IFR (Z flag is set to zero if they are not the same)
BEQ WAIT wait for the CA1 transition
BTREAD LDA PRA look at the data lines
LSR put the data bit into the carry flag
ROL BYTE2 shift the data into the LHS of the two bytes
ROL BYTE1
DEX decrement counter
BNE BTREAD branch back unril 16 bits have been read in
JSR CROUT carriage return on screen
LDA BYTE1 displays the answer for byte1 on the screen
JSR PRBYTE
LDA BYTE2 diplays byte2 on the screen
JSR PRBYTE
BCC VSCAN repeat the process forever
BCS VSCAN
; Robin Broad: 6502 assembler