1 #ifndef __PSXEVENTS_H__
2 #define __PSXEVENTS_H__
7 PSXINT_SIO = 0, // sioInterrupt
8 PSXINT_CDR, // cdrInterrupt
9 PSXINT_CDREAD, // cdrPlayReadInterrupt
10 PSXINT_GPUDMA, // gpuInterrupt
11 PSXINT_MDECOUTDMA, // mdec1Interrupt
12 PSXINT_SPUDMA, // spuInterrupt
13 PSXINT_SPU_IRQ, // spuDelayedIrq
14 PSXINT_MDECINDMA, // mdec0Interrupt
15 PSXINT_GPUOTCDMA, // gpuotcInterrupt
16 PSXINT_CDRDMA, // cdrDmaInterrupt
17 PSXINT_NEWDRC_CHECK, // (none)
18 PSXINT_RCNT, // psxRcntUpdate
19 PSXINT_CDRLID, // cdrLidSeekInterrupt
20 PSXINT_IRQ10, // irq10Interrupt
21 PSXINT_SPU_UPDATE, // spuUpdate
25 #define set_event_raw_abs(e, abs) { \
27 s32 di_ = psxRegs.next_interupt - abs_; \
28 psxRegs.event_cycles[e] = abs_; \
30 /*printf("%u: next_interupt %u -> %u\n", psxRegs.cycle, psxRegs.next_interupt, abs_);*/ \
31 psxRegs.next_interupt = abs_; \
35 #define set_event(e, c) do { \
36 psxRegs.interrupt |= (1 << (e)); \
37 psxRegs.intCycle[e].cycle = c; \
38 psxRegs.intCycle[e].sCycle = psxRegs.cycle; \
39 set_event_raw_abs(e, psxRegs.cycle + (c)) \
45 u32 schedule_timeslice(struct psxRegisters *regs);
46 void irq_test(union psxCP0Regs_ *cp0);
47 void gen_interupt(union psxCP0Regs_ *cp0);
48 void events_restore(void);
50 #endif // __PSXEVENTS_H__