61
61
Palette GGGGGRRRRRBBBBBx
62
62
***************************************************************************/
64
WRITE16_HANDLER( hyprduel_paletteram_w )
64
WRITE16_MEMBER(hyprduel_state::hyprduel_paletteram_w)
66
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
67
data = COMBINE_DATA(&state->m_paletteram[offset]);
68
palette_set_color_rgb(space->machine(), offset, pal5bit(data >> 6), pal5bit(data >> 11), pal5bit(data >> 1));
66
data = COMBINE_DATA(&m_paletteram[offset]);
67
palette_set_color_rgb(machine(), offset, pal5bit(data >> 6), pal5bit(data >> 11), pal5bit(data >> 1));
275
274
get_tile_info_8bit(machine, tileinfo, tile_index, 2, state->m_vram_2);
278
WRITE16_HANDLER( hyprduel_vram_0_w )
280
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
281
hyprduel_vram_w(space->machine(), offset, data, mem_mask, 0, state->m_vram_0);
284
WRITE16_HANDLER( hyprduel_vram_1_w )
286
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
287
hyprduel_vram_w(space->machine(), offset, data, mem_mask, 1, state->m_vram_1);
290
WRITE16_HANDLER( hyprduel_vram_2_w )
292
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
293
hyprduel_vram_w(space->machine(), offset, data, mem_mask, 2, state->m_vram_2);
277
WRITE16_MEMBER(hyprduel_state::hyprduel_vram_0_w)
279
hyprduel_vram_w(machine(), offset, data, mem_mask, 0, m_vram_0);
282
WRITE16_MEMBER(hyprduel_state::hyprduel_vram_1_w)
284
hyprduel_vram_w(machine(), offset, data, mem_mask, 1, m_vram_1);
287
WRITE16_MEMBER(hyprduel_state::hyprduel_vram_2_w)
289
hyprduel_vram_w(machine(), offset, data, mem_mask, 2, m_vram_2);
297
293
/* Dirty the relevant tilemap when its window changes */
298
WRITE16_HANDLER( hyprduel_window_w )
294
WRITE16_MEMBER(hyprduel_state::hyprduel_window_w)
300
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
301
UINT16 olddata = state->m_window[offset];
302
UINT16 newdata = COMBINE_DATA(&state->m_window[offset]);
296
UINT16 olddata = m_window[offset];
297
UINT16 newdata = COMBINE_DATA(&m_window[offset]);
303
298
if (newdata != olddata)
306
state->m_bg_tilemap[offset]->mark_all_dirty();
301
m_bg_tilemap[offset]->mark_all_dirty();
354
349
static void expand_gfx1(hyprduel_state &state)
356
UINT8 *base_gfx = state.machine().region("gfx1")->base();
357
UINT32 length = 2 * state.machine().region("gfx1")->bytes();
351
UINT8 *base_gfx = state.machine().root_device().memregion("gfx1")->base();
352
UINT32 length = 2 * state.machine().root_device().memregion("gfx1")->bytes();
358
353
state.m_expanded_gfx1 = auto_alloc_array(state.machine(), UINT8, length);
359
354
for (int i = 0; i < length; i += 2)
369
364
hyprduel_state *state = machine.driver_data<hyprduel_state>();
370
365
expand_gfx1(*state);
371
366
alloc_empty_tiles(machine);
372
state->m_tiletable_old = auto_alloc_array(machine, UINT16, state->m_tiletable_size / 2);
373
state->m_dirtyindex = auto_alloc_array(machine, UINT8, state->m_tiletable_size / 4);
367
state->m_tiletable_old = auto_alloc_array(machine, UINT16, state->m_tiletable.bytes() / 2);
368
state->m_dirtyindex = auto_alloc_array(machine, UINT8, state->m_tiletable.bytes() / 4);
375
state->save_pointer(NAME(state->m_tiletable_old), state->m_tiletable_size / 2);
376
state->save_pointer(NAME(state->m_dirtyindex), state->m_tiletable_size / 4);
370
state->save_pointer(NAME(state->m_tiletable_old), state->m_tiletable.bytes() / 2);
371
state->save_pointer(NAME(state->m_dirtyindex), state->m_tiletable.bytes() / 4);
378
373
state->m_bg_tilemap[0] = tilemap_create(machine, get_tile_info_0_8bit, tilemap_scan_rows, 8, 8, WIN_NX, WIN_NY);
379
374
state->m_bg_tilemap[1] = tilemap_create(machine, get_tile_info_1_8bit, tilemap_scan_rows, 8, 8, WIN_NX, WIN_NY);
478
473
hyprduel_state *state = machine.driver_data<hyprduel_state>();
479
474
UINT8 *base_gfx4 = state->m_expanded_gfx1;
480
UINT8 *base_gfx8 = machine.region("gfx1")->base();
481
UINT32 gfx_size = machine.region("gfx1")->bytes();
475
UINT8 *base_gfx8 = state->memregion("gfx1")->base();
476
UINT32 gfx_size = state->memregion("gfx1")->bytes();
483
478
int max_x = machine.primary_screen->width();
484
479
int max_y = machine.primary_screen->height();
486
int max_sprites = state->m_spriteram_size / 8;
481
int max_sprites = state->m_spriteram.bytes() / 8;
487
482
int sprites = state->m_videoregs[0x00 / 2] % max_sprites;
489
484
int color_start = ((state->m_videoregs[0x08 / 2] & 0xf) << 4) + 0x100;
617
612
***************************************************************************/
619
WRITE16_HANDLER( hyprduel_scrollreg_w )
614
WRITE16_MEMBER(hyprduel_state::hyprduel_scrollreg_w)
621
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
622
UINT16 window = state->m_window[offset];
616
UINT16 window = m_window[offset];
624
COMBINE_DATA(&state->m_scroll[offset]);
618
COMBINE_DATA(&m_scroll[offset]);
626
620
if (offset & 0x01)
627
state->m_bg_tilemap[offset / 2]->set_scrollx(0, state->m_scroll[offset] - window - (window & 7));
621
m_bg_tilemap[offset / 2]->set_scrollx(0, m_scroll[offset] - window - (window & 7));
629
state->m_bg_tilemap[offset / 2]->set_scrolly(0, state->m_scroll[offset] - window - (window & 7));
623
m_bg_tilemap[offset / 2]->set_scrolly(0, m_scroll[offset] - window - (window & 7));
632
WRITE16_HANDLER( hyprduel_scrollreg_init_w )
626
WRITE16_MEMBER(hyprduel_state::hyprduel_scrollreg_init_w)
634
hyprduel_state *state = space->machine().driver_data<hyprduel_state>();
637
630
for (i = 0; i < 3; i++)
639
UINT16 wx = state->m_window[i * 2 + 1];
640
UINT16 wy = state->m_window[i * 2 + 0];
642
state->m_scroll[i * 2 + 1] = data;
643
state->m_scroll[i * 2 + 0] = data;
645
state->m_bg_tilemap[i]->set_scrollx(0, data - wx - (wx & 7));
646
state->m_bg_tilemap[i]->set_scrolly(0, data - wy - (wy & 7));
632
UINT16 wx = m_window[i * 2 + 1];
633
UINT16 wy = m_window[i * 2 + 0];
635
m_scroll[i * 2 + 1] = data;
636
m_scroll[i * 2 + 0] = data;
638
m_bg_tilemap[i]->set_scrollx(0, data - wx - (wx & 7));
639
m_bg_tilemap[i]->set_scrolly(0, data - wy - (wy & 7));
697
memset(state->m_dirtyindex, 0, state->m_tiletable_size / 4);
698
for (i = 0; i < state->m_tiletable_size / 4; i++)
690
memset(state->m_dirtyindex, 0, state->m_tiletable.bytes() / 4);
691
for (i = 0; i < state->m_tiletable.bytes() / 4; i++)
700
693
UINT32 tile_new = (state->m_tiletable[2 * i + 0] << 16 ) + state->m_tiletable[2 * i + 1];
701
694
UINT32 tile_old = (state->m_tiletable_old[2 * i + 0] << 16 ) + state->m_tiletable_old[2 * i + 1];