void cia_diskindex (void) { ciabicr |= 0x10; RethinkICRB(); }
void rethink_cias (void) { RethinkICRA (); RethinkICRB (); }
static void CIA_update (void) { unsigned long int ccount = (get_cycles () - eventtab[ev_cia].oldcycles + div10); unsigned long int ciaclocks = ccount / DIV10; int aovfla = 0, aovflb = 0, asp = 0, bovfla = 0, bovflb = 0, bsp = 0; div10 = ccount % DIV10; /* CIA A timers */ if ((ciaacra & 0x21) == 0x01) { assert ((ciaata+1) >= ciaclocks); if ((ciaata+1) == ciaclocks) { if ((ciaacra & 0x48) == 0x40 && ciaasdr_cnt > 0 && --ciaasdr_cnt == 0) asp = 1; aovfla = 1; if ((ciaacrb & 0x61) == 0x41 || (ciaacrb & 0x61) == 0x61) { if (ciaatb-- == 0) aovflb = 1; } } ciaata -= ciaclocks; } if ((ciaacrb & 0x61) == 0x01) { assert ((ciaatb+1) >= ciaclocks); if ((ciaatb+1) == ciaclocks) aovflb = 1; ciaatb -= ciaclocks; } /* CIA B timers */ if ((ciabcra & 0x21) == 0x01) { assert ((ciabta+1) >= ciaclocks); if ((ciabta+1) == ciaclocks) { if ((ciabcra & 0x48) == 0x40 && ciabsdr_cnt > 0 && --ciabsdr_cnt == 0) bsp = 1; bovfla = 1; if ((ciabcrb & 0x61) == 0x41 || (ciabcrb & 0x61) == 0x61) { if (ciabtb-- == 0) bovflb = 1; } } ciabta -= ciaclocks; } if ((ciabcrb & 0x61) == 0x01) { assert ((ciabtb+1) >= ciaclocks); if ((ciabtb+1) == ciaclocks) bovflb = 1; ciabtb -= ciaclocks; } if (aovfla) { ciaaicr |= 1; RethinkICRA(); ciaata = ciaala; if (ciaacra & 0x8) ciaacra &= ~1; } if (aovflb) { ciaaicr |= 2; RethinkICRA(); ciaatb = ciaalb; if (ciaacrb & 0x8) ciaacrb &= ~1; } if (asp) { ciaaicr |= 8; RethinkICRA(); } if (bovfla) { ciabicr |= 1; RethinkICRB(); ciabta = ciabla; if (ciabcra & 0x8) ciabcra &= ~1; } if (bovflb) { ciabicr |= 2; RethinkICRB(); ciabtb = ciablb; if (ciabcrb & 0x8) ciabcrb &= ~1; } if (bsp) { ciabicr |= 8; RethinkICRB(); } }
static void CIA_update(void) { unsigned long int ccount = cycles - eventtab[ev_cia].oldcycles + lastdiv10; unsigned long int ciaclocks = ccount / DIV10; int aovfla = 0, aovflb = 0, bovfla = 0, bovflb = 0; lastdiv10 = div10; div10 = ccount % DIV10; /* CIA A timers */ if ((ciaacra & 0x21) == 0x01) { assert((ciaata+1) >= ciaclocks); if ((ciaata+1) == ciaclocks) { aovfla = 1; if ((ciaacrb & 0x61) == 0x41) { if (ciaatb-- == 0) aovflb = 1; } } ciaata -= ciaclocks; } if ((ciaacrb & 0x61) == 0x01) { assert((ciaatb+1) >= ciaclocks); if ((ciaatb+1) == ciaclocks) aovflb = 1; ciaatb -= ciaclocks; } /* CIA B timers */ if ((ciabcra & 0x21) == 0x01) { assert((ciabta+1) >= ciaclocks); if ((ciabta+1) == ciaclocks) { bovfla = 1; if ((ciabcrb & 0x61) == 0x41) { if (ciabtb-- == 0) bovflb = 1; } } ciabta -= ciaclocks; } if ((ciabcrb & 0x61) == 0x01) { assert ((ciabtb+1) >= ciaclocks); if ((ciabtb+1) == ciaclocks) bovflb = 1; ciabtb -= ciaclocks; } if (aovfla) { ciaaicr |= 1; RethinkICRA(); ciaata = ciaala; if (ciaacra & 0x8) ciaacra &= ~1; } if (aovflb) { ciaaicr |= 2; RethinkICRA(); ciaatb = ciaalb; if (ciaacrb & 0x8) ciaacrb &= ~1; } if (bovfla) { ciabicr |= 1; RethinkICRB(); ciabta = ciabla; if (ciabcra & 0x8) ciabcra &= ~1; } if (bovflb) { ciabicr |= 2; RethinkICRB(); ciabtb = ciablb; if (ciabcrb & 0x8) ciabcrb &= ~1; } }