unsigned short CALLBACK ZN_SPUreadRegister(unsigned long reg) { return SPUreadRegister(reg); }
static void spx_tick(void) { uint32_t time, reg, size; uint16_t rdata; uint8_t opcode; if (old_fmt) { time = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; while ((time == cur_tick) && (cur_event < num_events)) { reg = song_ptr[4] | song_ptr[5]<<8 | song_ptr[6]<<16 | song_ptr[7]<<24; rdata = song_ptr[8] | song_ptr[9]<<8; SPUwriteRegister(reg, rdata); cur_event++; song_ptr += 12; time = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; } } else { if (cur_tick < end_tick) { while (cur_tick == next_tick) { opcode = song_ptr[0]; song_ptr++; switch (opcode) { case 0: // write register reg = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; rdata = song_ptr[4] | song_ptr[5]<<8; SPUwriteRegister(reg, rdata); next_tick = song_ptr[6] | song_ptr[7]<<8 | song_ptr[8]<<16 | song_ptr[9]<<24; song_ptr += 10; break; case 1: // read register reg = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; SPUreadRegister(reg); next_tick = song_ptr[4] | song_ptr[5]<<8 | song_ptr[6]<<16 | song_ptr[7]<<24; song_ptr += 8; break; case 2: // dma write size = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; song_ptr += (4 + size); next_tick = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; song_ptr += 4; break; case 3: // dma read next_tick = song_ptr[4] | song_ptr[5]<<8 | song_ptr[6]<<16 | song_ptr[7]<<24; song_ptr += 8; break; case 4: // xa play song_ptr += (32 + 16384); next_tick = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; song_ptr += 4; break; case 5: // cdda play size = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; song_ptr += (4 + size); next_tick = song_ptr[0] | song_ptr[1]<<8 | song_ptr[2]<<16 | song_ptr[3]<<24; song_ptr += 4; break; default: printf("Unknown opcode %d\n", opcode); exit(-1); break; } } } } cur_tick++; }