X-Git-Url: https://git.gir.st/Chiptunes.git/blobdiff_plain/f28def6a6947c3921c91561e5ac5f8aae0993845..362b33c918938aadd44c6516c15661c30952a584:/foo.c diff --git a/foo.c b/foo.c index fd649da..fcb07cd 100644 --- a/foo.c +++ b/foo.c @@ -49,7 +49,8 @@ void mod3(void) { #undef tmp } void g(void) { - // g(i, x, t, o) -> t + // g(i, t) -> t + // tempvars: `x` and `_` #define tmp _ ANDI (t, 0x07) MOV (tmp, i2) @@ -66,8 +67,6 @@ void g(void) { ADC X_hi, zero LD t, X */ t = (((i1&0x1f)<<8|i0)*t)>>8; //TODO - t >>= o; //NOTE: o == {1, 2, 4} - ANDI (t, 3) RET //TODO: CALL/RET is expensive; store PC in register and RJMP, then JRMP back }; @@ -102,6 +101,8 @@ int main(void) { MOV (t, n) LDI (o, 4) RCALL g(); + t >>= o; //NOTE: o == {1, 2, 4} + ANDI (t, 3) ANDI (t, 1) MOV (acc, t) @@ -120,6 +121,8 @@ int main(void) { EOR (t, n) LDI (o, 2) RCALL g(); + t >>= o; //NOTE: o == {1, 2, 4} + ANDI (t, 3) AND (t, s) ADD (acc, t) @@ -150,6 +153,8 @@ int main(void) { ADD (t, n) LDI (o, 2) RCALL g(); + t >>= o; //NOTE: o == {1, 2, 4} + ANDI (t, 3) MOV (x, s) INC (x) #define tmp o @@ -171,23 +176,6 @@ int main(void) { ADD (acc, t) //voice 4: - MOV (x, s) - INC (x) - #define tmp o - MOV (tmp, x) - LSR (tmp) - ADD (tmp, x) - ROR (tmp) - LSR (tmp) - LSR (tmp) - ADD (tmp, x) - ROR (tmp) - ADD (tmp, x) - ROR (tmp) - LSR (tmp) - LSR (tmp) - MOV (x, tmp) - #undef tmp MOV (Ml, i2) SWAP (Ml) ANDI (Ml, 0xf0) @@ -216,6 +204,25 @@ int main(void) { SUBI (t, -8) LDI (o, 1) RCALL g(); + t >>= o; //NOTE: o == {1, 2, 4} + ANDI (t, 3) + MOV (x, s) + INC (x) + #define tmp o + MOV (tmp, x) + LSR (tmp) + ADD (tmp, x) + ROR (tmp) + LSR (tmp) + LSR (tmp) + ADD (tmp, x) + ROR (tmp) + ADD (tmp, x) + ROR (tmp) + LSR (tmp) + LSR (tmp) + MOV (x, tmp) + #undef tmp AND (t, x) ADD (acc, t)