Moved the Superman c-chip implementation in the driver state. (nw)

This commit is contained in:
Ivan Vangelista 2013-09-07 09:25:38 +00:00
parent 0d0a4e5d39
commit a2eb4802b0
5 changed files with 65 additions and 63 deletions

2
.gitattributes vendored
View File

@ -4128,7 +4128,6 @@ src/mame/includes/cbasebal.h svneol=native#text/plain
src/mame/includes/cbuster.h svneol=native#text/plain src/mame/includes/cbuster.h svneol=native#text/plain
src/mame/includes/ccastles.h svneol=native#text/plain src/mame/includes/ccastles.h svneol=native#text/plain
src/mame/includes/cchasm.h svneol=native#text/plain src/mame/includes/cchasm.h svneol=native#text/plain
src/mame/includes/cchip.h svneol=native#text/plain
src/mame/includes/cclimber.h svneol=native#text/plain src/mame/includes/cclimber.h svneol=native#text/plain
src/mame/includes/cd32.h svneol=native#text/plain src/mame/includes/cd32.h svneol=native#text/plain
src/mame/includes/cdi.h svneol=native#text/plain src/mame/includes/cdi.h svneol=native#text/plain
@ -4622,6 +4621,7 @@ src/mame/includes/taito_f3.h svneol=native#text/plain
src/mame/includes/taito_h.h svneol=native#text/plain src/mame/includes/taito_h.h svneol=native#text/plain
src/mame/includes/taito_l.h svneol=native#text/plain src/mame/includes/taito_l.h svneol=native#text/plain
src/mame/includes/taito_o.h svneol=native#text/plain src/mame/includes/taito_o.h svneol=native#text/plain
src/mame/includes/taito_x.h svneol=native#text/plain
src/mame/includes/taito_z.h svneol=native#text/plain src/mame/includes/taito_z.h svneol=native#text/plain
src/mame/includes/taitoair.h svneol=native#text/plain src/mame/includes/taitoair.h svneol=native#text/plain
src/mame/includes/taitoipt.h svneol=native#text/plain src/mame/includes/taitoipt.h svneol=native#text/plain

View File

