]>
git.gir.st - Chiptunes-pms150c.git/blob - bsv.c
2fd4ac4b448587ab20c61eabfb54c7d3b3452034
3 typedef unsigned char u8
;
12 0x84, 0x9d, 0xb0, 0x69, 0x9d, 0x84, 0x69, 0x58,
13 0x75, 0x8c, 0xb0, 0x69, 0x8c, 0x75, 0x69, 0x58
16 u8 mod3hi
, mod3lo
; //MEM
19 acc
= xmod3(mod3hi
, mod3lo
);
22 u8
xmod3(u8 hi
, u8 lo
) { //avail: t, o _
23 //copied from attiny version e98ab46; based on homepage.divms.uiowa.edu/~jones
24 unsigned short a
= ((hi
) + (lo
)) &0x1ff;
27 lo
= (hi
<<4|lo
>>4) + (lo
& 0xF);
28 lo
= (lo
>> 2) + (lo
& 0x3);
29 lo
= (lo
>> 2) + (lo
& 0x3);
30 if (lo
> 2) lo
= lo
- 3;
36 u8 notes_ix
= acc
& 0x7;
39 u8 result
= ((i1
<<8|i0
)*notes
[notes_ix
])>>8; // keep hi byte
47 MOV (acc
, i2
)// "mov mem,mem"
48 MOV (n
, acc
)// does not exist
68 MOV (tmp_1
, acc
) // fresh tmp_1:
73 OR (acc
, tmp_1
) // tmp_1 done.
89 MOV (tmp_1
, acc
) // acc saved in tmp_1; fresh acc
91 // shift-divide by six
92 // note: i2 is max 0x78; so acc will <= 20. (breaks vor values >=128)
105 AND (acc
, tmp_1
) // acc restored from tmp_1
110 mod3lo
= i2
<<6|i1
>>2;
117 MOV (tmp_1
, acc
) // acc saved in tmp_1; fresh acc
119 // shift-divide by ten
120 // note: i2 is max 0x78; so acc will <= 12.
133 AND (acc
, tmp_1
) // acc restored from tmp_1
142 i1
+= !i0
; // ADDC i1
143 i2
+= !i1
&& !i0
; // ADDC i2