diff options
author | Aaron Giles <aaron@aarongiles.com> | 2011-03-17 07:22:09 +0000 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2011-03-17 07:22:09 +0000 |
commit | 4be37affb85832101298e20317384d2bd677f4f4 (patch) | |
tree | 94c621faeb1583ed0f7de6fbc116f3766bd6ac95 /src/mame/drivers/pkscram.c | |
parent | 36fdd337acd67af266ed1f6bb67f58d28668e1d1 (diff) |
Continuation of static/global cleanup. [Atari Ace]
Diffstat (limited to 'src/mame/drivers/pkscram.c')
-rw-r--r-- | src/mame/drivers/pkscram.c | 109 |
1 files changed, 66 insertions, 43 deletions
diff --git a/src/mame/drivers/pkscram.c b/src/mame/drivers/pkscram.c index 33304d2122f..34edecc0e21 100644 --- a/src/mame/drivers/pkscram.c +++ b/src/mame/drivers/pkscram.c @@ -16,39 +16,53 @@ driver by David Haywood and few bits by Pierpaolo Prazzoli #include "sound/2203intf.h" #include "machine/nvram.h" -static int interrupt_scanline=192; -static UINT16 out = 0; -static UINT8 interrupt_line_active=0; +class pkscram_state : public driver_device +{ +public: + pkscram_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT16 out; + UINT8 interrupt_line_active; + UINT16* pkscramble_fgtilemap_ram; + UINT16* pkscramble_mdtilemap_ram; + UINT16* pkscramble_bgtilemap_ram; + tilemap_t *fg_tilemap; + tilemap_t *md_tilemap; + tilemap_t *bg_tilemap; +}; + -static UINT16* pkscramble_fgtilemap_ram; -static UINT16* pkscramble_mdtilemap_ram; -static UINT16* pkscramble_bgtilemap_ram; +enum { interrupt_scanline=192 }; -static tilemap_t *fg_tilemap, *md_tilemap, *bg_tilemap; static WRITE16_HANDLER( pkscramble_fgtilemap_w ) { - COMBINE_DATA(&pkscramble_fgtilemap_ram[offset]); - tilemap_mark_tile_dirty(fg_tilemap, offset >> 1); + pkscram_state *state = space->machine->driver_data<pkscram_state>(); + COMBINE_DATA(&state->pkscramble_fgtilemap_ram[offset]); + tilemap_mark_tile_dirty(state->fg_tilemap, offset >> 1); } static WRITE16_HANDLER( pkscramble_mdtilemap_w ) { - COMBINE_DATA(&pkscramble_mdtilemap_ram[offset]); - tilemap_mark_tile_dirty(md_tilemap, offset >> 1); + pkscram_state *state = space->machine->driver_data<pkscram_state>(); + COMBINE_DATA(&state->pkscramble_mdtilemap_ram[offset]); + tilemap_mark_tile_dirty(state->md_tilemap, offset >> 1); } static WRITE16_HANDLER( pkscramble_bgtilemap_w ) { - COMBINE_DATA(&pkscramble_bgtilemap_ram[offset]); - tilemap_mark_tile_dirty(bg_tilemap, offset >> 1); + pkscram_state *state = space->machine->driver_data<pkscram_state>(); + COMBINE_DATA(&state->pkscramble_bgtilemap_ram[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap, offset >> 1); } // input bit 0x20 in port1 should stay low until bit 0x20 is written here, then // it should stay high for some time (currently we cheat keeping the input always active) static WRITE16_HANDLER( pkscramble_output_w ) { + pkscram_state *state = space->machine->driver_data<pkscram_state>(); // OUTPUT // BIT // 0x0001 -> STL @@ -69,12 +83,12 @@ static WRITE16_HANDLER( pkscramble_output_w ) // 0x2000 -> vblank interrupt enable // 0x4000 -> set on every second frame - not used - out = data; + state->out = data; - if (!(out & 0x2000) && interrupt_line_active) + if (!(state->out & 0x2000) && state->interrupt_line_active) { cputag_set_input_line(space->machine, "maincpu", 1, CLEAR_LINE); - interrupt_line_active = 0; + state->interrupt_line_active = 0; } coin_counter_w(space->machine, 0, data & 0x80); @@ -85,9 +99,9 @@ static ADDRESS_MAP_START( pkscramble_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_RANGE(0x040000, 0x0400ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x041000, 0x043fff) AM_RAM // main ram - AM_RANGE(0x044000, 0x044fff) AM_RAM_WRITE(pkscramble_fgtilemap_w) AM_BASE(&pkscramble_fgtilemap_ram) // fg tilemap - AM_RANGE(0x045000, 0x045fff) AM_RAM_WRITE(pkscramble_mdtilemap_w) AM_BASE(&pkscramble_mdtilemap_ram) // md tilemap (just a copy of fg?) - AM_RANGE(0x046000, 0x046fff) AM_RAM_WRITE(pkscramble_bgtilemap_w) AM_BASE(&pkscramble_bgtilemap_ram) // bg tilemap + AM_RANGE(0x044000, 0x044fff) AM_RAM_WRITE(pkscramble_fgtilemap_w) AM_BASE_MEMBER(pkscram_state, pkscramble_fgtilemap_ram) // fg tilemap + AM_RANGE(0x045000, 0x045fff) AM_RAM_WRITE(pkscramble_mdtilemap_w) AM_BASE_MEMBER(pkscram_state, pkscramble_mdtilemap_ram) // md tilemap (just a copy of fg?) + AM_RANGE(0x046000, 0x046fff) AM_RAM_WRITE(pkscramble_bgtilemap_w) AM_BASE_MEMBER(pkscram_state, pkscramble_bgtilemap_ram) // bg tilemap AM_RANGE(0x047000, 0x047fff) AM_RAM // unused AM_RANGE(0x048000, 0x048fff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x049000, 0x049001) AM_READ_PORT("DSW") @@ -169,61 +183,67 @@ INPUT_PORTS_END static TILE_GET_INFO( get_bg_tile_info ) { - int tile = pkscramble_bgtilemap_ram[tile_index*2]; - int color = pkscramble_bgtilemap_ram[tile_index*2 + 1] & 0x7f; + pkscram_state *state = machine->driver_data<pkscram_state>(); + int tile = state->pkscramble_bgtilemap_ram[tile_index*2]; + int color = state->pkscramble_bgtilemap_ram[tile_index*2 + 1] & 0x7f; SET_TILE_INFO(0,tile,color,0); } static TILE_GET_INFO( get_md_tile_info ) { - int tile = pkscramble_mdtilemap_ram[tile_index*2]; - int color = pkscramble_mdtilemap_ram[tile_index*2 + 1] & 0x7f; + pkscram_state *state = machine->driver_data<pkscram_state>(); + int tile = state->pkscramble_mdtilemap_ram[tile_index*2]; + int color = state->pkscramble_mdtilemap_ram[tile_index*2 + 1] & 0x7f; SET_TILE_INFO(0,tile,color,0); } static TILE_GET_INFO( get_fg_tile_info ) { - int tile = pkscramble_fgtilemap_ram[tile_index*2]; - int color = pkscramble_fgtilemap_ram[tile_index*2 + 1] & 0x7f; + pkscram_state *state = machine->driver_data<pkscram_state>(); + int tile = state->pkscramble_fgtilemap_ram[tile_index*2]; + int color = state->pkscramble_fgtilemap_ram[tile_index*2 + 1] & 0x7f; SET_TILE_INFO(0,tile,color,0); } static TIMER_DEVICE_CALLBACK( scanline_callback ) { + pkscram_state *state = timer.machine->driver_data<pkscram_state>(); if (param == interrupt_scanline) { - if (out & 0x2000) + if (state->out & 0x2000) cputag_set_input_line(timer.machine, "maincpu", 1, ASSERT_LINE); timer.adjust(timer.machine->primary_screen->time_until_pos(param + 1), param+1); - interrupt_line_active = 1; + state->interrupt_line_active = 1; } else { - if (interrupt_line_active) + if (state->interrupt_line_active) cputag_set_input_line(timer.machine, "maincpu", 1, CLEAR_LINE); timer.adjust(timer.machine->primary_screen->time_until_pos(interrupt_scanline), interrupt_scanline); - interrupt_line_active = 0; + state->interrupt_line_active = 0; } } static VIDEO_START( pkscramble ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8,32,32); - md_tilemap = tilemap_create(machine, get_md_tile_info, tilemap_scan_rows, 8, 8,32,32); - fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8,32,32); + pkscram_state *state = machine->driver_data<pkscram_state>(); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8,32,32); + state->md_tilemap = tilemap_create(machine, get_md_tile_info, tilemap_scan_rows, 8, 8,32,32); + state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8,32,32); - tilemap_set_transparent_pen(md_tilemap,15); - tilemap_set_transparent_pen(fg_tilemap,15); + tilemap_set_transparent_pen(state->md_tilemap,15); + tilemap_set_transparent_pen(state->fg_tilemap,15); } static SCREEN_UPDATE( pkscramble ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - tilemap_draw(bitmap,cliprect,md_tilemap,0,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); + pkscram_state *state = screen->machine->driver_data<pkscram_state>(); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,state->md_tilemap,0,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0); return 0; } @@ -245,7 +265,8 @@ GFXDECODE_END static void irqhandler(device_t *device, int irq) { - if(out & 0x10) + pkscram_state *state = device->machine->driver_data<pkscram_state>(); + if(state->out & 0x10) cputag_set_input_line(device->machine, "maincpu", 2, irq ? ASSERT_LINE : CLEAR_LINE); } @@ -261,19 +282,21 @@ static const ym2203_interface ym2203_config = static MACHINE_START( pkscramble) { - state_save_register_global(machine, out); - state_save_register_global(machine, interrupt_line_active); + pkscram_state *state = machine->driver_data<pkscram_state>(); + state_save_register_global(machine, state->out); + state_save_register_global(machine, state->interrupt_line_active); } static MACHINE_RESET( pkscramble) { - out = 0; - interrupt_line_active=0; + pkscram_state *state = machine->driver_data<pkscram_state>(); + state->out = 0; + state->interrupt_line_active=0; timer_device *scanline_timer = machine->device<timer_device>("scan_timer"); scanline_timer->adjust(machine->primary_screen->time_until_pos(interrupt_scanline), interrupt_scanline); } -static MACHINE_CONFIG_START( pkscramble, driver_device ) +static MACHINE_CONFIG_START( pkscramble, pkscram_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, 8000000 ) MCFG_CPU_PROGRAM_MAP(pkscramble_map) |