X-Git-Url: https://git.gir.st/Chiptunes.git/blobdiff_plain/bc7680e361d3116a538bb6b9a5e4a658a9fdd71e..e4f7baf085f9080e41d12d4a5166e3fde0135da5:/foo.c diff --git a/foo.c b/foo.c index c752f28..c8eacff 100644 --- a/foo.c +++ b/foo.c @@ -24,7 +24,7 @@ void g(void) { SUBI (t, -8) skip: t = data[t]; - t = ((i3<<24|i2<<16|i1<<8|i0)*t) >> o; + t = (((i1&0x1f)<<8|i0)*t) >> o; AND (t, x) ANDI (t, 3) RET @@ -41,10 +41,21 @@ int main(void) { LSL (n) #define tmp acc MOV (tmp, i1) - tmp >>= 6; - n = (n | tmp); + SWAP (tmp) + ANDI (tmp, 0x0f) + LSR (tmp) + LSR (tmp) + OR (n, tmp) + #undef tmp + MOV (s, i3) + ROR (s) + ROR (s) + ANDI (s, 0x80) + #define tmp acc + MOV (tmp, i2) + LSR (tmp) + OR (s, tmp) #undef tmp - s = (i3<<7 | i2>>1); //voice 1: LDI (x, 1) @@ -72,15 +83,27 @@ int main(void) { ADD (acc, t) //voice 3: - x = s / 3; - t = n + ((i3<<13 | i2<<5 | i1>>3) % 3); + MOV (x, s) + INC (x) + #define tmp o + x = (x*0x55)>>8; + #undef tmp + t = ((i3&0x01)<<13 | i2<<5 | i1>>3) % 3; + ADD (t, n) LDI (o, 10) RCALL g(); ADD (acc, t) //voice 4: - x = s / 5; - t = 8 + n - ((i3<<14 | i2<<6 | i1>>2) % 3); + MOV (x, s) + INC (x) + #define tmp o + x = (x*0x33)>>8; + #undef tmp + t = ((i3&0x01)<<14 | i2<<6 | i1>>2) % 3; + SUB (t, n) + NEG (t) + SUBI (t, -8) LDI (o, 9) RCALL g(); ADD (acc, t)