]>
git.gir.st - Chiptunes-pms150c.git/blob - bsv.c
a784857466fc21e0103fcb49c29154c7a0ce482a
3 typedef unsigned char u8
;
12 u8 mod3hi
, mod3lo
; //MEM
13 //todo: can mod3hi be aliased to tmp_1?
16 ADD (mod3lo
,acc
) // mod3lo = hi+lo
18 ADDC0 (acc
) // mod3hi, 1bit
24 AND (acc
, 0xf) // (mod3lo>>4)
25 XCH (mod3lo
) // acc=mod3lo, mod3lo=mod3lo>>4
26 AND (acc
, 0xF) // acc=mod3lo&0xf, mod3lo=mod3lo>>4
27 ADD (acc
, mod3lo
) // (mod3lo & 0xF)
31 AND (acc
, 0x3) // acc = (mod3lo & 0x3)
33 SR (mod3lo
) // (mod3lo >> 2)
37 AND (acc
, 0x3) // acc = (mod3lo & 0x3)
39 SR (mod3lo
) // (mod3lo >> 2)
43 if (flag_c
){ // T0SN FLAG.C (0x00.1) -- skip if carry clear
49 // notes_ix_hi = always 0
56 if(3&i2
) {// T0SN FLAG.Z (0x00.0) -- skip if !(3&i0)
57 notes_ix
|= 8; // SET1 MEM.n
59 acc
= notes
[notes_ix
]; // IDXM acc, notes_ix
60 u8 result
= ((i1
<<8|i0
)*acc
)>>8; // keep hi byte
68 //rom is not mmapped; must load into ram first
94 MOV (acc
, i2
)// "mov mem,mem"
95 MOV (n
, acc
)// does not exist
115 MOV (tmp_1
, acc
) // fresh tmp_1:
120 OR (acc
, tmp_1
) // tmp_1 done.
148 MOV (tmp_1
, acc
) // acc saved in tmp_1; fresh acc
150 // shift-divide by six
151 // note: i2 is max 0x78; so acc will <= 20. (breaks vor values >=128)
164 AND (acc
, tmp_1
) // acc restored from tmp_1
187 MOV (tmp_1
, acc
) // acc saved in tmp_1; fresh acc
189 // shift-divide by ten
190 // note: i2 is max 0x78; so acc will <= 12.
203 AND (acc
, tmp_1
) // acc restored from tmp_1
212 i1
+= !i0
; // ADDC i1
213 i2
+= !i1
&& !i0
; // ADDC i2
215 if(i2
== 0x78) break;