36 lines
999 B
C++
Executable File
36 lines
999 B
C++
Executable File
#ifdef SCPU_CPP
|
|
|
|
void sCPU::queue_event(unsigned id) {
|
|
switch(id) {
|
|
//interrupts triggered during (H)DMA do not trigger immediately after
|
|
case EventIrqLockRelease: {
|
|
status.irq_lock = false;
|
|
} break;
|
|
|
|
//ALU multiplication / division results are not immediately calculated;
|
|
//the exact formula for the calculations are unknown, but this lock at least
|
|
//allows emulation to avoid returning to fully computed results too soon.
|
|
case EventAluLockRelease: {
|
|
status.alu_lock = false;
|
|
} break;
|
|
|
|
//S-CPU WRAM consists of two 64kbyte DRAM chips, which must be refreshed
|
|
//once per scanline to avoid memory decay.
|
|
case EventDramRefresh: {
|
|
add_clocks(40);
|
|
} break;
|
|
|
|
//HDMA init routine; occurs once per frame
|
|
case EventHdmaInit: {
|
|
cycle_edge_state |= EventFlagHdmaInit;
|
|
} break;
|
|
|
|
//HDMA run routine; occurs once per scanline
|
|
case EventHdmaRun: {
|
|
cycle_edge_state |= EventFlagHdmaRun;
|
|
} break;
|
|
}
|
|
}
|
|
|
|
#endif
|