X-Git-Url: https://git.gir.st/Chiptunes.git/blobdiff_plain/d8af0686b71700b06eabbe106cb6b17f1da4af4b..362b33c918938aadd44c6516c15661c30952a584:/foo.c diff --git a/foo.c b/foo.c index 0ae3ed1..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 @@ -199,6 +204,8 @@ 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