static void p32x_vdp_write16(u32 a, u32 d, SH2 *sh2) { a &= 0x0e; if (a == 6) { // fill start Pico32x.vdp_regs[6 / 2] = d; return; } if (a == 8) { // fill data u16 *dram = Pico32xMem->dram[(Pico32x.vdp_regs[0x0a/2] & P32XV_FS) ^ 1]; int len = Pico32x.vdp_regs[4 / 2] + 1; int len1 = len; a = Pico32x.vdp_regs[6 / 2]; while (len1--) { dram[a] = d; a = (a & 0xff00) | ((a + 1) & 0xff); } Pico32x.vdp_regs[0x06 / 2] = a; Pico32x.vdp_regs[0x08 / 2] = d; if (sh2 != NULL && len > 4) { Pico32x.vdp_regs[0x0a / 2] |= P32XV_nFEN; // supposedly takes 3 bus/6 sh2 cycles? or 3 sh2 cycles? p32x_event_schedule_sh2(sh2, P32X_EVENT_FILLEND, 3 + len); } return; } p32x_vdp_write8(a | 1, d); }
void p32x_pwm_schedule_sh2(SH2 *sh2) { int after = p32x_pwm_schedule_(sh2, sh2_cycles_done_m68k(sh2)); if (after != 0) p32x_event_schedule_sh2(sh2, P32X_EVENT_PWM, after); }