modernized taito zm

This commit is contained in:
Michaël Banaan Ananas 2014-01-24 23:12:50 +00:00
parent 8238c35733
commit b07f072cf5
3 changed files with 112 additions and 22 deletions

View File

@ -7,30 +7,69 @@
Copyright Nicola Salmoria and the MAME Team. Copyright Nicola Salmoria and the MAME Team.
Visit http://mamedev.org for licensing and usage restrictions. Visit http://mamedev.org for licensing and usage restrictions.
TODO:
- add TMS57002
- a lot more
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "cpu/mn10200/mn10200.h" #include "taito_zm.h"
#include "cpu/tms57002/tms57002.h"
#include "audio/taito_zm.h"
#include "sound/zsg2.h"
static ADDRESS_MAP_START(taitozoom_map, AS_PROGRAM, 16, driver_device ) /**************************************************************************/
AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mn10200", 0)
AM_RANGE(0x400000, 0x40ffff) AM_RAM
AM_RANGE(0x800000, 0x800fff) AM_DEVREADWRITE("zsg2", zsg2_device, zsg2_r, zsg2_w)
AM_RANGE(0xe00000, 0xe000ff) AM_RAM // main CPU comms (1fbe0xxx on FX-1B main CPU, banked with eeprom - raystorm writes command at PC=80015240)
AM_RANGE(0xc00000, 0xc00001) AM_RAM // TMS57002 comms
ADDRESS_MAP_END
static UINT8 tms_ctrl; const device_type TAITO_ZOOM = &device_creator<taito_zoom_device>;
static READ8_HANDLER(tms_ctrl_r) taito_zoom_device::taito_zoom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, TAITO_ZOOM, "Taito Zoom Sound System", tag, owner, clock, "taito_zoom", __FILE__),
m_tms_ctrl(0)
{ {
return tms_ctrl; memset(m_snd_shared_ram, 0, 0x100);
} }
static WRITE8_HANDLER(tms_ctrl_w) //-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void taito_zoom_device::device_start()
{
// register for savestates
save_item(NAME(m_tms_ctrl));
save_item(NAME(m_snd_shared_ram));
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void taito_zoom_device::device_reset()
{
}
/***************************************************************************
MN10200 I/O and Memory Map
***************************************************************************/
READ8_MEMBER(taito_zoom_device::shared_ram_r)
{
return m_snd_shared_ram[offset];
}
WRITE8_MEMBER(taito_zoom_device::shared_ram_w)
{
m_snd_shared_ram[offset] = data;
}
READ8_MEMBER(taito_zoom_device::tms_ctrl_r)
{
return m_tms_ctrl;
}
WRITE8_MEMBER(taito_zoom_device::tms_ctrl_w)
{ {
#if 0 #if 0
tms57002_reset_w(data & 4); tms57002_reset_w(data & 4);
@ -38,26 +77,43 @@ static WRITE8_HANDLER(tms_ctrl_w)
tms57002_pload_w(data & 1); tms57002_pload_w(data & 1);
#endif #endif
tms_ctrl = data; m_tms_ctrl = data;
} }
static ADDRESS_MAP_START(taitozoom_io_map, AS_IO, 8, driver_device )
AM_RANGE(MN10200_PORT1, MN10200_PORT1) AM_READWRITE_LEGACY(tms_ctrl_r, tms_ctrl_w) static ADDRESS_MAP_START(taitozoom_map, AS_PROGRAM, 16, driver_device )
AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mn10200", 0)
AM_RANGE(0x400000, 0x40ffff) AM_RAM
AM_RANGE(0x800000, 0x800fff) AM_DEVREADWRITE("zsg2", zsg2_device, zsg2_r, zsg2_w)
AM_RANGE(0xe00000, 0xe000ff) AM_DEVREADWRITE8("taito_zoom", taito_zoom_device, shared_ram_r, shared_ram_w, 0xffff) // // M66220FP for comms with maincpu
AM_RANGE(0xc00000, 0xc00001) AM_RAM // TMS57002 comms
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START(taitozoom_io_map, AS_IO, 8, driver_device )
AM_RANGE(MN10200_PORT1, MN10200_PORT1) AM_DEVREADWRITE("taito_zoom", taito_zoom_device, tms_ctrl_r, tms_ctrl_w)
ADDRESS_MAP_END
/***************************************************************************
Machine Config
***************************************************************************/
static const zsg2_interface zsg2_taito_config = static const zsg2_interface zsg2_taito_config =
{ {
"zsg2" /* sample region */ "zsg2" /* sample region */
}; };
MACHINE_CONFIG_FRAGMENT( taito_zoom_sound ) MACHINE_CONFIG_FRAGMENT( taito_zoom_sound )
MCFG_CPU_ADD("mn10200", MN10200, 25000000/2) MCFG_TAITO_ZOOM_ADD("taito_zoom")
MCFG_CPU_ADD("mn10200", MN10200, XTAL_25MHz/2)
MCFG_CPU_PROGRAM_MAP(taitozoom_map) MCFG_CPU_PROGRAM_MAP(taitozoom_map)
MCFG_CPU_IO_MAP(taitozoom_io_map) MCFG_CPU_IO_MAP(taitozoom_io_map)
// MCFG_CPU_VBLANK_INT("screen", irq0_line_pulse) // MCFG_CPU_VBLANK_INT("screen", irq0_line_pulse)
// we assume the parent machine has created lspeaker/rspeaker // we assume the parent machine has created lspeaker/rspeaker
MCFG_ZSG2_ADD("zsg2", 25000000/2) MCFG_ZSG2_ADD("zsg2", XTAL_25MHz/2)
MCFG_SOUND_CONFIG(zsg2_taito_config) MCFG_SOUND_CONFIG(zsg2_taito_config)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)

