static WRITE_HANDLER( MC6840_control_port_0_w )
{
	/* MC6840 Emulation by Takahiro Nogi. 1999/09/27
	(This routine hasn't been completed yet.) */
#ifdef MAME_DEBUG
	char	mess[80];
#endif

	MC6840_index0 = data;

	if (MC6840_index0 & 0x80)	/* enable timer output */
	{
		if ((MC6840_register0 != S_TEMPO) && (MC6840_register0 != 0))
		{
			S_TEMPO = MC6840_register0;
#ifdef MAME_DEBUG
			sprintf(mess, "I0:0x%02X R0:0x%02X I1:0x%02X R1:0x%02X", MC6840_index0, MC6840_register0, MC6840_index1, MC6840_register1);
			usrintf_showmessage(mess);
#endif
		}
		MC6809_FLAG = 1;
	}
	else
	{
		MC6809_FLAG = 0;
	}
#ifdef MAME_DEBUG
	logerror("MC6840 Write:(0x%02X)0x%02X\n", MC6840_register0, data);
#endif
}
Exemple #2
0
void EEPROM_init(struct EEPROM_interface *interface)
{
	intf = interface;

	if ((1 << intf->address_bits) * intf->data_bits / 8 > MEMORY_SIZE)
	{
		usrintf_showmessage("EEPROM larger than eeprom.c allows");
		return;
	}

	memset(eeprom_data,0xff,(1 << intf->address_bits) * intf->data_bits / 8);
	serial_count = 0;
	latch = 0;
	reset_line = ASSERT_LINE;
	clock_line = ASSERT_LINE;
	eeprom_read_address = 0;
	sending = 0;
	if (intf->cmd_unlock) locked = 1;
	else locked = 0;

	state_save_register_UINT8("eeprom", 0, "data",          eeprom_data,   MEMORY_SIZE);
	state_save_register_UINT8("eeprom", 0, "serial buffer", serial_buffer, SERIAL_BUFFER_LENGTH);
	state_save_register_int  ("eeprom", 0, "clock line",    &clock_line);
	state_save_register_int  ("eeprom", 0, "reset line",    &reset_line);
	state_save_register_int  ("eeprom", 0, "locked",        &locked);
	state_save_register_int  ("eeprom", 0, "serial count",  &serial_count);
	state_save_register_int  ("eeprom", 0, "latch",         &latch);
	state_save_register_int  ("eeprom", 0, "reset delay",   &reset_delay);
	state_save_register_int  ("eeprom", 0, "clock count",   &eeprom_clock_count);
	state_save_register_int  ("eeprom", 0, "data bits",     &eeprom_data_bits);
	state_save_register_int  ("eeprom", 0, "address",       &eeprom_read_address);
}
Exemple #3
0
static INTERRUPT_GEN( fromanc2_interrupt )
{
	static int fromanc2_playerside_old = -1;
	static int key_F1_old = 0;

	if (keyboard_pressed(KEYCODE_F1)) {
		if (key_F1_old != 1) {
			key_F1_old = 1;
			fromanc2_playerside ^= 1;
		}
	} else key_F1_old = 0;

	if (fromanc2_playerside_old != fromanc2_playerside) {
		fromanc2_playerside_old = fromanc2_playerside;

		usrintf_showmessage("PLAYER-%01X SIDE", fromanc2_playerside + 1);

		if (!fromanc2_playerside) {
			mixer_set_stereo_volume(3, 75, 75);	// 1P (LEFT)
			mixer_set_stereo_volume(4,  0,  0);	// 2P (RIGHT)
		}
		else {
			mixer_set_stereo_volume(3,  0,  0);	// 1P (LEFT)
			mixer_set_stereo_volume(4, 75, 75);	// 2P (RIGHT)
		}

		fromanc2_set_dispvram_w(fromanc2_playerside);
	}

	cpu_set_irq_line(0, 1, HOLD_LINE);
}
Exemple #4
0
static void set_m90_bank(void)
{
	data8_t *rom = memory_region(REGION_USER1);

	if (!rom)
		usrintf_showmessage("bankswitch with no banked ROM!");
	else
		cpu_setbank(1,rom + bankaddress);
}
Exemple #5
0
INPUT_PORTS_END



