]>
git.gir.st - Chiptunes.git/blob - foo.c
29ddee4be58b0f51c2e5b566dd052563a20ffa10
3 typedef unsigned char u8
;
15 u8 x
;/*==Ml*/ //r26 (Xlo)
16 u8 t
;/*==Mh*/ //r27 (Xhi)
21 #define Mh x //mod3 vars
23 //http://homepage.divms.uiowa.edu/~jones/bcd/mod.shtml
29 ADC (Mh
, zero
, carry
) //Mh only holds the carry bit
56 // tempvars: `x` and `_`
57 static void* mul_jmptable
[] = { // replaces data[] section at the top
58 &&mul_84
, &&mul_9d
, &&mul_b0
, &&mul_69
, &&mul_9d
, &&mul_84
, &&mul_69
, &&mul_58
,
59 &&mul_75
, &&mul_8c
, &&mul_b0
, &&mul_69
, &&mul_8c
, &&mul_75
, &&mul_69
, &&mul_58
60 // addresses of mul_* stored in little endian (i.e. { lo(mul_84), hi(mul_84), ... })
76 goto *mul_jmptable
[t
]; /*
77 LDI Xlo, lo(mul_jmptable)
78 LDI Xhi, hi(mul_jmptable)
81 ADD Xlo, t ; advance twice, since it's a 16 bit address
89 mul_58
: // 0101 1000 (24cy)
112 mul_69
: // 0110 1001 (26cy)
137 mul_75
: // 0111 0101 (28cy)
164 mul_84
: // 1000 0100 (22cy)
185 mul_8c
: // 1000 1100 (24cy)
208 mul_9d
: // 1001 1101 (28cy)
235 mul_b0
: // 1011 0000 (22cy)
258 LSR (a2
) //final shift is a common operation for all
265 RET
//TODO: replace CALL/RET with IJMP?
419 putchar(acc
<<4); //TODO
422 ADC (i2
, zero
, !i0
&&!i1
)
423 ADC (i3
, zero
, !i0
&&!i1
&&!i2
)