View File

@ -1 +1,33 @@
#include "cpu/mn10200/mn10200.h"
#include "cpu/tms57002/tms57002.h"
#include "sound/zsg2.h"
class taito_zoom_device : public device_t
{
public:
taito_zoom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
~taito_zoom_device() {}
DECLARE_READ8_MEMBER(shared_ram_r);
DECLARE_WRITE8_MEMBER(shared_ram_w);
DECLARE_READ8_MEMBER(tms_ctrl_r);
DECLARE_WRITE8_MEMBER(tms_ctrl_w);
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
private:
// internal state
UINT8 m_tms_ctrl;
UINT8 m_snd_shared_ram[0x100];
};
extern const device_type TAITO_ZOOM;
MACHINE_CONFIG_EXTERN( taito_zoom_sound ); MACHINE_CONFIG_EXTERN( taito_zoom_sound );
#define MCFG_TAITO_ZOOM_ADD(_tag) \
MCFG_DEVICE_ADD(_tag, TAITO_ZOOM, 0)

View File

@ -342,7 +342,8 @@ public:
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_mn10200(*this, "mn10200"), m_mn10200(*this, "mn10200"),
m_flashbank(*this, "flashbank"), m_flashbank(*this, "flashbank"),
m_mb3773(*this, "mb3773") m_mb3773(*this, "mb3773"),
m_zoom(*this, "taito_zoom")
{ {
} }
@ -382,6 +383,7 @@ private:
required_device<cpu_device> m_mn10200; required_device<cpu_device> m_mn10200;
required_device<address_map_bank_device> m_flashbank; required_device<address_map_bank_device> m_flashbank;
required_device<mb3773_device> m_mb3773; required_device<mb3773_device> m_mb3773;
required_device<taito_zoom_device> m_zoom;
}; };
@ -578,7 +580,7 @@ static ADDRESS_MAP_START( taitogn_map, AS_PROGRAM, 32, taitogn_state )
AM_RANGE(0x1fb40000, 0x1fb40003) AM_READWRITE8(control_r, control_w, 0x000000ff) AM_RANGE(0x1fb40000, 0x1fb40003) AM_READWRITE8(control_r, control_w, 0x000000ff)
AM_RANGE(0x1fb60000, 0x1fb60003) AM_WRITE16(control2_w, 0x0000ffff) AM_RANGE(0x1fb60000, 0x1fb60003) AM_WRITE16(control2_w, 0x0000ffff)
AM_RANGE(0x1fb70000, 0x1fb70003) AM_READWRITE16(gn_1fb70000_r, gn_1fb70000_w, 0x0000ffff) AM_RANGE(0x1fb70000, 0x1fb70003) AM_READWRITE16(gn_1fb70000_r, gn_1fb70000_w, 0x0000ffff)
AM_RANGE(0x1fbe0000, 0x1fbe01ff) AM_RAM // 256 bytes com zone with the mn102, low bytes of words only, with additional comm at 1fb80000 AM_RANGE(0x1fbe0000, 0x1fbe01ff) AM_DEVREADWRITE8("taito_zoom", taito_zoom_device, shared_ram_r, shared_ram_w, 0x00ff00ff) // M66220FP for comms with the MN10200, with additional comms at 1fb80000
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( flashbank_map, AS_PROGRAM, 16, taitogn_state ) static ADDRESS_MAP_START( flashbank_map, AS_PROGRAM, 16, taitogn_state )