15 months later, I took another look at why the music was off for
channels 3 and 4 and pretty fast noticed that it affects only the voices
using the mod3 subroutine. Executing mod3 with simavr[1] showed that the
compare-branch step is broken. Switching BRPL for the correct BRCS fixed
the problem.
[1]: in the hackiest way imaginable:
gdb> layout regs
gdb> set $r24 = 0x15 # test value for Mh
gdb> set $r23 = 0x16 # test value for Ml
gdb> set $pc = 0x1a # start of mod3 routine
gdb> ni # repeatedly
-; TODO: melody is still not 100% correct!
/* REGISTER NAMES */
#define acc r16
#define i0 r17
ANDI Ml, 0x03
ADD Ml, tmp
CPI Ml, 3
- BRPL skip
+ BRCS skip
SUBI Ml, 3
skip:
RET