summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/kingdrby.c
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2011-03-03 17:22:05 +0000
committer Aaron Giles <aaron@aarongiles.com>2011-03-03 17:22:05 +0000
commit92d1d14efc889ee37f3aa7ed7991b6a93d8413a8 (patch)
tree07731d4f981ece547c28d21b32739f3d840cb3ed /src/mame/drivers/kingdrby.c
parent74deaf0a952e228f761a6320d30f5187e2103777 (diff)
Updated sigma/stern/subsino/tatsumi/tch/tecfri/technos/tehkan to driver_devices.
[Atari Ace]
Diffstat (limited to 'src/mame/drivers/kingdrby.c')
-rw-r--r--src/mame/drivers/kingdrby.c110
1 files changed, 68 insertions, 42 deletions
diff --git a/src/mame/drivers/kingdrby.c b/src/mame/drivers/kingdrby.c
index 3f81d2c80bb..da65ca2646a 100644
--- a/src/mame/drivers/kingdrby.c
+++ b/src/mame/drivers/kingdrby.c
@@ -72,10 +72,28 @@ sg1_b.e1 4096 0x92ef3c13 D2732D
#include "sound/2203intf.h"
#include "machine/nvram.h"
+
+class kingdrby_state : public driver_device
+{
+public:
+ kingdrby_state(running_machine &machine, const driver_device_config_base &config)
+ : driver_device(machine, config) { }
+
+ UINT8 sound_cmd;
+ UINT8 *vram;
+ UINT8 *attr;
+ tilemap_t *sc0_tilemap;
+ tilemap_t *sc0w_tilemap;
+ tilemap_t *sc1_tilemap;
+ UINT8 p1_hopper;
+ UINT8 p2_hopper;
+ UINT8 mux_data;
+};
+
+
#define CLK_1 XTAL_20MHz
#define CLK_2 XTAL_3_579545MHz
-static UINT8 sound_cmd;
/*************************************
*
@@ -83,8 +101,6 @@ static UINT8 sound_cmd;
*
*************************************/
-static UINT8 *kingdrby_vram,*kingdrby_attr;
-static tilemap_t *sc0_tilemap,*sc0w_tilemap,*sc1_tilemap;
/*
tile
@@ -98,8 +114,9 @@ xxxx ---- basic color?
static TILE_GET_INFO( get_sc0_tile_info )
{
- int tile = kingdrby_vram[tile_index] | kingdrby_attr[tile_index]<<8;
- int color = (kingdrby_attr[tile_index] & 0x06)>>1;
+ kingdrby_state *state = machine->driver_data<kingdrby_state>();
+ int tile = state->vram[tile_index] | state->attr[tile_index]<<8;
+ int color = (state->attr[tile_index] & 0x06)>>1;
tile&=0x1ff;
@@ -112,8 +129,9 @@ static TILE_GET_INFO( get_sc0_tile_info )
static TILE_GET_INFO( get_sc1_tile_info )
{
- int tile = kingdrby_vram[tile_index] | kingdrby_attr[tile_index]<<8;
- int color = (kingdrby_attr[tile_index] & 0x06)>>1;
+ kingdrby_state *state = machine->driver_data<kingdrby_state>();
+ int tile = state->vram[tile_index] | state->attr[tile_index]<<8;
+ int color = (state->attr[tile_index] & 0x06)>>1;
tile&=0x1ff;
//original 0xc
@@ -126,16 +144,17 @@ static TILE_GET_INFO( get_sc1_tile_info )
color|0x40,
0);
- tileinfo->category = (kingdrby_attr[tile_index] & 0x08)>>3;
+ tileinfo->category = (state->attr[tile_index] & 0x08)>>3;
}
static VIDEO_START(kingdrby)
{
- sc0_tilemap = tilemap_create(machine, get_sc0_tile_info,tilemap_scan_rows,8,8,32,24);
- sc1_tilemap = tilemap_create(machine, get_sc1_tile_info,tilemap_scan_rows,8,8,32,24);
- sc0w_tilemap = tilemap_create(machine, get_sc0_tile_info,tilemap_scan_rows,8,8,32,32);
+ kingdrby_state *state = machine->driver_data<kingdrby_state>();
+ state->sc0_tilemap = tilemap_create(machine, get_sc0_tile_info,tilemap_scan_rows,8,8,32,24);
+ state->sc1_tilemap = tilemap_create(machine, get_sc1_tile_info,tilemap_scan_rows,8,8,32,24);
+ state->sc0w_tilemap = tilemap_create(machine, get_sc0_tile_info,tilemap_scan_rows,8,8,32,32);
- tilemap_set_transparent_pen(sc1_tilemap,0);
+ tilemap_set_transparent_pen(state->sc1_tilemap,0);
}
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
@@ -184,13 +203,14 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
static SCREEN_UPDATE(kingdrby)
{
+ kingdrby_state *state = screen->machine->driver_data<kingdrby_state>();
const rectangle &visarea = screen->visible_area();
rectangle clip;
- tilemap_set_scrollx( sc0_tilemap,0, kingdrby_vram[0x342]);
- tilemap_set_scrolly( sc0_tilemap,0, kingdrby_vram[0x341]);
- tilemap_set_scrollx( sc1_tilemap,0, kingdrby_vram[0x342]);
- tilemap_set_scrolly( sc1_tilemap,0, kingdrby_vram[0x341]);
- tilemap_set_scrolly( sc0w_tilemap,0, 32);
+ tilemap_set_scrollx( state->sc0_tilemap,0, state->vram[0x342]);
+ tilemap_set_scrolly( state->sc0_tilemap,0, state->vram[0x341]);
+ tilemap_set_scrollx( state->sc1_tilemap,0, state->vram[0x342]);
+ tilemap_set_scrolly( state->sc1_tilemap,0, state->vram[0x341]);
+ tilemap_set_scrolly( state->sc0w_tilemap,0, 32);
/* maybe it needs two window tilemaps? (one at the top, the other at the bottom)*/
clip.min_x = visarea.min_x;
@@ -199,28 +219,30 @@ static SCREEN_UPDATE(kingdrby)
clip.max_y = visarea.max_y;
/*TILEMAP_DRAW_CATEGORY + TILEMAP_DRAW_OPAQUE doesn't suit well?*/
- tilemap_draw(bitmap,cliprect,sc0_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,state->sc0_tilemap,0,0);
draw_sprites(screen->machine,bitmap,cliprect);
- tilemap_draw(bitmap,cliprect,sc1_tilemap,TILEMAP_DRAW_CATEGORY(1),0);
- tilemap_draw(bitmap,&clip,sc0w_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,state->sc1_tilemap,TILEMAP_DRAW_CATEGORY(1),0);
+ tilemap_draw(bitmap,&clip,state->sc0w_tilemap,0,0);
return 0;
}
static WRITE8_HANDLER( sc0_vram_w )
{
- kingdrby_vram[offset] = data;
- tilemap_mark_tile_dirty(sc0_tilemap,offset);
- tilemap_mark_tile_dirty(sc0w_tilemap,offset);
- tilemap_mark_tile_dirty(sc1_tilemap,offset);
+ kingdrby_state *state = space->machine->driver_data<kingdrby_state>();
+ state->vram[offset] = data;
+ tilemap_mark_tile_dirty(state->sc0_tilemap,offset);
+ tilemap_mark_tile_dirty(state->sc0w_tilemap,offset);
+ tilemap_mark_tile_dirty(state->sc1_tilemap,offset);
}
static WRITE8_HANDLER( sc0_attr_w )
{
- kingdrby_attr[offset] = data;
- tilemap_mark_tile_dirty(sc0_tilemap,offset);
- tilemap_mark_tile_dirty(sc0w_tilemap,offset);
- tilemap_mark_tile_dirty(sc1_tilemap,offset);
+ kingdrby_state *state = space->machine->driver_data<kingdrby_state>();
+ state->attr[offset] = data;
+ tilemap_mark_tile_dirty(state->sc0_tilemap,offset);
+ tilemap_mark_tile_dirty(state->sc0w_tilemap,offset);
+ tilemap_mark_tile_dirty(state->sc1_tilemap,offset);
}
/*************************************
@@ -230,40 +252,43 @@ static WRITE8_HANDLER( sc0_attr_w )
*************************************/
/* hopper I/O */
-static UINT8 p1_hopper,p2_hopper;
static READ8_DEVICE_HANDLER( hopper_io_r )
{
- return (input_port_read(device->machine,"HPIO") & 0x3f) | p1_hopper | p2_hopper;
+ kingdrby_state *state = device->machine->driver_data<kingdrby_state>();
+ return (input_port_read(device->machine,"HPIO") & 0x3f) | state->p1_hopper | state->p2_hopper;
}
static WRITE8_DEVICE_HANDLER( hopper_io_w )
{
- p1_hopper = (data & 0x8)<<3;
- p2_hopper = (data & 0x4)<<5;
+ kingdrby_state *state = device->machine->driver_data<kingdrby_state>();
+ state->p1_hopper = (data & 0x8)<<3;
+ state->p2_hopper = (data & 0x4)<<5;
// printf("%02x\n",data);
}
static WRITE8_DEVICE_HANDLER( sound_cmd_w )
{
+ kingdrby_state *state = device->machine->driver_data<kingdrby_state>();
cputag_set_input_line(device->machine, "soundcpu", INPUT_LINE_NMI, PULSE_LINE);
- sound_cmd = data;
+ state->sound_cmd = data;
/* soundlatch is unneeded since we are already using perfect interleave. */
// soundlatch_w(space,0, data);
}
-static UINT8 mux_data;
/* No idea about what's this (if it's really a mux etc.)*/
static WRITE8_DEVICE_HANDLER( outport2_w )
{
+ kingdrby_state *state = device->machine->driver_data<kingdrby_state>();
// popmessage("PPI1 port C(upper) out: %02X", data);
- mux_data = data & 0x80;
+ state->mux_data = data & 0x80;
}
static READ8_DEVICE_HANDLER( input_mux_r )
{
- if(mux_data & 0x80)
+ kingdrby_state *state = device->machine->driver_data<kingdrby_state>();
+ if(state->mux_data & 0x80)
return input_port_read(device->machine,"MUX0");
else
return input_port_read(device->machine,"MUX1");
@@ -271,8 +296,8 @@ static READ8_DEVICE_HANDLER( input_mux_r )
static READ8_DEVICE_HANDLER( key_matrix_r )
{
- static UINT16 p1_val,p2_val;
- static UINT8 p1_res,p2_res;
+ UINT16 p1_val,p2_val;
+ UINT8 p1_res,p2_res;
p1_val = input_port_read(device->machine,"KEY_1P");
p2_val = input_port_read(device->machine,"KEY_2P");
@@ -323,7 +348,8 @@ static READ8_DEVICE_HANDLER( key_matrix_r )
static READ8_DEVICE_HANDLER( sound_cmd_r )
{
- return sound_cmd;
+ kingdrby_state *state = device->machine->driver_data<kingdrby_state>();
+ return state->sound_cmd;
}
static WRITE8_HANDLER( led_array_w )
@@ -346,8 +372,8 @@ static WRITE8_HANDLER( led_array_w )
static ADDRESS_MAP_START( master_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x2fff) AM_ROM
AM_RANGE(0x3000, 0x33ff) AM_RAM AM_MIRROR(0xc00) AM_SHARE("share1")
- AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(sc0_vram_w) AM_BASE(&kingdrby_vram)
- AM_RANGE(0x5000, 0x53ff) AM_RAM_WRITE(sc0_attr_w) AM_BASE(&kingdrby_attr)
+ AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(sc0_vram_w) AM_BASE_MEMBER(kingdrby_state, vram)
+ AM_RANGE(0x5000, 0x53ff) AM_RAM_WRITE(sc0_attr_w) AM_BASE_MEMBER(kingdrby_state, attr)
ADDRESS_MAP_END
static ADDRESS_MAP_START( master_io_map, ADDRESS_SPACE_IO, 8 )
@@ -966,7 +992,7 @@ static PALETTE_INIT(kingdrbb)
}
}
-static MACHINE_CONFIG_START( kingdrby, driver_device )
+static MACHINE_CONFIG_START( kingdrby, kingdrby_state )
MCFG_CPU_ADD("master", Z80, CLK_2)
MCFG_CPU_PROGRAM_MAP(master_map)
MCFG_CPU_IO_MAP(master_io_map)