INPUT_PORTS_END /*************************************************************************** Machine Driver ***************************************************************************/ static void simpsons_objdma( running_machine &machine ) { simpsons_state *state = machine.driver_data<simpsons_state>(); int counter, num_inactive; UINT16 *src, *dst; k053247_get_ram(state->m_k053246, &dst); counter = k053247_get_dy(state->m_k053246); src = state->m_spriteram; num_inactive = counter = 256; do { if ((*src & 0x8000) && (*src & 0xff)) { memcpy(dst, src, 0x10); dst += 8; num_inactive--; } src += 8; } while (--counter); if (num_inactive) do { *dst = 0; dst += 8; } while (--num_inactive); }
static void xexex_objdma( running_machine &machine, int limiter ) { xexex_state *state = machine.driver_data<xexex_state>(); int counter, num_inactive; UINT16 *src, *dst; counter = state->m_frame; state->m_frame = machine.primary_screen->frame_number(); if (limiter && counter == state->m_frame) return; // make sure we only do DMA transfer once per frame k053247_get_ram(state->m_k053246, &dst); counter = k053247_get_dy(state->m_k053246); src = state->m_spriteram; num_inactive = counter = 256; do { if (*src & 0x8000) { dst[0] = src[0x0]; dst[1] = src[0x2]; dst[2] = src[0x4]; dst[3] = src[0x6]; dst[4] = src[0x8]; dst[5] = src[0xa]; dst[6] = src[0xc]; dst[7] = src[0xe]; dst += 8; num_inactive--; } src += 0x40; } while (--counter); if (num_inactive) do { *dst = 0; dst += 8; } while (--num_inactive); }
static void moo_objdma( running_machine &machine, int type ) { moo_state *state = machine.driver_data<moo_state>(); int num_inactive; UINT16 *src, *dst, zmask; int counter = k053247_get_dy(state->m_k053246); k053247_get_ram(state->m_k053246, &dst); src = state->m_spriteram; num_inactive = counter = 256; zmask = (type) ? 0x00ff : 0xffff; do { if ((*src & 0x8000) && (*src & zmask)) { memcpy(dst, src, 0x10); dst += 8; num_inactive--; } src += 0x80; } while (--counter); if (num_inactive) do { *dst = 0; dst += 8; } while (--num_inactive); }