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; } } }
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; } } }
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); }
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; } } } }
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; } } }
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; } } }