diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2017-05-21 16:16:53 -0400 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2017-05-21 16:16:53 -0400 |
commit | 5d3ecde4bc5bef39ee308fe60e1f08602e0fa583 (patch) | |
tree | dd7be0a26ac861e58e3c4bdc394611ff49ea55ed | |
parent | d5cee776d00f84a23824c75243960cc12c209f29 (diff) |
cabal: Add uPD4701A devices to trackball sets
-rw-r--r-- | src/mame/drivers/cabal.cpp | 89 | ||||
-rw-r--r-- | src/mame/includes/cabal.h | 4 |
2 files changed, 43 insertions, 50 deletions
diff --git a/src/mame/drivers/cabal.cpp b/src/mame/drivers/cabal.cpp index 9daf83d4b0c..6e15812725c 100644 --- a/src/mame/drivers/cabal.cpp +++ b/src/mame/drivers/cabal.cpp @@ -49,17 +49,13 @@ Dip locations verified with Fabtek manual for the trackball version #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "machine/gen_latch.h" +#include "machine/upd4701.h" #include "sound/ym2151.h" #include "sound/msm5205.h" #include "screen.h" #include "speaker.h" -MACHINE_START_MEMBER(cabal_state,cabal) -{ - save_item(NAME(m_last)); -} - MACHINE_START_MEMBER(cabal_state,cabalbl) { save_item(NAME(m_sound_command1)); @@ -90,28 +86,6 @@ WRITE16_MEMBER(cabal_state::cabalbl_sndcmd_w) -WRITE16_MEMBER(cabal_state::track_reset_w) -{ - int i; - static const char *const track_names[] = { "IN0", "IN1", "IN2", "IN3" }; - - for (i = 0; i < 4; i++) - m_last[i] = ioport(track_names[i])->read(); -} - -READ16_MEMBER(cabal_state::track_r) -{ - switch (offset) - { - default: - case 0: return (( ioport("IN0")->read() - m_last[0]) & 0x00ff) | (((ioport("IN2")->read() - m_last[2]) & 0x00ff) << 8); /* X lo */ - case 1: return (((ioport("IN0")->read() - m_last[0]) & 0xff00) >> 8) | (( ioport("IN2")->read() - m_last[2]) & 0xff00); /* X hi */ - case 2: return (( ioport("IN1")->read() - m_last[1]) & 0x00ff) | (((ioport("IN3")->read() - m_last[3]) & 0x00ff) << 8); /* Y lo */ - case 3: return (((ioport("IN1")->read() - m_last[1]) & 0xff00) >> 8) | (( ioport("IN3")->read() - m_last[3]) & 0xff00); /* Y hi */ - } -} - - WRITE16_MEMBER(cabal_state::sound_irq_trigger_word_w) { m_seibu_sound->main_word_w(space,4,data,mem_mask); @@ -136,9 +110,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, cabal_state ) AM_RANGE(0x80000, 0x801ff) AM_RAM_WRITE(background_videoram_w) AM_SHARE("videoram") AM_RANGE(0x80200, 0x803ff) AM_RAM AM_RANGE(0xa0000, 0xa0001) AM_READ_PORT("DSW") - AM_RANGE(0xa0008, 0xa000f) AM_READ(track_r) + AM_RANGE(0xa0008, 0xa0009) AM_READ_PORT("IN2") AM_RANGE(0xa0010, 0xa0011) AM_READ_PORT("INPUTS") - AM_RANGE(0xc0000, 0xc0001) AM_WRITE(track_reset_w) AM_RANGE(0xc0040, 0xc0041) AM_WRITENOP /* ??? */ AM_RANGE(0xc0080, 0xc0081) AM_WRITE(flipscreen_w) AM_RANGE(0xe0000, 0xe07ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") @@ -146,6 +119,18 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, cabal_state ) AM_RANGE(0xe8000, 0xe800d) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, main_word_r, main_word_w) ADDRESS_MAP_END + + +static ADDRESS_MAP_START( trackball_main_map, AS_PROGRAM, 16, cabal_state ) + AM_RANGE(0xa0008, 0xa000f) AM_DEVREAD8("upd4701l", upd4701_device, read_xy, 0x00ff) + AM_RANGE(0xa0008, 0xa000f) AM_DEVREAD8("upd4701h", upd4701_device, read_xy, 0xff00) + AM_RANGE(0xc0000, 0xc0001) AM_DEVWRITE8("upd4701l", upd4701_device, reset_xy, 0x00ff) + AM_RANGE(0xc0000, 0xc0001) AM_DEVWRITE8("upd4701h", upd4701_device, reset_xy, 0xff00) + AM_IMPORT_FROM(main_map) +ADDRESS_MAP_END + + + static ADDRESS_MAP_START( cabalbl_main_map, AS_PROGRAM, 16, cabal_state ) AM_RANGE(0x00000, 0x3ffff) AM_ROM AM_RANGE(0x40000, 0x437ff) AM_RAM @@ -370,16 +355,16 @@ static INPUT_PORTS_START( cabalt ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START1 ) PORT_START("IN0") - PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_PLAYER(1) + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_PLAYER(1) PORT_START("IN1") - PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_REVERSE PORT_PLAYER(1) + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_REVERSE PORT_RESET PORT_PLAYER(1) PORT_START("IN2") - PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_PLAYER(2) + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_PLAYER(2) PORT_START("IN3") - PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_PLAYER(2) + PORT_BIT( 0x0fff, 0x0000, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_RESET PORT_PLAYER(2) INPUT_PORTS_END @@ -416,14 +401,15 @@ static INPUT_PORTS_START( cabalj ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) PORT_START("IN3") PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -516,8 +502,6 @@ static MACHINE_CONFIG_START( cabal ) MCFG_DEVICE_ADD("sei80bu", SEI80BU, 0) MCFG_DEVICE_ROM("audiocpu") - MCFG_MACHINE_START_OVERRIDE(cabal_state,cabal) - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(59.60) /* verified on pcb */ @@ -550,6 +534,19 @@ static MACHINE_CONFIG_START( cabal ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( cabalt, cabal ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(trackball_main_map) + + MCFG_DEVICE_ADD("upd4701l", UPD4701A, 0) + MCFG_UPD4701_PORTX("IN0") + MCFG_UPD4701_PORTY("IN1") + + MCFG_DEVICE_ADD("upd4701h", UPD4701A, 0) + MCFG_UPD4701_PORTX("IN2") + MCFG_UPD4701_PORTY("IN3") +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( cabalbl2, cabal ) MCFG_DEVICE_REMOVE("sei80bu") @@ -926,6 +923,6 @@ GAME( 1989, cabala, cabal, cabal, cabalj, cabal_state, cabal, ROT0, "TAD C GAME( 1988, cabalbl, cabal, cabalbl, cabalbl, cabal_state, 0, ROT0, "bootleg (Red Corporation)", "Cabal (bootleg of Joystick version, set 1, alternate sound hardware)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1988, cabalbl2,cabal, cabalbl2,cabalj, cabal_state, cabal, ROT0, "bootleg", "Cabal (bootleg of Joystick version, set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cabalus, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 1, Trackball)", MACHINE_SUPPORTS_SAVE ) -GAME( 1988, cabalus2,cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 2, Trackball)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, cabaluk, cabal, cabal, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Electrocoin license)", "Cabal (UK, Trackball)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cabalus, cabal, cabalt, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 1, Trackball)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, cabalus2,cabal, cabalt, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Fabtek license)", "Cabal (US set 2, Trackball)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, cabaluk, cabal, cabalt, cabalt, cabal_state, cabal, ROT0, "TAD Corporation (Electrocoin license)", "Cabal (UK, Trackball)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/cabal.h b/src/mame/includes/cabal.h index 26c4accd02a..b0ade251a62 100644 --- a/src/mame/includes/cabal.h +++ b/src/mame/includes/cabal.h @@ -39,7 +39,6 @@ public: tilemap_t *m_text_layer; int m_sound_command1; int m_sound_command2; - int m_last[4]; // common DECLARE_WRITE16_MEMBER(flipscreen_w); @@ -47,8 +46,6 @@ public: DECLARE_WRITE16_MEMBER(text_videoram_w); // cabal specific - DECLARE_WRITE16_MEMBER(track_reset_w); - DECLARE_READ16_MEMBER(track_r); DECLARE_WRITE16_MEMBER(sound_irq_trigger_word_w); // cabalbl specific @@ -61,7 +58,6 @@ public: DECLARE_WRITE8_MEMBER(cabalbl_2_adpcm_w); DECLARE_DRIVER_INIT(cabal); - DECLARE_MACHINE_START(cabal); DECLARE_MACHINE_START(cabalbl); DECLARE_MACHINE_RESET(cabalbl); virtual void video_start() override; |