Beispiel #1
0
unsigned short CALLBACK ZN_SPUreadRegister(unsigned long reg)
{
	return SPUreadRegister(reg);
}
Beispiel #2
0
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++;
}