static void irqhandler(int irq)
{
usrintf_showmessage("irq");
//	cpu_set_irq_line(2,0,irq ? ASSERT_LINE : CLEAR_LINE);
}
Exemple #6
0
static INTERRUPT_GEN( m107_raster_interrupt )
{
	static int last_line=0;
	int line = 256 - cpu_getiloops();

	if (keyboard_pressed_memory(KEYCODE_F1)) {
		raster_enable ^= 1;
		if (raster_enable)
			usrintf_showmessage("Raster IRQ enabled");
		else
			usrintf_showmessage("Raster IRQ disabled");
	}

	/* Raster interrupt */
	if (raster_enable && line==m107_raster_irq_position) {
		if (osd_skip_this_frame()==0)
			m107_vh_raster_partial_refresh(Machine->scrbitmap,last_line,line);
		last_line=line+1;

		cpu_set_irq_line_and_vector(0, 0, HOLD_LINE, m107_IRQ_2);
	}

	/* Kludge to get Fire Barrel running */
	else if (line==118)
	{
		cpu_set_irq_line_and_vector(0, 0, HOLD_LINE, m107_IRQ_3);
	}

	/* Redraw screen, then set vblank and trigger the VBL interrupt */
	else if (line==248) {
		if (osd_skip_this_frame()==0)
			m107_vh_raster_partial_refresh(Machine->scrbitmap,last_line,248);
		last_line=0;
		m107_vblank=1;
		cpu_set_irq_line_and_vector(0, 0, HOLD_LINE, m107_IRQ_0);
	}

	/* End of vblank */
	else if (line==255)
		m107_vblank=0;
}
Exemple #7
0
int osd_update_audio_stream(INT16 *buffer)
{
	// if nothing to do, don't do it
	if (Machine->sample_rate != 0 && stream_buffer)
	{
		int original_bytes = bytes_in_stream_buffer();
		int input_bytes = samples_this_frame * stream_format.nBlockAlign;
		int final_bytes;

		// update the sample adjustment
		update_sample_adjustment(original_bytes);

		// copy data into the sound buffer
		copy_sample_data(buffer, input_bytes);

		// check for overflows
		final_bytes = bytes_in_stream_buffer();
		if (final_bytes < original_bytes)
			buffer_overflows++;
	}

	// reset underflow/overflow tracking
	if (++total_frames == INGORE_UNDERFLOW_FRAMES)
		buffer_overflows = buffer_underflows = 0;

	// update underflow/overflow logging
#if (DISPLAY_UNDEROVERFLOW || LOG_SOUND)
{
	static int prev_overflows, prev_underflows;
	if (total_frames > INGORE_UNDERFLOW_FRAMES && (buffer_overflows != prev_overflows || buffer_underflows != prev_underflows))
	{
		prev_overflows = buffer_overflows;
		prev_underflows = buffer_underflows;
#if DISPLAY_UNDEROVERFLOW
		usrintf_showmessage("overflows=%d underflows=%d", buffer_overflows, buffer_underflows);
#endif
#if LOG_SOUND
		fprintf(sound_log, "************************ overflows=%d underflows=%d\n", buffer_overflows, buffer_underflows);
#endif
	}
}
#endif

	// compute how many samples to generate next frame
	samples_left_over += samples_per_frame;
	samples_this_frame = (UINT32)samples_left_over;
	samples_left_over -= (double)samples_this_frame;

	samples_this_frame += current_adjustment;

	// return the samples to play this next frame
	return samples_this_frame;
}
Exemple #8
0
static WRITE16_HANDLER( ninjaw_sound_w )
{
	if (offset == 0)
		taitosound_port_w (0, data & 0xff);
	else if (offset == 1)
		taitosound_comm_w (0, data & 0xff);

#ifdef MAME_DEBUG
	if (data & 0xff00)
		usrintf_showmessage("ninjaw_sound_w to high byte: %04x",data);
#endif
}
void gionbana_romsel_w(int data)
{
	gionbana_gfxrom = (data & 0x0f);

	if ((0x20000 * gionbana_gfxrom) > (memory_region_length(REGION_GFX1) - 1))
	{
#ifdef MAME_DEBUG
		usrintf_showmessage("GFXROM BANK OVER!!");
#endif
		gionbana_gfxrom = 0;
	}
}
Exemple #10
0
static WRITE8_HANDLER( k88games_5f84_w )
{
	/* bits 0/1 coin counters */
	coin_counter_w(0,data & 0x01);
	coin_counter_w(1,data & 0x02);

	/* bit 2 enables ROM reading from the 051316 */
	/* also 5fce == 2 read roms, == 3 read ram */
	zoomreadroms = data & 0x04;

	if (data & 0xf8)
		usrintf_showmessage("5f84 = %02x",data);
}
Exemple #11
0
/*
0-3  unknown
4-5  sprite offset x
6	 flip screen
7	 sprite offset y
8-15 unknown
*/
static WRITE_HANDLER( namcos1_displaycontrol_w )
{
	unsigned char *disp_reg = &namcos1_controlram[0xff0];
	int newflip;

	switch(offset)
	{
	case 0x02: /* ?? */
		break;
	case 0x04: /* sprite offset X */
	case 0x05:
		sprite_fixed_sx = disp_reg[4]*256+disp_reg[5] - 151;
		if( sprite_fixed_sx > 480 ) sprite_fixed_sx -= 512;
		if( sprite_fixed_sx < -32 ) sprite_fixed_sx += 512;
		break;
	case 0x06: /* flip screen */
		newflip = (disp_reg[6]&1)^0x01;
		if(flipscreen != newflip)
		{
			namcos1_set_flipscreen(newflip);
		}
		break;
	case 0x07: /* sprite offset Y */
		sprite_fixed_sy = 239 - disp_reg[7];
		break;
	case 0x0a: /* ?? */
		/* 00 : blazer,dspirit,quester */
		/* 40 : others */
		break;
	case 0x0e: /* ?? */
		/* 00 : blazer,dangseed,dspirit,pacmania,quester */
		/* 06 : others */
	case 0x0f: /* ?? */
		/* 00 : dangseed,dspirit,pacmania */
		/* f1 : blazer */
		/* f8 : galaga88,quester */
		/* e7 : others */
		break;
	}
#if 0
	{
		char buf[80];
		sprintf(buf,"%02x:%02x:%02x:%02x:%02x%02x,%02x,%02x,%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x",
		disp_reg[0],disp_reg[1],disp_reg[2],disp_reg[3],
		disp_reg[4],disp_reg[5],disp_reg[6],disp_reg[7],
		disp_reg[8],disp_reg[9],disp_reg[10],disp_reg[11],
		disp_reg[12],disp_reg[13],disp_reg[14],disp_reg[15]);
		usrintf_showmessage(buf);
	}
#endif
}
Exemple #12
0
static void taitob_video_control (unsigned char data)
{
#if 0
	if (data != video_control)
		usrintf_showmessage("video control = %02x",data);
#endif

	video_control = data;

	if (video_control & 0x80)
		framebuffer_page = (~video_control & 0x40) >> 6;

	tilemap_set_flip(ALL_TILEMAPS, (video_control & 0x10) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0 );
}
static WRITE_HANDLER( labyrunr_bankswitch_w )
{
	int bankaddress;
	unsigned char *RAM = memory_region(REGION_CPU1);

if (data & 0xe0) usrintf_showmessage("bankswitch %02x",data);

	/* bits 0-2 = bank number */
	bankaddress = 0x10000 + (data & 0x07) * 0x4000;
	cpu_setbank(1,&RAM[bankaddress]);

	/* bits 3 and 4 are coin counters */
	coin_counter_w(0,data & 0x08);
	coin_counter_w(1,data & 0x10);
}
static WRITE_HANDLER( gbusters_snd_bankswitch_w )
{
	unsigned char *RAM = memory_region(REGION_SOUND1);

	int bank_B = 0x20000*((data >> 2) & 0x01);	/* ?? */
	int bank_A = 0x20000*((data) & 0x01);		/* ?? */

	K007232_bankswitch(0,RAM + bank_A,RAM + bank_B);

#if 0
	{
		char baf[40];
		sprintf(baf,"snd_bankswitch = %02x", data);
		usrintf_showmessage(baf);
	}
#endif
}
Exemple #15
0
static WRITE16_HANDLER( gotcha_lamps_w )
{
#if 0
	usrintf_showmessage("%c%c%c%c %c%c%c%c %c%c%c%c",
			(data & 0x001) ? 'R' : '-',
			(data & 0x002) ? 'G' : '-',
			(data & 0x004) ? 'B' : '-',
			(data & 0x008) ? 'S' : '-',
			(data & 0x010) ? 'R' : '-',
			(data & 0x020) ? 'G' : '-',
			(data & 0x040) ? 'B' : '-',
			(data & 0x080) ? 'S' : '-',
			(data & 0x100) ? 'R' : '-',
			(data & 0x200) ? 'G' : '-',
			(data & 0x400) ? 'B' : '-',
			(data & 0x800) ? 'S' : '-'
			);
#endif
}
Exemple #16
0
/* remap callback */
static int remap_colors( int num, int addr, int data )
{
    /* this is the protection. color codes are shuffled around */
    /* the ones with value 0xff are unknown */

    if ( addr >= 0x3f00 )
    {
        int newdata = remapped_colortable[ data & 0x3f ];

        if ( newdata != 0xff )
            data = newdata;

#ifdef MAME_DEBUG
        else
            usrintf_showmessage( "Unmatched color %02x, at address %04x", data & 0x3f, addr );
#endif
    }

    return data;
}
Exemple #17
0
static WRITE_HANDLER( aliens_coin_counter_w )
{
	/* bits 0-1 = coin counters */
	coin_counter_w(0,data & 0x01);
	coin_counter_w(1,data & 0x02);

	/* bit 5 = select work RAM or palette */
	palette_selected = data & 0x20;

	/* bit 6 = enable char ROM reading through the video RAM */
	K052109_set_RMRD_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);

	/* other bits unknown */
