summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Fabio Priuli <etabeta78@users.noreply.github.com>2009-12-09 23:42:28 +0000
committer Fabio Priuli <etabeta78@users.noreply.github.com>2009-12-09 23:42:28 +0000
commit637085584beaef3a4e657aedc2676fcf5c7e6708 (patch)
tree0ecc1035d152cc36735ef22de270a46ae6534a2f
parentdb86be935face855fa7bde117e17692a9fa005d0 (diff)
Added driver data struct and save states to the following drivers:
kangaroo.c, karnov.c, kchamp.c, kickgoal.c, kingobox.c, kncljoe.c, koikoi.c, kopunch.c, ksayakyu.c and kyugo.c
-rw-r--r--.gitattributes7
-rw-r--r--src/mame/drivers/kangaroo.c32
-rw-r--r--src/mame/drivers/karnov.c599
-rw-r--r--src/mame/drivers/kchamp.c178
-rw-r--r--src/mame/drivers/kickgoal.c445
-rw-r--r--src/mame/drivers/kingobox.c305
-rw-r--r--src/mame/drivers/kncljoe.c86
-rw-r--r--src/mame/drivers/koikoi.c251
-rw-r--r--src/mame/drivers/kopunch.c72
-rw-r--r--src/mame/drivers/ksayakyu.c70
-rw-r--r--src/mame/drivers/kyugo.c106
-rw-r--r--src/mame/includes/kangaroo.h18
-rw-r--r--src/mame/includes/karnov.h53
-rw-r--r--src/mame/includes/kchamp.h40
-rw-r--r--src/mame/includes/kickgoal.h44
-rw-r--r--src/mame/includes/kingobox.h47
-rw-r--r--src/mame/includes/kncljoe.h38
-rw-r--r--src/mame/includes/kopunch.h35
-rw-r--r--src/mame/includes/ksayakyu.h30
-rw-r--r--src/mame/includes/kyugo.h31
-rw-r--r--src/mame/video/kangaroo.c66
-rw-r--r--src/mame/video/karnov.c190
-rw-r--r--src/mame/video/kchamp.c89
-rw-r--r--src/mame/video/kickgoal.c232
-rw-r--r--src/mame/video/kingobox.c129
-rw-r--r--src/mame/video/kncljoe.c127
-rw-r--r--src/mame/video/kopunch.c60
-rw-r--r--src/mame/video/ksayakyu.c105
-rw-r--r--src/mame/video/kyugo.c153
29 files changed, 2206 insertions, 1432 deletions
diff --git a/.gitattributes b/.gitattributes
index 74407162c17..ee546012473 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2517,9 +2517,16 @@ src/mame/includes/jedi.h svneol=native#text/plain
src/mame/includes/jpmimpct.h svneol=native#text/plain
src/mame/includes/kaneko16.h svneol=native#text/plain
src/mame/includes/kangaroo.h svneol=native#text/plain
+src/mame/includes/karnov.h svneol=native#text/plain
+src/mame/includes/kchamp.h svneol=native#text/plain
+src/mame/includes/kickgoal.h svneol=native#text/plain
+src/mame/includes/kingobox.h svneol=native#text/plain
src/mame/includes/klax.h svneol=native#text/plain
+src/mame/includes/kncljoe.h svneol=native#text/plain
src/mame/includes/konamigx.h svneol=native#text/plain
src/mame/includes/konamipt.h svneol=native#text/plain
+src/mame/includes/kopunch.h svneol=native#text/plain
+src/mame/includes/ksayakyu.h svneol=native#text/plain
src/mame/includes/kyugo.h svneol=native#text/plain
src/mame/includes/lasso.h svneol=native#text/plain
src/mame/includes/lazercmd.h svneol=native#text/plain
diff --git a/src/mame/drivers/kangaroo.c b/src/mame/drivers/kangaroo.c
index 6cabbf94c99..8abe4b7f11b 100644
--- a/src/mame/drivers/kangaroo.c
+++ b/src/mame/drivers/kangaroo.c
@@ -155,22 +155,17 @@
#include "driver.h"
#include "cpu/mb88xx/mb88xx.h"
-#include "kangaroo.h"
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
+#include "includes/kangaroo.h"
#define MASTER_CLOCK XTAL_10MHz
-
static READ8_HANDLER(mcu_sim_r);
static WRITE8_HANDLER(mcu_sim_w);
-static UINT8 kangaroo_clock;
-
-
-
/*************************************
*
* Machine init
@@ -180,20 +175,23 @@ static UINT8 kangaroo_clock;
static MACHINE_START( kangaroo )
{
memory_configure_bank(machine, "bank1", 0, 2, memory_region(machine, "gfx1"), 0x2000);
- state_save_register_global(machine, kangaroo_clock);
}
static MACHINE_START( kangaroo_mcu )
{
+ kangaroo_state *state = (kangaroo_state *)machine->driver_data;
+
MACHINE_START_CALL(kangaroo);
memory_install_readwrite8_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xef00, 0xefff, 0, 0, mcu_sim_r, mcu_sim_w);
- kangaroo_clock = 0;
+ state_save_register_global(machine, state->clock);
}
static MACHINE_RESET( kangaroo )
{
+ kangaroo_state *state = (kangaroo_state *)machine->driver_data;
+
/* I think there is a bug in the startup checks of the game. At the very */
/* beginning, during the RAM check, it goes one byte too far, and ends up */
/* trying to write, and re-read, location dfff. To the best of my knowledge, */
@@ -206,6 +204,8 @@ static MACHINE_RESET( kangaroo )
/* Anyway, what I do here is just immediately generate the NMI, so the game */
/* properly starts. */
cputag_set_input_line(machine, "maincpu", INPUT_LINE_NMI, PULSE_LINE);
+
+ state->clock = 0;
}
@@ -222,7 +222,8 @@ static MACHINE_RESET( kangaroo )
static READ8_HANDLER( mcu_sim_r )
{
- return ++kangaroo_clock & 0x0f;
+ kangaroo_state *state = (kangaroo_state *)space->machine->driver_data;
+ return ++state->clock & 0x0f;
}
static WRITE8_HANDLER( mcu_sim_w )
@@ -257,7 +258,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("bank1")
AM_RANGE(0xe000, 0xe3ff) AM_RAM
AM_RANGE(0xe400, 0xe400) AM_MIRROR(0x03ff) AM_READ_PORT("DSW0")
- AM_RANGE(0xe800, 0xe80a) AM_MIRROR(0x03f0) AM_WRITE(kangaroo_video_control_w) AM_BASE(&kangaroo_video_control)
+ AM_RANGE(0xe800, 0xe80a) AM_MIRROR(0x03f0) AM_WRITE(kangaroo_video_control_w) AM_BASE_MEMBER(kangaroo_state, video_control)
AM_RANGE(0xec00, 0xec00) AM_MIRROR(0x00ff) AM_READ_PORT("IN0") AM_WRITE(soundlatch_w)
AM_RANGE(0xed00, 0xed00) AM_MIRROR(0x00ff) AM_READ_PORT("IN1") AM_WRITE(kangaroo_coin_counter_w)
AM_RANGE(0xee00, 0xee00) AM_MIRROR(0x00ff) AM_READ_PORT("IN2")
@@ -428,6 +429,9 @@ INPUT_PORTS_END
static MACHINE_DRIVER_START( nomcu )
+ /* driver data */
+ MDRV_DRIVER_DATA(kangaroo_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/4)
MDRV_CPU_PROGRAM_MAP(main_map)
@@ -572,7 +576,7 @@ ROM_END
*
*************************************/
-GAME( 1981, fnkyfish, 0, nomcu, fnkyfish, 0, ROT90, "Sun Electronics", "Funky Fish", 0 )
-GAME( 1982, kangaroo, 0, mcu, kangaroo, 0, ROT90, "Sun Electronics", "Kangaroo", 0 )
-GAME( 1982, kangarooa,kangaroo, mcu, kangaroo, 0, ROT90, "[Sun Electronics] (Atari license)", "Kangaroo (Atari)", 0 )
-GAME( 1982, kangaroob,kangaroo, nomcu, kangaroo, 0, ROT90, "bootleg", "Kangaroo (bootleg)", 0 )
+GAME( 1981, fnkyfish, 0, nomcu, fnkyfish, 0, ROT90, "Sun Electronics", "Funky Fish", GAME_SUPPORTS_SAVE )
+GAME( 1982, kangaroo, 0, mcu, kangaroo, 0, ROT90, "Sun Electronics", "Kangaroo", GAME_SUPPORTS_SAVE )
+GAME( 1982, kangarooa, kangaroo, mcu, kangaroo, 0, ROT90, "[Sun Electronics] (Atari license)", "Kangaroo (Atari)", GAME_SUPPORTS_SAVE )
+GAME( 1982, kangaroob, kangaroo, nomcu, kangaroo, 0, ROT90, "bootleg", "Kangaroo (bootleg)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/karnov.c b/src/mame/drivers/karnov.c
index eae2e3820e4..8e3e4f1e1bb 100644
--- a/src/mame/drivers/karnov.c
+++ b/src/mame/drivers/karnov.c
@@ -42,307 +42,332 @@
#include "cpu/m6502/m6502.h"
#include "sound/2203intf.h"
#include "sound/3526intf.h"
+#include "includes/karnov.h"
-PALETTE_INIT( karnov );
-VIDEO_UPDATE( karnov );
-WRITE16_HANDLER( karnov_playfield_swap_w );
-WRITE16_HANDLER( karnov_videoram_w );
-void karnov_flipscreen_w(running_machine *machine, int data);
-VIDEO_START( karnov );
-VIDEO_START( wndrplnt );
-
-enum { KARNOV=0, KARNOVJ, CHELNOV, CHELNOVJ, CHELNOVW, WNDRPLNT };
-
-static UINT16 i8751_return,i8751_needs_ack,i8751_coin_pending,i8751_command_queue;
-static UINT16 *karnov_ram;
-extern UINT16 karnov_scroll[2], *karnov_pf_data;
-static int microcontroller_id,coin_mask;
-
-/******************************************************************************/
+/*************************************
+ *
+ * Microcontroller emulation
+ *
+ *************************************/
/* Emulation of the protected microcontroller - for coins & general protection */
-static void karnov_i8751_w(running_machine *machine, int data)
+static void karnov_i8751_w( running_machine *machine, int data )
{
+ karnov_state *state = (karnov_state *)machine->driver_data;
+
/* Pending coin operations may cause protection commands to be queued */
- if (i8751_needs_ack)
+ if (state->i8751_needs_ack)
{
- i8751_command_queue=data;
+ state->i8751_command_queue = data;
return;
}
- i8751_return=0;
- if (data==0x100 && microcontroller_id==KARNOVJ) i8751_return=0x56a; /* Japan version */
- if (data==0x100 && microcontroller_id==KARNOV) i8751_return=0x56b; /* USA version */
- if ((data&0xf00)==0x300) i8751_return=(data&0xff)*0x12; /* Player sprite mapping */
+ state->i8751_return = 0;
+
+ if (data == 0x100 && state->microcontroller_id == KARNOVJ) /* Japan version */
+ state->i8751_return = 0x56a;
+
+ if (data == 0x100 && state->microcontroller_id == KARNOV) /* USA version */
+ state->i8751_return = 0x56b;
+
+ if ((data & 0xf00) == 0x300)
+ state->i8751_return = (data & 0xff) * 0x12; /* Player sprite mapping */
/* I'm not sure the ones marked ^ appear in the right order */
- if (data==0x400) i8751_return=0x4000; /* Get The Map... */
- if (data==0x402) i8751_return=0x40a6; /* Ancient Ruins */
- if (data==0x403) i8751_return=0x4054; /* Forest... */
- if (data==0x404) i8751_return=0x40de; /* ^Rocky hills */
- if (data==0x405) i8751_return=0x4182; /* Sea */
- if (data==0x406) i8751_return=0x41ca; /* Town */
- if (data==0x407) i8751_return=0x421e; /* Desert */
- if (data==0x401) i8751_return=0x4138; /* ^Whistling wind */
- if (data==0x408) i8751_return=0x4276; /* ^Heavy Gates */
-
-// if (!i8751_return && data!=0x300) logerror("%s - Unknown Write %02x intel\n",cpuexec_describe_context(machine),data);
-
- cputag_set_input_line(machine, "maincpu", 6, HOLD_LINE); /* Signal main cpu task is complete */
- i8751_needs_ack=1;
+ if (data == 0x400) state->i8751_return = 0x4000; /* Get The Map... */
+ if (data == 0x402) state->i8751_return = 0x40a6; /* Ancient Ruins */
+ if (data == 0x403) state->i8751_return = 0x4054; /* Forest... */
+ if (data == 0x404) state->i8751_return = 0x40de; /* ^Rocky hills */
+ if (data == 0x405) state->i8751_return = 0x4182; /* Sea */
+ if (data == 0x406) state->i8751_return = 0x41ca; /* Town */
+ if (data == 0x407) state->i8751_return = 0x421e; /* Desert */
+ if (data == 0x401) state->i8751_return = 0x4138; /* ^Whistling wind */
+ if (data == 0x408) state->i8751_return = 0x4276; /* ^Heavy Gates */
+
+// if (!state->i8751_return && data != 0x300) logerror("%s - Unknown Write %02x intel\n", cpuexec_describe_context(machine), data);
+
+ cpu_set_input_line(state->maincpu, 6, HOLD_LINE); /* Signal main cpu task is complete */
+ state->i8751_needs_ack = 1;
}
-static void wndrplnt_i8751_w(running_machine *machine, int data)
+static void wndrplnt_i8751_w( running_machine *machine, int data )
{
+ karnov_state *state = (karnov_state *)machine->driver_data;
+
/* The last command hasn't been ACK'd (probably a conflict with coin command) */
- if (i8751_needs_ack)
+ if (state->i8751_needs_ack)
{
- i8751_command_queue=data;
+ state->i8751_command_queue = data;
return;
}
- i8751_return=0;
- if (data==0x100) i8751_return=0x67a;
- if (data==0x200) i8751_return=0x214;
- if (data==0x300) i8751_return=0x17; /* Copyright text on title screen */
-// if (data==0x300) i8751_return=0x1; /* (USA) Copyright text on title screen */
+ state->i8751_return=0;
+
+ if (data == 0x100) state->i8751_return = 0x67a;
+ if (data == 0x200) state->i8751_return = 0x214;
+ if (data == 0x300) state->i8751_return = 0x17; /* Copyright text on title screen */
+// if (data == 0x300) state->i8751_return = 0x1; /* (USA) Copyright text on title screen */
/* The game writes many values in the 0x600 range, but only a specific mask
matters for the return value */
- if ((data&0x600)==0x600)
+ if ((data & 0x600) == 0x600)
{
- switch (data&0x18)
+ switch (data & 0x18)
{
- case 0x00: i8751_return=0x4d53; break;
- case 0x08: i8751_return=0x4b54; break;
- case 0x10: i8751_return=0x5453; break;
- case 0x18: i8751_return=0x5341; break;
+ case 0x00: state->i8751_return = 0x4d53; break;
+ case 0x08: state->i8751_return = 0x4b54; break;
+ case 0x10: state->i8751_return = 0x5453; break;
+ case 0x18: state->i8751_return = 0x5341; break;
}
}
-// else logerror("%s - Unknown Write %02x intel\n",cpuexec_describe_context(machine),data);
+// else logerror("%s - Unknown Write %02x intel\n", cpuexec_describe_context(machine), data);
/* These are 68k function call addresses - different address for each power-up */
- if (data==0x400) i8751_return=0x594;
- if (data==0x401) i8751_return=0x5ea;
- if (data==0x402) i8751_return=0x628;
- if (data==0x403) i8751_return=0x66c;
- if (data==0x404) i8751_return=0x6a4;
- if (data==0x405) i8751_return=0x6a4;
- if (data==0x406) i8751_return=0x6a4;
+ if (data == 0x400) state->i8751_return = 0x594;
+ if (data == 0x401) state->i8751_return = 0x5ea;
+ if (data == 0x402) state->i8751_return = 0x628;
+ if (data == 0x403) state->i8751_return = 0x66c;
+ if (data == 0x404) state->i8751_return = 0x6a4;
+ if (data == 0x405) state->i8751_return = 0x6a4;
+ if (data == 0x406) state->i8751_return = 0x6a4;
/* This is 68k program code which is executed every frame */
- if (data==0x50c) i8751_return=0x13fc;
- if (data==0x50b) i8751_return=0x00ff;
- if (data==0x50a) i8751_return=0x0006;
- if (data==0x509) i8751_return=0x0000;
- if (data==0x508) i8751_return=0x4a39;
- if (data==0x507) i8751_return=0x0006;
- if (data==0x506) i8751_return=0x0000;
- if (data==0x505) i8751_return=0x66f8;
- if (data==0x504) i8751_return=0x4a39;
- if (data==0x503) i8751_return=0x000c;
- if (data==0x502) i8751_return=0x0003;
- if (data==0x501) i8751_return=0x6bf8;
- if (data==0x500) i8751_return=0x4e75;
-
- cputag_set_input_line(machine, "maincpu", 6, HOLD_LINE); /* Signal main cpu task is complete */
- i8751_needs_ack=1;
+ if (data == 0x50c) state->i8751_return = 0x13fc;
+ if (data == 0x50b) state->i8751_return = 0x00ff;
+ if (data == 0x50a) state->i8751_return = 0x0006;
+ if (data == 0x509) state->i8751_return = 0x0000;
+ if (data == 0x508) state->i8751_return = 0x4a39;
+ if (data == 0x507) state->i8751_return = 0x0006;
+ if (data == 0x506) state->i8751_return = 0x0000;
+ if (data == 0x505) state->i8751_return = 0x66f8;
+ if (data == 0x504) state->i8751_return = 0x4a39;
+ if (data == 0x503) state->i8751_return = 0x000c;
+ if (data == 0x502) state->i8751_return = 0x0003;
+ if (data == 0x501) state->i8751_return = 0x6bf8;
+ if (data == 0x500) state->i8751_return = 0x4e75;
+
+ cpu_set_input_line(state->maincpu, 6, HOLD_LINE); /* Signal main cpu task is complete */
+ state->i8751_needs_ack = 1;
}
-static void chelnov_i8751_w(running_machine *machine, int data)
+static void chelnov_i8751_w( running_machine *machine, int data )
{
- static int level;
+ karnov_state *state = (karnov_state *)machine->driver_data;
/* Pending coin operations may cause protection commands to be queued */
- if (i8751_needs_ack)
+ if (state->i8751_needs_ack)
{
- i8751_command_queue=data;
+ state->i8751_command_queue = data;
return;
}
- i8751_return=0;
- if (data==0x200 && microcontroller_id==CHELNOVJ) i8751_return=0x7734; /* Japan version */
- if (data==0x200 && microcontroller_id==CHELNOV) i8751_return=0x783e; /* USA version */
- if (data==0x200 && microcontroller_id==CHELNOVW) i8751_return=0x7736; /* World version */
- if (data==0x100 && microcontroller_id==CHELNOVJ) i8751_return=0x71a; /* Japan version */
- if (data==0x100 && microcontroller_id==CHELNOV) i8751_return=0x71b; /* USA version */
- if (data==0x100 && microcontroller_id==CHELNOVW) i8751_return=0x71c; /* World version */
-
- if (data>=0x6000 && data<0x8000) i8751_return=1; /* patched */
- if ((data&0xf000)==0x1000) level=1; /* Level 1 */
- if ((data&0xf000)==0x2000) level++; /* Level Increment */
- if ((data&0xf000)==0x3000)
- { /* Sprite table mapping */
- int b=data&0xff;
- switch (level)
+ state->i8751_return = 0;
+
+ if (data == 0x200 && state->microcontroller_id == CHELNOVJ) /* Japan version */
+ state->i8751_return = 0x7734;
+
+ if (data == 0x200 && state->microcontroller_id == CHELNOV) /* USA version */
+ state->i8751_return = 0x783e;
+
+ if (data == 0x200 && state->microcontroller_id == CHELNOVW) /* World version */
+ state->i8751_return = 0x7736;
+
+ if (data == 0x100 && state->microcontroller_id == CHELNOVJ) /* Japan version */
+ state->i8751_return = 0x71a;
+
+ if (data == 0x100 && state->microcontroller_id == CHELNOV) /* USA version */
+ state->i8751_return = 0x71b;
+
+ if (data == 0x100 && state->microcontroller_id == CHELNOVW) /* World version */
+ state->i8751_return = 0x71c;
+
+ if (data >= 0x6000 && data < 0x8000)
+ state->i8751_return = 1; /* patched */
+
+ if ((data & 0xf000) == 0x1000) state->i8751_level = 1; /* Level 1 */
+ if ((data & 0xf000) == 0x2000) state->i8751_level++; /* Level Increment */
+
+ if ((data & 0xf000) == 0x3000)
+ {
+ /* Sprite table mapping */
+ int b = data & 0xff;
+ switch (state->i8751_level)
{
case 1: /* Level 1, Sprite mapping tables */
- if (microcontroller_id==CHELNOV)
- { /* USA */
- if (b<2) i8751_return=0;
- else if (b<6) i8751_return=1;
- else if (b<0xb) i8751_return=2;
- else if (b<0xf) i8751_return=3;
- else if (b<0x13) i8751_return=4;
- else i8751_return=5;
+ if (state->microcontroller_id == CHELNOV) /* USA */
+ {
+ if (b < 2) state->i8751_return = 0;
+ else if (b < 6) state->i8751_return = 1;
+ else if (b < 0xb) state->i8751_return = 2;
+ else if (b < 0xf) state->i8751_return = 3;
+ else if (b < 0x13) state->i8751_return = 4;
+ else state->i8751_return = 5;
}
- else
- { /* Japan, World */
- if (b<3) i8751_return=0;
- else if (b<8) i8751_return=1;
- else if (b<0xc) i8751_return=2;
- else if (b<0x10) i8751_return=3;
- else if (b<0x19) i8751_return=4;
- else if (b<0x1b) i8751_return=5;
- else if (b<0x22) i8751_return=6;
- else if (b<0x28) i8751_return=7;
- else i8751_return=8;
+ else /* Japan, World */
+ {
+ if (b < 3) state->i8751_return = 0;
+ else if (b < 8) state->i8751_return = 1;
+ else if (b < 0xc) state->i8751_return = 2;
+ else if (b < 0x10) state->i8751_return = 3;
+ else if (b < 0x19) state->i8751_return = 4;
+ else if (b < 0x1b) state->i8751_return = 5;
+ else if (b < 0x22) state->i8751_return = 6;
+ else if (b < 0x28) state->i8751_return = 7;
+ else state->i8751_return = 8;
}
break;
case 2: /* Level 2, Sprite mapping tables, USA & Japan are the same */
- if (b<3) i8751_return=0;
- else if (b<9) i8751_return=1;
- else if (b<0x11) i8751_return=2;
- else if (b<0x1b) i8751_return=3;
- else if (b<0x21) i8751_return=4;
- else if (b<0x28) i8751_return=5;
- else i8751_return=6;
+ if (b < 3) state->i8751_return = 0;
+ else if (b < 9) state->i8751_return = 1;
+ else if (b < 0x11) state->i8751_return = 2;
+ else if (b < 0x1b) state->i8751_return = 3;
+ else if (b < 0x21) state->i8751_return = 4;
+ else if (b < 0x28) state->i8751_return = 5;
+ else state->i8751_return = 6;
break;
case 3: /* Level 3, Sprite mapping tables, USA & Japan are the same */
- if (b<5) i8751_return=0;
- else if (b<9) i8751_return=1;
- else if (b<0xd) i8751_return=2;
- else if (b<0x11) i8751_return=3;
- else if (b<0x1b) i8751_return=4;
- else if (b<0x1c) i8751_return=5;
- else if (b<0x22) i8751_return=6;
- else if (b<0x27) i8751_return=7;
- else i8751_return=8;
+ if (b < 5) state->i8751_return = 0;
+ else if (b < 9) state->i8751_return = 1;
+ else if (b < 0xd) state->i8751_return = 2;
+ else if (b < 0x11) state->i8751_return = 3;
+ else if (b < 0x1b) state->i8751_return = 4;
+ else if (b < 0x1c) state->i8751_return = 5;
+ else if (b < 0x22) state->i8751_return = 6;
+ else if (b < 0x27) state->i8751_return = 7;
+ else state->i8751_return = 8;
break;
case 4: /* Level 4, Sprite mapping tables, USA & Japan are the same */
- if (b<4) i8751_return=0;
- else if (b<0xc) i8751_return=1;
- else if (b<0xf) i8751_return=2;
- else if (b<0x19) i8751_return=3;
- else if (b<0x1c) i8751_return=4;
- else if (b<0x22) i8751_return=5;
- else if (b<0x29) i8751_return=6;
- else i8751_return=7;
+ if (b < 4) state->i8751_return = 0;
+ else if (b < 0xc) state->i8751_return = 1;
+ else if (b < 0xf) state->i8751_return = 2;
+ else if (b < 0x19) state->i8751_return = 3;
+ else if (b < 0x1c) state->i8751_return = 4;
+ else if (b < 0x22) state->i8751_return = 5;
+ else if (b < 0x29) state->i8751_return = 6;
+ else state->i8751_return = 7;
break;
case 5: /* Level 5, Sprite mapping tables */
- if (b<7) i8751_return=0;
- else if (b<0xe) i8751_return=1;
- else if (b<0x14) i8751_return=2;
- else if (b<0x1a) i8751_return=3;
- else if (b<0x23) i8751_return=4;
- else if (b<0x27) i8751_return=5;
- else i8751_return=6;
+ if (b < 7) state->i8751_return = 0;
+ else if (b < 0xe) state->i8751_return = 1;
+ else if (b < 0x14) state->i8751_return = 2;
+ else if (b < 0x1a) state->i8751_return = 3;
+ else if (b < 0x23) state->i8751_return = 4;
+ else if (b < 0x27) state->i8751_return = 5;
+ else state->i8751_return = 6;
break;
case 6: /* Level 6, Sprite mapping tables */
- if (b<3) i8751_return=0;
- else if (b<0xb) i8751_return=1;
- else if (b<0x11) i8751_return=2;
- else if (b<0x17) i8751_return=3;
- else if (b<0x1d) i8751_return=4;
- else if (b<0x24) i8751_return=5;
- else i8751_return=6;
+ if (b < 3) state->i8751_return = 0;
+ else if (b < 0xb) state->i8751_return = 1;
+ else if (b < 0x11) state->i8751_return = 2;
+ else if (b < 0x17) state->i8751_return = 3;
+ else if (b < 0x1d) state->i8751_return = 4;
+ else if (b < 0x24) state->i8751_return = 5;
+ else state->i8751_return = 6;
break;
case 7: /* Level 7, Sprite mapping tables */
- if (b<5) i8751_return=0;
- else if (b<0xb) i8751_return=1;
- else if (b<0x11) i8751_return=2;
- else if (b<0x1a) i8751_return=3;
- else if (b<0x21) i8751_return=4;
- else if (b<0x27) i8751_return=5;
- else i8751_return=6;
+ if (b < 5) state->i8751_return = 0;
+ else if (b < 0xb) state->i8751_return = 1;
+ else if (b < 0x11) state->i8751_return = 2;
+ else if (b < 0x1a) state->i8751_return = 3;
+ else if (b < 0x21) state->i8751_return = 4;
+ else if (b < 0x27) state->i8751_return = 5;
+ else state->i8751_return = 6;
break;
}
}
-// logerror("%s - Unknown Write %02x intel\n",cpuexec_describe_context(machine),data);
+ // logerror("%s - Unknown Write %02x intel\n", cpuexec_describe_context(machine), data);
- cputag_set_input_line(machine, "maincpu", 6, HOLD_LINE); /* Signal main cpu task is complete */
- i8751_needs_ack=1;
+ cpu_set_input_line(state->maincpu, 6, HOLD_LINE); /* Signal main cpu task is complete */
+ state->i8751_needs_ack = 1;
}
-/******************************************************************************/
+/*************************************
+ *
+ * Memory handlers
+ *
+ *************************************/
static WRITE16_HANDLER( karnov_control_w )
{
+ karnov_state *state = (karnov_state *)space->machine->driver_data;
+
/* Mnemonics filled in from the schematics, brackets are my comments */
- switch (offset<<1)
+ switch (offset << 1)
{
case 0: /* SECLR (Interrupt ack for Level 6 i8751 interrupt) */
- cputag_set_input_line(space->machine, "maincpu", 6, CLEAR_LINE);
+ cpu_set_input_line(state->maincpu, 6, CLEAR_LINE);
- if (i8751_needs_ack)
+ if (state->i8751_needs_ack)
{
- /* If a command and coin insert happen at once, then the i8751 will queue the
- coin command until the previous command is ACK'd */
- if (i8751_coin_pending)
+ /* If a command and coin insert happen at once, then the i8751 will queue the coin command until the previous command is ACK'd */
+ if (state->i8751_coin_pending)
{
- i8751_return=i8751_coin_pending;
- cputag_set_input_line(space->machine, "maincpu", 6, HOLD_LINE);
- i8751_coin_pending=0;
+ state->i8751_return = state->i8751_coin_pending;
+ cpu_set_input_line(state->maincpu, 6, HOLD_LINE);
+ state->i8751_coin_pending = 0;
}
- else if (i8751_command_queue)
+ else if (state->i8751_command_queue)
{
/* Pending control command - just write it back as SECREQ */
- i8751_needs_ack=0;
- karnov_control_w(space,3,i8751_command_queue,0xffff);
- i8751_command_queue=0;
+ state->i8751_needs_ack = 0;
+ karnov_control_w(space, 3, state->i8751_command_queue, 0xffff);
+ state->i8751_command_queue = 0;
}
else
{
- i8751_needs_ack=0;
+ state->i8751_needs_ack = 0;
}
}
return;
case 2: /* SONREQ (Sound CPU byte) */
- soundlatch_w(space,0,data&0xff);
- cputag_set_input_line (space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE);
+ soundlatch_w(space, 0, data & 0xff);
+ cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE);
break;
case 4: /* DM (DMA to buffer spriteram) */
- buffer_spriteram16_w(space,0,0,0xffff);
+ buffer_spriteram16_w(space, 0, 0, 0xffff);
break;
case 6: /* SECREQ (Interrupt & Data to i8751) */
- if (microcontroller_id==KARNOV || microcontroller_id==KARNOVJ) karnov_i8751_w(space->machine, data);
- if (microcontroller_id==CHELNOV || microcontroller_id==CHELNOVJ || microcontroller_id==CHELNOVW) chelnov_i8751_w(space->machine, data);
- if (microcontroller_id==WNDRPLNT) wndrplnt_i8751_w(space->machine, data);
+ if (state->microcontroller_id == KARNOV || state->microcontroller_id == KARNOVJ)
+ karnov_i8751_w(space->machine, data);
+ if (state->microcontroller_id == CHELNOV || state->microcontroller_id == CHELNOVJ || state->microcontroller_id == CHELNOVW)
+ chelnov_i8751_w(space->machine, data);
+ if (state->microcontroller_id == WNDRPLNT)
+ wndrplnt_i8751_w(space->machine, data);
break;
case 8: /* HSHIFT (9 bits) - Top bit indicates video flip */
- COMBINE_DATA(&karnov_scroll[0]);
- karnov_flipscreen_w(space->machine, data>>15);
+ COMBINE_DATA(&state->scroll[0]);
+ karnov_flipscreen_w(space->machine, data >> 15);
break;
case 0xa: /* VSHIFT */
- COMBINE_DATA(&karnov_scroll[1]);
+ COMBINE_DATA(&state->scroll[1]);
break;
case 0xc: /* SECR (Reset i8751) */
logerror("Reset i8751\n");
- i8751_needs_ack=0;
- i8751_coin_pending=0;
- i8751_command_queue=0;
- i8751_return=0;
+ state->i8751_needs_ack = 0;
+ state->i8751_coin_pending = 0;
+ state->i8751_command_queue = 0;
+ state->i8751_return = 0;
break;
case 0xe: /* INTCLR (Interrupt ack for Level 7 vbl interrupt) */
- cputag_set_input_line(space->machine, "maincpu", 7, CLEAR_LINE);
+ cpu_set_input_line(state->maincpu, 7, CLEAR_LINE);
break;
}
}
-/******************************************************************************/
-
static READ16_HANDLER( karnov_control_r )
{
- switch (offset<<1)
+ karnov_state *state = (karnov_state *)space->machine->driver_data;
+
+ switch (offset << 1)
{
case 0:
return input_port_read(space->machine, "P1_P2");
@@ -351,27 +376,30 @@ static READ16_HANDLER( karnov_control_r )
case 4:
return input_port_read(space->machine, "DSW");
case 6: /* i8751 return values */
- return i8751_return;
+ return state->i8751_return;
}
return ~0;
}
-/******************************************************************************/
+/*************************************
+ *
+ * Address maps
+ *
+ *************************************/
static ADDRESS_MAP_START( karnov_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x05ffff) AM_ROM
- AM_RANGE(0x060000, 0x063fff) AM_RAM AM_BASE(&karnov_ram)
+ AM_RANGE(0x060000, 0x063fff) AM_RAM AM_BASE_MEMBER(karnov_state, ram)
AM_RANGE(0x080000, 0x080fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
- AM_RANGE(0x0a0000, 0x0a07ff) AM_RAM_WRITE(karnov_videoram_w) AM_BASE_GENERIC(videoram)
+ AM_RANGE(0x0a0000, 0x0a07ff) AM_RAM_WRITE(karnov_videoram_w) AM_BASE_MEMBER(karnov_state, videoram)
AM_RANGE(0x0a0800, 0x0a0fff) AM_WRITE(karnov_videoram_w) /* Wndrplnt Mirror */
- AM_RANGE(0x0a1000, 0x0a17ff) AM_WRITEONLY AM_BASE(&karnov_pf_data)
+ AM_RANGE(0x0a1000, 0x0a17ff) AM_WRITEONLY AM_BASE_MEMBER(karnov_state, pf_data)
AM_RANGE(0x0a1800, 0x0a1fff) AM_WRITE(karnov_playfield_swap_w)
AM_RANGE(0x0c0000, 0x0c0007) AM_READ(karnov_control_r)
AM_RANGE(0x0c0000, 0x0c000f) AM_WRITE(karnov_control_w)
ADDRESS_MAP_END
-/******************************************************************************/
static ADDRESS_MAP_START( karnov_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x05ff) AM_RAM
@@ -382,8 +410,11 @@ static ADDRESS_MAP_START( karnov_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END
-/******************************************************************************/
-
+/*************************************
+ *
+ * Input ports
+ *
+ *************************************/
static INPUT_PORTS_START( common )
PORT_START("P1_P2")
@@ -627,7 +658,12 @@ static INPUT_PORTS_START( chelnovu )
PORT_DIPUNUSED( 0x8000, 0x8000 )
INPUT_PORTS_END
-/******************************************************************************/
+
+/*************************************
+ *
+ * Graphics definitions
+ *
+ *************************************/
static const gfx_layout chars =
{
@@ -672,36 +708,45 @@ static GFXDECODE_START( karnov )
GFXDECODE_ENTRY( "gfx3", 0, sprites, 256, 16 ) /* colors 256-511 */
GFXDECODE_END
-/******************************************************************************/
+
+/*************************************
+ *
+ * Interrupt generator
+ *
+ *************************************/
static INTERRUPT_GEN( karnov_interrupt )
{
- static int latch;
+ karnov_state *state = (karnov_state *)device->machine->driver_data;
/* Coin input to the i8751 generates an interrupt to the main cpu */
- if (input_port_read(device->machine, "FAKE") == coin_mask) latch=1;
- if (input_port_read(device->machine, "FAKE") != coin_mask && latch)
+ if (input_port_read(device->machine, "FAKE") == state->coin_mask)
+ state->latch = 1;
+
+ if (input_port_read(device->machine, "FAKE") != state->coin_mask && state->latch)
{
- if (i8751_needs_ack)
+ if (state->i8751_needs_ack)
{
/* i8751 is busy - queue the command */
- i8751_coin_pending=input_port_read(device->machine, "FAKE") | 0x8000;
+ state->i8751_coin_pending = input_port_read(device->machine, "FAKE") | 0x8000;
}
else
{
- i8751_return=input_port_read(device->machine, "FAKE") | 0x8000;
- cpu_set_input_line(device,6,HOLD_LINE);
- i8751_needs_ack=1;
+ state->i8751_return = input_port_read(device->machine, "FAKE") | 0x8000;
+ cpu_set_input_line(device, 6, HOLD_LINE);
+ state->i8751_needs_ack = 1;
}
- latch=0;
+
+ state->latch = 0;
}
- cpu_set_input_line(device,7,HOLD_LINE); /* VBL */
+ cpu_set_input_line(device, 7, HOLD_LINE); /* VBL */
}
-static void sound_irq(const device_config *device, int linestate)
+static void sound_irq( const device_config *device, int linestate )
{
- cputag_set_input_line(device->machine, "audiocpu", 0, linestate); /* IRQ */
+ karnov_state *state = (karnov_state *)device->machine->driver_data;
+ cpu_set_input_line(state->audiocpu, 0, linestate); /* IRQ */
}
static const ym3526_interface ym3526_config =
@@ -709,15 +754,55 @@ static const ym3526_interface ym3526_config =
sound_irq
};
-/******************************************************************************/
+/*************************************
+ *
+ * Machine driver
+ *
+ *************************************/
+
+static MACHINE_START( karnov )
+{
+ karnov_state *state = (karnov_state *)machine->driver_data;
+
+ state->maincpu = devtag_get_device(machine, "maincpu");
+ state->audiocpu = devtag_get_device(machine, "audiocpu");
+
+ state_save_register_global(machine, state->flipscreen);
+ state_save_register_global_array(machine, state->scroll);
+
+ state_save_register_global(machine, state->i8751_return);
+ state_save_register_global(machine, state->i8751_needs_ack);
+ state_save_register_global(machine, state->i8751_coin_pending);
+ state_save_register_global(machine, state->i8751_command_queue);
+ state_save_register_global(machine, state->i8751_level);
+ state_save_register_global(machine, state->latch);
+
+}
static MACHINE_RESET( karnov )
{
- memset(karnov_ram,0,0x4000/2); /* Chelnov likes ram clear on reset.. */
+ karnov_state *state = (karnov_state *)machine->driver_data;
+
+ memset(state->ram, 0, 0x4000 / 2); /* Chelnov likes ram clear on reset.. */
+
+ state->i8751_return = 0;
+ state->i8751_needs_ack = 0;
+ state->i8751_coin_pending = 0;
+ state->i8751_command_queue = 0;
+ state->i8751_level = 0;
+// state->latch = 0;
+
+ state->flipscreen = 0;
+ state->scroll[0] = 0;
+ state->scroll[0] = 0;
}
+
static MACHINE_DRIVER_START( karnov )
+ /* driver data */
+ MDRV_DRIVER_DATA(karnov_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz */
MDRV_CPU_PROGRAM_MAP(karnov_map)
@@ -726,6 +811,7 @@ static MACHINE_DRIVER_START( karnov )
MDRV_CPU_ADD("audiocpu", M6502, 1500000) /* Accurate */
MDRV_CPU_PROGRAM_MAP(karnov_sound_map)
+ MDRV_MACHINE_START(karnov)
MDRV_MACHINE_RESET(karnov)
/* video hardware */
@@ -759,6 +845,9 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( wndrplnt )
+ /* driver data */
+ MDRV_DRIVER_DATA(karnov_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 10000000) /* 10 MHz */
MDRV_CPU_PROGRAM_MAP(karnov_map)
@@ -767,6 +856,7 @@ static MACHINE_DRIVER_START( wndrplnt )
MDRV_CPU_ADD("audiocpu", M6502, 1500000) /* Accurate */
MDRV_CPU_PROGRAM_MAP(karnov_sound_map)
+ MDRV_MACHINE_START(karnov)
MDRV_MACHINE_RESET(karnov)
/* video hardware */
@@ -797,7 +887,12 @@ static MACHINE_DRIVER_START( wndrplnt )
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
-/******************************************************************************/
+
+/*************************************
+ *
+ * ROM definition(s)
+ *
+ *************************************/
ROM_START( karnov )
ROM_REGION( 0x60000, "maincpu", 0 ) /* 6*64k for 68000 code */
@@ -1006,61 +1101,77 @@ ROM_START( chelnovj )
ROM_LOAD( "ee20.l6", 0x0400, 0x0400, CRC(41816132) SHA1(89a1194bd8bf39f13419df685e489440bdb05676) )
ROM_END
-/******************************************************************************/
+
+/*************************************
+ *
+ * Driver initialization
+ *
+ *************************************/
static DRIVER_INIT( karnov )
{
- microcontroller_id=KARNOV;
- coin_mask=0;
+ karnov_state *state = (karnov_state *)machine->driver_data;
+ state->microcontroller_id = KARNOV;
+ state->coin_mask = 0;
}
static DRIVER_INIT( karnovj )
{
- microcontroller_id=KARNOVJ;
- coin_mask=0;
+ karnov_state *state = (karnov_state *)machine->driver_data;
+ state->microcontroller_id = KARNOVJ;
+ state->coin_mask = 0;
}
static DRIVER_INIT( wndrplnt )
{
- microcontroller_id=WNDRPLNT;
- coin_mask=0;
+ karnov_state *state = (karnov_state *)machine->driver_data;
+ state->microcontroller_id = WNDRPLNT;
+ state->coin_mask = 0;
}
static DRIVER_INIT( chelnov )
{
+ karnov_state *state = (karnov_state *)machine->driver_data;
UINT16 *RAM = (UINT16 *)memory_region(machine, "maincpu");
- microcontroller_id=CHELNOV;
- coin_mask=0xe0;
- RAM[0x0A26/2]=0x4E71; /* removes a protection lookup table */
- RAM[0x062a/2]=0x4E71; /* hangs waiting on i8751 int */
+ state->microcontroller_id = CHELNOV;
+ state->coin_mask = 0xe0;
+ RAM[0x0a26/2] = 0x4e71; /* removes a protection lookup table */
+ RAM[0x062a/2] = 0x4e71; /* hangs waiting on i8751 int */
}
static DRIVER_INIT( chelnovw )
{
+ karnov_state *state = (karnov_state *)machine->driver_data;
UINT16 *RAM = (UINT16 *)memory_region(machine, "maincpu");
- microcontroller_id=CHELNOVW;
- coin_mask=0xe0;
- RAM[0x0A26/2]=0x4E71; /* removes a protection lookup table */
- RAM[0x062a/2]=0x4E71; /* hangs waiting on i8751 int */
+ state->microcontroller_id = CHELNOVW;
+ state->coin_mask = 0xe0;
+ RAM[0x0a26/2] = 0x4e71; /* removes a protection lookup table */
+ RAM[0x062a/2] = 0x4e71; /* hangs waiting on i8751 int */
}
static DRIVER_INIT( chelnovj )
{
+ karnov_state *state = (karnov_state *)machine->driver_data;
UINT16 *RAM = (UINT16 *)memory_region(machine, "maincpu");
- microcontroller_id=CHELNOVJ;
- coin_mask=0xe0;
- RAM[0x0a2e/2]=0x4E71; /* removes a protection lookup table */
- RAM[0x062a/2]=0x4E71; /* hangs waiting on i8751 int */
+ state->microcontroller_id = CHELNOVJ;
+ state->coin_mask = 0xe0;
+ RAM[0x0a2e/2] = 0x4e71; /* removes a protection lookup table */
+ RAM[0x062a/2] = 0x4e71; /* hangs waiting on i8751 int */
}
-/******************************************************************************/
-GAME( 1987, karnov, 0, karnov, karnov, karnov, ROT0, "Data East USA", "Karnov (US)", 0 )
-GAME( 1987, karnovj, karnov, karnov, karnov, karnovj, ROT0, "Data East Corporation", "Karnov (Japan)", 0 )
-GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt,wndrplnt, ROT270, "Data East Corporation", "Wonder Planet (Japan)", 0 )
-GAME( 1988, chelnov, 0, karnov, chelnov, chelnovw, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (World)", 0 )
-GAME( 1988, chelnovu, chelnov, karnov, chelnovu, chelnov, ROT0, "Data East USA", "Chelnov - Atomic Runner (US)", 0 )
-GAME( 1988, chelnovj, chelnov, karnov, chelnovu, chelnovj, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (Japan)", 0 )
+/*************************************
+ *
+ * Game driver(s)
+ *
+ *************************************/
+
+GAME( 1987, karnov, 0, karnov, karnov, karnov, ROT0, "Data East USA", "Karnov (US)", GAME_SUPPORTS_SAVE )
+GAME( 1987, karnovj, karnov, karnov, karnov, karnovj, ROT0, "Data East Corporation", "Karnov (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1987, wndrplnt, 0, wndrplnt, wndrplnt, wndrplnt, ROT270, "Data East Corporation", "Wonder Planet (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1988, chelnov, 0, karnov, chelnov, chelnovw, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (World)", GAME_SUPPORTS_SAVE )
+GAME( 1988, chelnovu, chelnov, karnov, chelnovu, chelnov, ROT0, "Data East USA", "Chelnov - Atomic Runner (US)", GAME_SUPPORTS_SAVE )
+GAME( 1988, chelnovj, chelnov, karnov, chelnovu, chelnovj, ROT0, "Data East Corporation", "Chelnov - Atomic Runner (Japan)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kchamp.c b/src/mame/drivers/kchamp.c
index 4affebcf655..8029cb51267 100644
--- a/src/mame/drivers/kchamp.c
+++ b/src/mame/drivers/kchamp.c
@@ -61,69 +61,59 @@ Same as VS version but with a DAC instead of a MSM5205. Also some minor
IO ports and memory map changes. Dip switches differ too.
***************************************************************************/
+
#include "driver.h"
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/msm5205.h"
+#include "includes/kchamp.h"
-/* from video */
-extern WRITE8_HANDLER( kchamp_videoram_w );
-extern WRITE8_HANDLER( kchamp_colorram_w );
-extern WRITE8_HANDLER( kchamp_flipscreen_w );
-
-extern PALETTE_INIT( kchamp );
-extern VIDEO_START( kchamp );
-extern VIDEO_UPDATE( kchamp );
-extern VIDEO_UPDATE( kchampvs );
-
-
-static int nmi_enable = 0;
-static int sound_nmi_enable = 0;
-
/********************
* VS Version *
********************/
static WRITE8_HANDLER( control_w )
{
- nmi_enable = data & 1;
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ state->nmi_enable = data & 1;
}
static WRITE8_HANDLER( sound_reset_w )
{
- if ( !( data & 1 ) )
- cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_RESET, PULSE_LINE);
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ if (!(data & 1))
+ cpu_set_input_line(state->audiocpu, INPUT_LINE_RESET, PULSE_LINE);
}
static WRITE8_DEVICE_HANDLER( sound_control_w )
{
- msm5205_reset_w( device, !( data & 1 ) );
- sound_nmi_enable = ( ( data >> 1 ) & 1 );
+ kchamp_state *state = (kchamp_state *)device->machine->driver_data;
+ msm5205_reset_w(device, !(data & 1));
+ state->sound_nmi_enable = ((data >> 1) & 1);
}
static WRITE8_HANDLER( sound_command_w )
{
- soundlatch_w( space, 0, data );
- cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff );
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ soundlatch_w(space, 0, data);
+ cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff);
}
-static int msm_data = 0;
-static int msm_play_lo_nibble;
-
static WRITE8_HANDLER( sound_msm_w )
{
- msm_data = data;
- msm_play_lo_nibble = 1;
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ state->msm_data = data;
+ state->msm_play_lo_nibble = 1;
}
static ADDRESS_MAP_START( kchampvs_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xcfff) AM_RAM
- AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(kchamp_videoram_w) AM_BASE_GENERIC(videoram)
- AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(kchamp_colorram_w) AM_BASE_GENERIC(colorram)
- AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
+ AM_RANGE(0xd000, 0xd3ff) AM_RAM_WRITE(kchamp_videoram_w) AM_BASE_MEMBER(kchamp_state, videoram)
+ AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(kchamp_colorram_w) AM_BASE_MEMBER(kchamp_state, colorram)
+ AM_RANGE(0xd800, 0xd8ff) AM_RAM AM_BASE_SIZE_MEMBER(kchamp_state, spriteram, spriteram_size)
AM_RANGE(0xd900, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -158,24 +148,27 @@ ADDRESS_MAP_END
********************/
static READ8_HANDLER( sound_reset_r )
{
- cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_RESET, PULSE_LINE);
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ cpu_set_input_line(state->audiocpu, INPUT_LINE_RESET, PULSE_LINE);
return 0;
}
static WRITE8_HANDLER( kc_sound_control_w )
{
- if ( offset == 0 )
- sound_nmi_enable = ( ( data >> 7 ) & 1 );
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+
+ if (offset == 0)
+ state->sound_nmi_enable = ((data >> 7) & 1);
// else
-// DAC_set_volume(0,( data == 1 ) ? 255 : 0,0);
+// DAC_set_volume(0, (data == 1) ? 255 : 0, 0);
}
static ADDRESS_MAP_START( kchamp_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xdfff) AM_RAM
- AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(kchamp_videoram_w) AM_BASE_GENERIC(videoram)
- AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(kchamp_colorram_w) AM_BASE_GENERIC(colorram)
- AM_RANGE(0xea00, 0xeaff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
+ AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(kchamp_videoram_w) AM_BASE_MEMBER(kchamp_state, videoram)
+ AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(kchamp_colorram_w) AM_BASE_MEMBER(kchamp_state, colorram)
+ AM_RANGE(0xea00, 0xeaff) AM_RAM AM_BASE_SIZE_MEMBER(kchamp_state, spriteram, spriteram_size)
AM_RANGE(0xeb00, 0xffff) AM_RAM
ADDRESS_MAP_END
@@ -355,29 +348,26 @@ GFXDECODE_END
static INTERRUPT_GEN( kc_interrupt )
{
-
- if ( nmi_enable )
+ kchamp_state *state = (kchamp_state *)device->machine->driver_data;
+ if (state->nmi_enable)
cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
-static void msmint(const device_config *device)
+static void msmint( const device_config *device )
{
+ kchamp_state *state = (kchamp_state *)device->machine->driver_data;
- static int counter = 0;
-
- if ( msm_play_lo_nibble )
- msm5205_data_w( device, msm_data & 0x0f );
+ if (state->msm_play_lo_nibble)
+ msm5205_data_w(device, state->msm_data & 0x0f);
else
- msm5205_data_w( device, ( msm_data >> 4 ) & 0x0f );
+ msm5205_data_w(device, (state->msm_data >> 4) & 0x0f);
- msm_play_lo_nibble ^= 1;
+ state->msm_play_lo_nibble ^= 1;
- if ( !( counter ^= 1 ) )
+ if (!(state->counter ^= 1))
{
- if ( sound_nmi_enable )
- {
- cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE );
- }
+ if (state->sound_nmi_enable)
+ cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE);
}
}
@@ -393,27 +383,63 @@ static const msm5205_interface msm_interface =
static INTERRUPT_GEN( sound_int )
{
- if ( sound_nmi_enable )
+ kchamp_state *state = (kchamp_state *)device->machine->driver_data;
+ if (state->sound_nmi_enable)
cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
+static MACHINE_START( kchamp )
+{
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+
+ state->audiocpu = devtag_get_device(machine, "audiocpu");
+
+ state_save_register_global(machine, state->nmi_enable);
+ state_save_register_global(machine, state->sound_nmi_enable);
+}
+
+static MACHINE_START( kchampvs )
+{
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+
+ MACHINE_START_CALL(kchamp);
+
+ state_save_register_global(machine, state->msm_data);
+ state_save_register_global(machine, state->msm_play_lo_nibble);
+ state_save_register_global(machine, state->counter);
+}
+
+static MACHINE_RESET( kchamp )
+{
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+
+ state->nmi_enable = 0;
+ state->sound_nmi_enable = 0;
+}
+
static MACHINE_DRIVER_START( kchampvs )
+ /* driver data */
+ MDRV_DRIVER_DATA(kchamp_state)
+
/* basic machine hardware */
- MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* verified on pcb */
+ MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(kchampvs_map)
MDRV_CPU_IO_MAP(kchampvs_io_map)
MDRV_CPU_VBLANK_INT("screen", kc_interrupt)
- MDRV_CPU_ADD("audiocpu", Z80, XTAL_12MHz/4) /* verified on pcb */
+ MDRV_CPU_ADD("audiocpu", Z80, XTAL_12MHz/4) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(kchampvs_sound_map)
MDRV_CPU_IO_MAP(kchampvs_sound_io_map) /* irq's triggered from main cpu */
/* nmi's from msm5205 */
+ MDRV_MACHINE_START(kchampvs)
+ MDRV_MACHINE_RESET(kchamp)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
- MDRV_SCREEN_REFRESH_RATE(59.10) /* verified on pcb */
+ MDRV_SCREEN_REFRESH_RATE(59.10) /* verified on pcb */
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 32*8)
@@ -429,13 +455,13 @@ static MACHINE_DRIVER_START( kchampvs )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
- MDRV_SOUND_ADD("ay1", AY8910, XTAL_12MHz/8) /* verified on pcb */
+ MDRV_SOUND_ADD("ay1", AY8910, XTAL_12MHz/8) /* verified on pcb */
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
- MDRV_SOUND_ADD("ay2", AY8910, XTAL_12MHz/8) /* verified on pcb */
+ MDRV_SOUND_ADD("ay2", AY8910, XTAL_12MHz/8) /* verified on pcb */
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
- MDRV_SOUND_ADD("msm", MSM5205, 375000) /* verified on pcb, discrete circuit clock */
+ MDRV_SOUND_ADD("msm", MSM5205, 375000) /* verified on pcb, discrete circuit clock */
MDRV_SOUND_CONFIG(msm_interface)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_DRIVER_END
@@ -446,6 +472,9 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( kchamp )
+ /* driver data */
+ MDRV_DRIVER_DATA(kchamp_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, 3000000) /* 12MHz / 4 = 3.0 MHz */
MDRV_CPU_PROGRAM_MAP(kchamp_map)
@@ -459,6 +488,9 @@ static MACHINE_DRIVER_START( kchamp )
/* irq's triggered from main cpu */
/* nmi's from 125 Hz clock */
+ MDRV_MACHINE_START(kchamp)
+ MDRV_MACHINE_RESET(kchamp)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -711,7 +743,7 @@ static UINT8 *decrypt_code(running_machine *machine)
memory_set_decrypted_region(space, 0x0000, 0xffff, decrypted);
- for (A = 0;A < 0x10000;A++)
+ for (A = 0; A < 0x10000; A++)
decrypted[A] = (rom[A] & 0x55) | ((rom[A] & 0x88) >> 2) | ((rom[A] & 0x22) << 2);
return decrypted;
@@ -720,6 +752,7 @@ static UINT8 *decrypt_code(running_machine *machine)
static DRIVER_INIT( kchampvs )
{
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
UINT8 *rom = memory_region(machine, "maincpu");
UINT8 *decrypted = decrypt_code(machine);
int A;
@@ -742,28 +775,27 @@ static DRIVER_INIT( kchampvs )
A += 2;
decrypted[A] = rom[A]; /* fix fourth opcode (ld ($xxxx),a */
/* and from here on, opcodes are encrypted */
-}
-
-static DRIVER_INIT( kchamp )
-{
- nmi_enable = 0;
- sound_nmi_enable = 0;
+ state->counter = 0;
+ state->msm_data = 0;
+ state->msm_play_lo_nibble = 0;
}
+
static DRIVER_INIT( kchampvs2 )
{
- DRIVER_INIT_CALL( kchamp );
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+
decrypt_code(machine);
- msm_data = 0;
- msm_play_lo_nibble = 1;
+ state->counter = 0;
+ state->msm_data = 0;
+ state->msm_play_lo_nibble = 1;
}
-GAME( 1984, kchamp, 0, kchamp, kchamp, kchamp, ROT90, "Data East USA", "Karate Champ (US)", 0 )
-GAME( 1984, karatedo, kchamp, kchamp, kchamp, kchamp, ROT90, "Data East Corporation", "Karate Dou (Japan)", 0 )
-GAME( 1984, kchampvs, kchamp, kchampvs, kchampvs, kchampvs, ROT90, "Data East USA", "Karate Champ (US, VS version set 1)", 0 )
-GAME( 1984, kchampvs2, kchamp, kchampvs, kchampvs, kchampvs2, ROT90, "Data East USA", "Karate Champ (US, VS version set 2)", 0 )
-GAME( 1984, karatevs, kchamp, kchampvs, kchampvs, kchampvs, ROT90, "Data East Corporation", "Taisen Karate Dou (Japan VS version)", 0 )
-
+GAME( 1984, kchamp, 0, kchamp, kchamp, 0, ROT90, "Data East USA", "Karate Champ (US)", GAME_SUPPORTS_SAVE )
+GAME( 1984, karatedo, kchamp, kchamp, kchamp, 0, ROT90, "Data East Corporation", "Karate Dou (Japan)", GAME_SUPPORTS_SAVE )
+GAME( 1984, kchampvs, kchamp, kchampvs, kchampvs, kchampvs, ROT90, "Data East USA", "Karate Champ (US, VS version set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1984, kchampvs2, kchamp, kchampvs, kchampvs, kchampvs2, ROT90, "Data East USA", "Karate Champ (US, VS version set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1984, karatevs, kchamp, kchampvs, kchampvs, kchampvs, ROT90, "Data East Corporation", "Taisen Karate Dou (Japan VS version)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kickgoal.c b/src/mame/drivers/kickgoal.c
index c66317197f9..b3ecb6a5d2c 100644
--- a/src/mame/drivers/kickgoal.c
+++ b/src/mame/drivers/kickgoal.c
@@ -37,8 +37,9 @@ lev 7 : 0x7c : 0000 0000 - x
#include "driver.h"
#include "cpu/m68000/m68000.h"
#include "cpu/pic16c5x/pic16c5x.h"
-#include "machine/eeprom.h"
+#include "machine/eepromdev.h"
#include "sound/okim6295.h"
+#include "includes/kickgoal.h"
/**************************************************************************
This table converts commands sent from the main CPU, into sample numbers
@@ -108,27 +109,13 @@ Hollywood Action
#define oki_time_base 0x08
-//static int kickgoal_sound;
-//static int kickgoal_melody;
-static int kickgoal_melody_loop;
-//static int kickgoal_snd_bank;
-static int snd_new, snd_sam[4];
-
-
-UINT16 *kickgoal_fgram, *kickgoal_bgram, *kickgoal_bg2ram, *kickgoal_scrram;
-WRITE16_HANDLER( kickgoal_fgram_w );
-WRITE16_HANDLER( kickgoal_bgram_w );
-WRITE16_HANDLER( kickgoal_bg2ram_w );
-
-VIDEO_START( kickgoal );
-VIDEO_UPDATE( kickgoal );
-
-VIDEO_START( actionhw );
-VIDEO_UPDATE( actionhw );
+#ifdef UNUSED_FUNCTION
+//static int kickgoal_sound;
+//static int state->melody;
+//static int kickgoal_snd_bank;
-#ifdef UNUSED_FUNCTION
static void kickgoal_play(const device_config *device, int melody, int data)
{
int status = okim6295_r(device,0);
@@ -137,12 +124,12 @@ static void kickgoal_play(const device_config *device, int melody, int data)
if (kickgoal_sound == 0) popmessage("Unknown sound command %02x",kickgoal_sound);
if (melody) {
- if (kickgoal_melody != kickgoal_sound) {
- kickgoal_melody = kickgoal_sound;
- kickgoal_melody_loop = kickgoal_sound;
+ if (state->melody != kickgoal_sound) {
+ state->melody = kickgoal_sound;
+ state->melody_loop = kickgoal_sound;
if (status & 0x08)
okim6295_w(device,0,0x40);
- okim6295_w(device,0,(0x80 | kickgoal_melody));
+ okim6295_w(device,0,(0x80 | state->melody));
okim6295_w(device,0,0x81);
}
}
@@ -170,8 +157,8 @@ WRITE16_DEVICE_HANDLER( kickgoal_snd_w )
if (data >= 0x40) {
if (data == 0xfe) {
okim6295_w(device,0,0x40); /* Stop playing the melody */
- kickgoal_melody = 0x00;
- kickgoal_melody_loop = 0x00;
+ state->melody = 0x00;
+ state->melody_loop = 0x00;
}
else {
logerror("Unknown command (%02x) sent to the Sound controller\n",data);
@@ -217,9 +204,11 @@ WRITE16_DEVICE_HANDLER( kickgoal_snd_w )
static WRITE16_DEVICE_HANDLER( actionhw_snd_w )
{
+ kickgoal_state *state = (kickgoal_state *)device->machine->driver_data;
logerror("%s: Writing %04x to Sound CPU - mask %04x\n",cpuexec_describe_context(device->machine),data,mem_mask);
- if (!ACCESSING_BITS_0_7) data >>= 8;
+ if (!ACCESSING_BITS_0_7)
+ data >>= 8;
switch (data)
{
@@ -227,214 +216,221 @@ static WRITE16_DEVICE_HANDLER( actionhw_snd_w )
case 0xfd: okim6295_set_bank_base(device, (2 * 0x40000)); break;
case 0xfe: okim6295_set_bank_base(device, (1 * 0x40000)); break;
case 0xff: okim6295_set_bank_base(device, (3 * 0x40000)); break;
- case 0x78: okim6295_w(device,0,data);
- snd_sam[0]=00; snd_sam[1]=00; snd_sam[2]=00; snd_sam[3]=00;
- break;
- default: if (snd_new) /* Play new sample */
+ case 0x78:
+ okim6295_w(device, 0, data);
+ state->snd_sam[0] = 00; state->snd_sam[1]= 00; state->snd_sam[2] = 00; state->snd_sam[3] = 00;
+ break;
+ default:
+ if (state->snd_new) /* Play new sample */
+ {
+ if ((data & 0x80) && (state->snd_sam[3] != state->snd_new))
{
- if ((data & 0x80) && (snd_sam[3] != snd_new))
+ logerror("About to play sample %02x at vol %02x\n", state->snd_new, data);
+ if ((okim6295_r(device, 0) & 0x08) != 0x08)
{
- logerror("About to play sample %02x at vol %02x\n",snd_new,data);
- if ((okim6295_r(device,0) & 0x08) != 0x08)
- {
- logerror("Playing sample %02x at vol %02x\n",snd_new,data);
- okim6295_w(device,0,snd_new);
- okim6295_w(device,0,data);
- }
- snd_new = 00;
+ logerror("Playing sample %02x at vol %02x\n", state->snd_new, data);
+ okim6295_w(device, 0, state->snd_new);
+ okim6295_w(device, 0, data);
}
- if ((data & 0x40) && (snd_sam[2] != snd_new))
- {
- logerror("About to play sample %02x at vol %02x\n",snd_new,data);
- if ((okim6295_r(device,0) & 0x04) != 0x04)
- {
- logerror("Playing sample %02x at vol %02x\n",snd_new,data);
- okim6295_w(device,0,snd_new);
- okim6295_w(device,0,data);
- }
- snd_new = 00;
- }
- if ((data & 0x20) && (snd_sam[1] != snd_new))
- {
- logerror("About to play sample %02x at vol %02x\n",snd_new,data);
- if ((okim6295_r(device,0) & 0x02) != 0x02)
- {
- logerror("Playing sample %02x at vol %02x\n",snd_new,data);
- okim6295_w(device,0,snd_new);
- okim6295_w(device,0,data);
- }
- snd_new = 00;
- }
- if ((data & 0x10) && (snd_sam[0] != snd_new))
+ state->snd_new = 00;
+ }
+ if ((data & 0x40) && (state->snd_sam[2] != state->snd_new))
+ {
+ logerror("About to play sample %02x at vol %02x\n", state->snd_new, data);
+ if ((okim6295_r(device, 0) & 0x04) != 0x04)
{
- logerror("About to play sample %02x at vol %02x\n",snd_new,data);
- if ((okim6295_r(device,0) & 0x01) != 0x01)
- {
- logerror("Playing sample %02x at vol %02x\n",snd_new,data);
- okim6295_w(device,0,snd_new);
- okim6295_w(device,0,data);
- }
- snd_new = 00;
+ logerror("Playing sample %02x at vol %02x\n", state->snd_new, data);
+ okim6295_w(device, 0, state->snd_new);
+ okim6295_w(device, 0, data);
}
- break;
+ state->snd_new = 00;
}
- else if (data > 0x80) /* New sample command */
+ if ((data & 0x20) && (state->snd_sam[1] != state->snd_new))
{
- logerror("Next sample %02x\n",data);
- snd_new = data;
- break;
+ logerror("About to play sample %02x at vol %02x\n", state->snd_new, data);
+ if ((okim6295_r(device, 0) & 0x02) != 0x02)
+ {
+ logerror("Playing sample %02x at vol %02x\n", state->snd_new, data);
+ okim6295_w(device, 0, state->snd_new);
+ okim6295_w(device, 0, data);
+ }
+ state->snd_new = 00;
}
- else /* Turn a channel off */
+ if ((data & 0x10) && (state->snd_sam[0] != state->snd_new))
{
- logerror("Turning channel %02x off\n",data);
- okim6295_w(device,0,data);
- if (data & 0x40) snd_sam[3] = 00;
- if (data & 0x20) snd_sam[2] = 00;
- if (data & 0x10) snd_sam[1] = 00;
- if (data & 0x08) snd_sam[0] = 00;
- snd_new = 00;
- break;
+ logerror("About to play sample %02x at vol %02x\n", state->snd_new, data);
+ if ((okim6295_r(device, 0) & 0x01) != 0x01)
+ {
+ logerror("Playing sample %02x at vol %02x\n", state->snd_new, data);
+ okim6295_w(device, 0, state->snd_new);
+ okim6295_w(device, 0, data);
+ }
+ state->snd_new = 00;
}
+ break;
+ }
+ else if (data > 0x80) /* New sample command */
+ {
+ logerror("Next sample %02x\n", data);
+ state->snd_new = data;
+ break;
+ }
+ else /* Turn a channel off */
+ {
+ logerror("Turning channel %02x off\n", data);
+ okim6295_w(device, 0, data);
+ if (data & 0x40) state->snd_sam[3] = 00;
+ if (data & 0x20) state->snd_sam[2] = 00;
+ if (data & 0x10) state->snd_sam[1] = 00;
+ if (data & 0x08) state->snd_sam[0] = 00;
+ state->snd_new = 00;
+ break;
+ }
}
}
-
-
-static int m6295_comm;
-static int m6295_bank;
-static UINT16 m6295_key_delay;
static INTERRUPT_GEN( kickgoal_interrupt )
{
- const device_config *adpcm = devtag_get_device(device->machine, "oki");
+ kickgoal_state *state = (kickgoal_state *)device->machine->driver_data;
- if ((okim6295_r(adpcm,0) & 0x08) == 0)
+ if ((okim6295_r(state->adpcm, 0) & 0x08) == 0)
{
- switch(kickgoal_melody_loop)
+ switch(state->melody_loop)
{
- case 0x060: kickgoal_melody_loop = 0x061; break;
- case 0x061: kickgoal_melody_loop = 0x062; break;
- case 0x062: kickgoal_melody_loop = 0x060; break;
-
- case 0x065: kickgoal_melody_loop = 0x165; break;
- case 0x165: kickgoal_melody_loop = 0x265; break;
- case 0x265: kickgoal_melody_loop = 0x365; break;
- case 0x365: kickgoal_melody_loop = 0x066; break;
- case 0x066: kickgoal_melody_loop = 0x067; break;
- case 0x067: kickgoal_melody_loop = 0x068; break;
- case 0x068: kickgoal_melody_loop = 0x065; break;
-
- case 0x063: kickgoal_melody_loop = 0x063; break;
- case 0x064: kickgoal_melody_loop = 0x064; break;
- case 0x069: kickgoal_melody_loop = 0x069; break;
- case 0x06a: kickgoal_melody_loop = 0x06a; break;
- case 0x06b: kickgoal_melody_loop = 0x06b; break;
- case 0x06c: kickgoal_melody_loop = 0x06c; break;
-
- default: kickgoal_melody_loop = 0x00; break;
+ case 0x060: state->melody_loop = 0x061; break;
+ case 0x061: state->melody_loop = 0x062; break;
+ case 0x062: state->melody_loop = 0x060; break;
+
+ case 0x065: state->melody_loop = 0x165; break;
+ case 0x165: state->melody_loop = 0x265; break;
+ case 0x265: state->melody_loop = 0x365; break;
+ case 0x365: state->melody_loop = 0x066; break;
+ case 0x066: state->melody_loop = 0x067; break;
+ case 0x067: state->melody_loop = 0x068; break;
+ case 0x068: state->melody_loop = 0x065; break;
+
+ case 0x063: state->melody_loop = 0x063; break;
+ case 0x064: state->melody_loop = 0x064; break;
+ case 0x069: state->melody_loop = 0x069; break;
+ case 0x06a: state->melody_loop = 0x06a; break;
+ case 0x06b: state->melody_loop = 0x06b; break;
+ case 0x06c: state->melody_loop = 0x06c; break;
+
+ default: state->melody_loop = 0x00; break;
}
- if (kickgoal_melody_loop)
+ if (state->melody_loop)
{
-// logerror("Changing to sample %02x\n",kickgoal_melody_loop);
- okim6295_w(adpcm,0,((0x80 | kickgoal_melody_loop) & 0xff));
- okim6295_w(adpcm,0,0x81);
+// logerror("Changing to sample %02x\n", state->melody_loop);
+ okim6295_w(state->adpcm, 0, ((0x80 | state->melody_loop) & 0xff));
+ okim6295_w(state->adpcm, 0, 0x81);
}
}
- if ( input_code_pressed_once(device->machine, KEYCODE_PGUP) )
+ if (input_code_pressed_once(device->machine, KEYCODE_PGUP))
{
- if (m6295_key_delay >= (0x60 * oki_time_base))
+ if (state->m6295_key_delay >= (0x60 * oki_time_base))
{
- m6295_bank += 0x01;
- m6295_bank &= 0x03;
- if (m6295_bank == 0x03) m6295_bank = 0x00;
- popmessage("Changing Bank to %02x",m6295_bank);
- okim6295_set_bank_base(adpcm, ((m6295_bank) * 0x40000));
-
- if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00;
- else m6295_key_delay = (0x30 * oki_time_base);
+ state->m6295_bank += 0x01;
+ state->m6295_bank &= 0x03;
+ if (state->m6295_bank == 0x03)
+ state->m6295_bank = 0x00;
+ popmessage("Changing Bank to %02x", state->m6295_bank);
+ okim6295_set_bank_base(state->adpcm, ((state->m6295_bank) * 0x40000));
+
+ if (state->m6295_key_delay == 0xffff)
+ state->m6295_key_delay = 0x00;
+ else
+ state->m6295_key_delay = (0x30 * oki_time_base);
}
else
- m6295_key_delay += (0x01 * oki_time_base);
+ state->m6295_key_delay += (0x01 * oki_time_base);
}
- else if ( input_code_pressed_once(device->machine, KEYCODE_PGDN) )
+ else if (input_code_pressed_once(device->machine, KEYCODE_PGDN))
{
- if (m6295_key_delay >= (0x60 * oki_time_base))
+ if (state->m6295_key_delay >= (0x60 * oki_time_base))
{
- m6295_bank -= 0x01;
- m6295_bank &= 0x03;
- if (m6295_bank == 0x03) m6295_bank = 0x02;
- popmessage("Changing Bank to %02x",m6295_bank);
- okim6295_set_bank_base(adpcm, ((m6295_bank) * 0x40000));
-
- if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00;
- else m6295_key_delay = (0x30 * oki_time_base);
+ state->m6295_bank -= 0x01;
+ state->m6295_bank &= 0x03;
+ if (state->m6295_bank == 0x03)
+ state->m6295_bank = 0x02;
+ popmessage("Changing Bank to %02x", state->m6295_bank);
+ okim6295_set_bank_base(state->adpcm, ((state->m6295_bank) * 0x40000));
+
+ if (state->m6295_key_delay == 0xffff)
+ state->m6295_key_delay = 0x00;
+ else
+ state->m6295_key_delay = (0x30 * oki_time_base);
}
else
- m6295_key_delay += (0x01 * oki_time_base);
+ state->m6295_key_delay += (0x01 * oki_time_base);
}
- else if ( input_code_pressed_once(device->machine, KEYCODE_INSERT) )
+ else if (input_code_pressed_once(device->machine, KEYCODE_INSERT))
{
- if (m6295_key_delay >= (0x60 * oki_time_base))
+ if (state->m6295_key_delay >= (0x60 * oki_time_base))
{
- m6295_comm += 1;
- m6295_comm &= 0x7f;
- if (m6295_comm == 0x00) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; }
- if (m6295_comm == 0x60) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; }
- if (m6295_comm == 0x65) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; }
- if (m6295_comm == 0x69) { okim6295_set_bank_base(adpcm, (2 * 0x40000)); m6295_bank = 2; }
- if (m6295_comm == 0x70) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; }
- popmessage("Sound test command %02x on Bank %02x",m6295_comm,m6295_bank);
-
- if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00;
- else m6295_key_delay = (0x5d * oki_time_base);
+ state->m6295_comm += 1;
+ state->m6295_comm &= 0x7f;
+ if (state->m6295_comm == 0x00) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; }
+ if (state->m6295_comm == 0x60) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; }
+ if (state->m6295_comm == 0x65) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; }
+ if (state->m6295_comm == 0x69) { okim6295_set_bank_base(state->adpcm, (2 * 0x40000)); state->m6295_bank = 2; }
+ if (state->m6295_comm == 0x70) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; }
+ popmessage("Sound test command %02x on Bank %02x", state->m6295_comm, state->m6295_bank);
+
+ if (state->m6295_key_delay == 0xffff)
+ state->m6295_key_delay = 0x00;
+ else
+ state->m6295_key_delay = (0x5d * oki_time_base);
}
else
- m6295_key_delay += (0x01 * oki_time_base);
+ state->m6295_key_delay += (0x01 * oki_time_base);
}
- else if ( input_code_pressed_once(device->machine, KEYCODE_DEL) )
+ else if (input_code_pressed_once(device->machine, KEYCODE_DEL))
{
- if (m6295_key_delay >= (0x60 * oki_time_base))
+ if (state->m6295_key_delay >= (0x60 * oki_time_base))
{
- m6295_comm -= 1;
- m6295_comm &= 0x7f;
- if (m6295_comm == 0x2b) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; }
- if (m6295_comm == 0x64) { okim6295_set_bank_base(adpcm, (0 * 0x40000)); m6295_bank = 0; }
- if (m6295_comm == 0x68) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; }
- if (m6295_comm == 0x6c) { okim6295_set_bank_base(adpcm, (2 * 0x40000)); m6295_bank = 2; }
- if (m6295_comm == 0x76) { okim6295_set_bank_base(adpcm, (1 * 0x40000)); m6295_bank = 1; }
- popmessage("Sound test command %02x on Bank %02x",m6295_comm,m6295_bank);
-
- if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00;
- else m6295_key_delay = (0x5d * oki_time_base);
+ state->m6295_comm -= 1;
+ state->m6295_comm &= 0x7f;
+ if (state->m6295_comm == 0x2b) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; }
+ if (state->m6295_comm == 0x64) { okim6295_set_bank_base(state->adpcm, (0 * 0x40000)); state->m6295_bank = 0; }
+ if (state->m6295_comm == 0x68) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; }
+ if (state->m6295_comm == 0x6c) { okim6295_set_bank_base(state->adpcm, (2 * 0x40000)); state->m6295_bank = 2; }
+ if (state->m6295_comm == 0x76) { okim6295_set_bank_base(state->adpcm, (1 * 0x40000)); state->m6295_bank = 1; }
+ popmessage("Sound test command %02x on Bank %02x", state->m6295_comm, state->m6295_bank);
+
+ if (state->m6295_key_delay == 0xffff)
+ state->m6295_key_delay = 0x00;
+ else
+ state->m6295_key_delay = (0x5d * oki_time_base);
}
else
- m6295_key_delay += (0x01 * oki_time_base);
+ state->m6295_key_delay += (0x01 * oki_time_base);
}
- else if ( input_code_pressed_once(device->machine, KEYCODE_Z) )
+ else if (input_code_pressed_once(device->machine, KEYCODE_Z))
{
- if (m6295_key_delay >= (0x80 * oki_time_base))
+ if (state->m6295_key_delay >= (0x80 * oki_time_base))
{
- okim6295_w(adpcm,0,0x78);
- okim6295_w(adpcm,0,(0x80 | m6295_comm));
- okim6295_w(adpcm,0,0x11);
+ okim6295_w(state->adpcm, 0, 0x78);
+ okim6295_w(state->adpcm, 0, (0x80 | state->m6295_comm));
+ okim6295_w(state->adpcm, 0, 0x11);
- popmessage("Playing sound %02x on Bank %02x",m6295_comm,m6295_bank);
+ popmessage("Playing sound %02x on Bank %02x", state->m6295_comm, state->m6295_bank);
- if (m6295_key_delay == 0xffff) m6295_key_delay = 0x00;
- else m6295_key_delay = (0x60 * oki_time_base);
+ if (state->m6295_key_delay == 0xffff)
+ state->m6295_key_delay = 0x00;
+ else
+ state->m6295_key_delay = (0x60 * oki_time_base);
}
else
- m6295_key_delay += (0x01 * oki_time_base);
-// logerror("Sending %02x to the sound CPU\n",m6295_comm);
+ state->m6295_key_delay += (0x01 * oki_time_base);
+// logerror("Sending %02x to the sound CPU\n", state->m6295_comm);
}
- else m6295_key_delay = 0xffff;
+ else
+ state->m6295_key_delay = 0xffff;
}
-static const UINT8 *kickgoal_default_eeprom;
-static int kickgoal_default_eeprom_length;
-
static const UINT8 kickgoal_default_eeprom_type1[128] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -447,30 +443,13 @@ static const UINT8 kickgoal_default_eeprom_type1[128] = {
};
-static NVRAM_HANDLER( kickgoal )
-{
- if (read_or_write)
- eeprom_save(file);
- else
- {
- eeprom_init(machine, &eeprom_interface_93C46);
-
- if (file) eeprom_load(file);
- else
- {
- if (kickgoal_default_eeprom) /* Sane Defaults */
- eeprom_set_data(kickgoal_default_eeprom,kickgoal_default_eeprom_length);
- }
- }
-}
-
-
static READ16_HANDLER( kickgoal_eeprom_r )
{
+ kickgoal_state *state = (kickgoal_state *)space->machine->driver_data;
if (ACCESSING_BITS_0_7)
{
- return eeprom_read_bit();
+ return eepromdev_read_bit(state->eeprom);
}
return 0;
}
@@ -478,18 +457,19 @@ static READ16_HANDLER( kickgoal_eeprom_r )
static WRITE16_HANDLER( kickgoal_eeprom_w )
{
+ kickgoal_state *state = (kickgoal_state *)space->machine->driver_data;
if (ACCESSING_BITS_0_7)
{
switch (offset)
{
case 0:
- eeprom_set_cs_line((data & 0x0001) ? CLEAR_LINE : ASSERT_LINE);
+ eepromdev_set_cs_line(state->eeprom, (data & 0x0001) ? CLEAR_LINE : ASSERT_LINE);
break;
case 1:
- eeprom_set_clock_line((data & 0x0001) ? ASSERT_LINE : CLEAR_LINE);
+ eepromdev_set_clock_line(state->eeprom, (data & 0x0001) ? ASSERT_LINE : CLEAR_LINE);
break;
case 2:
- eeprom_write_bit(data & 0x0001);
+ eepromdev_write_bit(state->eeprom, data & 0x0001);
break;
}
}
@@ -507,12 +487,12 @@ static ADDRESS_MAP_START( kickgoal_program_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x800004, 0x800005) AM_DEVWRITE("oki", actionhw_snd_w)
AM_RANGE(0x900000, 0x900005) AM_WRITE(kickgoal_eeprom_w)
AM_RANGE(0x900006, 0x900007) AM_READ(kickgoal_eeprom_r)
- AM_RANGE(0xa00000, 0xa03fff) AM_RAM_WRITE(kickgoal_fgram_w) AM_BASE(&kickgoal_fgram) /* FG Layer */
- AM_RANGE(0xa04000, 0xa07fff) AM_RAM_WRITE(kickgoal_bgram_w) AM_BASE(&kickgoal_bgram) /* Higher BG Layer */
- AM_RANGE(0xa08000, 0xa0bfff) AM_RAM_WRITE(kickgoal_bg2ram_w) AM_BASE(&kickgoal_bg2ram) /* Lower BG Layer */
+ AM_RANGE(0xa00000, 0xa03fff) AM_RAM_WRITE(kickgoal_fgram_w) AM_BASE_MEMBER(kickgoal_state, fgram) /* FG Layer */
+ AM_RANGE(0xa04000, 0xa07fff) AM_RAM_WRITE(kickgoal_bgram_w) AM_BASE_MEMBER(kickgoal_state, bgram) /* Higher BG Layer */
+ AM_RANGE(0xa08000, 0xa0bfff) AM_RAM_WRITE(kickgoal_bg2ram_w) AM_BASE_MEMBER(kickgoal_state, bg2ram) /* Lower BG Layer */
AM_RANGE(0xa0c000, 0xa0ffff) AM_RAM // more tilemap?
- AM_RANGE(0xa10000, 0xa1000f) AM_WRITEONLY AM_BASE(&kickgoal_scrram) /* Scroll Registers */
- AM_RANGE(0xb00000, 0xb007ff) AM_WRITEONLY AM_BASE_SIZE_GENERIC(spriteram) /* Sprites */
+ AM_RANGE(0xa10000, 0xa1000f) AM_WRITEONLY AM_BASE_MEMBER(kickgoal_state, scrram) /* Scroll Registers */
+ AM_RANGE(0xb00000, 0xb007ff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(kickgoal_state, spriteram, spriteram_size) /* Sprites */
AM_RANGE(0xc00000, 0xc007ff) AM_RAM_WRITE(paletteram16_xxxxBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram) /* Palette */ // actionhw reads this
AM_RANGE(0xff0000, 0xffffff) AM_RAM
ADDRESS_MAP_END
@@ -663,10 +643,41 @@ GFXDECODE_END
/* MACHINE drivers ***********************************************************/
+static MACHINE_START( kickgoal )
+{
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+
+ state->adpcm = devtag_get_device(machine, "oki");
+ state->eeprom = devtag_get_device(machine, "eeprom");
+ state_save_register_global_array(machine, state->snd_sam);
+ state_save_register_global(machine, state->melody_loop);
+ state_save_register_global(machine, state->snd_new);
+ state_save_register_global(machine, state->m6295_comm);
+ state_save_register_global(machine, state->m6295_bank);
+ state_save_register_global(machine, state->m6295_key_delay);
+}
+
+static MACHINE_RESET( kickgoal )
+{
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+
+ state->melody_loop = 0;
+ state->snd_new = 0;
+ state->snd_sam[0] = 0;
+ state->snd_sam[1] = 0;
+ state->snd_sam[2] = 0;
+ state->snd_sam[3] = 0;
+ state->m6295_comm = 0;
+ state->m6295_bank = 0;
+ state->m6295_key_delay = 0;
+}
static MACHINE_DRIVER_START( kickgoal )
+ /* driver data */
+ MDRV_DRIVER_DATA(kickgoal_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
MDRV_CPU_PROGRAM_MAP(kickgoal_program_map)
@@ -678,7 +689,10 @@ static MACHINE_DRIVER_START( kickgoal )
/* Program and Data Maps are internal to the MCU */
MDRV_CPU_IO_MAP(kickgoal_sound_io_map)
- MDRV_NVRAM_HANDLER(kickgoal)
+ MDRV_MACHINE_START(kickgoal)
+ MDRV_MACHINE_RESET(kickgoal)
+
+ MDRV_EEPROM_93C46_ADD("eeprom", 128, kickgoal_default_eeprom_type1)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
@@ -703,6 +717,9 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( actionhw )
+ /* driver data */
+ MDRV_DRIVER_DATA(kickgoal_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, XTAL_12MHz) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(kickgoal_program_map)
@@ -713,7 +730,10 @@ static MACHINE_DRIVER_START( actionhw )
/* Program and Data Maps are internal to the MCU */
MDRV_CPU_IO_MAP(actionhw_io_map)
- MDRV_NVRAM_HANDLER(kickgoal) // 93C46 really
+ MDRV_MACHINE_START(kickgoal)
+ MDRV_MACHINE_RESET(kickgoal)
+
+ MDRV_EEPROM_93C46_ADD("eeprom", 128, kickgoal_default_eeprom_type1)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
@@ -806,11 +826,8 @@ static DRIVER_INIT( kickgoal )
/* fix "bug" that prevents game from writing to EEPROM */
rom[0x12b0/2] = 0x0001;
#endif
-
- kickgoal_default_eeprom = kickgoal_default_eeprom_type1;
- kickgoal_default_eeprom_length = sizeof(kickgoal_default_eeprom_type1);
}
-GAME( 1995, kickgoal,0, kickgoal, kickgoal, kickgoal, ROT0, "TCH", "Kick Goal", GAME_NO_SOUND )
-GAME( 1995, actionhw,0, actionhw, kickgoal, kickgoal, ROT0, "TCH", "Action Hollywood", GAME_IMPERFECT_SOUND )
+GAME( 1995, kickgoal,0, kickgoal, kickgoal, kickgoal, ROT0, "TCH", "Kick Goal", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1995, actionhw,0, actionhw, kickgoal, kickgoal, ROT0, "TCH", "Action Hollywood", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kingobox.c b/src/mame/drivers/kingobox.c
index 646510887b6..a60fde76e75 100644
--- a/src/mame/drivers/kingobox.c
+++ b/src/mame/drivers/kingobox.c
@@ -19,49 +19,32 @@ Main CPU:
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
-
-/* from video */
-extern UINT8 *kingofb_videoram2;
-extern UINT8 *kingofb_colorram2;
-extern UINT8 *kingofb_scroll_y;
-
-extern WRITE8_HANDLER( kingofb_videoram_w );
-extern WRITE8_HANDLER( kingofb_colorram_w );
-extern WRITE8_HANDLER( kingofb_videoram2_w );
-extern WRITE8_HANDLER( kingofb_colorram2_w );
-
-extern WRITE8_HANDLER( kingofb_f800_w );
-
-extern PALETTE_INIT( kingofb );
-extern VIDEO_START( kingofb );
-extern VIDEO_UPDATE( kingofb );
-
-extern PALETTE_INIT( ringking );
-extern VIDEO_START( ringking );
-extern VIDEO_UPDATE( ringking );
-
-int kingofb_nmi_enable = 0;
+#include "includes/kingobox.h"
static WRITE8_HANDLER( video_interrupt_w )
{
- cputag_set_input_line_and_vector(space->machine, "video", 0, HOLD_LINE, 0xff );
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ cpu_set_input_line_and_vector(state->video_cpu, 0, HOLD_LINE, 0xff);
}
static WRITE8_HANDLER( sprite_interrupt_w )
{
- cputag_set_input_line_and_vector(space->machine, "sprite", 0, HOLD_LINE, 0xff );
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ cpu_set_input_line_and_vector(state->sprite_cpu, 0, HOLD_LINE, 0xff);
}
static WRITE8_HANDLER( scroll_interrupt_w )
{
- sprite_interrupt_w( space, offset, data );
- *kingofb_scroll_y = data;
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ sprite_interrupt_w(space, offset, data);
+ *state->scroll_y = data;
}
static WRITE8_HANDLER( sound_command_w )
{
- soundlatch_w( space, 0, data );
- cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff );
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ soundlatch_w(space, 0, data);
+ cpu_set_input_line_and_vector(state->audio_cpu, 0, HOLD_LINE, 0xff);
}
@@ -73,7 +56,7 @@ static ADDRESS_MAP_START( kingobox_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xf000, 0xf7ff) AM_RAM /* ???? */
AM_RANGE(0xf800, 0xf800) AM_WRITE(kingofb_f800_w) /* NMI enable, palette bank */
AM_RANGE(0xf801, 0xf801) AM_WRITENOP /* ???? */
- AM_RANGE(0xf802, 0xf802) AM_WRITEONLY AM_BASE(&kingofb_scroll_y)
+ AM_RANGE(0xf802, 0xf802) AM_WRITEONLY AM_BASE_MEMBER(kingofb_state, scroll_y)
AM_RANGE(0xf803, 0xf803) AM_WRITE(scroll_interrupt_w)
AM_RANGE(0xf804, 0xf804) AM_WRITE(video_interrupt_w)
AM_RANGE(0xf807, 0xf807) AM_WRITE(sound_command_w) /* sound latch */
@@ -89,24 +72,24 @@ static ADDRESS_MAP_START( kingobox_video_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM /* work ram */
AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("share1") /* shared with main */
- AM_RANGE(0xc000, 0xc0ff) AM_RAM_WRITE(kingofb_videoram_w) AM_BASE_GENERIC(videoram) /* background vram */
- AM_RANGE(0xc400, 0xc4ff) AM_RAM_WRITE(kingofb_colorram_w) AM_BASE_GENERIC(colorram) /* background colorram */
- AM_RANGE(0xc800, 0xcbff) AM_RAM_WRITE(kingofb_videoram2_w) AM_BASE(&kingofb_videoram2) /* foreground vram */
- AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(kingofb_colorram2_w) AM_BASE(&kingofb_colorram2) /* foreground colorram */
+ AM_RANGE(0xc000, 0xc0ff) AM_RAM_WRITE(kingofb_videoram_w) AM_BASE_MEMBER(kingofb_state, videoram) /* background vram */
+ AM_RANGE(0xc400, 0xc4ff) AM_RAM_WRITE(kingofb_colorram_w) AM_BASE_MEMBER(kingofb_state, colorram) /* background colorram */
+ AM_RANGE(0xc800, 0xcbff) AM_RAM_WRITE(kingofb_videoram2_w) AM_BASE_MEMBER(kingofb_state, videoram2) /* foreground vram */
+ AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(kingofb_colorram2_w) AM_BASE_MEMBER(kingofb_state, colorram2) /* foreground colorram */
ADDRESS_MAP_END
static ADDRESS_MAP_START( kingobox_sprite_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM /* work ram */
AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("share2") /* shared with main */
- AM_RANGE(0xc000, 0xc3ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* sprite ram */
+ AM_RANGE(0xc000, 0xc3ff) AM_RAM AM_BASE_SIZE_MEMBER(kingofb_state, spriteram, spriteram_size) /* sprite ram */
AM_RANGE(0xc400, 0xc43f) AM_RAM /* something related to scroll? */
ADDRESS_MAP_END
static ADDRESS_MAP_START( kingobox_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0x8000, 0x8000) AM_WRITENOP /* ??? */
- AM_RANGE(0xc000, 0xc3ff) AM_RAM /* work ram */
+ AM_RANGE(0xc000, 0xc3ff) AM_RAM /* work ram */
ADDRESS_MAP_END
static ADDRESS_MAP_START( kingobox_sound_io_map, ADDRESS_SPACE_IO, 8 )
@@ -132,7 +115,7 @@ static ADDRESS_MAP_START( ringking_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xe003, 0xe003) AM_READ_PORT("P2")
AM_RANGE(0xe004, 0xe004) AM_READ_PORT("SYSTEM")
AM_RANGE(0xe005, 0xe005) AM_READ_PORT("EXTRA")
- AM_RANGE(0xe800, 0xe800) AM_WRITEONLY AM_BASE(&kingofb_scroll_y)
+ AM_RANGE(0xe800, 0xe800) AM_WRITEONLY AM_BASE_MEMBER(kingofb_state, scroll_y)
AM_RANGE(0xf000, 0xf7ff) AM_RAM /* ???? */
ADDRESS_MAP_END
@@ -140,17 +123,17 @@ static ADDRESS_MAP_START( ringking_video_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM /* work ram */
AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("share1") /* shared with main */
- AM_RANGE(0xa800, 0xa8ff) AM_RAM_WRITE(kingofb_videoram_w) AM_BASE_GENERIC(videoram) /* background vram */
- AM_RANGE(0xac00, 0xacff) AM_RAM_WRITE(kingofb_colorram_w) AM_BASE_GENERIC(colorram) /* background colorram */
- AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(kingofb_videoram2_w) AM_BASE(&kingofb_videoram2) /* foreground vram */
- AM_RANGE(0xa400, 0xa7ff) AM_RAM_WRITE(kingofb_colorram2_w) AM_BASE(&kingofb_colorram2) /* foreground colorram */
+ AM_RANGE(0xa800, 0xa8ff) AM_RAM_WRITE(kingofb_videoram_w) AM_BASE_MEMBER(kingofb_state, videoram) /* background vram */
+ AM_RANGE(0xac00, 0xacff) AM_RAM_WRITE(kingofb_colorram_w) AM_BASE_MEMBER(kingofb_state, colorram) /* background colorram */
+ AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(kingofb_videoram2_w) AM_BASE_MEMBER(kingofb_state, videoram2) /* foreground vram */
+ AM_RANGE(0xa400, 0xa7ff) AM_RAM_WRITE(kingofb_colorram2_w) AM_BASE_MEMBER(kingofb_state, colorram2) /* foreground colorram */
ADDRESS_MAP_END
static ADDRESS_MAP_START( ringking_sprite_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM /* work ram */
AM_RANGE(0xc800, 0xcfff) AM_RAM AM_SHARE("share2") /* shared with main */
- AM_RANGE(0xa000, 0xa3ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* sprite ram */
+ AM_RANGE(0xa000, 0xa3ff) AM_RAM AM_BASE_SIZE_MEMBER(kingofb_state, spriteram, spriteram_size) /* sprite ram */
AM_RANGE(0xa400, 0xa43f) AM_RAM /* something related to scroll? */
ADDRESS_MAP_END
@@ -163,55 +146,55 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( kingofb )
- PORT_START("DSW1") /* 0xfc01 */
- PORT_DIPNAME( 0x03, 0x01, "Rest Up Points" )
- PORT_DIPSETTING( 0x02, "70000" )
- PORT_DIPSETTING( 0x01, "100000" )
- PORT_DIPSETTING( 0x03, "150000" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x18, 0x00, DEF_STR( Difficulty ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Medium ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x18, DEF_STR( Hardest ) )
+ PORT_START("DSW1") /* 0xfc01 */
+ PORT_DIPNAME( 0x03, 0x01, "Rest Up Points" )
+ PORT_DIPSETTING( 0x02, "70000" )
+ PORT_DIPSETTING( 0x01, "100000" )
+ PORT_DIPSETTING( 0x03, "150000" )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x18, 0x00, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x18, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
- PORT_START("DSW2") /* 0xfc01 */
- PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) )
- PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
- PORT_DIPSETTING( 0x06, DEF_STR( 3C_1C ) )
- PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
- PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x08, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x20, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "Freeze" )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("P1") /* 0xfc02 */
+ PORT_START("DSW2") /* 0xfc01 */
+ PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x07, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x05, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_4C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) )
+ PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( On ) )
+ PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( On ) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, "Freeze" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+ PORT_START("P1") /* 0xfc02 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
@@ -221,7 +204,7 @@ static INPUT_PORTS_START( kingofb )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_START("P2") /* 0xfc03 */
+ PORT_START("P2") /* 0xfc03 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
@@ -241,7 +224,7 @@ static INPUT_PORTS_START( kingofb )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_START("EXTRA") /* 0xfc05 */
+ PORT_START("EXTRA") /* 0xfc05 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
@@ -253,50 +236,50 @@ static INPUT_PORTS_START( kingofb )
INPUT_PORTS_END
static INPUT_PORTS_START( ringking )
- PORT_START("DSW1") /* 0xe000 */
- PORT_DIPNAME( 0x03, 0x03, "Replay" )
- PORT_DIPSETTING( 0x01, "70000" )
- PORT_DIPSETTING( 0x02, "100000" )
- PORT_DIPSETTING( 0x00, "150000" )
- PORT_DIPSETTING( 0x03, DEF_STR( No ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x04, DEF_STR( On ) )
- PORT_DIPNAME( 0x18, 0x10, "Difficulty (2P)" )
- PORT_DIPSETTING( 0x18, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Medium ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_START("DSW1") /* 0xe000 */
+ PORT_DIPNAME( 0x03, 0x03, "Replay" )
+ PORT_DIPSETTING( 0x01, "70000" )
+ PORT_DIPSETTING( 0x02, "100000" )
+ PORT_DIPSETTING( 0x00, "150000" )
+ PORT_DIPSETTING( 0x03, DEF_STR( No ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( On ) )
+ PORT_DIPNAME( 0x18, 0x10, "Difficulty (2P)" )
+ PORT_DIPSETTING( 0x18, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
- PORT_START("DSW2") /* 0xe001 */
- PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
- PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
- PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) )
- PORT_DIPNAME( 0x30, 0x10, "Difficulty (1P)" )
- PORT_DIPSETTING( 0x30, DEF_STR( Easy ) )
- PORT_DIPSETTING( 0x10, DEF_STR( Medium ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Hard ) )
- PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
- PORT_DIPNAME( 0x40, 0x40, "Boxing Match" )
- PORT_DIPSETTING( 0x40, "2 Win, End" )
- PORT_DIPSETTING( 0x00, "1 Win, End" )
- PORT_DIPNAME( 0x80, 0x80, "Freeze" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("P1") /* 0xe002 */
+ PORT_START("DSW2") /* 0xe001 */
+ PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( 1C_3C ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( 1C_3C ) )
+ PORT_DIPNAME( 0x30, 0x10, "Difficulty (1P)" )
+ PORT_DIPSETTING( 0x30, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Medium ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x40, 0x40, "Boxing Match" )
+ PORT_DIPSETTING( 0x40, "2 Win, End" )
+ PORT_DIPSETTING( 0x00, "1 Win, End" )
+ PORT_DIPNAME( 0x80, 0x80, "Freeze" )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ PORT_START("P1") /* 0xe002 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
@@ -306,7 +289,7 @@ static INPUT_PORTS_START( ringking )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("P2") /* 0xe003 */
+ PORT_START("P2") /* 0xe003 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
@@ -326,7 +309,7 @@ static INPUT_PORTS_START( ringking )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("EXTRA") /* 0xfc05 */
+ PORT_START("EXTRA") /* 0xfc05 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -465,13 +448,37 @@ static const ay8910_interface ay8910_config =
static INTERRUPT_GEN( kingofb_interrupt )
{
+ kingofb_state *state = (kingofb_state *)device->machine->driver_data;
- if ( kingofb_nmi_enable )
+ if (state->nmi_enable)
cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
+static MACHINE_START( kingofb )
+{
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+
+ state->video_cpu = devtag_get_device(machine, "video");
+ state->sprite_cpu = devtag_get_device(machine, "sprite");
+ state->audio_cpu = devtag_get_device(machine, "audiocpu");
+
+ state_save_register_global(machine, state->nmi_enable);
+ state_save_register_global(machine, state->palette_bank);
+}
+
+static MACHINE_RESET( kingofb )
+{
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+
+ state->nmi_enable = 0;
+ state->palette_bank = 0;
+}
+
static MACHINE_DRIVER_START( kingofb )
+ /* driver data */
+ MDRV_DRIVER_DATA(kingofb_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4.0 MHz */
MDRV_CPU_PROGRAM_MAP(kingobox_map)
@@ -492,6 +499,9 @@ static MACHINE_DRIVER_START( kingofb )
MDRV_QUANTUM_TIME(HZ(6000)) /* We really need heavy synching among the processors */
+ MDRV_MACHINE_START(kingofb)
+ MDRV_MACHINE_RESET(kingofb)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -522,6 +532,9 @@ MACHINE_DRIVER_END
/* Ring King */
static MACHINE_DRIVER_START( ringking )
+ /* driver data */
+ MDRV_DRIVER_DATA(kingofb_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4.0 MHz */
MDRV_CPU_PROGRAM_MAP(ringking_map)
@@ -542,6 +555,9 @@ static MACHINE_DRIVER_START( ringking )
MDRV_QUANTUM_TIME(HZ(6000)) /* We really need heavy synching among the processors */
+ MDRV_MACHINE_START(kingofb)
+ MDRV_MACHINE_RESET(kingofb)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -787,7 +803,7 @@ static DRIVER_INIT( ringkin3 )
UINT8 *RAM = memory_region(machine, "proms");
/* expand the first color PROM to look like the kingofb ones... */
- for (i = 0;i < 0x100;i++)
+ for (i = 0; i < 0x100; i++)
RAM[i] = RAM[i + 0x100] >> 4;
}
@@ -798,24 +814,23 @@ static DRIVER_INIT( ringkinw )
UINT8 *USER1 = memory_region(machine, "user1");
/* change the PROMs encode in a simple format to use kingofb decode */
- for(i=0,j=0; j < 0x40; i++,j++)
+ for(i = 0, j = 0; j < 0x40; i++, j++)
{
if((i & 0xf) == 8)
- i+=8;
+ i += 8;
for(k = 0; k <= 3; k++)
{
- PROMS[j + 0x000 + 0x40*k] = USER1[i + 0x000 + 0x100*k]; /* R */
- PROMS[j + 0x100 + 0x40*k] = USER1[i + 0x400 + 0x100*k]; /* G */
- PROMS[j + 0x200 + 0x40*k] = USER1[i + 0x800 + 0x100*k]; /* B */
+ PROMS[j + 0x000 + 0x40 * k] = USER1[i + 0x000 + 0x100 * k]; /* R */
+ PROMS[j + 0x100 + 0x40 * k] = USER1[i + 0x400 + 0x100 * k]; /* G */
+ PROMS[j + 0x200 + 0x40 * k] = USER1[i + 0x800 + 0x100 * k]; /* B */
}
}
}
-
-GAME( 1985, kingofb, 0, kingofb, kingofb, 0, ROT90, "Woodplace", "King of Boxer (English)", 0 )
-GAME( 1985, ringking, kingofb, ringking, ringking, 0, ROT90, "Data East USA", "Ring King (US set 1)", 0 )
-GAME( 1985, ringking2, kingofb, ringking, ringking, 0, ROT90, "Data East USA", "Ring King (US set 2)", 0 )
-GAME( 1985, ringking3, kingofb, kingofb, kingofb, ringkin3, ROT90, "Data East USA", "Ring King (US set 3)", 0 )
-GAME( 1985, ringkingw, kingofb, kingofb, kingofb, ringkinw, ROT90, "Woodplace", "Ring King (US, Woodplace license)", 0 )
+GAME( 1985, kingofb, 0, kingofb, kingofb, 0, ROT90, "Woodplace", "King of Boxer (English)", GAME_SUPPORTS_SAVE )
+GAME( 1985, ringking, kingofb, ringking, ringking, 0, ROT90, "Data East USA", "Ring King (US set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1985, ringking2, kingofb, ringking, ringking, 0, ROT90, "Data East USA", "Ring King (US set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1985, ringking3, kingofb, kingofb, kingofb, ringkin3, ROT90, "Data East USA", "Ring King (US set 3)", GAME_SUPPORTS_SAVE )
+GAME( 1985, ringkingw, kingofb, kingofb, kingofb, ringkinw, ROT90, "Woodplace", "Ring King (US, Woodplace license)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kncljoe.c b/src/mame/drivers/kncljoe.c
index 792e2d4cfc7..a6bd24f5188 100644
--- a/src/mame/drivers/kncljoe.c
+++ b/src/mame/drivers/kncljoe.c
@@ -16,10 +16,10 @@ TODO:
- sprite vs. sprite priority especially on ground level
Updates:
-- proper sound hw emulation(TS 070308)
-- you can't play anymore after you die(clock speed too low, check XTAL)
-- scrolling in bike levels(scroll register overflow)
-- sprites disappearing at left screen edge(bad clipping)
+- proper sound hw emulation (TS 070308)
+- you can't play anymore after you die (clock speed too low, check XTAL)
+- scrolling in bike levels (scroll register overflow)
+- sprites disappearing at left screen edge (bad clipping)
- artifacts in stage 3 and others(clear sprite mem at bank switch?)
(081503AT)
@@ -30,33 +30,24 @@ Updates:
#include "cpu/m6800/m6800.h"
#include "sound/ay8910.h"
#include "sound/sn76496.h"
-
-
-/* from video */
-extern VIDEO_START( kncljoe );
-extern PALETTE_INIT( kncljoe );
-extern VIDEO_UPDATE( kncljoe );
-extern WRITE8_HANDLER(kncljoe_videoram_w);
-extern WRITE8_HANDLER(kncljoe_control_w);
-extern WRITE8_HANDLER(kncljoe_scroll_w);
-extern UINT8 *kncljoe_scrollregs;
-
-static UINT8 port1, port2;
+#include "includes/kncljoe.h"
static WRITE8_HANDLER( sound_cmd_w )
{
+ kncljoe_state *state = (kncljoe_state *)space->machine->driver_data;
+
if ((data & 0x80) == 0)
soundlatch_w(space, 0, data & 0x7f);
else
- cputag_set_input_line(space->machine, "soundcpu", 0, ASSERT_LINE);
+ cpu_set_input_line(state->soundcpu, 0, ASSERT_LINE);
}
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
- AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(kncljoe_videoram_w) AM_BASE_GENERIC(videoram)
- AM_RANGE(0xd000, 0xd001) AM_WRITE(kncljoe_scroll_w) AM_BASE(&kncljoe_scrollregs)
+ AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(kncljoe_videoram_w) AM_BASE_MEMBER(kncljoe_state, videoram)
+ AM_RANGE(0xd000, 0xd001) AM_WRITE(kncljoe_scroll_w) AM_BASE_MEMBER(kncljoe_state, scrollregs)
AM_RANGE(0xd800, 0xd800) AM_READ_PORT("SYSTEM")
AM_RANGE(0xd801, 0xd801) AM_READ_PORT("P1")
AM_RANGE(0xd802, 0xd802) AM_READ_PORT("P2")
@@ -68,31 +59,35 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xd803, 0xd803) AM_DEVWRITE("sn2", sn76496_w)
AM_RANGE(0xd807, 0xd807) AM_READNOP /* unknown read */
AM_RANGE(0xd817, 0xd817) AM_READNOP /* unknown read */
- AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
+ AM_RANGE(0xe800, 0xefff) AM_RAM AM_BASE_SIZE_MEMBER(kncljoe_state, spriteram, spriteram_size)
AM_RANGE(0xf000, 0xffff) AM_RAM
ADDRESS_MAP_END
static WRITE8_DEVICE_HANDLER( m6803_port1_w )
{
- port1 = data;
+ kncljoe_state *state = (kncljoe_state *)device->machine->driver_data;
+ state->port1 = data;
}
static WRITE8_DEVICE_HANDLER( m6803_port2_w )
{
+ kncljoe_state *state = (kncljoe_state *)device->machine->driver_data;
/* write latch */
- if ((port2 & 0x01) && !(data & 0x01))
+ if ((state->port2 & 0x01) && !(data & 0x01))
{
/* control or data port? */
- if (port2 & 0x08)
- ay8910_data_address_w(device, port2 >> 2, port1);
+ if (state->port2 & 0x08)
+ ay8910_data_address_w(device, state->port2 >> 2, state->port1);
}
- port2 = data;
+ state->port2 = data;
}
static READ8_DEVICE_HANDLER( m6803_port1_r )
{
- if (port2 & 0x08)
+ kncljoe_state *state = (kncljoe_state *)device->machine->driver_data;
+
+ if (state->port2 & 0x08)
return ay8910_r(device, 0);
return 0xff;
}
@@ -104,7 +99,8 @@ static READ8_DEVICE_HANDLER( m6803_port2_r )
static WRITE8_HANDLER( sound_irq_ack_w )
{
- cputag_set_input_line(space->machine, "soundcpu", 0, CLEAR_LINE);
+ kncljoe_state *state = (kncljoe_state *)space->machine->driver_data;
+ cpu_set_input_line(state->soundcpu, 0, CLEAR_LINE);
}
static WRITE8_DEVICE_HANDLER(unused_w)
@@ -252,10 +248,36 @@ static INTERRUPT_GEN (sound_nmi)
cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE);
}
+static MACHINE_START( kncljoe )
+{
+ kncljoe_state *state = (kncljoe_state *)machine->driver_data;
+
+ state->soundcpu = devtag_get_device(machine, "soundcpu");
+
+ state_save_register_global(machine, state->port1);
+ state_save_register_global(machine, state->port2);
+ state_save_register_global(machine, state->tile_bank);
+ state_save_register_global(machine, state->sprite_bank);
+ state_save_register_global(machine, state->flipscreen);
+}
+
+static MACHINE_RESET( kncljoe )
+{
+ kncljoe_state *state = (kncljoe_state *)machine->driver_data;
+
+ state->port1 = 0;
+ state->port2 = 0;
+ state->tile_bank = 0;
+ state->sprite_bank = 0;
+ state->flipscreen = 0;
+}
+
static MACHINE_DRIVER_START( kncljoe )
- /* basic machine hardware */
+ /* driver data */
+ MDRV_DRIVER_DATA(kncljoe_state)
+ /* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, XTAL_6MHz) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(main_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
@@ -265,6 +287,8 @@ static MACHINE_DRIVER_START( kncljoe )
MDRV_CPU_IO_MAP(sound_portmap)
MDRV_CPU_PERIODIC_INT(sound_nmi, (double)3970) //measured 3.970 kHz
+ MDRV_MACHINE_START(kncljoe)
+ MDRV_MACHINE_RESET(kncljoe)
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
@@ -397,6 +421,6 @@ ROM_END
-GAME( 1985, kncljoe, 0, kncljoe, kncljoe, 0, ROT0, "[Seibu Kaihatsu] (Taito license)", "Knuckle Joe (set 1)", 0 )
-GAME( 1985, kncljoea, kncljoe, kncljoe, kncljoe, 0, ROT0, "[Seibu Kaihatsu] (Taito license)", "Knuckle Joe (set 2)", 0 )
-GAME( 1985, bcrusher, kncljoe, kncljoe, kncljoe, 0, ROT0, "bootleg", "Bone Crusher", 0 )
+GAME( 1985, kncljoe, 0, kncljoe, kncljoe, 0, ROT0, "[Seibu Kaihatsu] (Taito license)", "Knuckle Joe (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1985, kncljoea, kncljoe, kncljoe, kncljoe, 0, ROT0, "[Seibu Kaihatsu] (Taito license)", "Knuckle Joe (set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1985, bcrusher, kncljoe, kncljoe, kncljoe, 0, ROT0, "bootleg", "Bone Crusher", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/koikoi.c b/src/mame/drivers/koikoi.c
index 9cde8bfae3c..2a0783bc528 100644
--- a/src/mame/drivers/koikoi.c
+++ b/src/mame/drivers/koikoi.c
@@ -27,7 +27,7 @@ There's four reads in a row of input port 3 - 32 possibilities.
But only 14 are valid - two lookup tables are used to decode the inputs.
For example, for one of input keys game expects data: 0,0,8,0
-It's encoded (in internal lookup table, as well as in inputTab[]) as 0x68 :
+It's encoded (in internal lookup table, as well as in input_tab[]) as 0x68 :
- bits 0-4 = data to return (valid values are 1,2,4,8,$10 - only one bit set)
- bits 5-7 = read cycle (1-4) to return above data
All other reads should return 0.
@@ -41,88 +41,161 @@ to prevent disabling inputs.
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
-static int inputcnt=0;
-static int inputval=0;
-static int inputlen=0;
-static tilemap *koikoi_tilemap;
-static int ioram[8];
+#define KOIKOI_CRYSTAL 15468000
+
+static const int input_tab[]= { 0x22, 0x64, 0x44, 0x68, 0x30, 0x50, 0x70, 0x48, 0x28, 0x21, 0x41, 0x82, 0x81, 0x42 };
+
+typedef struct _koikoi_state koikoi_state;
+struct _koikoi_state
+{
+ /* memory pointers */
+ UINT8 * videoram;
+
+ /* video-related */
+ tilemap *tmap;
-static const int inputTab[]= { 0x22, 0x64, 0x44, 0x68, 0x30, 0x50, 0x70, 0x48, 0x28, 0x21, 0x41, 0x82, 0x81, 0x42 };
+ /* misc */
+ int inputcnt;
+ int inputval;
+ int inputlen;
+ int ioram[8];
+};
+
+
+/*************************************
+ *
+ * Video emulation
+ *
+ *************************************/
static TILE_GET_INFO( get_tile_info )
{
- int code = machine->generic.videoram.u8[tile_index]|((machine->generic.videoram.u8[tile_index+0x400] & 0x40)<<2);
- int color = (machine->generic.videoram.u8[tile_index+0x400]&0x1f);
- int flip = (machine->generic.videoram.u8[tile_index+0x400]&0x80)?(TILEMAP_FLIPX|TILEMAP_FLIPY):0;
+ koikoi_state *state = (koikoi_state *)machine->driver_data;
+ int code = state->videoram[tile_index] | ((state->videoram[tile_index + 0x400] & 0x40) << 2);
+ int color = (state->videoram[tile_index + 0x400] & 0x1f);
+ int flip = (state->videoram[tile_index + 0x400] & 0x80) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0;
- SET_TILE_INFO( 0, code, color, flip);
+ SET_TILE_INFO( 0, code, color, flip);
}
-static WRITE8_HANDLER(vram_w)
+static PALETTE_INIT( koikoi ) //wrong
{
- space->machine->generic.videoram.u8[offset]=data;
- tilemap_mark_tile_dirty(koikoi_tilemap,offset&0x3ff);
+ int i;
+
+ for (i = 0; i < 0x100; i++)
+ {
+ int bit0, bit1, bit2, bit3, r, g, b;
+
+ bit0 = (color_prom[i] >> 3) & 0x01;
+ bit1 = (color_prom[i] >> 2) & 0x01;
+ bit2 = (color_prom[i] >> 1) & 0x01;
+ bit3 = (color_prom[i] >> 0) & 0x01;
+
+ r = bit0 * 0xaa + bit3 * 0x55;
+ g = bit1 * 0xaa + bit3 * 0x55;
+ b = bit2 * 0xaa + bit3 * 0x55;
+
+ palette_set_color(machine, i, MAKE_RGB(r, g, b));
+ }
}
-static READ8_DEVICE_HANDLER(input_r)
+static VIDEO_START(koikoi)
{
- if(inputcnt<0)
- {
+ koikoi_state *state = (koikoi_state *)machine->driver_data;
+ state->tmap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
+}
+
+static VIDEO_UPDATE(koikoi)
+{
+ koikoi_state *state = (koikoi_state *)screen->machine->driver_data;
+ tilemap_draw(bitmap, cliprect, state->tmap, 0, 0);
+ return 0;
+}
+
+/*************************************
+ *
+ * Memory handlers
+ *
+ *************************************/
+
+static WRITE8_HANDLER( vram_w )
+{
+ koikoi_state *state = (koikoi_state *)space->machine->driver_data;
+ state->videoram[offset] = data;
+ tilemap_mark_tile_dirty(state->tmap, offset & 0x3ff);
+}
+
+static READ8_DEVICE_HANDLER( input_r )
+{
+ koikoi_state *state = (koikoi_state *)device->machine->driver_data;
+
+ if (state->inputcnt < 0)
return 0;
- }
- if(!inputcnt)
+ if (!state->inputcnt)
{
- int key=input_port_read(device->machine, "IN1");
- int keyval=0; //we must return 0 (0x2 in 2nd read) to clear 4 bit at $6600 and allow next read
+ int key = input_port_read(device->machine, "IN1");
+ int keyval = 0; //we must return 0 (0x2 in 2nd read) to clear 4 bit at $6600 and allow next read
- if(key)
+ if (key)
{
- while(!(key&1)) { key>>=1; keyval++; }
+ while (!(key & 1))
+ {
+ key >>= 1;
+ keyval++;
+ }
}
- inputval=inputTab[keyval]&0x1f;
- inputlen=inputTab[keyval]>>5;
+ state->inputval = input_tab[keyval] & 0x1f;
+ state->inputlen = input_tab[keyval] >> 5;
}
- if(inputlen==++inputcnt) //return expected value
+ if (state->inputlen == ++state->inputcnt) //return expected value
{
- return inputval^0xff;
+ return state->inputval ^ 0xff;
}
- if(inputcnt>4) //end of cycle
+ if (state->inputcnt > 4) //end of cycle
{
- inputcnt=-1;
+ state->inputcnt = -1;
}
return 0xff; //return 0^0xff
}
-static WRITE8_DEVICE_HANDLER(unknown_w)
+static WRITE8_DEVICE_HANDLER( unknown_w )
{
//unknown... could be input select (player 1 or 2 = fd/fe or ef/df(??) )
}
-static READ8_HANDLER(io_r)
+static READ8_HANDLER( io_r )
{
- if(!offset)
- return input_port_read(space->machine, "IN0")^ioram[4]; //coin
+ koikoi_state *state = (koikoi_state *)space->machine->driver_data;
+ if (!offset)
+ return input_port_read(space->machine, "IN0") ^ state->ioram[4]; //coin
return 0;
}
-static WRITE8_HANDLER(io_w)
+static WRITE8_HANDLER( io_w )
{
- if(offset==7 && data==0)
- inputcnt=0; //reset read cycle counter
+ koikoi_state *state = (koikoi_state *)space->machine->driver_data;
+ if (offset == 7 && data == 0)
+ state->inputcnt = 0; //reset read cycle counter
- ioram[offset]=data;
+ state->ioram[offset] = data;
}
+/*************************************
+ *
+ * Address maps
+ *
+ *************************************/
+
static ADDRESS_MAP_START( koikoi_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x2fff) AM_ROM
AM_RANGE(0x6000, 0x67ff) AM_RAM
- AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(vram_w) AM_BASE_GENERIC(videoram)
+ AM_RANGE(0x7000, 0x77ff) AM_RAM_WRITE(vram_w) AM_BASE_MEMBER(koikoi_state, videoram)
AM_RANGE(0x8000, 0x8000) AM_READ_PORT("DSW")
AM_RANGE(0x9000, 0x9007) AM_READWRITE(io_r, io_w)
ADDRESS_MAP_END
@@ -134,6 +207,12 @@ static ADDRESS_MAP_START( koikoi_io_map, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x06, 0x07) AM_DEVWRITE("aysnd", ay8910_data_address_w)
ADDRESS_MAP_END
+/*************************************
+ *
+ * Input ports
+ *
+ *************************************/
+
static INPUT_PORTS_START( koikoi )
PORT_START("DSW")
PORT_DIPNAME( 0x03, 0x01, "Timer C" )
@@ -181,37 +260,12 @@ static INPUT_PORTS_START( koikoi )
PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_START2 )
INPUT_PORTS_END
-static PALETTE_INIT( koikoi ) //wrong
-{
- int i;
- for (i = 0;i < 0x100;i++)
- {
- int bit0,bit1,bit2,bit3,r,g,b;
-
- bit0 = (color_prom[i] >> 3) & 0x01;
- bit1 = (color_prom[i] >> 2) & 0x01;
- bit2 = (color_prom[i] >> 1) & 0x01;
- bit3 = (color_prom[i] >> 0) & 0x01;
-
- r=bit0*0xaa+bit3*0x55;
- g=bit1*0xaa+bit3*0x55;
- b=bit2*0xaa+bit3*0x55;
-
- palette_set_color(machine,i,MAKE_RGB(r,g,b));
- }
-}
-
-static VIDEO_START(koikoi)
-{
- koikoi_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan_rows,8,8,32,32);
-}
-
-static VIDEO_UPDATE(koikoi)
-{
- tilemap_draw(bitmap,cliprect,koikoi_tilemap,0,0);
- return 0;
-}
+/*************************************
+ *
+ * Graphics definitions
+ *
+ *************************************/
static const gfx_layout tilelayout =
{
@@ -231,6 +285,12 @@ static GFXDECODE_START( koikoi )
GFXDECODE_END
+/*************************************
+ *
+ * Sound interface
+ *
+ *************************************/
+
static const ay8910_interface ay8910_config =
{
AY8910_LEGACY_OUTPUT,
@@ -239,16 +299,50 @@ static const ay8910_interface ay8910_config =
DEVCB_HANDLER(unknown_w), DEVCB_NULL
};
-#define KOIKOI_CRYSTAL 15468000
+
+/*************************************
+ *
+ * Machine driver
+ *
+ *************************************/
+
+static MACHINE_START( koikoi )
+{
+ koikoi_state *state = (koikoi_state *)machine->driver_data;
+
+ state_save_register_global(machine, state->inputcnt);
+ state_save_register_global(machine, state->inputval);
+ state_save_register_global(machine, state->inputlen);
+ state_save_register_global_array(machine, state->ioram);
+}
+
+static MACHINE_RESET( koikoi )
+{
+ koikoi_state *state = (koikoi_state *)machine->driver_data;
+ int i;
+
+ state->inputcnt = -1;
+ state->inputval = 0;
+ state->inputlen = 0;
+
+ for (i = 0; i < 8; i++)
+ state->ioram[i] = 0;
+}
static MACHINE_DRIVER_START( koikoi )
+ /* driver data */
+ MDRV_DRIVER_DATA(koikoi_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80,KOIKOI_CRYSTAL/4) /* ?? */
MDRV_CPU_PROGRAM_MAP(koikoi_map)
MDRV_CPU_IO_MAP(koikoi_io_map)
MDRV_CPU_VBLANK_INT("screen", nmi_line_pulse)
+ MDRV_MACHINE_START(koikoi)
+ MDRV_MACHINE_RESET(koikoi)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -273,12 +367,11 @@ static MACHINE_DRIVER_START( koikoi )
MACHINE_DRIVER_END
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
+/*************************************
+ *
+ * ROM definition(s)
+ *
+ *************************************/
ROM_START( koikoi )
ROM_REGION( 0x10000, "maincpu", 0 ) /* code */
@@ -302,4 +395,10 @@ ROM_START( koikoi )
ROM_LOAD( "pal16r8a_red.ic10", 0x0800, 0x0104, CRC(027ad661) SHA1(fa5aafe6deb3a9865498152b92dd3776ea10a51d) )
ROM_END
-GAME( 1982, koikoi, 0, koikoi, koikoi, 0, ROT270, "Kiwako", "Koi Koi Part 2", GAME_WRONG_COLORS )
+/*************************************
+ *
+ * Game driver(s)
+ *
+ *************************************/
+
+GAME( 1982, koikoi, 0, koikoi, koikoi, 0, ROT270, "Kiwako", "Koi Koi Part 2", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kopunch.c b/src/mame/drivers/kopunch.c
index 06e0853a4e4..49564b4d1dd 100644
--- a/src/mame/drivers/kopunch.c
+++ b/src/mame/drivers/kopunch.c
@@ -1,29 +1,17 @@
/********************************************************
-KO Punch (c) 1981 Sega
+ KO Punch (c) 1981 Sega
********************************************************/
#include "driver.h"
#include "cpu/i8085/i8085.h"
-
-extern UINT8 *kopunch_videoram2;
-
-extern WRITE8_HANDLER( kopunch_videoram_w );
-extern WRITE8_HANDLER( kopunch_videoram2_w );
-extern WRITE8_HANDLER( kopunch_scroll_x_w );
-extern WRITE8_HANDLER( kopunch_scroll_y_w );
-extern WRITE8_HANDLER( kopunch_gfxbank_w );
-
-extern PALETTE_INIT( kopunch );
-extern VIDEO_START( kopunch );
-extern VIDEO_UPDATE( kopunch );
-
+#include "includes/kopunch.h"
static INTERRUPT_GEN( kopunch_interrupt )
{
- cpu_set_input_line(device,I8085_RST75_LINE,ASSERT_LINE);
- cpu_set_input_line(device,I8085_RST75_LINE,CLEAR_LINE);
+ cpu_set_input_line(device, I8085_RST75_LINE, ASSERT_LINE);
+ cpu_set_input_line(device, I8085_RST75_LINE, CLEAR_LINE);
}
static READ8_HANDLER( kopunch_in_r )
@@ -37,7 +25,7 @@ static READ8_HANDLER( kopunch_in_r )
static WRITE8_HANDLER( kopunch_lamp_w )
{
- set_led_status(space->machine, 0,~data & 0x80);
+ set_led_status(space->machine, 0, ~data & 0x80);
// if ((data & 0x7f) != 0x7f)
// popmessage("port 38 = %02x",data);
@@ -45,8 +33,8 @@ static WRITE8_HANDLER( kopunch_lamp_w )
static WRITE8_HANDLER( kopunch_coin_w )
{
- coin_counter_w(space->machine, 0,~data & 0x80);
- coin_counter_w(space->machine, 1,~data & 0x40);
+ coin_counter_w(space->machine, 0, ~data & 0x80);
+ coin_counter_w(space->machine, 1, ~data & 0x40);
// if ((data & 0x3f) != 0x3f)
// popmessage("port 34 = %02x",data);
@@ -57,8 +45,8 @@ static WRITE8_HANDLER( kopunch_coin_w )
static ADDRESS_MAP_START( kopunch_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
- AM_RANGE(0x6000, 0x63ff) AM_RAM_WRITE(kopunch_videoram_w) AM_BASE_GENERIC(videoram)
- AM_RANGE(0x7000, 0x70ff) AM_RAM_WRITE(kopunch_videoram2_w) AM_BASE(&kopunch_videoram2)
+ AM_RANGE(0x6000, 0x63ff) AM_RAM_WRITE(kopunch_videoram_w) AM_BASE_MEMBER(kopunch_state, videoram)
+ AM_RANGE(0x7000, 0x70ff) AM_RAM_WRITE(kopunch_videoram2_w) AM_BASE_MEMBER(kopunch_state, videoram2)
AM_RANGE(0x7100, 0x7aff) AM_RAM // ???
ADDRESS_MAP_END
@@ -82,16 +70,20 @@ ADDRESS_MAP_END
static INPUT_CHANGED( left_coin_inserted )
{
+ kopunch_state *state = (kopunch_state *)field->port->machine->driver_data;
+
/* left coin insertion causes a rst6.5 (vector 0x34) */
- if(newval)
- cputag_set_input_line(field->port->machine, "maincpu", I8085_RST65_LINE, HOLD_LINE);
+ if (newval)
+ cpu_set_input_line(state->maincpu, I8085_RST65_LINE, HOLD_LINE);
}
static INPUT_CHANGED( right_coin_inserted )
{
+ kopunch_state *state = (kopunch_state *)field->port->machine->driver_data;
+
/* right coin insertion causes a rst5.5 (vector 0x2c) */
- if(newval)
- cputag_set_input_line(field->port->machine, "maincpu", I8085_RST55_LINE, HOLD_LINE);
+ if (newval)
+ cpu_set_input_line(state->maincpu, I8085_RST55_LINE, HOLD_LINE);
}
static INPUT_PORTS_START( kopunch )
@@ -108,9 +100,9 @@ static INPUT_PORTS_START( kopunch )
PORT_START("SYSTEM")
PORT_BIT( 0x07, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* punch strength (high 3 bits) */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) PORT_CHANGED(right_coin_inserted, 0)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_CHANGED(left_coin_inserted, 0)
PORT_START("DSW")
@@ -179,14 +171,36 @@ static GFXDECODE_START( kopunch )
GFXDECODE_END
+static MACHINE_START( kopunch )
+{
+ kopunch_state *state = (kopunch_state *)machine->driver_data;
+
+ state->maincpu = devtag_get_device(machine, "maincpu");
+
+ state_save_register_global(machine, state->gfxbank);
+}
+
+static MACHINE_RESET( kopunch )
+{
+ kopunch_state *state = (kopunch_state *)machine->driver_data;
+
+ state->gfxbank = 0;
+}
+
static MACHINE_DRIVER_START( kopunch )
+ /* driver data */
+ MDRV_DRIVER_DATA(kopunch_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", 8085A, 4000000) /* 4 MHz ???? Uses SIM, must be 8085 */
MDRV_CPU_PROGRAM_MAP(kopunch_map)
MDRV_CPU_IO_MAP(kopunch_io_map)
MDRV_CPU_VBLANK_INT("screen",kopunch_interrupt)
+ MDRV_MACHINE_START(kopunch)
+ MDRV_MACHINE_RESET(kopunch)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -236,4 +250,4 @@ ROM_START( kopunch )
ROM_LOAD( "epr1100", 0x0040, 0x0020, CRC(bedb66b1) SHA1(8e78bb205d900075b761e1baa5f5813174ff28ba) ) /* unknown */
ROM_END
-GAME( 1981, kopunch, 0, kopunch, kopunch, 0, ROT270, "Sega", "KO Punch", GAME_NO_SOUND | GAME_NOT_WORKING)
+GAME( 1981, kopunch, 0, kopunch, kopunch, 0, ROT270, "Sega", "KO Punch", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/ksayakyu.c b/src/mame/drivers/ksayakyu.c
index 93e436978e9..40a9d51478d 100644
--- a/src/mame/drivers/ksayakyu.c
+++ b/src/mame/drivers/ksayakyu.c
@@ -67,16 +67,10 @@ SRAM:
#include "cpu/z80/z80.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
+#include "includes/ksayakyu.h"
#define MAIN_CLOCK XTAL_18_432MHz
-WRITE8_HANDLER( ksayakyu_videoram_w );
-WRITE8_HANDLER( ksayakyu_videoctrl_w );
-PALETTE_INIT( ksayakyu );
-VIDEO_START( ksayakyu );
-VIDEO_UPDATE( ksayakyu );
-
-static int sound_status;
static WRITE8_HANDLER( bank_select_w )
{
@@ -87,24 +81,27 @@ static WRITE8_HANDLER( bank_select_w )
xxxxxxx - unused ?
*/
- memory_set_bankptr(space->machine, "bank1", memory_region(space->machine, "maincpu") + ((data&1) * 0x4000) + 0x10000 );
+ memory_set_bank(space->machine, "bank1", data & 0x01);
}
static WRITE8_HANDLER( latch_w )
{
- sound_status&=~0x80;
- soundlatch_w(space,0,data|0x80);
+ ksayakyu_state *state = (ksayakyu_state *)space->machine->driver_data;
+ state->sound_status &= ~0x80;
+ soundlatch_w(space, 0, data | 0x80);
}
static READ8_HANDLER (sound_status_r)
{
- return sound_status|4;
+ ksayakyu_state *state = (ksayakyu_state *)space->machine->driver_data;
+ return state->sound_status | 4;
}
static WRITE8_HANDLER(tomaincpu_w)
{
- sound_status|=0x80;
- soundlatch_w(space,0,data);
+ ksayakyu_state *state = (ksayakyu_state *)space->machine->driver_data;
+ state->sound_status |= 0x80;
+ soundlatch_w(space, 0, data);
}
static ADDRESS_MAP_START( maincpu_map, ADDRESS_SPACE_PROGRAM, 8 )
@@ -121,8 +118,8 @@ static ADDRESS_MAP_START( maincpu_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa806, 0xa806) AM_READ(sound_status_r)
AM_RANGE(0xa807, 0xa807) AM_READNOP /* watchdog ? */
AM_RANGE(0xa808, 0xa808) AM_WRITE(bank_select_w)
- AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE(ksayakyu_videoram_w) AM_BASE_GENERIC(videoram)
- AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
+ AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE(ksayakyu_videoram_w) AM_BASE_MEMBER(ksayakyu_state, videoram)
+ AM_RANGE(0xb800, 0xbfff) AM_RAM AM_BASE_SIZE_MEMBER(ksayakyu_state, spriteram, spriteram_size)
ADDRESS_MAP_END
static ADDRESS_MAP_START( soundcpu_map, ADDRESS_SPACE_PROGRAM, 8 )
@@ -176,17 +173,17 @@ INPUT_PORTS_END
static WRITE8_DEVICE_HANDLER(dummy1_w)
{
-// printf("%02x 1\n",data);
+// printf("%02x 1\n", data);
}
static WRITE8_DEVICE_HANDLER(dummy2_w)
{
-// printf("%02x 2\n",data);
+// printf("%02x 2\n", data);
}
static WRITE8_DEVICE_HANDLER(dummy3_w)
{
-// printf("%02x 3\n",data);
+// printf("%02x 3\n", data);
}
@@ -252,7 +249,34 @@ static GFXDECODE_START( ksayakyu )
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 16 )
GFXDECODE_END
+
+static MACHINE_START( ksayakyu )
+{
+ ksayakyu_state *state = (ksayakyu_state *)machine->driver_data;
+ UINT8 *ROM = memory_region(machine, "maincpu");
+
+ memory_configure_bank(machine, "bank1", 0, 2, &ROM[0x10000], 0x4000);
+
+ state_save_register_global(machine, state->sound_status);
+ state_save_register_global(machine, state->video_ctrl);
+ state_save_register_global(machine, state->flipscreen);
+}
+
+static MACHINE_RESET( ksayakyu )
+{
+ ksayakyu_state *state = (ksayakyu_state *)machine->driver_data;
+
+ state->sound_status = 0xff;
+ state->video_ctrl = 0;
+ state->flipscreen = 0;
+}
+
static MACHINE_DRIVER_START( ksayakyu )
+
+ /* driver data */
+ MDRV_DRIVER_DATA(ksayakyu_state)
+
+ /* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80,MAIN_CLOCK/8) //divider is guessed
MDRV_CPU_PROGRAM_MAP(maincpu_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
@@ -263,6 +287,9 @@ static MACHINE_DRIVER_START( ksayakyu )
MDRV_QUANTUM_TIME(HZ(60000))
+ MDRV_MACHINE_START(ksayakyu)
+ MDRV_MACHINE_RESET(ksayakyu)
+
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@@ -329,9 +356,4 @@ ROM_START( ksayakyu )
ROM_LOAD( "9f.bin", 0x0000, 0x0100, CRC(ff71b27f) SHA1(6aad2bd2be997595a05ddb81d24df8fe1435910b) )
ROM_END
-static DRIVER_INIT( ksayakyu )
-{
- sound_status = 0xff;
-}
-
-GAME( 1985, ksayakyu, 0, ksayakyu, ksayakyu, ksayakyu, ORIENTATION_FLIP_Y, "Taito Corporation", "Kusayakyuu",0 )
+GAME( 1985, ksayakyu, 0, ksayakyu, ksayakyu, 0, ORIENTATION_FLIP_Y, "Taito Corporation", "Kusayakyuu", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/kyugo.c b/src/mame/drivers/kyugo.c
index b0a9d5197f9..8f50922ec0a 100644
--- a/src/mame/drivers/kyugo.c
+++ b/src/mame/drivers/kyugo.c
@@ -24,32 +24,20 @@
#include "driver.h"
#include "cpu/z80/z80.h"
#include "deprecat.h"
-#include "kyugo.h"
#include "sound/ay8910.h"
-
-
-static UINT8 *shared_ram;
-static WRITE8_HANDLER( kyugo_sub_cpu_control_w );
+#include "includes/kyugo.h"
/*************************************
*
- * Machine initialization
+ * Memory handlers
*
*************************************/
-static MACHINE_RESET( kyugo )
-{
- const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
- // must start with interrupts and sub CPU disabled
- cpu_interrupt_enable(cputag_get_cpu(machine, "maincpu"), 0);
- kyugo_sub_cpu_control_w(space, 0, 0);
-}
-
-
static WRITE8_HANDLER( kyugo_sub_cpu_control_w )
{
- cputag_set_input_line(space->machine, "sub", INPUT_LINE_HALT, data ? CLEAR_LINE : ASSERT_LINE);
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+ cpu_set_input_line(state->subcpu, INPUT_LINE_HALT, data ? CLEAR_LINE : ASSERT_LINE);
}
@@ -61,15 +49,15 @@ static WRITE8_HANDLER( kyugo_sub_cpu_control_w )
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(kyugo_bgvideoram_w) AM_BASE(&kyugo_bgvideoram)
- AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(kyugo_bgattribram_w) AM_BASE(&kyugo_bgattribram)
- AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(kyugo_fgvideoram_w) AM_BASE(&kyugo_fgvideoram)
- AM_RANGE(0x9800, 0x9fff) AM_RAM_READ(kyugo_spriteram_2_r) AM_BASE(&kyugo_spriteram_2)
- AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_BASE(&kyugo_spriteram_1)
+ AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(kyugo_bgvideoram_w) AM_BASE_MEMBER(kyugo_state, bgvideoram)
+ AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(kyugo_bgattribram_w) AM_BASE_MEMBER(kyugo_state, bgattribram)
+ AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(kyugo_fgvideoram_w) AM_BASE_MEMBER(kyugo_state, fgvideoram)
+ AM_RANGE(0x9800, 0x9fff) AM_RAM_READ(kyugo_spriteram_2_r) AM_BASE_MEMBER(kyugo_state, spriteram_2)
+ AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_BASE_MEMBER(kyugo_state, spriteram_1)
AM_RANGE(0xa800, 0xa800) AM_WRITE(kyugo_scroll_x_lo_w)
AM_RANGE(0xb000, 0xb000) AM_WRITE(kyugo_gfxctrl_w)
AM_RANGE(0xb800, 0xb800) AM_WRITE(kyugo_scroll_y_w)
- AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("share1") AM_BASE(&shared_ram)
+ AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("share1") AM_BASE_MEMBER(kyugo_state, shared_ram)
ADDRESS_MAP_END
@@ -459,8 +447,43 @@ static const ay8910_interface ay8910_config =
*
*************************************/
+static MACHINE_START( kyugo )
+{
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+
+ state->maincpu = devtag_get_device(machine, "maincpu");
+ state->subcpu = devtag_get_device(machine, "sub");
+
+ state_save_register_global(machine, state->scroll_x_lo);
+ state_save_register_global(machine, state->scroll_x_hi);
+ state_save_register_global(machine, state->scroll_y);
+ state_save_register_global(machine, state->bgpalbank);
+ state_save_register_global(machine, state->fgcolor);
+ state_save_register_global(machine, state->flipscreen);
+}
+
+static MACHINE_RESET( kyugo )
+{
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+ const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM);
+ // must start with interrupts and sub CPU disabled
+ cpu_interrupt_enable(cputag_get_cpu(machine, "maincpu"), 0);
+ kyugo_sub_cpu_control_w(space, 0, 0);
+
+ state->scroll_x_lo = 0;
+ state->scroll_x_hi = 0;
+ state->scroll_y = 0;
+ state->bgpalbank = 0;
+ state->fgcolor = 0;
+ state->flipscreen = 0;
+}
+
+
static MACHINE_DRIVER_START( gyrodine )
+ /* driver data */
+ MDRV_DRIVER_DATA(kyugo_state)
+
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(main_map)
@@ -474,6 +497,7 @@ static MACHINE_DRIVER_START( gyrodine )
MDRV_QUANTUM_TIME(HZ(6000))
+ MDRV_MACHINE_START(kyugo)
MDRV_MACHINE_RESET(kyugo)
/* video hardware */
@@ -1211,8 +1235,10 @@ static DRIVER_INIT( gyrodine )
static DRIVER_INIT( srdmissn )
{
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+
/* shared RAM is mapped at 0xe000 as well */
- memory_install_ram(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xe000, 0xe7ff, 0, 0, shared_ram);
+ memory_install_ram(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xe000, 0xe7ff, 0, 0, state->shared_ram);
/* extra RAM on sub CPU */
memory_install_ram(cputag_get_address_space(machine, "sub", ADDRESS_SPACE_PROGRAM), 0x8800, 0x8fff, 0, 0, NULL);
@@ -1226,20 +1252,20 @@ static DRIVER_INIT( srdmissn )
*
*************************************/
-GAME( 1984, gyrodine, 0, gyrodine, gyrodine, gyrodine, ROT90, "Crux (Taito Corporation license)", "Gyrodine (Taito Corporation license)", 0 )
-GAME( 1984, gyrodinec,gyrodine, gyrodine, gyrodine, gyrodine, ROT90, "Crux", "Gyrodine", 0 )
-GAME( 1984, buzzard, gyrodine, gyrodine, gyrodine, gyrodine, ROT90, "Crux", "Buzzard", 0 )
-GAME( 1985, sonofphx, 0, sonofphx, sonofphx, 0, ROT90, "Associated Overseas MFR, Inc", "Son of Phoenix", 0 )
-GAME( 1985, repulse, sonofphx, sonofphx, sonofphx, 0, ROT90, "Sega", "Repulse", 0 )
-GAME( 1985, 99lstwar, sonofphx, sonofphx, sonofphx, 0, ROT90, "Proma", "'99: The Last War", 0 )
-GAME( 1985, 99lstwara,sonofphx, sonofphx, sonofphx, 0, ROT90, "Proma", "'99: The Last War (alternate)", 0 )
-GAME( 1985, 99lstwark,sonofphx, sonofphx, sonofphx, 0, ROT90, "Kyugo", "'99: The Last War (Kyugo)", 0 )
-GAME( 1985, flashgal, 0, flashgal, flashgal, 0, ROT0, "Sega", "Flashgal (set 1)", 0 )
-GAME( 1985, flashgala,flashgal, flashgla, flashgal, 0, ROT0, "Sega", "Flashgal (set 2)", 0 )
-GAME( 1986, srdmissn, 0, srdmissn, srdmissn, srdmissn, ROT90, "Taito Corporation", "S.R.D. Mission", 0 )
-GAME( 1986, fx, srdmissn, srdmissn, srdmissn, srdmissn, ROT90, "bootleg", "F-X", 0 )
-GAME( 1986, legend, 0, legend, legend, srdmissn, ROT0, "Sega / Coreland", "Legend", 0 )
-GAME( 1987, airwolf, 0, srdmissn, airwolf, srdmissn, ROT0, "Kyugo", "Airwolf", 0 )
-GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, srdmissn, ROT0, "Kyugo (UA Theatre license)", "Airwolf (US)", 0 )
-GAME( 1987, skywolf, airwolf, srdmissn, skywolf, srdmissn, ROT0, "bootleg", "Sky Wolf (set 1)", 0 )
-GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, srdmissn, ROT0, "bootleg", "Sky Wolf (set 2)", 0 )
+GAME( 1984, gyrodine, 0, gyrodine, gyrodine, gyrodine, ROT90, "Crux (Taito Corporation license)", "Gyrodine (Taito Corporation license)", GAME_SUPPORTS_SAVE )
+GAME( 1984, gyrodinec, gyrodine, gyrodine, gyrodine, gyrodine, ROT90, "Crux", "Gyrodine", GAME_SUPPORTS_SAVE )
+GAME( 1984, buzzard, gyrodine, gyrodine, gyrodine, gyrodine, ROT90, "Crux", "Buzzard", GAME_SUPPORTS_SAVE )
+GAME( 1985, sonofphx, 0, sonofphx, sonofphx, 0, ROT90, "Associated Overseas MFR, Inc", "Son of Phoenix", GAME_SUPPORTS_SAVE )
+GAME( 1985, repulse, sonofphx, sonofphx, sonofphx, 0, ROT90, "Sega", "Repulse", GAME_SUPPORTS_SAVE )
+GAME( 1985, 99lstwar, sonofphx, sonofphx, sonofphx, 0, ROT90, "Proma", "'99: The Last War", GAME_SUPPORTS_SAVE )
+GAME( 1985, 99lstwara, sonofphx, sonofphx, sonofphx, 0, ROT90, "Proma", "'99: The Last War (alternate)", GAME_SUPPORTS_SAVE )
+GAME( 1985, 99lstwark, sonofphx, sonofphx, sonofphx, 0, ROT90, "Kyugo", "'99: The Last War (Kyugo)", GAME_SUPPORTS_SAVE )
+GAME( 1985, flashgal, 0, flashgal, flashgal, 0, ROT0, "Sega", "Flashgal (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1985, flashgala, flashgal, flashgla, flashgal, 0, ROT0, "Sega", "Flashgal (set 2)", GAME_SUPPORTS_SAVE )
+GAME( 1986, srdmissn, 0, srdmissn, srdmissn, srdmissn, ROT90, "Taito Corporation", "S.R.D. Mission", GAME_SUPPORTS_SAVE )
+GAME( 1986, fx, srdmissn, srdmissn, srdmissn, srdmissn, ROT90, "bootleg", "F-X", GAME_SUPPORTS_SAVE )
+GAME( 1986, legend, 0, legend, legend, srdmissn, ROT0, "Sega / Coreland", "Legend", GAME_SUPPORTS_SAVE )
+GAME( 1987, airwolf, 0, srdmissn, airwolf, srdmissn, ROT0, "Kyugo", "Airwolf", GAME_SUPPORTS_SAVE )
+GAME( 1987, airwolfa, airwolf, srdmissn, airwolf, srdmissn, ROT0, "Kyugo (UA Theatre license)", "Airwolf (US)", GAME_SUPPORTS_SAVE )
+GAME( 1987, skywolf, airwolf, srdmissn, skywolf, srdmissn, ROT0, "bootleg", "Sky Wolf (set 1)", GAME_SUPPORTS_SAVE )
+GAME( 1987, skywolf2, airwolf, srdmissn, airwolf, srdmissn, ROT0, "bootleg", "Sky Wolf (set 2)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/kangaroo.h b/src/mame/includes/kangaroo.h
index 0c8a9213cdc..0c04d6d8238 100644
--- a/src/mame/includes/kangaroo.h
+++ b/src/mame/includes/kangaroo.h
@@ -6,9 +6,23 @@
***************************************************************************/
-/*----------- defined in video/kangaroo.c -----------*/
+typedef struct _kangaroo_state kangaroo_state;
+struct _kangaroo_state
+{
+ /* memory pointers */
+ UINT8 * video_control;
+
+ /* video-related */
+ UINT32 *videoram;
+
+ /* misc */
+ UINT8 clock;
+};
+
-extern UINT8 *kangaroo_video_control;
+
+
+/*----------- defined in video/kangaroo.c -----------*/
VIDEO_START( kangaroo );
VIDEO_UPDATE( kangaroo );
diff --git a/src/mame/includes/karnov.h b/src/mame/includes/karnov.h
new file mode 100644
index 00000000000..746718f07ff
--- /dev/null
+++ b/src/mame/includes/karnov.h
@@ -0,0 +1,53 @@
+/*************************************************************************
+
+ Karnov - Wonder Planet - Chelnov
+
+*************************************************************************/
+
+typedef struct _karnov_state karnov_state;
+struct _karnov_state
+{
+ /* memory pointers */
+ UINT16 * videoram;
+ UINT16 * ram;
+ UINT16 * pf_data;
+// UINT16 * spriteram; // currently this uses generic buffered spriteram
+
+ /* video-related */
+ bitmap_t *bitmap_f;
+ tilemap *fix_tilemap;
+ int flipscreen;
+ UINT16 scroll[2];
+
+ /* misc */
+ UINT16 i8751_return, i8751_needs_ack, i8751_coin_pending, i8751_command_queue;
+ int i8751_level; // needed by chelnov
+ int microcontroller_id, coin_mask;
+ int latch;
+
+ /* devices */
+ const device_config *maincpu;
+ const device_config *audiocpu;
+};
+
+enum {
+ KARNOV = 0,
+ KARNOVJ,
+ CHELNOV,
+ CHELNOVJ,
+ CHELNOVW,
+ WNDRPLNT
+};
+
+
+/*----------- defined in video/karnov.c -----------*/
+
+WRITE16_HANDLER( karnov_playfield_swap_w );
+WRITE16_HANDLER( karnov_videoram_w );
+
+void karnov_flipscreen_w(running_machine *machine, int data);
+
+PALETTE_INIT( karnov );
+VIDEO_START( karnov );
+VIDEO_START( wndrplnt );
+VIDEO_UPDATE( karnov );
diff --git a/src/mame/includes/kchamp.h b/src/mame/includes/kchamp.h
new file mode 100644
index 00000000000..74026ba3c61
--- /dev/null
+++ b/src/mame/includes/kchamp.h
@@ -0,0 +1,40 @@
+/*************************************************************************
+
+ Karate Champ
+
+*************************************************************************/
+
+typedef struct _kchamp_state kchamp_state;
+struct _kchamp_state
+{
+ /* memory pointers */
+ UINT8 * videoram;
+ UINT8 * colorram;
+ UINT8 * spriteram;
+ size_t spriteram_size;
+
+ /* video-related */
+ tilemap *bg_tilemap;
+
+ /* misc */
+ int nmi_enable;
+ int sound_nmi_enable;
+ int msm_data;
+ int msm_play_lo_nibble;
+ int counter;
+
+ /* devices */
+ const device_config *audiocpu;
+};
+
+
+/*----------- defined in video/kchamp.c -----------*/
+
+WRITE8_HANDLER( kchamp_videoram_w );
+WRITE8_HANDLER( kchamp_colorram_w );
+WRITE8_HANDLER( kchamp_flipscreen_w );
+
+PALETTE_INIT( kchamp );
+VIDEO_START( kchamp );
+VIDEO_UPDATE( kchamp );
+VIDEO_UPDATE( kchampvs );
diff --git a/src/mame/includes/kickgoal.h b/src/mame/includes/kickgoal.h
new file mode 100644
index 00000000000..e8bccbaa7ed
--- /dev/null
+++ b/src/mame/includes/kickgoal.h
@@ -0,0 +1,44 @@
+/*************************************************************************
+
+ Kick Goal - Action Hollywood
+
+*************************************************************************/
+
+typedef struct _kickgoal_state kickgoal_state;
+struct _kickgoal_state
+{
+ /* memory pointers */
+ UINT16 * fgram;
+ UINT16 * bgram;
+ UINT16 * bg2ram;
+ UINT16 * scrram;
+ UINT16 * spriteram;
+// UINT16 * paletteram; // currently this uses generic palette handling
+ size_t spriteram_size;
+
+ /* video-related */
+ tilemap *fgtm, *bgtm, *bg2tm;
+
+ /* misc */
+ int melody_loop;
+ int snd_new, snd_sam[4];
+ int m6295_comm, m6295_bank;
+ UINT16 m6295_key_delay;
+
+ /* devices */
+ const device_config *adpcm;
+ const device_config *eeprom;
+};
+
+
+/*----------- defined in video/kickgoal.c -----------*/
+
+WRITE16_HANDLER( kickgoal_fgram_w );
+WRITE16_HANDLER( kickgoal_bgram_w );
+WRITE16_HANDLER( kickgoal_bg2ram_w );
+
+VIDEO_START( kickgoal );
+VIDEO_UPDATE( kickgoal );
+
+VIDEO_START( actionhw );
+VIDEO_UPDATE( actionhw );
diff --git a/src/mame/includes/kingobox.h b/src/mame/includes/kingobox.h
new file mode 100644
index 00000000000..186a0c12c09
--- /dev/null
+++ b/src/mame/includes/kingobox.h
@@ -0,0 +1,47 @@
+/*************************************************************************
+
+ King of Boxer - Ring King
+
+*************************************************************************/
+
+typedef struct _kingofb_state kingofb_state;
+struct _kingofb_state
+{
+ /* memory pointers */
+ UINT8 * videoram;
+ UINT8 * videoram2;
+ UINT8 * colorram;
+ UINT8 * colorram2;
+ UINT8 * spriteram;
+ UINT8 * scroll_y;
+ size_t spriteram_size;
+
+ /* video-related */
+ tilemap *bg_tilemap, *fg_tilemap;
+ int palette_bank;
+
+ /* misc */
+ int nmi_enable;
+
+ /* devices */
+ const device_config *video_cpu;
+ const device_config *sprite_cpu;
+ const device_config *audio_cpu;
+};
+
+
+/*----------- defined in video/kingobox.c -----------*/
+
+WRITE8_HANDLER( kingofb_videoram_w );
+WRITE8_HANDLER( kingofb_colorram_w );
+WRITE8_HANDLER( kingofb_videoram2_w );
+WRITE8_HANDLER( kingofb_colorram2_w );
+WRITE8_HANDLER( kingofb_f800_w );
+
+PALETTE_INIT( kingofb );
+VIDEO_START( kingofb );
+VIDEO_UPDATE( kingofb );
+
+PALETTE_INIT( ringking );
+VIDEO_START( ringking );
+VIDEO_UPDATE( ringking );
diff --git a/src/mame/includes/kncljoe.h b/src/mame/includes/kncljoe.h
new file mode 100644
index 00000000000..fead3bfb588
--- /dev/null
+++ b/src/mame/includes/kncljoe.h
@@ -0,0 +1,38 @@
+/*************************************************************************
+
+ Knuckle Joe
+
+*************************************************************************/
+
+typedef struct _kncljoe_state kncljoe_state;
+struct _kncljoe_state
+{
+ /* memory pointers */
+ UINT8 * videoram;
+ UINT8 * spriteram;
+ UINT8 * scrollregs;
+ size_t spriteram_size;
+
+ /* video-related */
+ tilemap *bg_tilemap;
+ int tile_bank, sprite_bank;
+ int flipscreen;
+
+ /* misc */
+ UINT8 port1, port2;
+
+ /* devices */
+ const device_config *soundcpu;
+};
+
+
+
+/*----------- defined in video/kncljoe.c -----------*/
+
+WRITE8_HANDLER(kncljoe_videoram_w);
+WRITE8_HANDLER(kncljoe_control_w);
+WRITE8_HANDLER(kncljoe_scroll_w);
+
+PALETTE_INIT( kncljoe );
+VIDEO_START( kncljoe );
+VIDEO_UPDATE( kncljoe );
diff --git a/src/mame/includes/kopunch.h b/src/mame/includes/kopunch.h
new file mode 100644
index 00000000000..4e37435dd52
--- /dev/null
+++ b/src/mame/includes/kopunch.h
@@ -0,0 +1,35 @@
+/*************************************************************************
+
+ KO Punch
+
+*************************************************************************/
+
+typedef struct _kopunch_state kopunch_state;
+struct _kopunch_state
+{
+ /* memory pointers */
+ UINT8 * videoram;
+ UINT8 * videoram2;
+ UINT8 * colorram;
+ UINT8 * spriteram;
+ size_t spriteram_size;
+
+ /* video-related */
+ tilemap *bg_tilemap, *fg_tilemap;
+ int gfxbank;
+
+ /* devices */
+ const device_config *maincpu;
+};
+
+/*----------- defined in video/kopunch.c -----------*/
+
+WRITE8_HANDLER( kopunch_videoram_w );
+WRITE8_HANDLER( kopunch_videoram2_w );
+WRITE8_HANDLER( kopunch_scroll_x_w );
+WRITE8_HANDLER( kopunch_scroll_y_w );
+WRITE8_HANDLER( kopunch_gfxbank_w );
+
+PALETTE_INIT( kopunch );
+VIDEO_START( kopunch );
+VIDEO_UPDATE( kopunch );
diff --git a/src/mame/includes/ksayakyu.h b/src/mame/includes/ksayakyu.h
new file mode 100644
index 00000000000..8a689221c30
--- /dev/null
+++ b/src/mame/includes/ksayakyu.h
@@ -0,0 +1,30 @@
+/*************************************************************************
+
+ Kusayakyuu
+
+*************************************************************************/
+
+typedef struct _ksayakyu_state ksayakyu_state;
+struct _ksayakyu_state
+{
+ /* memory pointers */
+ UINT8 * videoram;
+ UINT8 * spriteram;
+ size_t spriteram_size;
+
+ /* video-related */
+ tilemap *tilemap, *textmap;
+ int video_ctrl, flipscreen;
+
+ /* misc */
+ int sound_status;
+};
+
+
+/*----------- defined in video/ksayakyu.c -----------*/
+
+WRITE8_HANDLER( ksayakyu_videoram_w );
+WRITE8_HANDLER( ksayakyu_videoctrl_w );
+PALETTE_INIT( ksayakyu );
+VIDEO_START( ksayakyu );
+VIDEO_UPDATE( ksayakyu );
diff --git a/src/mame/includes/kyugo.h b/src/mame/includes/kyugo.h
index 6bb9719e082..d90b644de96 100644
--- a/src/mame/includes/kyugo.h
+++ b/src/mame/includes/kyugo.h
@@ -4,13 +4,31 @@
***************************************************************************/
-/*----------- defined in video/kyugo.c -----------*/
+typedef struct _kyugo_state kyugo_state;
+struct _kyugo_state
+{
+ /* memory pointers */
+ UINT8 * fgvideoram;
+ UINT8 * bgvideoram;
+ UINT8 * bgattribram;
+ UINT8 * spriteram_1;
+ UINT8 * spriteram_2;
+ UINT8 * shared_ram;
+
+ /* video-related */
+ tilemap *bg_tilemap, *fg_tilemap;
+ UINT8 scroll_x_lo, scroll_x_hi, scroll_y;
+ int bgpalbank, fgcolor;
+ int flipscreen;
+ const UINT8 *color_codes;
+
+ /* devices */
+ const device_config *maincpu;
+ const device_config *subcpu;
+};
+
-extern UINT8 *kyugo_fgvideoram;
-extern UINT8 *kyugo_bgvideoram;
-extern UINT8 *kyugo_bgattribram;
-extern UINT8 *kyugo_spriteram_1;
-extern UINT8 *kyugo_spriteram_2;
+/*----------- defined in video/kyugo.c -----------*/
READ8_HANDLER( kyugo_spriteram_2_r );
@@ -23,5 +41,4 @@ WRITE8_HANDLER( kyugo_scroll_y_w );
WRITE8_HANDLER( kyugo_flipscreen_w );
VIDEO_START( kyugo );
-
VIDEO_UPDATE( kyugo );
diff --git a/src/mame/video/kangaroo.c b/src/mame/video/kangaroo.c
index c361e750497..7dd7b55140e 100644
--- a/src/mame/video/kangaroo.c
+++ b/src/mame/video/kangaroo.c
@@ -5,16 +5,11 @@
***************************************************************************/
#include "driver.h"
-#include "kangaroo.h"
-
-
-UINT8 *kangaroo_video_control;
-
+#include "includes/kangaroo.h"
static void blitter_execute(running_machine *machine);
-
/*************************************
*
* Video setup
@@ -23,9 +18,11 @@ static void blitter_execute(running_machine *machine);
VIDEO_START( kangaroo )
{
+ kangaroo_state *state = (kangaroo_state *)machine->driver_data;
+
/* video RAM is accessed 32 bits at a time (two planes, 4bpp each, 4 pixels) */
- machine->generic.videoram.u32 = auto_alloc_array(machine, UINT32, 256 * 64);
- state_save_register_global_pointer(machine, machine->generic.videoram.u32, 256 * 64);
+ state->videoram = auto_alloc_array(machine, UINT32, 256 * 64);
+ state_save_register_global_pointer(machine, state->videoram, 256 * 64);
}
@@ -36,8 +33,9 @@ VIDEO_START( kangaroo )
*
*************************************/
-static void videoram_write(running_machine *machine, UINT16 offset, UINT8 data, UINT8 mask)
+static void videoram_write( running_machine *machine, UINT16 offset, UINT8 data, UINT8 mask )
{
+ kangaroo_state *state = (kangaroo_state *)machine->driver_data;
UINT32 expdata, layermask;
/* data contains 4 2-bit values packed as DCBADCBA; expand these into 4 8-bit values */
@@ -59,13 +57,14 @@ static void videoram_write(running_machine *machine, UINT16 offset, UINT8 data,
if (mask & 0x01) layermask |= 0x0c0c0c0c;
/* update layers */
- machine->generic.videoram.u32[offset] = (machine->generic.videoram.u32[offset] & ~layermask) | (expdata & layermask);
+ state->videoram[offset] = (state->videoram[offset] & ~layermask) | (expdata & layermask);
}
WRITE8_HANDLER( kangaroo_videoram_w )
{
- videoram_write(space->machine, offset, data, kangaroo_video_control[8]);
+ kangaroo_state *state = (kangaroo_state *)space->machine->driver_data;
+ videoram_write(space->machine, offset, data, state->video_control[8]);
}
@@ -78,7 +77,8 @@ WRITE8_HANDLER( kangaroo_videoram_w )
WRITE8_HANDLER( kangaroo_video_control_w )
{
- kangaroo_video_control[offset] = data;
+ kangaroo_state *state = (kangaroo_state *)space->machine->driver_data;
+ state->video_control[offset] = data;
switch (offset)
{
@@ -100,15 +100,16 @@ WRITE8_HANDLER( kangaroo_video_control_w )
*
*************************************/
-static void blitter_execute(running_machine *machine)
+static void blitter_execute( running_machine *machine )
{
+ kangaroo_state *state = (kangaroo_state *)machine->driver_data;
UINT32 gfxhalfsize = memory_region_length(machine, "gfx1") / 2;
const UINT8 *gfxbase = memory_region(machine, "gfx1");
- UINT16 src = kangaroo_video_control[0] + 256 * kangaroo_video_control[1];
- UINT16 dst = kangaroo_video_control[2] + 256 * kangaroo_video_control[3];
- UINT8 height = kangaroo_video_control[5];
- UINT8 width = kangaroo_video_control[4];
- UINT8 mask = kangaroo_video_control[8];
+ UINT16 src = state->video_control[0] + 256 * state->video_control[1];
+ UINT16 dst = state->video_control[2] + 256 * state->video_control[3];
+ UINT8 height = state->video_control[5];
+ UINT8 width = state->video_control[4];
+ UINT8 mask = state->video_control[8];
int x, y;
/* during DMA operations, the top 2 bits are ORed together, as well as the bottom 2 bits */
@@ -122,8 +123,8 @@ static void blitter_execute(running_machine *machine)
{
UINT16 effdst = (dst + x) & 0x3fff;
UINT16 effsrc = src++ & (gfxhalfsize - 1);
- videoram_write(machine, effdst, gfxbase[0*gfxhalfsize + effsrc], mask & 0x05);
- videoram_write(machine, effdst, gfxbase[1*gfxhalfsize + effsrc], mask & 0x0a);
+ videoram_write(machine, effdst, gfxbase[0 * gfxhalfsize + effsrc], mask & 0x05);
+ videoram_write(machine, effdst, gfxbase[1 * gfxhalfsize + effsrc], mask & 0x0a);
}
}
@@ -137,16 +138,17 @@ static void blitter_execute(running_machine *machine)
VIDEO_UPDATE( kangaroo )
{
- UINT8 scrolly = kangaroo_video_control[6];
- UINT8 scrollx = kangaroo_video_control[7];
- UINT8 maska = (kangaroo_video_control[10] & 0x28) >> 3;
- UINT8 maskb = (kangaroo_video_control[10] & 0x07) >> 0;
- UINT8 xora = (kangaroo_video_control[9] & 0x20) ? 0xff : 0x00;
- UINT8 xorb = (kangaroo_video_control[9] & 0x10) ? 0xff : 0x00;
- UINT8 enaa = (kangaroo_video_control[9] & 0x08);
- UINT8 enab = (kangaroo_video_control[9] & 0x04);
- UINT8 pria = (~kangaroo_video_control[9] & 0x02);
- UINT8 prib = (~kangaroo_video_control[9] & 0x01);
+ kangaroo_state *state = (kangaroo_state *)screen->machine->driver_data;
+ UINT8 scrolly = state->video_control[6];
+ UINT8 scrollx = state->video_control[7];
+ UINT8 maska = (state->video_control[10] & 0x28) >> 3;
+ UINT8 maskb = (state->video_control[10] & 0x07) >> 0;
+ UINT8 xora = (state->video_control[9] & 0x20) ? 0xff : 0x00;
+ UINT8 xorb = (state->video_control[9] & 0x10) ? 0xff : 0x00;
+ UINT8 enaa = (state->video_control[9] & 0x08);
+ UINT8 enab = (state->video_control[9] & 0x04);
+ UINT8 pria = (~state->video_control[9] & 0x02);
+ UINT8 prib = (~state->video_control[9] & 0x01);
rgb_t pens[8];
int x, y;
@@ -165,8 +167,8 @@ VIDEO_UPDATE( kangaroo )
UINT8 effya = scrolly + (y ^ xora);
UINT8 effxb = (x / 2) ^ xorb;
UINT8 effyb = y ^ xorb;
- UINT8 pixa = (screen->machine->generic.videoram.u32[effya + 256 * (effxa / 4)] >> (8 * (effxa % 4) + 0)) & 0x0f;
- UINT8 pixb = (screen->machine->generic.videoram.u32[effyb + 256 * (effxb / 4)] >> (8 * (effxb % 4) + 4)) & 0x0f;
+ UINT8 pixa = (state->videoram[effya + 256 * (effxa / 4)] >> (8 * (effxa % 4) + 0)) & 0x0f;
+ UINT8 pixb = (state->videoram[effyb + 256 * (effxb / 4)] >> (8 * (effxb % 4) + 4)) & 0x0f;
UINT8 finalpens;
/* for each layer, contribute bits if (a) enabled, and (b) either has priority or the opposite plane is 0 */
diff --git a/src/mame/video/karnov.c b/src/mame/video/karnov.c
index 4b2b1f19515..ba257caa201 100644
--- a/src/mame/video/karnov.c
+++ b/src/mame/video/karnov.c
@@ -5,11 +5,7 @@
*******************************************************************************/
#include "driver.h"
-
-static bitmap_t *bitmap_f;
-UINT16 karnov_scroll[2], *karnov_pf_data;
-static tilemap *fix_tilemap;
-static int flipscreen;
+#include "includes/karnov.h"
/***************************************************************************
@@ -38,13 +34,14 @@ static int flipscreen;
bit 0 -- 2.2kohm resistor -- BLUE
***************************************************************************/
+
PALETTE_INIT( karnov )
{
int i;
- for (i = 0;i < machine->config->total_colors;i++)
+ for (i = 0; i < machine->config->total_colors; i++)
{
- int bit0,bit1,bit2,bit3,r,g,b;
+ int bit0, bit1, bit2, bit3, r, g, b;
bit0 = (color_prom[0] >> 0) & 0x01;
bit1 = (color_prom[0] >> 1) & 0x01;
@@ -62,94 +59,117 @@ PALETTE_INIT( karnov )
bit3 = (color_prom[machine->config->total_colors] >> 3) & 0x01;
b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
- palette_set_color(machine,i,MAKE_RGB(r,g,b));
+ palette_set_color(machine, i, MAKE_RGB(r, g, b));
color_prom++;
}
}
-void karnov_flipscreen_w(running_machine *machine, int data)
+void karnov_flipscreen_w( running_machine *machine, int data )
{
- flipscreen=data;
- tilemap_set_flip_all(machine,flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
+ karnov_state *state = (karnov_state *)machine->driver_data;
+ state->flipscreen = data;
+ tilemap_set_flip_all(machine, state->flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
}
-static void draw_background(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
+static void draw_background( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
- int my,mx,offs,color,tile,fx,fy;
- int scrollx=karnov_scroll[0];
- int scrolly=karnov_scroll[1];
+ karnov_state *state = (karnov_state *)machine->driver_data;
+ int my, mx, offs, color, tile, fx, fy;
+ int scrollx = state->scroll[0];
+ int scrolly = state->scroll[1];
+
+ if (state->flipscreen)
+ fx = fy = 1;
+ else
+ fx = fy = 0;
- if (flipscreen) fx=fy=1; else fx=fy=0;
+ mx = -1;
+ my = 0;
- mx=-1; my=0;
- for (offs = 0;offs < 0x400; offs ++) {
+ for (offs = 0; offs < 0x400; offs ++)
+ {
mx++;
- if (mx==32) {mx=0; my++;}
+ if (mx == 32)
+ {
+ mx=0;
+ my++;
+ }
- tile=karnov_pf_data[offs];
+ tile = state->pf_data[offs];
color = tile >> 12;
- tile = tile&0x7ff;
- if (flipscreen)
- drawgfx_opaque(bitmap_f,0,machine->gfx[1],tile,
+ tile = tile & 0x7ff;
+ if (state->flipscreen)
+ drawgfx_opaque(state->bitmap_f, 0, machine->gfx[1],tile,
color, fx, fy, 496-16*mx,496-16*my);
else
- drawgfx_opaque(bitmap_f,0,machine->gfx[1],tile,
+ drawgfx_opaque(state->bitmap_f, 0, machine->gfx[1],tile,
color, fx, fy, 16*mx,16*my);
}
- if (!flipscreen) {
- scrolly=-scrolly;
- scrollx=-scrollx;
- } else {
- scrolly=scrolly+256;
- scrollx=scrollx+256;
+ if (!state->flipscreen)
+ {
+ scrolly = -scrolly;
+ scrollx = -scrollx;
+ }
+ else
+ {
+ scrolly = scrolly + 256;
+ scrollx = scrollx + 256;
}
- copyscrollbitmap(bitmap,bitmap_f,1,&scrollx,1,&scrolly,cliprect);
+
+ copyscrollbitmap(bitmap, state->bitmap_f, 1, &scrollx, 1, &scrolly, cliprect);
}
-static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
+static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
+ karnov_state *state = (karnov_state *)machine->driver_data;
UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16;
int offs;
- for (offs = 0;offs <0x800;offs += 4) {
- int x,y,sprite,sprite2,colour,fx,fy,extra;
-
- y=buffered_spriteram16[offs];
- if (!(y&0x8000)) continue;
-
- y=y&0x1ff;
- sprite=buffered_spriteram16[offs+3];
- colour=sprite>>12;
- sprite=sprite&0xfff;
- x=buffered_spriteram16[offs+2]&0x1ff;
-
- fx=buffered_spriteram16[offs+1];
- if ((fx&0x10)) extra=1; else extra=0;
- fy=fx&0x2;
- fx=fx&0x4;
-
- if (extra) y=y+16;
-
- /* Convert the co-ords..*/
- x=(x+16)%0x200;
- y=(y+16)%0x200;
- x=256 - x;
- y=256 - y;
- if (flipscreen) {
- y=240-y;
- x=240-x;
- if (fx) fx=0; else fx=1;
- if (fy) fy=0; else fy=1;
- if (extra) y=y-16;
+ for (offs = 0; offs <0x800; offs += 4)
+ {
+ int x, y, sprite, sprite2, colour, fx, fy, extra;
+
+ y = buffered_spriteram16[offs];
+ if (!(y & 0x8000))
+ continue;
+
+ y = y & 0x1ff;
+ sprite = buffered_spriteram16[offs + 3];
+ colour = sprite >> 12;
+ sprite = sprite & 0xfff;
+ x = buffered_spriteram16[offs + 2] & 0x1ff;
+
+ fx = buffered_spriteram16[offs + 1];
+ extra = (fx & 0x10) ? 1 : 0;
+ fy = fx & 0x2;
+ fx = fx & 0x4;
+
+ if (extra)
+ y = y + 16;
+
+ /* Convert the co-ords..*/
+ x = (x + 16) % 0x200;
+ y = (y + 16) % 0x200;
+ x = 256 - x;
+ y = 256 - y;
+ if (state->flipscreen)
+ {
+ y = 240 - y;
+ x = 240 - x;
+ if (fx) fx = 0; else fx = 1;
+ if (fy) fy = 0; else fy = 1;
+ if (extra) y = y - 16;
}
/* Y Flip determines order of multi-sprite */
- if (extra && fy) {
- sprite2=sprite;
+ if (extra && fy)
+ {
+ sprite2 = sprite;
sprite++;
}
- else sprite2=sprite+1;
+ else
+ sprite2 = sprite + 1;
drawgfx_transpen(bitmap,cliprect,machine->gfx[2],
sprite,
@@ -167,9 +187,10 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
VIDEO_UPDATE( karnov )
{
- draw_background(screen->machine,bitmap,cliprect);
- draw_sprites(screen->machine,bitmap,cliprect);
- tilemap_draw(bitmap,cliprect,fix_tilemap,0,0);
+ karnov_state *state = (karnov_state *)screen->machine->driver_data;
+ draw_background(screen->machine, bitmap, cliprect);
+ draw_sprites(screen->machine, bitmap, cliprect);
+ tilemap_draw(bitmap, cliprect, state->fix_tilemap, 0, 0);
return 0;
}
@@ -177,7 +198,8 @@ VIDEO_UPDATE( karnov )
static TILE_GET_INFO( get_fix_tile_info )
{
- int tile=machine->generic.videoram.u16[tile_index];
+ karnov_state *state = (karnov_state *)machine->driver_data;
+ int tile = state->videoram[tile_index];
SET_TILE_INFO(
0,
tile&0xfff,
@@ -187,36 +209,44 @@ static TILE_GET_INFO( get_fix_tile_info )
WRITE16_HANDLER( karnov_videoram_w )
{
- COMBINE_DATA(&space->machine->generic.videoram.u16[offset]);
- tilemap_mark_tile_dirty(fix_tilemap,offset);
+ karnov_state *state = (karnov_state *)space->machine->driver_data;
+ COMBINE_DATA(&state->videoram[offset]);
+ tilemap_mark_tile_dirty(state->fix_tilemap, offset);
}
WRITE16_HANDLER( karnov_playfield_swap_w )
{
+ karnov_state *state = (karnov_state *)space->machine->driver_data;
offset = ((offset & 0x1f) << 5) | ((offset & 0x3e0) >> 5);
- COMBINE_DATA(&karnov_pf_data[offset]);
+ COMBINE_DATA(&state->pf_data[offset]);
}
/******************************************************************************/
VIDEO_START( karnov )
{
- /* Allocate bitmaps */
- bitmap_f = auto_bitmap_alloc(machine,512,512,video_screen_get_format(machine->primary_screen));
+ karnov_state *state = (karnov_state *)machine->driver_data;
- fix_tilemap=tilemap_create(machine, get_fix_tile_info,tilemap_scan_rows,8,8,32,32);
+ /* Allocate bitmap & tilemap */
+ state->bitmap_f = auto_bitmap_alloc(machine, 512, 512, video_screen_get_format(machine->primary_screen));
+ state->fix_tilemap = tilemap_create(machine, get_fix_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
- tilemap_set_transparent_pen(fix_tilemap,0);
+ state_save_register_global_bitmap(machine, state->bitmap_f);
+
+ tilemap_set_transparent_pen(state->fix_tilemap, 0);
}
VIDEO_START( wndrplnt )
{
- /* Allocate bitmaps */
- bitmap_f = auto_bitmap_alloc(machine,512,512,video_screen_get_format(machine->primary_screen));
+ karnov_state *state = (karnov_state *)machine->driver_data;
+
+ /* Allocate bitmap & tilemap */
+ state->bitmap_f = auto_bitmap_alloc(machine, 512, 512, video_screen_get_format(machine->primary_screen));
+ state->fix_tilemap = tilemap_create(machine, get_fix_tile_info, tilemap_scan_cols, 8, 8, 32, 32);
- fix_tilemap=tilemap_create(machine, get_fix_tile_info,tilemap_scan_cols,8,8,32,32);
+ state_save_register_global_bitmap(machine, state->bitmap_f);
- tilemap_set_transparent_pen(fix_tilemap,0);
+ tilemap_set_transparent_pen(state->fix_tilemap, 0);
}
/******************************************************************************/
diff --git a/src/mame/video/kchamp.c b/src/mame/video/kchamp.c
index 049f112ebe4..64ee2917aa0 100644
--- a/src/mame/video/kchamp.c
+++ b/src/mame/video/kchamp.c
@@ -7,33 +7,35 @@
***************************************************************************/
#include "driver.h"
+#include "includes/kchamp.h"
-static tilemap *bg_tilemap;
PALETTE_INIT( kchamp )
{
int i, red, green, blue;
- for (i = 0;i < machine->config->total_colors;i++)
+ for (i = 0; i < machine->config->total_colors; i++)
{
red = color_prom[i];
- green = color_prom[machine->config->total_colors+i];
- blue = color_prom[2*machine->config->total_colors+i];
+ green = color_prom[machine->config->total_colors + i];
+ blue = color_prom[2 * machine->config->total_colors + i];
- palette_set_color_rgb(machine,i,pal4bit(red),pal4bit(green),pal4bit(blue));
+ palette_set_color_rgb(machine, i, pal4bit(red), pal4bit(green), pal4bit(blue));
}
}
WRITE8_HANDLER( kchamp_videoram_w )
{
- space->machine->generic.videoram.u8[offset] = data;
- tilemap_mark_tile_dirty(bg_tilemap, offset);
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ state->videoram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( kchamp_colorram_w )
{
- space->machine->generic.colorram.u8[offset] = data;
- tilemap_mark_tile_dirty(bg_tilemap, offset);
+ kchamp_state *state = (kchamp_state *)space->machine->driver_data;
+ state->colorram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( kchamp_flipscreen_w )
@@ -43,43 +45,45 @@ WRITE8_HANDLER( kchamp_flipscreen_w )
static TILE_GET_INFO( get_bg_tile_info )
{
- int code = machine->generic.videoram.u8[tile_index] + ((machine->generic.colorram.u8[tile_index] & 7) << 8);
- int color = (machine->generic.colorram.u8[tile_index] >> 3) & 0x1f;
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+ int code = state->videoram[tile_index] + ((state->colorram[tile_index] & 7) << 8);
+ int color = (state->colorram[tile_index] >> 3) & 0x1f;
SET_TILE_INFO(0, code, color, 0);
}
VIDEO_START( kchamp )
{
- bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows,
- 8, 8, 32, 32);
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+ state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
}
/*
Sprites
-------
- Offset Encoding
- 0 YYYYYYYY
- 1 TTTTTTTT
- 2 FGGTCCCC
- 3 XXXXXXXX
+ Offset Encoding
+ 0 YYYYYYYY
+ 1 TTTTTTTT
+ 2 FGGTCCCC
+ 3 XXXXXXXX
*/
-static void kchamp_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
+static void kchamp_draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
- UINT8 *spriteram = machine->generic.spriteram.u8;
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+ UINT8 *spriteram = state->spriteram;
int offs;
- for (offs = 0; offs < 0x100; offs += 4)
+ for (offs = 0; offs < 0x100; offs += 4)
{
int attr = spriteram[offs + 2];
- int bank = 1 + ((attr & 0x60) >> 5);
- int code = spriteram[offs + 1] + ((attr & 0x10) << 4);
- int color = attr & 0x0f;
+ int bank = 1 + ((attr & 0x60) >> 5);
+ int code = spriteram[offs + 1] + ((attr & 0x10) << 4);
+ int color = attr & 0x0f;
int flipx = 0;
- int flipy = attr & 0x80;
- int sx = spriteram[offs + 3] - 8;
- int sy = 247 - spriteram[offs];
+ int flipy = attr & 0x80;
+ int sx = spriteram[offs + 3] - 8;
+ int sy = 247 - spriteram[offs];
if (flip_screen_get(machine))
{
@@ -89,25 +93,26 @@ static void kchamp_draw_sprites(running_machine *machine, bitmap_t *bitmap, cons
flipy = !flipy;
}
- drawgfx_transpen(bitmap, cliprect, machine->gfx[bank], code, color, flipx, flipy, sx, sy, 0);
+ drawgfx_transpen(bitmap, cliprect, machine->gfx[bank], code, color, flipx, flipy, sx, sy, 0);
}
}
-static void kchampvs_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
+static void kchampvs_draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
- UINT8 *spriteram = machine->generic.spriteram.u8;
+ kchamp_state *state = (kchamp_state *)machine->driver_data;
+ UINT8 *spriteram = state->spriteram;
int offs;
- for (offs = 0; offs < 0x100; offs += 4)
+ for (offs = 0; offs < 0x100; offs += 4)
{
int attr = spriteram[offs + 2];
- int bank = 1 + ((attr & 0x60) >> 5);
- int code = spriteram[offs + 1] + ((attr & 0x10) << 4);
- int color = attr & 0x0f;
+ int bank = 1 + ((attr & 0x60) >> 5);
+ int code = spriteram[offs + 1] + ((attr & 0x10) << 4);
+ int color = attr & 0x0f;
int flipx = 0;
- int flipy = attr & 0x80;
- int sx = spriteram[offs + 3];
- int sy = 240 - spriteram[offs];
+ int flipy = attr & 0x80;
+ int sx = spriteram[offs + 3];
+ int sy = 240 - spriteram[offs];
if (flip_screen_get(machine))
{
@@ -117,21 +122,25 @@ static void kchampvs_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
flipy = !flipy;
}
- drawgfx_transpen(bitmap, cliprect, machine->gfx[bank], code, color, flipx, flipy, sx, sy, 0);
+ drawgfx_transpen(bitmap, cliprect, machine->gfx[bank], code, color, flipx, flipy, sx, sy, 0);
}
}
VIDEO_UPDATE( kchamp )
{
- tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
+ kchamp_state *state = (kchamp_state *)screen->machine->driver_data;
+
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
kchamp_draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}
VIDEO_UPDATE( kchampvs )
{
- tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
+ kchamp_state *state = (kchamp_state *)screen->machine->driver_data;
+
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
kchampvs_draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}
diff --git a/src/mame/video/kickgoal.c b/src/mame/video/kickgoal.c
index 63ec7d41631..427a4e83044 100644
--- a/src/mame/video/kickgoal.c
+++ b/src/mame/video/kickgoal.c
@@ -1,108 +1,117 @@
/* Kick Goal - video */
#include "driver.h"
+#include "includes/kickgoal.h"
+
+
+WRITE16_HANDLER( kickgoal_fgram_w )
+{
+ kickgoal_state *state = (kickgoal_state *)space->machine->driver_data;
+ state->fgram[offset] = data;
+ tilemap_mark_tile_dirty(state->fgtm, offset / 2);
+}
+
+WRITE16_HANDLER( kickgoal_bgram_w )
+{
+ kickgoal_state *state = (kickgoal_state *)space->machine->driver_data;
+ state->bgram[offset] = data;
+ tilemap_mark_tile_dirty(state->bgtm, offset / 2);
+}
+
+WRITE16_HANDLER( kickgoal_bg2ram_w )
+{
+ kickgoal_state *state = (kickgoal_state *)space->machine->driver_data;
+ state->bg2ram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg2tm, offset / 2);
+}
+
-extern UINT16 *kickgoal_fgram, *kickgoal_bgram, *kickgoal_bg2ram, *kickgoal_scrram;
-static tilemap *kickgoal_fgtm, *kickgoal_bgtm, *kickgoal_bg2tm;
/* FG */
static TILE_GET_INFO( get_kickgoal_fg_tile_info )
{
- int tileno = kickgoal_fgram[tile_index*2] & 0x0fff;
- int color = kickgoal_fgram[tile_index*2+1] & 0x000f;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ int tileno = state->fgram[tile_index * 2] & 0x0fff;
+ int color = state->fgram[tile_index * 2 + 1] & 0x000f;
- SET_TILE_INFO(0,tileno + 0x7000,color + 0x00,0);
+ SET_TILE_INFO(0, tileno + 0x7000, color + 0x00, 0);
}
/* BG */
static TILE_GET_INFO( get_kickgoal_bg_tile_info )
{
- int tileno = kickgoal_bgram[tile_index*2] & 0x0fff;
- int color = kickgoal_bgram[tile_index*2+1] & 0x000f;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ int tileno = state->bgram[tile_index * 2] & 0x0fff;
+ int color = state->bgram[tile_index * 2 + 1] & 0x000f;
- SET_TILE_INFO(1,tileno + 0x1000,color + 0x10,0);
+ SET_TILE_INFO(1, tileno + 0x1000, color + 0x10, 0);
}
/* BG 2 */
static TILE_GET_INFO( get_kickgoal_bg2_tile_info )
{
- int tileno = kickgoal_bg2ram[tile_index*2] & 0x07ff;
- int color = kickgoal_bg2ram[tile_index*2+1] & 0x000f;
- int flipx = kickgoal_bg2ram[tile_index*2+1] & 0x0020;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ int tileno = state->bg2ram[tile_index * 2] & 0x07ff;
+ int color = state->bg2ram[tile_index * 2 + 1] & 0x000f;
+ int flipx = state->bg2ram[tile_index * 2 + 1] & 0x0020;
- SET_TILE_INFO(2,tileno + 0x800,color + 0x20,flipx ? TILE_FLIPX : 0);
+ SET_TILE_INFO(2, tileno + 0x800, color + 0x20, flipx ? TILE_FLIPX : 0);
}
static TILEMAP_MAPPER( tilemap_scan_kicksbg2 )
{
/* logical (col,row) -> memory offset */
- return col*8 + (row & 0x7) + ((row & 0x3c) >> 3) * 0x200;
+ return col * 8 + (row & 0x7) + ((row & 0x3c) >> 3) * 0x200;
}
static TILEMAP_MAPPER( tilemap_scan_kicksbg )
{
/* logical (col,row) -> memory offset */
- return col*16 + (row & 0xf) + ((row & 0x70) >> 4) * 0x400;
+ return col * 16 + (row & 0xf) + ((row & 0x70) >> 4) * 0x400;
}
static TILEMAP_MAPPER( tilemap_scan_kicksfg )
{
/* logical (col,row) -> memory offset */
- return col*32 + (row & 0x1f) + ((row & 0x20) >> 5) * 0x800;
+ return col * 32 + (row & 0x1f) + ((row & 0x20) >> 5) * 0x800;
}
VIDEO_START( kickgoal )
{
- kickgoal_fgtm = tilemap_create(machine, get_kickgoal_fg_tile_info,tilemap_scan_kicksfg, 8, 16,64,64);
- tilemap_set_transparent_pen(kickgoal_fgtm,15);
- kickgoal_bgtm = tilemap_create(machine, get_kickgoal_bg_tile_info,tilemap_scan_kicksbg, 16, 32,64,64);
- tilemap_set_transparent_pen(kickgoal_bgtm,15);
- kickgoal_bg2tm = tilemap_create(machine, get_kickgoal_bg2_tile_info,tilemap_scan_kicksbg2, 32, 64,64,64);
-}
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ state->fgtm = tilemap_create(machine, get_kickgoal_fg_tile_info, tilemap_scan_kicksfg, 8, 16, 64, 64);
+ state->bgtm = tilemap_create(machine, get_kickgoal_bg_tile_info, tilemap_scan_kicksbg, 16, 32, 64, 64);
+ state->bg2tm = tilemap_create(machine, get_kickgoal_bg2_tile_info, tilemap_scan_kicksbg2, 32, 64, 64, 64);
-
-WRITE16_HANDLER( kickgoal_fgram_w )
-{
- kickgoal_fgram[offset] = data;
- tilemap_mark_tile_dirty(kickgoal_fgtm,offset/2);
-}
-
-WRITE16_HANDLER( kickgoal_bgram_w )
-{
- kickgoal_bgram[offset] = data;
- tilemap_mark_tile_dirty(kickgoal_bgtm,offset/2);
-}
-
-WRITE16_HANDLER( kickgoal_bg2ram_w )
-{
- kickgoal_bg2ram[offset] = data;
- tilemap_mark_tile_dirty(kickgoal_bg2tm,offset/2);
+ tilemap_set_transparent_pen(state->fgtm, 15);
+ tilemap_set_transparent_pen(state->bgtm, 15);
}
-static void kickgoal_draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
+static void kickgoal_draw_sprites( running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect )
{
- UINT16 *spriteram16 = machine->generic.spriteram.u16;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ UINT16 *spriteram = state->spriteram;
const gfx_element *gfx = machine->gfx[1];
int offs;
- for (offs = 0;offs < machine->generic.spriteram_size/2;offs += 4)
+ for (offs = 0; offs < state->spriteram_size / 2; offs += 4)
{
- int xpos = spriteram16[offs+3];
- int ypos = spriteram16[offs+0] & 0x00ff;
- int tileno = spriteram16[offs+2] & 0x0fff;
- int flipx = spriteram16[offs+1] & 0x0020;
- int color = spriteram16[offs+1] & 0x000f;
+ int xpos = spriteram[offs + 3];
+ int ypos = spriteram[offs + 0] & 0x00ff;
+ int tileno = spriteram[offs + 2] & 0x0fff;
+ int flipx = spriteram[offs + 1] & 0x0020;
+ int color = spriteram[offs + 1] & 0x000f;
- if (spriteram16[offs+0] & 0x0100) break;
+ if (spriteram[offs + 0] & 0x0100)
+ break;
ypos *= 2;
-
- ypos = 0x200-ypos;
+ ypos = 0x200 - ypos;
drawgfx_transpen(bitmap,cliprect,gfx,
tileno,
@@ -115,32 +124,34 @@ static void kickgoal_draw_sprites(running_machine *machine, bitmap_t *bitmap,con
VIDEO_UPDATE( kickgoal )
{
+ kickgoal_state *state = (kickgoal_state *)screen->machine->driver_data;
+
/* set scroll */
- tilemap_set_scrollx( kickgoal_fgtm, 0, kickgoal_scrram[0] );
- tilemap_set_scrolly( kickgoal_fgtm, 0, kickgoal_scrram[1]*2 );
- tilemap_set_scrollx( kickgoal_bgtm, 0, kickgoal_scrram[2] );
- tilemap_set_scrolly( kickgoal_bgtm, 0, kickgoal_scrram[3]*2 );
- tilemap_set_scrollx( kickgoal_bg2tm, 0, kickgoal_scrram[4] );
- tilemap_set_scrolly( kickgoal_bg2tm, 0, kickgoal_scrram[5]*2 );
+ tilemap_set_scrollx(state->fgtm, 0, state->scrram[0]);
+ tilemap_set_scrolly(state->fgtm, 0, state->scrram[1] * 2);
+ tilemap_set_scrollx(state->bgtm, 0, state->scrram[2]);
+ tilemap_set_scrolly(state->bgtm, 0, state->scrram[3] * 2);
+ tilemap_set_scrollx(state->bg2tm, 0, state->scrram[4]);
+ tilemap_set_scrolly(state->bg2tm, 0, state->scrram[5] * 2);
/* draw */
- tilemap_draw(bitmap,cliprect,kickgoal_bg2tm,0,0);
- tilemap_draw(bitmap,cliprect,kickgoal_bgtm,0,0);
+ tilemap_draw(bitmap, cliprect, state->bg2tm, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->bgtm, 0, 0);
- kickgoal_draw_sprites(screen->machine,bitmap,cliprect);
+ kickgoal_draw_sprites(screen->machine, bitmap, cliprect);
- tilemap_draw(bitmap,cliprect,kickgoal_fgtm,0,0);
+ tilemap_draw(bitmap, cliprect, state->fgtm, 0, 0);
/*
popmessage ("Regs %04x %04x %04x %04x %04x %04x %04x %04x",
- kickgoal_scrram[0],
- kickgoal_scrram[1],
- kickgoal_scrram[2],
- kickgoal_scrram[3],
- kickgoal_scrram[4],
- kickgoal_scrram[5],
- kickgoal_scrram[6],
- kickgoal_scrram[7]);
+ state->scrram[0],
+ state->scrram[1],
+ state->scrram[2],
+ state->scrram[3],
+ state->scrram[4],
+ state->scrram[5],
+ state->scrram[6],
+ state->scrram[7]);
*/
return 0;
}
@@ -150,82 +161,88 @@ VIDEO_UPDATE( kickgoal )
/* FG */
static TILE_GET_INFO( get_actionhw_fg_tile_info )
{
- int tileno = kickgoal_fgram[tile_index*2] & 0x0fff;
- int color = kickgoal_fgram[tile_index*2+1] & 0x000f;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ int tileno = state->fgram[tile_index * 2] & 0x0fff;
+ int color = state->fgram[tile_index * 2 + 1] & 0x000f;
- SET_TILE_INFO(0,tileno + 0x7000*2,color + 0x00,0);
+ SET_TILE_INFO(0, tileno + 0x7000 * 2, color + 0x00, 0);
}
/* BG */
static TILE_GET_INFO( get_actionhw_bg_tile_info )
{
- int tileno = kickgoal_bgram[tile_index*2] & 0x1fff;
- int color = kickgoal_bgram[tile_index*2+1] & 0x000f;
- int flipx = kickgoal_bgram[tile_index*2+1] & 0x0020;
- int flipy = kickgoal_bgram[tile_index*2+1] & 0x0040;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ int tileno = state->bgram[tile_index * 2] & 0x1fff;
+ int color = state->bgram[tile_index * 2 + 1] & 0x000f;
+ int flipx = state->bgram[tile_index * 2 + 1] & 0x0020;
+ int flipy = state->bgram[tile_index * 2 + 1] & 0x0040;
- SET_TILE_INFO(1,tileno + 0x0000,color + 0x10,(flipx ? TILE_FLIPX : 0) | (flipy ? TILE_FLIPY : 0));
+ SET_TILE_INFO(1, tileno + 0x0000, color + 0x10, (flipx ? TILE_FLIPX : 0) | (flipy ? TILE_FLIPY : 0));
}
/* BG 2 */
static TILE_GET_INFO( get_actionhw_bg2_tile_info )
{
- int tileno = kickgoal_bg2ram[tile_index*2] & 0x1fff;
- int color = kickgoal_bg2ram[tile_index*2+1] & 0x000f;
- int flipx = kickgoal_bg2ram[tile_index*2+1] & 0x0020;
- int flipy = kickgoal_bg2ram[tile_index*2+1] & 0x0040;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ int tileno = state->bg2ram[tile_index * 2] & 0x1fff;
+ int color = state->bg2ram[tile_index * 2 + 1] & 0x000f;
+ int flipx = state->bg2ram[tile_index * 2 + 1] & 0x0020;
+ int flipy = state->bg2ram[tile_index * 2 + 1] & 0x0040;
- SET_TILE_INFO(1,tileno + 0x2000,color + 0x20,(flipx ? TILE_FLIPX : 0) | (flipy ? TILE_FLIPY : 0));
+ SET_TILE_INFO(1, tileno + 0x2000, color + 0x20, (flipx ? TILE_FLIPX : 0) | (flipy ? TILE_FLIPY : 0));
}
static TILEMAP_MAPPER( tilemap_scan_actionhwbg2 )
{
/* logical (col,row) -> memory offset */
- return col*16 + (row & 0xf) + ((row & 0x70) >> 4) * 0x400;
+ return col * 16 + (row & 0xf) + ((row & 0x70) >> 4) * 0x400;
}
static TILEMAP_MAPPER( tilemap_scan_actionhwbg )
{
/* logical (col,row) -> memory offset */
- return col*16 + (row & 0xf) + ((row & 0x70) >> 4) * 0x400;
+ return col * 16 + (row & 0xf) + ((row & 0x70) >> 4) * 0x400;
}
static TILEMAP_MAPPER( tilemap_scan_actionhwfg )
{
/* logical (col,row) -> memory offset */
- return col*32 + (row & 0x1f) + ((row & 0x20) >> 5) * 0x800;
+ return col * 32 + (row & 0x1f) + ((row & 0x20) >> 5) * 0x800;
}
VIDEO_START( actionhw )
{
- kickgoal_fgtm = tilemap_create(machine, get_actionhw_fg_tile_info,tilemap_scan_actionhwfg, 8, 8,64,64);
- kickgoal_bgtm = tilemap_create(machine, get_actionhw_bg_tile_info,tilemap_scan_actionhwbg, 16,16,64,64);
- kickgoal_bg2tm = tilemap_create(machine, get_actionhw_bg2_tile_info,tilemap_scan_actionhwbg2, 16,16,64,64);
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+
+ state->fgtm = tilemap_create(machine, get_actionhw_fg_tile_info, tilemap_scan_actionhwfg, 8, 8, 64, 64);
+ state->bgtm = tilemap_create(machine, get_actionhw_bg_tile_info, tilemap_scan_actionhwbg, 16, 16, 64, 64);
+ state->bg2tm = tilemap_create(machine, get_actionhw_bg2_tile_info, tilemap_scan_actionhwbg2, 16, 16, 64, 64);
- tilemap_set_transparent_pen(kickgoal_fgtm,15);
- tilemap_set_transparent_pen(kickgoal_bgtm,15);
+ tilemap_set_transparent_pen(state->fgtm, 15);
+ tilemap_set_transparent_pen(state->bgtm, 15);
}
static void actionhw_draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
{
- UINT16 *spriteram16 = machine->generic.spriteram.u16;
+ kickgoal_state *state = (kickgoal_state *)machine->driver_data;
+ UINT16 *spriteram = state->spriteram;
const gfx_element *gfx = machine->gfx[1];
int offs;
- for (offs = 0;offs < machine->generic.spriteram_size/2;offs += 4)
+ for (offs = 0; offs < state->spriteram_size / 2; offs += 4)
{
- int xpos = spriteram16[offs+3];
- int ypos = spriteram16[offs+0] & 0x00ff;
- int tileno = spriteram16[offs+2] & 0x3fff;
- int flipx = spriteram16[offs+1] & 0x0020;
- int color = spriteram16[offs+1] & 0x000f;
+ int xpos = spriteram[offs + 3];
+ int ypos = spriteram[offs + 0] & 0x00ff;
+ int tileno = spriteram[offs + 2] & 0x3fff;
+ int flipx = spriteram[offs + 1] & 0x0020;
+ int color = spriteram[offs + 1] & 0x000f;
- if (spriteram16[offs+0] & 0x0100) break;
+ if (spriteram[offs + 0] & 0x0100) break;
- ypos = 0x110-ypos;
+ ypos = 0x110 - ypos;
drawgfx_transpen(bitmap,cliprect,gfx,
tileno+0x4000,
@@ -238,20 +255,21 @@ static void actionhw_draw_sprites(running_machine *machine, bitmap_t *bitmap,con
VIDEO_UPDATE( actionhw )
{
+ kickgoal_state *state = (kickgoal_state *)screen->machine->driver_data;
/* set scroll */
- tilemap_set_scrollx( kickgoal_fgtm, 0, kickgoal_scrram[0] );
- tilemap_set_scrolly( kickgoal_fgtm, 0, kickgoal_scrram[1] );
- tilemap_set_scrollx( kickgoal_bgtm, 0, kickgoal_scrram[2] );
- tilemap_set_scrolly( kickgoal_bgtm, 0, kickgoal_scrram[3] );
- tilemap_set_scrollx( kickgoal_bg2tm, 0, kickgoal_scrram[4] );
- tilemap_set_scrolly( kickgoal_bg2tm, 0, kickgoal_scrram[5] );
+ tilemap_set_scrollx(state->fgtm, 0, state->scrram[0]);
+ tilemap_set_scrolly(state->fgtm, 0, state->scrram[1]);
+ tilemap_set_scrollx(state->bgtm, 0, state->scrram[2]);
+ tilemap_set_scrolly(state->bgtm, 0, state->scrram[3]);
+ tilemap_set_scrollx(state->bg2tm, 0, state->scrram[4]);
+ tilemap_set_scrolly(state->bg2tm, 0, state->scrram[5]);
/* draw */
- tilemap_draw(bitmap,cliprect,kickgoal_bg2tm,0,0);
- tilemap_draw(bitmap,cliprect,kickgoal_bgtm,0,0);
+ tilemap_draw(bitmap, cliprect, state->bg2tm, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->bgtm, 0, 0);
- actionhw_draw_sprites(screen->machine,bitmap,cliprect);
+ actionhw_draw_sprites(screen->machine, bitmap, cliprect);
- tilemap_draw(bitmap,cliprect,kickgoal_fgtm,0,0);
+ tilemap_draw(bitmap, cliprect, state->fgtm, 0, 0);
return 0;
}
diff --git a/src/mame/video/kingobox.c b/src/mame/video/kingobox.c
index 6728b2d80ed..f05360454cc 100644
--- a/src/mame/video/kingobox.c
+++ b/src/mame/video/kingobox.c
@@ -1,15 +1,7 @@
#include "driver.h"
#include "video/resnet.h"
+#include "includes/kingobox.h"
-UINT8 *kingofb_videoram2;
-UINT8 *kingofb_colorram2;
-UINT8 *kingofb_scroll_y;
-
-extern int kingofb_nmi_enable;
-
-static int palette_bank;
-
-static tilemap *bg_tilemap, *fg_tilemap;
/***************************************************************************
@@ -31,22 +23,21 @@ static tilemap *bg_tilemap, *fg_tilemap;
***************************************************************************/
-static void palette_init_common(running_machine *machine, const UINT8 *color_prom,
- void (*get_rgb_data)(const UINT8 *, int, int *, int *, int *))
+static void palette_init_common( running_machine *machine, const UINT8 *color_prom, void (*get_rgb_data)(const UINT8 *, int, int *, int *, int *) )
{
- static const int resistances[4] = { 1500, 750, 360, 180 };
+ static const int resistances[4] = { 1500, 750, 360, 180 };
static const int resistances_fg[1] = { 51 };
double rweights[4], gweights[4], bweights[4];
double rweights_fg[1], gweights_fg[1], bweights_fg[1];
int i;
/* compute the color output resistor weights */
- double scale = compute_resistor_weights(0, 255, -1.0,
+ double scale = compute_resistor_weights(0, 255, -1.0,
1, resistances_fg, rweights_fg, 0, 0,
1, resistances_fg, gweights_fg, 0, 0,
1, resistances_fg, bweights_fg, 0, 0);
- compute_resistor_weights(0, 255, scale,
+ compute_resistor_weights(0, 255, scale,
4, resistances, rweights, 470, 0,
4, resistances, gweights, 470, 0,
4, resistances, bweights, 470, 0);
@@ -114,7 +105,7 @@ static void palette_init_common(running_machine *machine, const UINT8 *color_pro
}
-static void kingofb_get_rgb_data(const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data)
+static void kingofb_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data )
{
*r_data = color_prom[i + 0x000] & 0x0f;
*g_data = color_prom[i + 0x100] & 0x0f;
@@ -122,7 +113,7 @@ static void kingofb_get_rgb_data(const UINT8 *color_prom, int i, int *r_data, in
}
-static void ringking_get_rgb_data(const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data)
+static void ringking_get_rgb_data( const UINT8 *color_prom, int i, int *r_data, int *g_data, int *b_data )
{
*r_data = (color_prom[i + 0x000] >> 4) & 0x0f;
*g_data = (color_prom[i + 0x000] >> 0) & 0x0f;
@@ -142,36 +133,41 @@ PALETTE_INIT( ringking )
WRITE8_HANDLER( kingofb_videoram_w )
{
- space->machine->generic.videoram.u8[offset] = data;
- tilemap_mark_tile_dirty(bg_tilemap, offset);
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ state->videoram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( kingofb_colorram_w )
{
- space->machine->generic.colorram.u8[offset] = data;
- tilemap_mark_tile_dirty(bg_tilemap, offset);
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ state->colorram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( kingofb_videoram2_w )
{
- kingofb_videoram2[offset] = data;
- tilemap_mark_tile_dirty(fg_tilemap, offset);
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ state->videoram2[offset] = data;
+ tilemap_mark_tile_dirty(state->fg_tilemap, offset);
}
WRITE8_HANDLER( kingofb_colorram2_w )
{
- kingofb_colorram2[offset] = data;
- tilemap_mark_tile_dirty(fg_tilemap, offset);
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ state->colorram2[offset] = data;
+ tilemap_mark_tile_dirty(state->fg_tilemap, offset);
}
WRITE8_HANDLER( kingofb_f800_w )
{
- kingofb_nmi_enable = data & 0x20;
+ kingofb_state *state = (kingofb_state *)space->machine->driver_data;
+ state->nmi_enable = data & 0x20;
- if (palette_bank != ((data & 0x18) >> 3))
+ if (state->palette_bank != ((data & 0x18) >> 3))
{
- palette_bank = (data & 0x18) >> 3;
- tilemap_mark_all_tiles_dirty(bg_tilemap);
+ state->palette_bank = (data & 0x18) >> 3;
+ tilemap_mark_all_tiles_dirty(state->bg_tilemap);
}
if (flip_screen_get(space->machine) != (data & 0x80))
@@ -183,19 +179,21 @@ WRITE8_HANDLER( kingofb_f800_w )
static TILE_GET_INFO( get_bg_tile_info )
{
- int attr = machine->generic.colorram.u8[tile_index];
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ int attr = state->colorram[tile_index];
int bank = ((attr & 0x04) >> 2) + 2;
- int code = (tile_index / 16) ? machine->generic.videoram.u8[tile_index] + ((attr & 0x03) << 8) : 0;
- int color = ((attr & 0x70) >> 4) + 8 * palette_bank;
+ int code = (tile_index / 16) ? state->videoram[tile_index] + ((attr & 0x03) << 8) : 0;
+ int color = ((attr & 0x70) >> 4) + 8 * state->palette_bank;
SET_TILE_INFO(bank, code, color, 0);
}
static TILE_GET_INFO( get_fg_tile_info )
{
- int attr = kingofb_colorram2[tile_index];
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ int attr = state->colorram2[tile_index];
int bank = (attr & 0x02) >> 1;
- int code = kingofb_videoram2[tile_index] + ((attr & 0x01) << 8);
+ int code = state->videoram2[tile_index] + ((attr & 0x01) << 8);
int color = (attr & 0x38) >> 3;
SET_TILE_INFO(bank, code, color, 0);
@@ -203,31 +201,34 @@ static TILE_GET_INFO( get_fg_tile_info )
VIDEO_START( kingofb )
{
- bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_cols_flip_y, 16, 16, 16, 16);
- fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_cols_flip_y, 8, 8, 32, 32);
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_cols_flip_y, 16, 16, 16, 16);
+ state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_cols_flip_y, 8, 8, 32, 32);
- tilemap_set_transparent_pen(fg_tilemap, 0);
+ tilemap_set_transparent_pen(state->fg_tilemap, 0);
}
static void kingofb_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
- UINT8 *spriteram = machine->generic.spriteram.u8;
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ UINT8 *spriteram = state->spriteram;
int offs;
- for (offs = 0; offs < machine->generic.spriteram_size; offs += 4)
+ for (offs = 0; offs < state->spriteram_size; offs += 4)
{
- int roffs,bank,code,color,flipx,flipy,sx,sy;
+ int roffs, bank, code, color, flipx, flipy, sx, sy;
/* the offset into spriteram seems scrambled */
roffs = BITSWAP16(offs,15,14,13,12,11,10,4,7,6,5,9,8,3,2,1,0) ^ 0x3c;
- if (roffs & 0x200) roffs ^= 0x1c0;
+ if (roffs & 0x200)
+ roffs ^= 0x1c0;
bank = (spriteram[roffs + 3] & 0x04) >> 2;
code = spriteram[roffs + 2] + ((spriteram[roffs + 3] & 0x03) << 8);
- color = ((spriteram[roffs + 3] & 0x70) >> 4) + 8 * palette_bank;
+ color = ((spriteram[roffs + 3] & 0x70) >> 4) + 8 * state->palette_bank;
flipx = 0;
flipy = spriteram[roffs + 3] & 0x80;
- sx = spriteram[roffs+1];
+ sx = spriteram[roffs + 1];
sy = spriteram[roffs];
if (flip_screen_get(machine))
@@ -247,10 +248,12 @@ static void kingofb_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
VIDEO_UPDATE( kingofb )
{
- tilemap_set_scrolly(bg_tilemap, 0, -(*kingofb_scroll_y));
- tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
+ kingofb_state *state = (kingofb_state *)screen->machine->driver_data;
+
+ tilemap_set_scrolly(state->bg_tilemap, 0, -(*state->scroll_y));
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
kingofb_draw_sprites(screen->machine, bitmap, cliprect);
- tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
return 0;
}
@@ -258,36 +261,36 @@ VIDEO_UPDATE( kingofb )
static TILE_GET_INFO( ringking_get_bg_tile_info )
{
- int code = (tile_index / 16) ? machine->generic.videoram.u8[tile_index] : 0;
- int color = ((machine->generic.colorram.u8[tile_index] & 0x70) >> 4) + 8 * palette_bank;
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ int code = (tile_index / 16) ? state->videoram[tile_index] : 0;
+ int color = ((state->colorram[tile_index] & 0x70) >> 4) + 8 * state->palette_bank;
SET_TILE_INFO(4, code, color, 0);
}
VIDEO_START( ringking )
{
- bg_tilemap = tilemap_create(machine, ringking_get_bg_tile_info, tilemap_scan_cols_flip_y,
- 16, 16, 16, 16);
-
- fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_cols_flip_y,
- 8, 8, 32, 32);
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ state->bg_tilemap = tilemap_create(machine, ringking_get_bg_tile_info, tilemap_scan_cols_flip_y, 16, 16, 16, 16);
+ state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_cols_flip_y, 8, 8, 32, 32);
- tilemap_set_transparent_pen(fg_tilemap, 0);
+ tilemap_set_transparent_pen(state->fg_tilemap, 0);
}
-static void ringking_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
+static void ringking_draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
- UINT8 *spriteram = machine->generic.spriteram.u8;
+ kingofb_state *state = (kingofb_state *)machine->driver_data;
+ UINT8 *spriteram = state->spriteram;
int offs;
- for (offs = 0; offs < machine->generic.spriteram_size; offs += 4)
+ for (offs = 0; offs < state->spriteram_size; offs += 4)
{
int bank = (spriteram[offs + 1] & 0x04) >> 2;
int code = spriteram[offs + 3] + ((spriteram[offs + 1] & 0x03) << 8);
- int color = ((spriteram[offs + 1] & 0x70) >> 4) + 8 * palette_bank;
+ int color = ((spriteram[offs + 1] & 0x70) >> 4) + 8 * state->palette_bank;
int flipx = 0;
- int flipy = ( spriteram[offs + 1] & 0x80 ) ? 0 : 1;
- int sx = spriteram[offs+2];
+ int flipy = (spriteram[offs + 1] & 0x80) ? 0 : 1;
+ int sx = spriteram[offs + 2];
int sy = spriteram[offs];
if (flip_screen_get(machine))
@@ -307,9 +310,11 @@ static void ringking_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
VIDEO_UPDATE( ringking )
{
- tilemap_set_scrolly(bg_tilemap, 0, -(*kingofb_scroll_y));
- tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
+ kingofb_state *state = (kingofb_state *)screen->machine->driver_data;
+
+ tilemap_set_scrolly(state->bg_tilemap, 0, -(*state->scroll_y));
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
ringking_draw_sprites(screen->machine, bitmap, cliprect);
- tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
return 0;
}
diff --git a/src/mame/video/kncljoe.c b/src/mame/video/kncljoe.c
index 8f036dfa06d..36306ee50b3 100644
--- a/src/mame/video/kncljoe.c
+++ b/src/mame/video/kncljoe.c
@@ -5,12 +5,8 @@ Knuckle Joe - (c) 1985 Taito Corporation
***************************************************************************/
#include "driver.h"
+#include "includes/kncljoe.h"
-static tilemap *bg_tilemap;
-static int tile_bank,sprite_bank;
-static int flipscreen;
-
-UINT8 *kncljoe_scrollregs;
/***************************************************************************
@@ -86,8 +82,9 @@ PALETTE_INIT( kncljoe )
static TILE_GET_INFO( get_bg_tile_info )
{
- int attr = machine->generic.videoram.u8[2*tile_index+1];
- int code = machine->generic.videoram.u8[2*tile_index] + ((attr & 0xc0) << 2) + (tile_bank << 10);
+ kncljoe_state *state = (kncljoe_state *)machine->driver_data;
+ int attr = state->videoram[2 * tile_index + 1];
+ int code = state->videoram[2 * tile_index] + ((attr & 0xc0) << 2) + (state->tile_bank << 10);
SET_TILE_INFO(
0,
@@ -106,11 +103,10 @@ static TILE_GET_INFO( get_bg_tile_info )
VIDEO_START( kncljoe )
{
- bg_tilemap = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,64,32);
-
- tilemap_set_scroll_rows(bg_tilemap,4);
+ kncljoe_state *state = (kncljoe_state *)machine->driver_data;
+ state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
- tile_bank = sprite_bank = flipscreen = 0;
+ tilemap_set_scroll_rows(state->bg_tilemap, 4);
}
@@ -123,12 +119,14 @@ VIDEO_START( kncljoe )
WRITE8_HANDLER( kncljoe_videoram_w )
{
- space->machine->generic.videoram.u8[offset] = data;
- tilemap_mark_tile_dirty(bg_tilemap,offset/2);
+ kncljoe_state *state = (kncljoe_state *)space->machine->driver_data;
+ state->videoram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
}
WRITE8_HANDLER( kncljoe_control_w )
{
+ kncljoe_state *state = (kncljoe_state *)space->machine->driver_data;
int i;
/*
0x01 screen flip
@@ -140,37 +138,38 @@ WRITE8_HANDLER( kncljoe_control_w )
reset when IN0 - Coin 1 goes low (active)
set after IN0 - Coin 1 goes high AND the credit has been added
*/
- flipscreen = data & 0x01;
- tilemap_set_flip_all(space->machine,flipscreen ? TILEMAP_FLIPX : TILEMAP_FLIPY);
+ state->flipscreen = data & 0x01;
+ tilemap_set_flip_all(space->machine, state->flipscreen ? TILEMAP_FLIPX : TILEMAP_FLIPY);
- coin_counter_w(space->machine, 0,data & 0x02);
- coin_counter_w(space->machine, 1,data & 0x20);
+ coin_counter_w(space->machine, 0, data & 0x02);
+ coin_counter_w(space->machine, 1, data & 0x20);
i = (data & 0x10) >> 4;
- if (tile_bank != i)
+ if (state->tile_bank != i)
{
- tile_bank = i;
- tilemap_mark_all_tiles_dirty(bg_tilemap);
+ state->tile_bank = i;
+ tilemap_mark_all_tiles_dirty(state->bg_tilemap);
}
i = (data & 0x04) >> 2;
- if (sprite_bank != i)
+ if (state->sprite_bank != i)
{
- sprite_bank = i;
- memset(memory_region(space->machine, "maincpu")+0xf100, 0, 0x180);
+ state->sprite_bank = i;
+ memset(memory_region(space->machine, "maincpu") + 0xf100, 0, 0x180);
}
}
WRITE8_HANDLER( kncljoe_scroll_w )
{
+ kncljoe_state *state = (kncljoe_state *)space->machine->driver_data;
int scrollx;
- kncljoe_scrollregs[offset] = data;
- scrollx = kncljoe_scrollregs[0] | kncljoe_scrollregs[1]<<8;
- tilemap_set_scrollx(bg_tilemap,0,scrollx);
- tilemap_set_scrollx(bg_tilemap,1,scrollx);
- tilemap_set_scrollx(bg_tilemap,2,scrollx);
- tilemap_set_scrollx(bg_tilemap,3,0);
+ state->scrollregs[offset] = data;
+ scrollx = state->scrollregs[0] | state->scrollregs[1] << 8;
+ tilemap_set_scrollx(state->bg_tilemap, 0, scrollx);
+ tilemap_set_scrollx(state->bg_tilemap, 1, scrollx);
+ tilemap_set_scrollx(state->bg_tilemap, 2, scrollx);
+ tilemap_set_scrollx(state->bg_tilemap, 3, 0);
}
@@ -181,17 +180,18 @@ WRITE8_HANDLER( kncljoe_scroll_w )
***************************************************************************/
-static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
+static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
- UINT8 *spriteram = machine->generic.spriteram.u8;
+ kncljoe_state *state = (kncljoe_state *)machine->driver_data;
+ UINT8 *spriteram = state->spriteram;
rectangle clip = *cliprect;
- const gfx_element *gfx = machine->gfx[1 + sprite_bank];
+ const gfx_element *gfx = machine->gfx[1 + state->sprite_bank];
int i, j;
static const int pribase[4]={0x0180, 0x0080, 0x0100, 0x0000};
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
/* score covers sprites */
- if (flipscreen)
+ if (state->flipscreen)
{
if (clip.max_y > visarea->max_y - 64)
clip.max_y = visarea->max_y - 64;
@@ -202,42 +202,47 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
clip.min_y = visarea->min_y + 64;
}
- for (i=0; i<4; i++)
- for (j=0x7c; j>=0; j-=4)
- {
- int offs = pribase[i] + j;
- int sy = spriteram[offs];
- int sx = spriteram[offs+3];
- int code = spriteram[offs+2];
- int attr = spriteram[offs+1];
- int flipx = attr & 0x40;
- int flipy = !(attr & 0x80);
- int color = attr & 0x0f;
-
- if (attr & 0x10) code += 512;
- if (attr & 0x20) code += 256;
-
- if (flipscreen)
+ for (i = 0; i < 4; i++)
+ for (j = 0x7c; j >= 0; j -= 4)
{
- flipx = !flipx;
- flipy = !flipy;
- sx = 240 - sx;
- sy = 240 - sy;
- }
-
- if (sx >= 256-8) sx -= 256;
-
- drawgfx_transpen(bitmap,&clip,gfx,
+ int offs = pribase[i] + j;
+ int sy = spriteram[offs];
+ int sx = spriteram[offs + 3];
+ int code = spriteram[offs + 2];
+ int attr = spriteram[offs + 1];
+ int flipx = attr & 0x40;
+ int flipy = !(attr & 0x80);
+ int color = attr & 0x0f;
+
+ if (attr & 0x10)
+ code += 512;
+ if (attr & 0x20)
+ code += 256;
+
+ if (state->flipscreen)
+ {
+ flipx = !flipx;
+ flipy = !flipy;
+ sx = 240 - sx;
+ sy = 240 - sy;
+ }
+
+ if (sx >= 256-8)
+ sx -= 256;
+
+ drawgfx_transpen(bitmap,&clip,gfx,
code,
color,
flipx,flipy,
sx,sy,0);
- }
+ }
}
VIDEO_UPDATE( kncljoe )
{
- tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
- draw_sprites(screen->machine,bitmap,cliprect);
+ kncljoe_state *state = (kncljoe_state *)screen->machine->driver_data;
+
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
+ draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}
diff --git a/src/mame/video/kopunch.c b/src/mame/video/kopunch.c
index bb5640c7189..f945c4ec898 100644
--- a/src/mame/video/kopunch.c
+++ b/src/mame/video/kopunch.c
@@ -1,19 +1,15 @@
#include "driver.h"
+#include "includes/kopunch.h"
-UINT8 *kopunch_videoram2;
-
-static int gfxbank;
-
-static tilemap *bg_tilemap, *fg_tilemap;
PALETTE_INIT( kopunch )
{
int i;
- color_prom+=24; /* first 24 colors are black */
- for (i = 0;i < machine->config->total_colors;i++)
+ color_prom += 24; /* first 24 colors are black */
+ for (i = 0; i < machine->config->total_colors; i++)
{
- int bit0,bit1,bit2,r,g,b;
+ int bit0, bit1, bit2, r, g, b;
/* red component */
bit0 = (*color_prom >> 0) & 0x01;
@@ -31,72 +27,82 @@ PALETTE_INIT( kopunch )
bit2 = (*color_prom >> 7) & 0x01;
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
- palette_set_color(machine,i,MAKE_RGB(r,g,b));
+ palette_set_color(machine, i, MAKE_RGB(r, g, b));
color_prom++;
}
}
WRITE8_HANDLER( kopunch_videoram_w )
{
- space->machine->generic.videoram.u8[offset] = data;
- tilemap_mark_tile_dirty(fg_tilemap, offset);
+ kopunch_state *state = (kopunch_state *)space->machine->driver_data;
+ state->videoram[offset] = data;
+ tilemap_mark_tile_dirty(state->fg_tilemap, offset);
}
WRITE8_HANDLER( kopunch_videoram2_w )
{
- kopunch_videoram2[offset] = data;
- tilemap_mark_tile_dirty(bg_tilemap, offset);
+ kopunch_state *state = (kopunch_state *)space->machine->driver_data;
+ state->videoram2[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( kopunch_scroll_x_w )
{
- tilemap_set_scrollx(bg_tilemap, 0, data);
+ kopunch_state *state = (kopunch_state *)space->machine->driver_data;
+ tilemap_set_scrollx(state->bg_tilemap, 0, data);
}
WRITE8_HANDLER( kopunch_scroll_y_w )
{
- tilemap_set_scrolly(bg_tilemap, 0, data);
+ kopunch_state *state = (kopunch_state *)space->machine->driver_data;
+ tilemap_set_scrolly(state->bg_tilemap, 0, data);
}
WRITE8_HANDLER( kopunch_gfxbank_w )
{
- if (gfxbank != (data & 0x07))
+ kopunch_state *state = (kopunch_state *)space->machine->driver_data;
+ if (state->gfxbank != (data & 0x07))
{
- gfxbank = data & 0x07;
- tilemap_mark_all_tiles_dirty(bg_tilemap);
+ state->gfxbank = data & 0x07;
+ tilemap_mark_all_tiles_dirty(state->bg_tilemap);
}
- tilemap_set_flip(bg_tilemap, (data & 0x08) ? TILEMAP_FLIPY : 0);
+ tilemap_set_flip(state->bg_tilemap, (data & 0x08) ? TILEMAP_FLIPY : 0);
}
static TILE_GET_INFO( get_fg_tile_info )
{
- int code = machine->generic.videoram.u8[tile_index];
+ kopunch_state *state = (kopunch_state *)machine->driver_data;
+ int code = state->videoram[tile_index];
SET_TILE_INFO(0, code, 0, 0);
}
static TILE_GET_INFO( get_bg_tile_info )
{
- int code = (kopunch_videoram2[tile_index] & 0x7f) + 128 * gfxbank;
+ kopunch_state *state = (kopunch_state *)machine->driver_data;
+ int code = (state->videoram2[tile_index] & 0x7f) + 128 * state->gfxbank;
SET_TILE_INFO(1, code, 0, 0);
}
VIDEO_START( kopunch )
{
- fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
- bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 16, 16, 16, 16);
+ kopunch_state *state = (kopunch_state *)machine->driver_data;
+ state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
+ state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 16, 16, 16, 16);
- tilemap_set_transparent_pen(fg_tilemap, 0);
+ tilemap_set_transparent_pen(state->fg_tilemap, 0);
- tilemap_set_scrolldx(bg_tilemap, 16, 16);
+ tilemap_set_scrolldx(state->bg_tilemap, 16, 16);
}
VIDEO_UPDATE( kopunch )
{
- tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
- tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
+ kopunch_state *state = (kopunch_state *)screen->machine->driver_data;
+
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
return 0;
}
diff --git a/src/mame/video/ksayakyu.c b/src/mame/video/ksayakyu.c
index ca8cf76a2e2..7ee4b2be10e 100644
--- a/src/mame/video/ksayakyu.c
+++ b/src/mame/video/ksayakyu.c
@@ -1,15 +1,12 @@
#include "driver.h"
+#include "includes/ksayakyu.h"
-static tilemap *ksayakyu_tilemap;
-static tilemap *ksayakyu_textmap;
-
-static int video_ctrl;
-static int flipscreen;
WRITE8_HANDLER(ksayakyu_videoram_w)
{
- space->machine->generic.videoram.u8[offset]=data;
- tilemap_mark_tile_dirty(ksayakyu_textmap,offset>>1);
+ ksayakyu_state *state = (ksayakyu_state *)space->machine->driver_data;
+ state->videoram[offset]=data;
+ tilemap_mark_tile_dirty(state->textmap, offset >> 1);
}
WRITE8_HANDLER(ksayakyu_videoctrl_w)
@@ -23,38 +20,39 @@ WRITE8_HANDLER(ksayakyu_videoctrl_w)
xxx - scroll offset
*/
- video_ctrl=data;
-
- flipscreen = data & 4;
- flip_screen_set( space->machine,flipscreen );
- tilemap_set_scrolly( ksayakyu_tilemap, 0, (data&0xe0)<<3 );
- if(flipscreen)
- tilemap_set_flip( ksayakyu_tilemap, (data & 2) ? TILEMAP_FLIPY : TILEMAP_FLIPX | TILEMAP_FLIPY);
+ ksayakyu_state *state = (ksayakyu_state *)space->machine->driver_data;
+ state->video_ctrl = data;
+
+ state->flipscreen = data & 4;
+ flip_screen_set(space->machine, state->flipscreen);
+ tilemap_set_scrolly(state->tilemap, 0, (data & 0xe0) << 3);
+ if(state->flipscreen)
+ tilemap_set_flip(state->tilemap, (data & 2) ? TILEMAP_FLIPY : TILEMAP_FLIPX | TILEMAP_FLIPY);
else
- tilemap_set_flip( ksayakyu_tilemap, (data & 2) ? TILEMAP_FLIPX : 0);
+ tilemap_set_flip(state->tilemap, (data & 2) ? TILEMAP_FLIPX : 0);
}
PALETTE_INIT( ksayakyu )
{
const UINT8 *prom = memory_region(machine, "proms");
- int r,g,b,i;
+ int r, g, b, i;
- for (i=0;i<0x100;i++)
+ for (i = 0; i < 0x100; i++)
{
r = (prom[i] & 0x07) >> 0;
g = (prom[i] & 0x38) >> 3;
b = (prom[i] & 0xc0) >> 6;
- palette_set_color_rgb(machine,i,pal3bit(r),pal3bit(g),pal2bit(b));
+ palette_set_color_rgb(machine, i, pal3bit(r), pal3bit(g), pal2bit(b));
}
}
static TILE_GET_INFO( get_ksayakyu_tile_info )
{
int code = memory_region(machine, "user1")[tile_index];
- int attr = memory_region(machine, "user1")[tile_index+0x2000];
- code+=(attr&3)<<8;
- SET_TILE_INFO(1,code,((attr>>2)&0x0f)*2,(attr&0x80) ? TILE_FLIPX : 0);
+ int attr = memory_region(machine, "user1")[tile_index + 0x2000];
+ code += (attr & 3) << 8;
+ SET_TILE_INFO(1, code, ((attr >> 2) & 0x0f) * 2, (attr & 0x80) ? TILE_FLIPX : 0);
}
/*
@@ -64,14 +62,15 @@ xy-- ---- flip bits
*/
static TILE_GET_INFO( get_text_tile_info )
{
- int code = machine->generic.videoram.u8[tile_index*2+1];
- int attr = machine->generic.videoram.u8[tile_index*2];
- int flags = ((attr&0x80) ? TILE_FLIPX : 0) | ((attr&0x40) ? TILE_FLIPY : 0);
+ ksayakyu_state *state = (ksayakyu_state *)machine->driver_data;
+ int code = state->videoram[tile_index * 2 + 1];
+ int attr = state->videoram[tile_index * 2];
+ int flags = ((attr & 0x80) ? TILE_FLIPX : 0) | ((attr & 0x40) ? TILE_FLIPY : 0);
int color = (attr & 0x3c) >> 2;
- code|=(attr&3)<<8;
+ code |= (attr & 3) << 8;
- SET_TILE_INFO(0,code,color,flags);
+ SET_TILE_INFO(0, code, color, flags);
}
/*
@@ -82,32 +81,33 @@ static TILE_GET_INFO( get_text_tile_info )
[3]
*/
-static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
+static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
- const UINT8 *source = machine->generic.spriteram.u8+machine->generic.spriteram_size-4;
- const UINT8 *finish = machine->generic.spriteram.u8;
+ ksayakyu_state *state = (ksayakyu_state *)machine->driver_data;
+ const UINT8 *source = state->spriteram + state->spriteram_size - 4;
+ const UINT8 *finish = state->spriteram;
- while( source>=finish ) /* is order correct ? */
+ while (source>=finish) /* is order correct ? */
{
- int sx=source[2];
- int sy=240-source[1];
- int attributes=source[3];
- int tile=source[0];
- int flipx=(tile&0x80)?1:0;
- int flipy=0;
+ int sx = source[2];
+ int sy = 240 - source[1];
+ int attributes = source[3];
+ int tile = source[0];
+ int flipx = (tile & 0x80) ? 1 : 0;
+ int flipy = 0;
gfx_element *gfx = machine->gfx[2];
- if (flipscreen)
+ if (state->flipscreen)
{
- sx = 240-sx;
- sy = 240-sy;
- flipx^=1;
- flipy^=1;
+ sx = 240 - sx;
+ sy = 240 - sy;
+ flipx ^= 1;
+ flipy ^= 1;
}
drawgfx_transpen(bitmap,cliprect,gfx,
- tile&0x7f,
+ tile & 0x7f,
(attributes & 0x78) >> 3,
flipx,flipy,
sx,sy,0 );
@@ -118,17 +118,22 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
VIDEO_START(ksayakyu)
{
- ksayakyu_tilemap = tilemap_create(machine, get_ksayakyu_tile_info,tilemap_scan_rows, 8, 8,32,32*8);
- ksayakyu_textmap = tilemap_create(machine, get_text_tile_info,tilemap_scan_rows, 8, 8,32,32);
- tilemap_set_transparent_pen(ksayakyu_textmap,0);
+ ksayakyu_state *state = (ksayakyu_state *)machine->driver_data;
+ state->tilemap = tilemap_create(machine, get_ksayakyu_tile_info, tilemap_scan_rows, 8, 8, 32, 32 * 8);
+ state->textmap = tilemap_create(machine, get_text_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
+ tilemap_set_transparent_pen(state->textmap, 0);
}
VIDEO_UPDATE(ksayakyu)
{
- bitmap_fill(bitmap,cliprect,0);
- if(video_ctrl&1)
- tilemap_draw(bitmap,cliprect,ksayakyu_tilemap,0,0);
- tilemap_draw(bitmap,cliprect,ksayakyu_textmap, 0,0);
- draw_sprites(screen->machine,bitmap,cliprect);
+ ksayakyu_state *state = (ksayakyu_state *)screen->machine->driver_data;
+
+ bitmap_fill(bitmap, cliprect, 0);
+
+ if (state->video_ctrl & 1)
+ tilemap_draw(bitmap, cliprect,state->tilemap, 0, 0);
+
+ tilemap_draw(bitmap, cliprect, state->textmap, 0, 0);
+ draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}
diff --git a/src/mame/video/kyugo.c b/src/mame/video/kyugo.c
index fb8a48a8316..78413a09354 100644
--- a/src/mame/video/kyugo.c
+++ b/src/mame/video/kyugo.c
@@ -5,24 +5,7 @@
***************************************************************************/
#include "driver.h"
-#include "kyugo.h"
-
-
-UINT8 *kyugo_fgvideoram;
-UINT8 *kyugo_bgvideoram;
-UINT8 *kyugo_bgattribram;
-UINT8 *kyugo_spriteram_1;
-UINT8 *kyugo_spriteram_2;
-
-
-static UINT8 scroll_x_lo;
-static UINT8 scroll_x_hi;
-static UINT8 scroll_y;
-static tilemap *fg_tilemap;
-static tilemap *bg_tilemap;
-static int bgpalbank,fgcolor;
-static int flipscreen;
-static const UINT8 *color_codes;
+#include "includes/kyugo.h"
/***************************************************************************
@@ -33,21 +16,23 @@ static const UINT8 *color_codes;
static TILE_GET_INFO( get_fg_tile_info )
{
- int code = kyugo_fgvideoram[tile_index];
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+ int code = state->fgvideoram[tile_index];
SET_TILE_INFO(0,
code,
- 2*color_codes[code >> 3] + fgcolor,
+ 2 * state->color_codes[code >> 3] + state->fgcolor,
0);
}
static TILE_GET_INFO( get_bg_tile_info )
{
- int code = kyugo_bgvideoram[tile_index];
- int attr = kyugo_bgattribram[tile_index];
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+ int code = state->bgvideoram[tile_index];
+ int attr = state->bgattribram[tile_index];
SET_TILE_INFO(1,
code | ((attr & 0x03) << 8),
- (attr >> 4) | (bgpalbank << 4),
+ (attr >> 4) | (state->bgpalbank << 4),
TILE_FLIPYX((attr & 0x0c) >> 2));
}
@@ -60,16 +45,17 @@ static TILE_GET_INFO( get_bg_tile_info )
VIDEO_START( kyugo )
{
- color_codes = memory_region(machine, "proms") + 0x300;
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+ state->color_codes = memory_region(machine, "proms") + 0x300;
- fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8,8, 64,32);
- bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8,8, 64,32);
+ state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
+ state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
- tilemap_set_transparent_pen(fg_tilemap,0);
+ tilemap_set_transparent_pen(state->fg_tilemap, 0);
- tilemap_set_scrolldx(fg_tilemap, 0, 224);
- tilemap_set_scrolldx(bg_tilemap, -32, 32);
+ tilemap_set_scrolldx(state->fg_tilemap, 0, 224);
+ tilemap_set_scrolldx(state->bg_tilemap, -32, 32);
}
@@ -81,57 +67,67 @@ VIDEO_START( kyugo )
WRITE8_HANDLER( kyugo_fgvideoram_w )
{
- kyugo_fgvideoram[offset] = data;
- tilemap_mark_tile_dirty( fg_tilemap, offset );
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+
+ state->fgvideoram[offset] = data;
+ tilemap_mark_tile_dirty(state->fg_tilemap, offset);
}
WRITE8_HANDLER( kyugo_bgvideoram_w )
{
- kyugo_bgvideoram[offset] = data;
- tilemap_mark_tile_dirty( bg_tilemap, offset );
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+
+ state->bgvideoram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( kyugo_bgattribram_w )
{
- kyugo_bgattribram[offset] = data;
- tilemap_mark_tile_dirty( bg_tilemap, offset );
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+
+ state->bgattribram[offset] = data;
+ tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
READ8_HANDLER( kyugo_spriteram_2_r )
{
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+
// only the lower nibble is connected
- return kyugo_spriteram_2[offset] | 0xf0;
+ return state->spriteram_2[offset] | 0xf0;
}
WRITE8_HANDLER( kyugo_scroll_x_lo_w )
{
- scroll_x_lo = data;
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+ state->scroll_x_lo = data;
}
WRITE8_HANDLER( kyugo_gfxctrl_w )
{
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+
/* bit 0 is scroll MSB */
- scroll_x_hi = data & 0x01;
+ state->scroll_x_hi = data & 0x01;
/* bit 5 is front layer color (Son of Phoenix only) */
- if (fgcolor != ((data & 0x20) >> 5))
+ if (state->fgcolor != ((data & 0x20) >> 5))
{
- fgcolor = (data & 0x20) >> 5;
+ state->fgcolor = (data & 0x20) >> 5;
- tilemap_mark_all_tiles_dirty(fg_tilemap);
+ tilemap_mark_all_tiles_dirty(state->fg_tilemap);
}
/* bit 6 is background palette bank */
- if (bgpalbank != ((data & 0x40) >> 6))
+ if (state->bgpalbank != ((data & 0x40) >> 6))
{
- bgpalbank = (data & 0x40) >> 6;
-
- tilemap_mark_all_tiles_dirty(bg_tilemap);
+ state->bgpalbank = (data & 0x40) >> 6;
+ tilemap_mark_all_tiles_dirty(state->bg_tilemap);
}
if (data & 0x9e)
@@ -141,17 +137,19 @@ WRITE8_HANDLER( kyugo_gfxctrl_w )
WRITE8_HANDLER( kyugo_scroll_y_w )
{
- scroll_y = data;
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
+ state->scroll_y = data;
}
WRITE8_HANDLER( kyugo_flipscreen_w )
{
- if (flipscreen != (data & 0x01))
- {
- flipscreen = (data & 0x01);
+ kyugo_state *state = (kyugo_state *)space->machine->driver_data;
- tilemap_set_flip_all(space->machine, (flipscreen ? (TILEMAP_FLIPX | TILEMAP_FLIPY): 0));
+ if (state->flipscreen != (data & 0x01))
+ {
+ state->flipscreen = (data & 0x01);
+ tilemap_set_flip_all(space->machine, (state->flipscreen ? (TILEMAP_FLIPX | TILEMAP_FLIPY): 0));
}
}
@@ -162,45 +160,50 @@ WRITE8_HANDLER( kyugo_flipscreen_w )
*
*************************************/
-static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
+static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
+ kyugo_state *state = (kyugo_state *)machine->driver_data;
+
/* sprite information is scattered through memory */
/* and uses a portion of the text layer memory (outside the visible area) */
- UINT8 *spriteram_area1 = &kyugo_spriteram_1[0x28];
- UINT8 *spriteram_area2 = &kyugo_spriteram_2[0x28];
- UINT8 *spriteram_area3 = &kyugo_fgvideoram[0x28];
+ UINT8 *spriteram_area1 = &state->spriteram_1[0x28];
+ UINT8 *spriteram_area2 = &state->spriteram_2[0x28];
+ UINT8 *spriteram_area3 = &state->fgvideoram[0x28];
int n;
- for( n = 0; n < 12*2; n++ )
+ for (n = 0; n < 12 * 2; n++)
{
- int offs,y,sy,sx,color;
+ int offs, y, sy, sx, color;
- offs = 2*(n % 12) + 64*(n / 12);
+ offs = 2 * (n % 12) + 64 * (n / 12);
- sx = spriteram_area3[offs+1] + 256 * (spriteram_area2[offs+1] & 1);
- if (sx > 320) sx -= 512;
+ sx = spriteram_area3[offs + 1] + 256 * (spriteram_area2[offs + 1] & 1);
+ if (sx > 320)
+ sx -= 512;
sy = 255 - spriteram_area1[offs] + 2;
- if (sy > 0xf0) sy -= 256;
+ if (sy > 0xf0)
+ sy -= 256;
- if (flipscreen) sy = 240 - sy;
+ if (state->flipscreen)
+ sy = 240 - sy;
- color = spriteram_area1[offs+1] & 0x1f;
+ color = spriteram_area1[offs + 1] & 0x1f;
- for (y = 0;y < 16;y++)
+ for (y = 0; y < 16; y++)
{
- int code,attr,flipx,flipy;
+ int code, attr, flipx, flipy;
- code = spriteram_area3[offs + 128*y];
- attr = spriteram_area2[offs + 128*y];
+ code = spriteram_area3[offs + 128 * y];
+ attr = spriteram_area2[offs + 128 * y];
code = code | ((attr & 0x01) << 9) | ((attr & 0x02) << 7);
flipx = attr & 0x08;
flipy = attr & 0x04;
- if (flipscreen)
+ if (state->flipscreen)
{
flipx = !flipx;
flipy = !flipy;
@@ -211,7 +214,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
code,
color,
flipx,flipy,
- sx,flipscreen ? sy - 16*y : sy + 16*y, 0 );
+ sx,state->flipscreen ? sy - 16*y : sy + 16*y, 0 );
}
}
}
@@ -219,15 +222,17 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
VIDEO_UPDATE( kyugo )
{
- if (flipscreen)
- tilemap_set_scrollx(bg_tilemap,0,-(scroll_x_lo + (scroll_x_hi*256)));
+ kyugo_state *state = (kyugo_state *)screen->machine->driver_data;
+
+ if (state->flipscreen)
+ tilemap_set_scrollx(state->bg_tilemap, 0, -(state->scroll_x_lo + (state->scroll_x_hi * 256)));
else
- tilemap_set_scrollx(bg_tilemap,0, scroll_x_lo + (scroll_x_hi*256));
+ tilemap_set_scrollx(state->bg_tilemap, 0, state->scroll_x_lo + (state->scroll_x_hi * 256));
- tilemap_set_scrolly(bg_tilemap,0,scroll_y);
+ tilemap_set_scrolly(state->bg_tilemap, 0, state->scroll_y);
- tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect);
- tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
+ tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
return 0;
}