Esempio n. 1
0
void SuperFX::enter() {
    while(true) {
        if(scheduler.sync == Scheduler::SynchronizeMode::All) {
            scheduler.exit(Scheduler::ExitReason::SynchronizeEvent);
        }

        if(regs.sfr.g == 0) {
            add_clocks(6);
            continue;
        }

        op_exec(peekpipe());
        if(r15_modified == false) regs.r[15]++;
    }
}
Esempio n. 2
0
void SuperFX::enter() {
    while(true) {
        if(scheduler.sync.i == Scheduler::SynchronizeMode::All) {
            scheduler.exit(Scheduler::ExitReason::SynchronizeEvent);
        }

        if(regs.sfr.g == 0) {
            add_clocks(6);
            synchronize_cpu();
            continue;
        }

        (this->*opcode_table[(regs.sfr & 0x0300) + peekpipe()])();
        if(r15_modified == false) regs.r[15]++;

        if(++instruction_counter >= 128) {
            instruction_counter = 0;
            synchronize_cpu();
        }
    }
}