@Hikaru: I don't quite understand your sample code. Is the .lvNN part executed every time, and then it will jump to .lv00-.lvXY, from where it'll loop back to .lvNN? Is beeper turned off before executing .lvNN? Wouldn't that give an overall very low volume?
Another thing that I was wondering about. In BetaPhase, phase channels are calculated as
add hl,bc
ex de,hl
add hl,bc
ld a,h
xor d ;or|and|xor
out (#fe),a
which saves at least one register pair compared to a full Phaser implementation. During testing, I realized that actually 8-bit frequency dividers are enough in conjunction with scalers. So the above could be rewritten as
ld hl,0
loop:
ld a,b
add a,nn
ld b,a
sbc a,a
add a,h
ld h,a
ld a,c
add a,nn
ld c,a
sbc a,a
add a,l
ld l,a
xor h
ds 2 ;2x scaler (rrca/rlca)
out (#fe),a
freeing up another register pair in the process.
So here's the question: Can't we get rid of one of the counters somehow (H,L in the above example)? In other words, is it possible to generate similar bitstreams as above (or at least something that offers timbre variation), but with a combined upper counter byte for both of the operators?