1234567891011121314151617181920212223242526272829303132333435 |
- #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
|