controller_queue.zip
These are the core routines that implement the queue:
Code: Select all
; Adds byte A to queue
queue_press:
ldx write_pos
sta queue,x
dex
bpl :+
ldx #queue_size
: stx write_pos
cpx read_pos
beq queue_overflowed
rts
; Removes byte from queue into A, or 0 if queue is empty
read_queue:
lda #0
ldx read_pos
cpx write_pos
beq @empty
lda queue,x
dex
bpl :+
ldx #queue_size
: stx read_pos
@empty:
cmp #0
rts