gameduino/j0/firmware/soundbuffer.fs

34 lines
770 B
Forth

start-microcode soundbuffer
\ Interface:
\ COMM+0 sound read pointer
\ 3F00-3FFF sound buffer
\ This microprogram provides a simple sound sample buffer.
\ It reads 8-bit samples from the buffer at 3F00-3FFF and
\ writes them to the audio sample registers SAMPLE_L and
\ SAMPLE_R.
\ The current buffer read pointer is COMM+0.
h# 3f00 constant BUFFER
[ 125 50 * ] constant CYCLE \ one cycle of 8KHz in clocks
: 1+ d# 1 + ;
: - invert 1+ + ;
: main
d# 0 ( when )
begin
CLOCK c@ over - \ positive means CLOCK has passed `when`
d# 0 < invert if
COMM+0 c@ dup
h# 3f00 + c@
dup SAMPLE_Lhi c! SAMPLE_Rhi c!
1+ COMM+0 c!
CYCLE +
then
again
;
end-microcode