@ -317,29 +317,9 @@ Stephh's notes (based on the game M68000 code and some tests) :
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "includes/seta.h" #include "includes/taito_x.h"
#include "sound/2610intf.h" #include "sound/2610intf.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "includes/cchip.h"
#include "drivlgcy.h"
class taitox_state : public seta_state
{
public:
taitox_state(const machine_config &mconfig, device_type type, const char *tag)
: seta_state(mconfig, type, tag) { }
int m_banknum;
DECLARE_READ16_MEMBER(superman_dsw_input_r);
DECLARE_READ16_MEMBER(daisenpu_input_r);
DECLARE_WRITE16_MEMBER(daisenpu_input_w);
DECLARE_WRITE16_MEMBER(kyustrkr_input_w);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_DRIVER_INIT(kyustrkr);
DECLARE_MACHINE_START(taitox);
void reset_sound_region();
DECLARE_WRITE_LINE_MEMBER(irqhandler);
};
READ16_MEMBER(taitox_state::superman_dsw_input_r) READ16_MEMBER(taitox_state::superman_dsw_input_r)
{ {
@ -436,9 +416,9 @@ static ADDRESS_MAP_START( superman_map, AS_PROGRAM, 16, taitox_state )
AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* written each frame at $3ab0, mostly 0x10 */ AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* written each frame at $3ab0, mostly 0x10 */
AM_RANGE(0x800000, 0x800001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_device, tc0140syt_port_w, 0x00ff) AM_RANGE(0x800000, 0x800001) AM_READNOP AM_DEVWRITE8("tc0140syt", tc0140syt_device, tc0140syt_port_w, 0x00ff)
AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_device, tc0140syt_comm_r, tc0140syt_comm_w, 0x00ff) AM_RANGE(0x800002, 0x800003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_device, tc0140syt_comm_r, tc0140syt_comm_w, 0x00ff)
AM_RANGE(0x900000, 0x9007ff) AM_READWRITE_LEGACY(cchip1_ram_r, cchip1_ram_w) AM_RANGE(0x900000, 0x9007ff) AM_READWRITE(cchip1_ram_r, cchip1_ram_w)
AM_RANGE(0x900802, 0x900803) AM_READWRITE_LEGACY(cchip1_ctrl_r, cchip1_ctrl_w) AM_RANGE(0x900802, 0x900803) AM_READWRITE(cchip1_ctrl_r, cchip1_ctrl_w)
AM_RANGE(0x900c00, 0x900c01) AM_WRITE_LEGACY(cchip1_bank_w) AM_RANGE(0x900c00, 0x900c01) AM_WRITE(cchip1_bank_w)
AM_RANGE(0xb00000, 0xb00fff) AM_RAM_WRITE(paletteram_xRRRRRGGGGGBBBBB_word_w) AM_SHARE("paletteram") AM_RANGE(0xb00000, 0xb00fff) AM_RAM_WRITE(paletteram_xRRRRRGGGGGBBBBB_word_w) AM_SHARE("paletteram")
AM_RANGE(0xd00000, 0xd005ff) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spriteylow_r16, spriteylow_w16) // Sprites Y AM_RANGE(0xd00000, 0xd005ff) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spriteylow_r16, spriteylow_w16) // Sprites Y
AM_RANGE(0xd00600, 0xd00607) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spritectrl_r16, spritectrl_w16) AM_RANGE(0xd00600, 0xd00607) AM_RAM AM_DEVREADWRITE("spritegen", seta001_device, spritectrl_r16, spritectrl_w16)
@ -804,6 +784,18 @@ MACHINE_START_MEMBER(taitox_state,taitox)
machine().save().register_postload(save_prepost_delegate(FUNC(taitox_state::reset_sound_region), this)); machine().save().register_postload(save_prepost_delegate(FUNC(taitox_state::reset_sound_region), this));
} }
MACHINE_START_MEMBER(taitox_state,superman)
{
m_banknum = -1;
save_item(NAME(m_banknum));
machine().save().register_postload(save_prepost_delegate(FUNC(taitox_state::reset_sound_region), this));
m_current_bank = 0;
m_cc_port = 0;
save_item(NAME(m_current_bank));
save_item(NAME(m_cc_port));
}
static const tc0140syt_interface taitox_tc0140syt_intf = static const tc0140syt_interface taitox_tc0140syt_intf =
{ {
"maincpu", "audiocpu" "maincpu", "audiocpu"
@ -824,9 +816,8 @@ static MACHINE_CONFIG_START( superman, taitox_state )
MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - enough for the sound CPU to read all commands */ MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
MCFG_MACHINE_START_OVERRIDE(taitox_state,taitox) MCFG_MACHINE_START_OVERRIDE(taitox_state,superman)
MCFG_MACHINE_RESET(cchip1)
MCFG_DEVICE_ADD("spritegen", SETA001_SPRITE, 0) MCFG_DEVICE_ADD("spritegen", SETA001_SPRITE, 0)
/* video hardware */ /* video hardware */

View File

@ -1,8 +0,0 @@
/*----------- defined in machine/cchip.c -----------*/
MACHINE_RESET( cchip1 );
DECLARE_READ16_HANDLER( cchip1_ctrl_r );
DECLARE_READ16_HANDLER( cchip1_ram_r );
DECLARE_WRITE16_HANDLER( cchip1_ctrl_w );
DECLARE_WRITE16_HANDLER( cchip1_bank_w );
DECLARE_WRITE16_HANDLER( cchip1_ram_w );

View File

@ -0,0 +1,29 @@
#include "includes/seta.h"
class taitox_state : public seta_state
{
public:
taitox_state(const machine_config &mconfig, device_type type, const char *tag)
: seta_state(mconfig, type, tag) { }
int m_banknum;
DECLARE_READ16_MEMBER(superman_dsw_input_r);
DECLARE_READ16_MEMBER(daisenpu_input_r);
DECLARE_WRITE16_MEMBER(daisenpu_input_w);
DECLARE_WRITE16_MEMBER(kyustrkr_input_w);
DECLARE_WRITE8_MEMBER(sound_bankswitch_w);
DECLARE_DRIVER_INIT(kyustrkr);
DECLARE_MACHINE_START(taitox);
DECLARE_MACHINE_START(superman);
void reset_sound_region();
DECLARE_WRITE_LINE_MEMBER(irqhandler);
// superman c-chip
UINT16 m_current_bank;
UINT8 m_cc_port;
DECLARE_READ16_MEMBER( cchip1_ctrl_r );
DECLARE_READ16_MEMBER( cchip1_ram_r );
DECLARE_WRITE16_MEMBER( cchip1_ctrl_w );
DECLARE_WRITE16_MEMBER( cchip1_bank_w );
DECLARE_WRITE16_MEMBER( cchip1_ram_w );
};

View File

@ -3,8 +3,8 @@
cchip.c cchip.c
This file contains routines to interface with the Taito Controller Chip This file contains routines to interface with the Taito Controller Chip
(or "Command Chip") version 1. It's currently used by Superman and Mega (or "Command Chip") version 1. It's currently used by Superman.
Blast. [Further cchip emulation is in machine/rainbow.c, machine/volfied.c, [Further cchip emulation is in machine/rainbow.c, machine/volfied.c,
drivers/opwolf.c and drivers/taito_f2.c] drivers/opwolf.c and drivers/taito_f2.c]
According to Richard Bush, the C-Chip is an encrypted Z80 which communicates According to Richard Bush, the C-Chip is an encrypted Z80 which communicates
@ -30,11 +30,7 @@ This code requires that the player & coin inputs be in input ports 2-4.
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "includes/cchip.h" #include "includes/taito_x.h"
static UINT16 current_bank = 0;
static UINT8 cc_port = 0;
/* This code for sound communication is a hack, it will not be /* This code for sound communication is a hack, it will not be
identical to the code derived from the real c-chip */ identical to the code derived from the real c-chip */
@ -55,33 +51,27 @@ static const UINT8 superman_code[40] =
0x4e, 0x75 /* RTS ( Return ) */ 0x4e, 0x75 /* RTS ( Return ) */
}; };
MACHINE_RESET( cchip1 )
{
machine.save().save_item(NAME(current_bank));
machine.save().save_item(NAME(cc_port));
}
/************************************* /*************************************
* *
* Writes to C-Chip - Important Bits * Writes to C-Chip - Important Bits
* *
*************************************/ *************************************/
WRITE16_HANDLER( cchip1_ctrl_w ) WRITE16_MEMBER( taitox_state::cchip1_ctrl_w )
{ {
/* value 2 is written here */ /* value 2 is written here */
} }
WRITE16_HANDLER( cchip1_bank_w ) WRITE16_MEMBER( taitox_state::cchip1_bank_w )
{ {
current_bank = data & 7; m_current_bank = data & 7;
} }
WRITE16_HANDLER( cchip1_ram_w ) WRITE16_MEMBER( taitox_state::cchip1_ram_w )
{ {
if (current_bank == 0 && offset == 0x03) if (m_current_bank == 0 && offset == 0x03)
{ {
cc_port = data; m_cc_port = data;
coin_lockout_w(space.machine(), 1, data & 0x08); coin_lockout_w(space.machine(), 1, data & 0x08);
coin_lockout_w(space.machine(), 0, data & 0x04); coin_lockout_w(space.machine(), 0, data & 0x04);
@ -90,7 +80,7 @@ WRITE16_HANDLER( cchip1_ram_w )
} }
else else
{ {
logerror("cchip1_w pc: %06x bank %02x offset %04x: %02x\n",space.device().safe_pc(),current_bank,offset,data); logerror("cchip1_w pc: %06x bank %02x offset %04x: %02x\n",space.device().safe_pc(),m_current_bank,offset,data);
} }
} }
@ -101,7 +91,7 @@ logerror("cchip1_w pc: %06x bank %02x offset %04x: %02x\n",space.device().safe_p
* *
*************************************/ *************************************/
READ16_HANDLER( cchip1_ctrl_r ) READ16_MEMBER( taitox_state::cchip1_ctrl_r )
{ {
/* /*
Bit 2 = Error signal Bit 2 = Error signal
@ -110,23 +100,23 @@ READ16_HANDLER( cchip1_ctrl_r )
return 0x01; /* Return 0x05 for C-Chip error */ return 0x01; /* Return 0x05 for C-Chip error */
} }
READ16_HANDLER( cchip1_ram_r ) READ16_MEMBER( taitox_state::cchip1_ram_r )
{ {
/* Check for input ports */ /* Check for input ports */
if (current_bank == 0) if (m_current_bank == 0)
{ {
switch (offset) switch (offset)
{ {
case 0x00: return space.machine().root_device().ioport("IN0")->read(); /* Player 1 controls + START1 */ case 0x00: return space.machine().root_device().ioport("IN0")->read(); /* Player 1 controls + START1 */
case 0x01: return space.machine().root_device().ioport("IN1")->read(); /* Player 2 controls + START2 */ case 0x01: return space.machine().root_device().ioport("IN1")->read(); /* Player 2 controls + START2 */
case 0x02: return space.machine().root_device().ioport("IN2")->read(); /* COINn + SERVICE1 + TILT */ case 0x02: return space.machine().root_device().ioport("IN2")->read(); /* COINn + SERVICE1 + TILT */
case 0x03: return cc_port; case 0x03: return m_cc_port;
} }
} }
/* Other non-standard offsets */ /* Other non-standard offsets */
if (current_bank == 1 && offset <= 0xff) if (m_current_bank == 1 && offset <= 0xff)
{ {
if (offset < 40) /* our hack code is only 40 bytes long */ if (offset < 40) /* our hack code is only 40 bytes long */
return superman_code[offset]; return superman_code[offset];
@ -134,7 +124,7 @@ READ16_HANDLER( cchip1_ram_r )
return 0; return 0;
} }
if (current_bank == 2) if (m_current_bank == 2)
{ {
switch (offset) switch (offset)
{ {
@ -144,6 +134,6 @@ READ16_HANDLER( cchip1_ram_r )
} }
} }
logerror("cchip1_r bank: %02x offset: %04x\n",current_bank,offset); logerror("cchip1_r bank: %02x offset: %04x\n",m_current_bank,offset);
return 0; return 0;
} }