#if 0
{
	char baf[40];
	sprintf(baf,"%02x",data);
	usrintf_showmessage(baf);
}
#endif
}
Exemple #18
0
static WRITE16_HANDLER( unknown_w )
{
	usrintf_showmessage("write %04x to %04x", data, offset*2 + 0x6a);
}
Exemple #19
0
static WRITE_HANDLER( namcos1_spriteram_w )
{
	static const int sprite_sizemap[4] = {16,8,32,4};
	int num = offset / 0x10;
	struct gfx_object *object = &objectlist->objects[num+MAX_PLAYFIELDS];
	unsigned char *base = &namcos1_controlram[0x0800 + num*0x10];
	int sx, sy;
	int resize_x=0,resize_y=0;

	switch(offset&0x0f)
	{
	case 0x04:
		/* bit.6-7 : x size (16/8/32/4) */
		/* bit.5   : flipx */
		/* bit.3-4 : x offset */
		/* bit.0-2 : code.8-10 */
		object->width = sprite_sizemap[(data>>6)&3];
		object->flipx = ((data>>5)&1) ^ flipscreen;
		object->left = (data&0x18) & (~(object->width-1));
		object->code = (base[4]&7)*256 + base[5];
		resize_x=1;
		break;
	case 0x05:
		/* bit.0-7 : code.0-7 */
		object->code = (base[4]&7)*256 + base[5];
		break;
	case 0x06:
		/* bit.1-7 : color */
		/* bit.0   : x draw position.8 */
		object->color = data>>1;
		object->transparency = object->color==0x7f ? TRANSPARENCY_PEN_TABLE : TRANSPARENCY_PEN;
#if 0
		if(object->color==0x7f && !(Machine->gamedrv->flags & GAME_REQUIRES_16BIT))
			usrintf_showmessage("This driver requires GAME_REQUIRES_16BIT flag");
#endif
	case 0x07:
		/* bit.0-7 : x draw position.0-7 */
		resize_x=1;
		break;
	case 0x08:
		/* bit.5-7 : priority */
		/* bit.3-4 : y offset */
		/* bit.1-2 : y size (16/8/32/4) */
		/* bit.0   : flipy */
		object->priority = (data>>5)&7;
		object->height = sprite_sizemap[(data>>1)&3];
		object->flipy = (data&1) ^ flipscreen;
		object->top = (data&0x18) & (~(object->height-1));
	case 0x09:
		/* bit.0-7 : y draw position */
		resize_y=1;
		break;
	default:
		return;
	}
	if(resize_x)
	{
		/* sx */
		sx = (base[6]&1)*256 + base[7];
		sx += sprite_fixed_sx;

		if(flipscreen) sx = 210 - sx - object->width;

		if( sx > 480  ) sx -= 512;
		if( sx < -32  ) sx += 512;
		if( sx < -224 ) sx += 512;
		object->sx = sx;
	}
	if(resize_y)
	{
		/* sy */
		sy = sprite_fixed_sy - base[9];

		if(flipscreen) sy = 222 - sy;
		else sy = sy - object->height;

		if( sy > 224 ) sy -= 256;
		if( sy < -32 ) sy += 256;
		object->sy = sy;
	}
	object->dirty_flag = GFXOBJ_DIRTY_ALL;
}
Exemple #20
0
static void gionbana_gfxdraw(void)
{
	unsigned char *GFX = memory_region(REGION_GFX1);

	int x, y;
	int dx1, dx2, dy1, dy2;
	int startx, starty;
	int sizex, sizey;
	int skipx, skipy;
	int ctrx, ctry;
	int tflag1, tflag2;
	unsigned char color, color1, color2;
	unsigned char drawcolor1, drawcolor2;
	int gfxaddr;

	if (gionbana_flipx)
	{
		gionbana_drawx -= (gionbana_sizex << 1);
		startx = gionbana_sizex;
		sizex = ((gionbana_sizex ^ 0xff) + 1);
		skipx = -1;
	}
	else
	{
		gionbana_drawx = (gionbana_drawx - gionbana_sizex);
		startx = 0;
		sizex = (gionbana_sizex + 1);
		skipx = 1;
	}

	if (gionbana_flipy)
	{
		gionbana_drawy -= ((gionbana_sizey << 1) + 1);
		starty = gionbana_sizey;
		sizey = ((gionbana_sizey ^ 0xff) + 1);
		skipy = -1;
	}
	else
	{
		gionbana_drawy = (gionbana_drawy - gionbana_sizey - 1);
		starty = 0;
		sizey = (gionbana_sizey + 1);
		skipy = 1;
	}

	gfxaddr = ((gionbana_gfxrom << 17) + (gionbana_radry << 9) + (gionbana_radrx << 1));

	for (y = starty, ctry = sizey; ctry > 0; y += skipy, ctry--)
	{
		for (x = startx, ctrx = sizex; ctrx > 0; x += skipx, ctrx--)
		{
			if ((gfxaddr > (memory_region_length(REGION_GFX1) - 1)))
			{
#ifdef MAME_DEBUG
				usrintf_showmessage("GFXROM ADDRESS OVER!!");
#endif
				gfxaddr = 0;
			}

			color = GFX[gfxaddr++];

			if (gionbana_flipscreen)
			{
				dx1 = (((((gionbana_drawx + x) * 2) + 0) ^ 0x1ff) & 0x1ff);
				dx2 = (((((gionbana_drawx + x) * 2) + 1) ^ 0x1ff) & 0x1ff);
				dy1 = (((gionbana_drawy + y) ^ 0xff) & 0xff);
				dy2 = (((gionbana_drawy + y + (gionbana_scrolly2 & 0xff) + 2) ^ 0xff) & 0xff);
			}
			else
			{
				dx1 = ((((gionbana_drawx + x) * 2) + 0) & 0x1ff);
				dx2 = ((((gionbana_drawx + x) * 2) + 1) & 0x1ff);
				dy1 = ((gionbana_drawy + y) & 0xff);
				dy2 = ((gionbana_drawy + y + (-gionbana_scrolly2 & 0xff)) & 0xff);
			}

			if (gionbana_flipx)
			{
				/* flip */
				color1 = (color & 0xf0) >> 4;
				color2 = (color & 0x0f) >> 0;
			}
			else
			{
				/* normal */
				color1 = (color & 0x0f) >> 0;
				color2 = (color & 0xf0) >> 4;
			}

			drawcolor1 = gionbana_paltbl[((gionbana_paltblnum & 0x7f) << 4) + color1];
			drawcolor2 = gionbana_paltbl[((gionbana_paltblnum & 0x7f) << 4) + color2];

			if (gfxdraw_mode)
			{
				if (gionbana_vram & 0x01)
				{
					tflag1 = (drawcolor1 != 0xff) ? 1 : 0;
					tflag2 = (drawcolor2 != 0xff) ? 1 : 0;
				}
				else
				{
					if (gionbana_vram & 0x08)
					{
						tflag1 = (drawcolor1 != 0xff) ? 1 : 0;
						tflag2 = (drawcolor2 != 0xff) ? 1 : 0;
					}
					else
					{
						tflag1 = tflag2 = 1;
					}

					if (drawcolor1 == 0x7f) drawcolor1 = 0xff;
					if (drawcolor2 == 0x7f) drawcolor2 = 0xff;
				}
			}
			else
			{
				tflag1 = (drawcolor1 != 0xff) ? 1 : 0;
				tflag2 = (drawcolor2 != 0xff) ? 1 : 0;
				gionbana_vram = 0x02;
			}

			nb1413m3_busyctr++;

			if (gfxdraw_mode)
			{
				if (gionbana_vram & 0x01)
				{
					if (tflag1)
					{
						gionbana_videoram0[(dy1 * Machine->drv->screen_width) + dx1] = drawcolor1;
						plot_pixel(gionbana_tmpbitmap0, dx1, dy1, Machine->pens[drawcolor1]);
					}
					if (tflag2)
					{
						gionbana_videoram0[(dy1 * Machine->drv->screen_width) + dx2] = drawcolor2;
						plot_pixel(gionbana_tmpbitmap0, dx2, dy1, Machine->pens[drawcolor2]);
					}
				}
				if (gionbana_vram & 0x02)
				{
					if (tflag1)
					{
						gionbana_videoram1[(dy2 * Machine->drv->screen_width) + dx1] = drawcolor1;
						plot_pixel(gionbana_tmpbitmap1, dx1, dy2, Machine->pens[drawcolor1]);
					}
					if (tflag2)
					{
						gionbana_videoram1[(dy2 * Machine->drv->screen_width) + dx2] = drawcolor2;
						plot_pixel(gionbana_tmpbitmap1, dx2, dy2, Machine->pens[drawcolor2]);
					}
				}
			}
			else
			{
				if (tflag1)
				{
					gionbana_videoram0[(dy2 * Machine->drv->screen_width) + dx1] = drawcolor1;
					plot_pixel(gionbana_tmpbitmap0, dx1, dy2, Machine->pens[drawcolor1]);
				}
				if (tflag2)
				{
					gionbana_videoram0[(dy2 * Machine->drv->screen_width) + dx2] = drawcolor2;
					plot_pixel(gionbana_tmpbitmap0, dx2, dy2, Machine->pens[drawcolor2]);
				}
			}
		}
	}
Exemple #21
0
static WRITE_HANDLER( display_value )
{
	usrintf_showmessage("d800=%x",data);
}