Exemple #1
0
static void music_playback(int param)
{
	int pattern = 0;

	if ((OKIM6295_status_0_r(0) & 0x08) == 0)
	{
		if (sslam_bar != 0) {
			sslam_bar += 1;
			if (sslam_bar >= (sslam_snd_loop[sslam_melody][0] + 1))
				sslam_bar = 1;
		}
		pattern = sslam_snd_loop[sslam_melody][sslam_bar];

		if (pattern == 0xff) {		/* Restart track from first bar */
			sslam_bar = 1;
			pattern = sslam_snd_loop[sslam_melody][sslam_bar];
		}
		if (pattern == 0x00) {		/* Non-looped track. Stop playing it */
			sslam_track = 0;
			sslam_melody = 0;
			sslam_bar = 0;
			timer_enable(music_timer,0);
		}
		if (pattern) {
			logerror("Changing bar in music track to pattern %02x\n",pattern);
			OKIM6295_data_0_w(0,(0x80 | pattern));
			OKIM6295_data_0_w(0,0x81);
		}
	}
//  {
//      pattern = sslam_snd_loop[sslam_melody][sslam_bar];
//      popmessage("Music track: %02x, Melody: %02x, Pattern: %02x, Bar:%02d",sslam_track,sslam_melody,pattern,sslam_bar);
//  }
}
Exemple #2
0
static void sslam_play(int melody, int data)
{
	int status = OKIM6295_status_0_r(0);

	logerror("Playing sample %01x:%02x from command %02x\n",sslam_snd_bank,sslam_sound,data);
	if (sslam_sound == 0) ui_popup("Unknown sound command %02x",sslam_sound);

	if (melody) {
		if (sslam_melody != sslam_sound) {
			sslam_melody      = sslam_sound;
			sslam_melody_loop = sslam_sound;
			if (status & 0x08)
				OKIM6295_data_0_w(0,0x40);
			OKIM6295_data_0_w(0,(0x80 | sslam_melody));
			OKIM6295_data_0_w(0,0x81);
		}
	}
	else {
		if ((status & 0x01) == 0) {
		OKIM6295_data_0_w(0,(0x80 | sslam_sound));
			OKIM6295_data_0_w(0,0x11);
		}
		else if ((status & 0x02) == 0) {
		OKIM6295_data_0_w(0,(0x80 | sslam_sound));
			OKIM6295_data_0_w(0,0x21);
		}
		else if ((status & 0x04) == 0) {
		OKIM6295_data_0_w(0,(0x80 | sslam_sound));
			OKIM6295_data_0_w(0,0x41);
		}
	}
}
static void oki_play_sample(int sample_no)
{
	UINT16 table_start = (sample_no & 0x80) ? read16(SAMPLE_TABLE_1) : read16(SAMPLE_TABLE_0);
	UINT8 byte1 = read8(table_start + 2 * (sample_no & 0x7f) + 0);
	UINT8 byte2 = read8(table_start + 2 * (sample_no & 0x7f) + 1);
	int chip = (byte1 & 0x80) >> 7;

	if ((byte1 & 0x7f) == 0)
	{
		/* stop all channels */
		if (chip == 0)
			OKIM6295_data_0_w(0, 0x78 );
		else
			OKIM6295_data_1_w(0, 0x78 );
	}
	else
	{
		int sample = byte1 & 0x7f;
		int ch = byte2 & 0x03;
		int force = (byte2 & 0x80) >> 7;

		if (!force && (NMK004_state.oki_playing & (1 << (ch + 4*chip))))
			return;

		NMK004_state.oki_playing |= 1 << (ch + 4*chip);

		/* stop channel */
		if (chip == 0)
			OKIM6295_data_0_w(0, (0x08 << ch) );
		else
			OKIM6295_data_1_w(0, (0x08 << ch) );

		if (sample != 0)
		{
			UINT8 *rom = memory_region(REGION_SOUND1 + chip);
			int bank = (byte2 & 0x0c) >> 2;
			int vol = (byte2 & 0x70) >> 4;

			if (bank != 3)
				memcpy(rom + 0x20000,rom + 0x40000 + bank * 0x20000,0x20000);

			if (chip == 0)
			{
				OKIM6295_data_0_w(0, 0x80 | sample );
				OKIM6295_data_0_w(0, (0x10 << ch) | vol );
			}
			else
			{
				OKIM6295_data_1_w(0, 0x80 | sample );
				OKIM6295_data_1_w(0, (0x10 << ch) | vol );
			}
		}
	}
static void play_oki_sound(int game_sound, int data)
{
	int status = OKIM6295_status_0_r(0);

	logerror("Playing sample %02x from command %02x\n",game_sound,data);

	if (game_sound != 0)
	{
		if ((status & 0x01) == 0) {
			OKIM6295_data_0_w(0,(0x80 | game_sound));
			OKIM6295_data_0_w(0,0x11);
		}
		else if ((status & 0x02) == 0) {
			OKIM6295_data_0_w(0,(0x80 | game_sound));
			OKIM6295_data_0_w(0,0x21);
		}
		else if ((status & 0x04) == 0) {
			OKIM6295_data_0_w(0,(0x80 | game_sound));
			OKIM6295_data_0_w(0,0x41);
		}
		else if ((status & 0x08) == 0) {
			OKIM6295_data_0_w(0,(0x80 | game_sound));
			OKIM6295_data_0_w(0,0x81);
		}
	}
}
Exemple #5
0
static void write_memory_8(unsigned int address, unsigned int data)
{
	if (address < 0x004000)
		workram[address] = data;

	else if ((address >= 0x4000) && (address < 0x8000))
		workram[0x10000 + (address & 0x3fff)] = data;

	else if (address == 0x400001)
		ym2151_last_adr = data; 

	else if (address == 0x400003)
		YM2151WriteReg(0, ym2151_last_adr, data);

	else if (address == 0x400005)
		OKIM6295_data_0_w(0, data);
	
	else if ((address >= 0xc00000) && (address < 0xc08000))
		workram[address & 0x7fff] = data;

	else if ((address >= 0xfe0000) && (address < 0xffffff))
		workram[0x10000 + (address & 0x1ffff)] = data;

	else
		printf("W8: %x @ %x (PC=%x)\n", data, address, m68k_get_reg(NULL, M68K_REG_PC));
}
Exemple #6
0
static void sslam_play(int track, int data)
{
	int status = OKIM6295_status_0_r(0);

	if (data < 0x80) {
		if (track) {
			if (sslam_track != data) {
				sslam_track  = data;
				sslam_bar = 1;
				if (status & 0x08)
					OKIM6295_data_0_w(0,0x40);
				OKIM6295_data_0_w(0,(0x80 | data));
				OKIM6295_data_0_w(0,0x81);
				timer_adjust(music_timer, TIME_IN_MSEC(4), 0, TIME_IN_HZ(250));	/* 250Hz for smooth sequencing */
			}
		}
		else {
			if ((status & 0x01) == 0) {
				OKIM6295_data_0_w(0,(0x80 | data));
				OKIM6295_data_0_w(0,0x11);
			}
			else if ((status & 0x02) == 0) {
				OKIM6295_data_0_w(0,(0x80 | data));
				OKIM6295_data_0_w(0,0x21);
			}
			else if ((status & 0x04) == 0) {
				OKIM6295_data_0_w(0,(0x80 | data));
				OKIM6295_data_0_w(0,0x41);
			}
		}
	}
	else {		/* use above 0x80 to turn off channels */
		if (track) {
			timer_enable(music_timer,0);
			sslam_track = 0;
			sslam_melody = 0;
			sslam_bar = 0;
		}
		data &= 0x7f;
		OKIM6295_data_0_w(0,data);
	}
}
void batsugun_okisnd_w(int data)
{
/*  ui_popup("Writing %04x to Sound CPU",data); */

	if (data == 0)
	{
		OKIM6295_data_0_w(0,0x78);		/* Stop playing effects */
	}
	else if ((data > 0) && (data < 64))
	{
		play_oki_sound(batsugun_cmd_snd[data], data);
	}
}
Exemple #8
0
static INTERRUPT_GEN( sslam_interrupt )
{
	if ((OKIM6295_status_0_r(0) & 0x08) == 0)
	{
		switch(sslam_melody_loop)
		{
			case 0x060:	sslam_melody_loop = 0x061; break;
			case 0x061:	sslam_melody_loop = 0x062; break;
			case 0x062:	sslam_melody_loop = 0x060; break;

			case 0x065:	sslam_melody_loop = 0x165; break;
			case 0x165:	sslam_melody_loop = 0x265; break;
			case 0x265:	sslam_melody_loop = 0x365; break;
			case 0x365:	sslam_melody_loop = 0x066; break;
			case 0x066:	sslam_melody_loop = 0x067; break;
			case 0x067:	sslam_melody_loop = 0x068; break;
			case 0x068:	sslam_melody_loop = 0x065; break;

			case 0x063:	sslam_melody_loop = 0x063; break;
			case 0x064:	sslam_melody_loop = 0x064; break;
			case 0x069:	sslam_melody_loop = 0x069; break;
			case 0x06a:	sslam_melody_loop = 0x06a; break;
			case 0x06b:	sslam_melody_loop = 0x06b; break;
			case 0x06c:	sslam_melody_loop = 0x06c; break;

			default:	sslam_melody_loop = 0x00; break;
		}

		if (sslam_melody_loop)
		{
/*          logerror("Changing to sample %02x\n",sslam_melody_loop); */
			OKIM6295_data_0_w(0,((0x80 | sslam_melody_loop) & 0xff));
			OKIM6295_data_0_w(0,0x81);
		}
	}
}
Exemple #9
0
static WRITE8_HANDLER( playmark_snd_control_w )
{
	static int oki_old_bank = -1;

	playmark_oki_control = data;

	if(data & 3)
	{
		if(oki_old_bank != (data & 3))
		{
			oki_old_bank = data & 3;
			OKIM6295_set_bank_base(0, 0x40000 * (oki_old_bank - 1));
		}
	}

	if ((data & 0x38) == 0x18)
	{
		OKIM6295_data_0_w(0, playmark_oki_command);
	}

/*  !(data & 0x80) -> sound enable */
/*  data & 0x40 -> always set */
}
Exemple #10
0
static WRITE16_HANDLER( adpcm_w )
{
	if (ACCESSING_LSB)
		OKIM6295_data_0_w(offset, data & 0xff);
}
Exemple #11
0
static WRITE16_HANDLER( oki_w )
{
	if(offset)
		OKIM6295_data_0_w(machine, 0, data);
}
static WRITE16_HANDLER( tumblep_oki_w )
{
	OKIM6295_data_0_w(0,data&0xff);
    /* STUFF IN OTHER BYTE TOO..*/
}
Exemple #13
0
static WRITE_HANDLER( adpcm_w )
{
	if (!(data & 0x00ff0000))
		OKIM6295_data_0_w(offset, data & 0xff);
}
Exemple #14
0
static void adpcm_w(int offset, int data)
{
	if (!(data & 0x00ff0000))
		OKIM6295_data_0_w(offset, data & 0xff);
}
Exemple #15
0
static WRITE8_HANDLER( aquarium_oki_w )
{
    logerror("Z80-PC:%04x Writing %04x to the OKI M6295\n",activecpu_get_previouspc(),aquarium_snd_bitswap(data));
    OKIM6295_data_0_w( 0, (aquarium_snd_bitswap(data)) );
}
Exemple #16
0
static WRITE32_HANDLER( oki_32bit_w )
{
	OKIM6295_data_0_w(0, data & 0xff);
}