move `x` out of g(), so we can use it as tempvar in g()
LD t, X */
t = (((i1&0x1f)<<8|i0)*t)>>8; //TODO
t >>= o; //NOTE: o == {1, 2, 4}
- AND (t, x)
ANDI (t, 3)
RET //TODO: CALL/RET is expensive; store PC in register and RJMP, then JRMP back
};
MOV (t, n)
LDI (o, 4)
RCALL g();
+ AND (t, x)
MOV (acc, t)
//voice 2:
EOR (t, n)
LDI (o, 2)
RCALL g();
+ AND (t, x)
ADD (acc, t)
//voice 3:
ADD (t, n)
LDI (o, 2)
RCALL g();
+ AND (t, x)
ADD (acc, t)
//voice 4:
SUBI (t, -8)
LDI (o, 1)
RCALL g();
+ AND (t, x)
ADD (acc, t)
putchar(acc<<4); //TODO