예제 #1
0
void batman_scanline_update(int scanline)
{
	/* update the scanline parameters */
	if (scanline <= Machine->visible_area.max_y && atarivc_state.rowscroll_enable)
	{
		data16_t *base = &atarigen_alpha[scanline / 8 * 64 + 48];
		int scan, i;

		for (scan = 0; scan < 8; scan++, scanline++)
			for (i = 0; i < 2; i++)
			{
				int data = *base++;
				switch (data & 15)
				{
					case 9:
						force_partial_update(scanline - 1);
						atarivc_state.mo_xscroll = (data >> 7) & 0x1ff;
						atarimo_set_xscroll(0, atarivc_state.mo_xscroll);
						break;

					case 10:
						force_partial_update(scanline - 1);
						atarivc_state.pf1_xscroll_raw = (data >> 7) & 0x1ff;
						atarivc_update_pf_xscrolls();
						tilemap_set_scrollx(atarigen_playfield_tilemap, 0, atarivc_state.pf0_xscroll);
						tilemap_set_scrollx(atarigen_playfield2_tilemap, 0, atarivc_state.pf1_xscroll);
						break;

					case 11:
						force_partial_update(scanline - 1);
						atarivc_state.pf0_xscroll_raw = (data >> 7) & 0x1ff;
						atarivc_update_pf_xscrolls();
						tilemap_set_scrollx(atarigen_playfield_tilemap, 0, atarivc_state.pf0_xscroll);
						break;

					case 13:
						force_partial_update(scanline - 1);
						atarivc_state.mo_yscroll = (data >> 7) & 0x1ff;
						atarimo_set_yscroll(0, atarivc_state.mo_yscroll);
						break;

					case 14:
						force_partial_update(scanline - 1);
						atarivc_state.pf1_yscroll = (data >> 7) & 0x1ff;
						tilemap_set_scrolly(atarigen_playfield2_tilemap, 0, atarivc_state.pf1_yscroll);
						break;

					case 15:
						force_partial_update(scanline - 1);
						atarivc_state.pf0_yscroll = (data >> 7) & 0x1ff;
						tilemap_set_scrolly(atarigen_playfield_tilemap, 0, atarivc_state.pf0_yscroll);
						break;
				}
			}
	}
예제 #2
0
void batman_scanline_update(int scanline)
{
	/* update the scanline parameters */
	if (scanline <= Machine->visible_area.max_y && atarivc_state.rowscroll_enable)
	{
		data16_t *base = &atarian_0_base[scanline / 8 * 64 + 48];
		int i;

		for (i = 0; i < 16; i++)
		{
			int data = base[i];
			switch (data & 15)
			{
				case 9:
					atarivc_state.mo_xscroll = (data >> 7) & 0x1ff;
					atarimo_set_xscroll(0, atarivc_state.mo_xscroll, scanline + i/2);
					break;

				case 10:
					atarivc_state.pf1_xscroll_raw = (data >> 7) & 0x1ff;
					atarivc_update_pf_xscrolls();
					ataripf_set_xscroll(0, atarivc_state.pf0_xscroll, scanline + i/2);
					ataripf_set_xscroll(1, atarivc_state.pf1_xscroll, scanline + i/2);
					break;

				case 11:
					atarivc_state.pf0_xscroll_raw = (data >> 7) & 0x1ff;
					atarivc_update_pf_xscrolls();
					ataripf_set_xscroll(0, atarivc_state.pf0_xscroll, scanline + i/2);
					break;

				case 13:
					atarivc_state.mo_yscroll = (data >> 7) & 0x1ff;
					atarimo_set_yscroll(0, atarivc_state.mo_yscroll, scanline + i/2);
					break;

				case 14:
					atarivc_state.pf1_yscroll = (data >> 7) & 0x1ff;
					ataripf_set_yscroll(1, atarivc_state.pf1_yscroll, scanline + i/2);
					break;

				case 15:
					atarivc_state.pf0_yscroll = (data >> 7) & 0x1ff;
					atarimo_set_yscroll(0, atarivc_state.pf0_yscroll, scanline + i/2);
					break;
			}

		}
	}
예제 #3
0
VIDEO_START_MEMBER(rampart_state,rampart)
{
	static const atarimo_desc modesc =
	{
		0,                  /* index to which gfx system */
		1,                  /* number of motion object banks */
		1,                  /* are the entries linked? */
		0,                  /* are the entries split? */
		0,                  /* render in reverse order? */
		0,                  /* render in swapped X/Y order? */
		0,                  /* does the neighbor bit affect the next object? */
		8,                  /* pixels per SLIP entry (0 for no-slip) */
		0,                  /* pixel offset for SLIPs */
		0,                  /* maximum number of links to visit/scanline (0=all) */

		0x100,              /* base palette entry */
		0x100,              /* maximum number of colors */
		0,                  /* transparent pen index */

		{{ 0x00ff,0,0,0 }}, /* mask for the link */
		{{ 0 }},            /* mask for the graphics bank */
		{{ 0,0x7fff,0,0 }}, /* mask for the code index */
		{{ 0 }},            /* mask for the upper code index */
		{{ 0,0,0x000f,0 }}, /* mask for the color */
		{{ 0,0,0xff80,0 }}, /* mask for the X position */
		{{ 0,0,0,0xff80 }}, /* mask for the Y position */
		{{ 0,0,0,0x0070 }}, /* mask for the width, in tiles*/
		{{ 0,0,0,0x0007 }}, /* mask for the height, in tiles */
		{{ 0,0x8000,0,0 }}, /* mask for the horizontal flip */
		{{ 0 }},            /* mask for the vertical flip */
		{{ 0 }},            /* mask for the priority */
		{{ 0 }},            /* mask for the neighbor */
		{{ 0 }},            /* mask for absolute coordinates */

		{{ 0 }},            /* mask for the special value */
		0,                  /* resulting value to indicate "special" */
		0,                  /* callback routine for special entries */
	};

	/* initialize the motion objects */
	atarimo_init(machine(), 0, &modesc);

	/* set the intial scroll offset */
	atarimo_set_xscroll(0, -12);
}
예제 #4
0
파일: vindictr.c 프로젝트: clobber/UME
void vindictr_state::scanline_update(screen_device &screen, int scanline)
{
	UINT16 *base = &m_alpha[((scanline - 8) / 8) * 64 + 42];
	int x;

	/* keep in range */
	if (base < m_alpha)
		base += 0x7c0;
	else if (base >= &m_alpha[0x7c0])
		return;

	/* update the current parameters */
	for (x = 42; x < 64; x++)
	{
		UINT16 data = *base++;

		switch ((data >> 9) & 7)
		{
			case 2:     /* /PFB */
				if (m_playfield_tile_bank != (data & 7))
				{
					screen.update_partial(scanline - 1);
					m_playfield_tile_bank = data & 7;
					m_playfield_tilemap->mark_all_dirty();
				}
				break;

			case 3:     /* /PFHSLD */
				if (m_playfield_xscroll != (data & 0x1ff))
				{
					screen.update_partial(scanline - 1);
					m_playfield_tilemap->set_scrollx(0, data);
					m_playfield_xscroll = data & 0x1ff;
				}
				break;

			case 4:     /* /MOHS */
				if (atarimo_get_xscroll(0) != (data & 0x1ff))
				{
					screen.update_partial(scanline - 1);
					atarimo_set_xscroll(0, data & 0x1ff);
				}
				break;

			case 5:     /* /PFSPC */
				break;

			case 6:     /* /VIRQ */
				scanline_int_gen(*subdevice("maincpu"));
				break;

			case 7:     /* /PFVS */
			{
				/* a new vscroll latches the offset into a counter; we must adjust for this */
				int offset = scanline;
				const rectangle &visible_area = screen.visible_area();
				if (offset > visible_area.max_y)
					offset -= visible_area.max_y + 1;

				if (m_playfield_yscroll != ((data - offset) & 0x1ff))
				{
					screen.update_partial(scanline - 1);
					m_playfield_tilemap->set_scrolly(0, data - offset);
					atarimo_set_yscroll(0, (data - offset) & 0x1ff);
				}
				break;
			}
		}
	}
}
예제 #5
0
파일: batman.c 프로젝트: poliva/mame-rr
void batman_scanline_update(screen_device &screen, int scanline)
{
	batman_state *state = screen.machine().driver_data<batman_state>();

	/* update the scanline parameters */
	if (scanline <= screen.visible_area().max_y && state->m_atarivc_state.rowscroll_enable)
	{
		UINT16 *base = &state->m_alpha[scanline / 8 * 64 + 48];
		int scan, i;

		for (scan = 0; scan < 8; scan++, scanline++)
			for (i = 0; i < 2; i++)
			{
				int data = *base++;
				switch (data & 15)
				{
					case 9:
						if (scanline > 0)
							screen.update_partial(scanline - 1);
						state->m_atarivc_state.mo_xscroll = (data >> 7) & 0x1ff;
						atarimo_set_xscroll(0, state->m_atarivc_state.mo_xscroll);
						break;

					case 10:
						if (scanline > 0)
							screen.update_partial(scanline - 1);
						state->m_atarivc_state.pf1_xscroll_raw = (data >> 7) & 0x1ff;
						atarivc_update_pf_xscrolls(state);
						tilemap_set_scrollx(state->m_playfield_tilemap, 0, state->m_atarivc_state.pf0_xscroll);
						tilemap_set_scrollx(state->m_playfield2_tilemap, 0, state->m_atarivc_state.pf1_xscroll);
						break;

					case 11:
						if (scanline > 0)
							screen.update_partial(scanline - 1);
						state->m_atarivc_state.pf0_xscroll_raw = (data >> 7) & 0x1ff;
						atarivc_update_pf_xscrolls(state);
						tilemap_set_scrollx(state->m_playfield_tilemap, 0, state->m_atarivc_state.pf0_xscroll);
						break;

					case 13:
						if (scanline > 0)
							screen.update_partial(scanline - 1);
						state->m_atarivc_state.mo_yscroll = (data >> 7) & 0x1ff;
						atarimo_set_yscroll(0, state->m_atarivc_state.mo_yscroll);
						break;

					case 14:
						if (scanline > 0)
							screen.update_partial(scanline - 1);
						state->m_atarivc_state.pf1_yscroll = (data >> 7) & 0x1ff;
						tilemap_set_scrolly(state->m_playfield2_tilemap, 0, state->m_atarivc_state.pf1_yscroll);
						break;

					case 15:
						if (scanline > 0)
							screen.update_partial(scanline - 1);
						state->m_atarivc_state.pf0_yscroll = (data >> 7) & 0x1ff;
						tilemap_set_scrolly(state->m_playfield_tilemap, 0, state->m_atarivc_state.pf0_yscroll);
						break;
				}
			}
	}
예제 #6
0
void batman_scanline_update(const device_config *screen, int scanline)
{
	/* update the scanline parameters */
	if (scanline <= video_screen_get_visible_area(screen)->max_y && atarivc_state.rowscroll_enable)
	{
		UINT16 *base = &atarigen_alpha[scanline / 8 * 64 + 48];
		int scan, i;

		for (scan = 0; scan < 8; scan++, scanline++)
			for (i = 0; i < 2; i++)
			{
				int data = *base++;
				switch (data & 15)
				{
					case 9:
						if (scanline > 0)
							video_screen_update_partial(screen, scanline - 1);
						atarivc_state.mo_xscroll = (data >> 7) & 0x1ff;
						atarimo_set_xscroll(0, atarivc_state.mo_xscroll);
						break;

					case 10:
						if (scanline > 0)
							video_screen_update_partial(screen, scanline - 1);
						atarivc_state.pf1_xscroll_raw = (data >> 7) & 0x1ff;
						atarivc_update_pf_xscrolls();
						tilemap_set_scrollx(atarigen_playfield_tilemap, 0, atarivc_state.pf0_xscroll);
						tilemap_set_scrollx(atarigen_playfield2_tilemap, 0, atarivc_state.pf1_xscroll);
						break;

					case 11:
						if (scanline > 0)
							video_screen_update_partial(screen, scanline - 1);
						atarivc_state.pf0_xscroll_raw = (data >> 7) & 0x1ff;
						atarivc_update_pf_xscrolls();
						tilemap_set_scrollx(atarigen_playfield_tilemap, 0, atarivc_state.pf0_xscroll);
						break;

					case 13:
						if (scanline > 0)
							video_screen_update_partial(screen, scanline - 1);
						atarivc_state.mo_yscroll = (data >> 7) & 0x1ff;
						atarimo_set_yscroll(0, atarivc_state.mo_yscroll);
						break;

					case 14:
						if (scanline > 0)
							video_screen_update_partial(screen, scanline - 1);
						atarivc_state.pf1_yscroll = (data >> 7) & 0x1ff;
						tilemap_set_scrolly(atarigen_playfield2_tilemap, 0, atarivc_state.pf1_yscroll);
						break;

					case 15:
						if (scanline > 0)
							video_screen_update_partial(screen, scanline - 1);
						atarivc_state.pf0_yscroll = (data >> 7) & 0x1ff;
						tilemap_set_scrolly(atarigen_playfield_tilemap, 0, atarivc_state.pf0_yscroll);
						break;
				}
			}
	}