};
u8 mod3hi, mod3lo; //MEM
-u8 xmod3(u8,u8);
void mod3(void) {
- acc = xmod3(mod3hi, mod3lo);
-}
+ u8 x = (mod3hi+mod3lo)>>8;
+ MOV(acc,mod3hi)
+ ADD(mod3lo,acc) // mod3lo = hi+lo
+ flag_c = x;
+ CLEAR(mod3hi)
+ ADDC0(mod3hi)
-u8 xmod3(u8 hi, u8 lo) { //avail: t, o _
-//copied from attiny version e98ab46; based on homepage.divms.uiowa.edu/~jones
- unsigned short a = ((hi) + (lo)) &0x1ff;
- hi = a>>8; //1 bit
- lo = a;
- lo = (hi<<4|lo>>4) + (lo & 0xF);
- lo = (lo >> 2) + (lo & 0x3);
- lo = (lo >> 2) + (lo & 0x3);
- if (lo > 2) lo = lo - 3;
- return lo;
+ mod3lo = (mod3hi<<4|mod3lo>>4) + (mod3lo & 0xF);
+ mod3lo = (mod3lo >> 2) + (mod3lo & 0x3);
+ mod3lo = (mod3lo >> 2) + (mod3lo & 0x3);
+ if (mod3lo > 2) mod3lo = mod3lo - 3;
+ acc = mod3lo;
}
-
void g(void){
u8 notes_ix = acc & 0x7;
if(3&i2)