diff --git a/hash/cd32.xml b/hash/cd32.xml
index 26654b2e283..b1137395814 100644
--- a/hash/cd32.xml
+++ b/hash/cd32.xml
@@ -2,30 +2,142 @@
-
+
-
-
-
- Clockwiser
- 19??
- Rasputin
-
-
-
-
-
-
-
-
- Vital Light
- 1994
+
+
+
+ Morph
+ 1993
Millennium
-
+
+
+
+ Diggers + Oscar
+ 1993
+ Commodore
+
+
+
+
+
+
+
+
+
+ Pinball Fantasies CD Edition
+ 1993
+ 21st Century Entertainment
+
+
+
+
+
+
+
+
+
+ Pinball Illusions
+ 1995
+ 21st Century Entertainment
+
+
+
+
+
+
+
+
+
+
+ The Big 6 (Dizzy Collection)
+ 1994
+ Codemasters
+
+
+
+
+
+
+
+
+
+ Vital Light
+ 1994
+ Millennium
+
+
+
+
+
+
+
+
+
+ Clockwiser
+ 1994
+ Rasputin
+
+
+
+
+
+
+
+
+
+ Super Stardust
+ 1994
+ Team 17
+
+
+
+
+
+
+
+
+
+ Super Skidmarks
+ 1995
+ Guildhall Leisure
+
+
+
+
+
+
+
+
+
+ Worms - The Director's Cut
+ 1995
+ Ocean
+
+
+
+
+
+
+
+
+
+ Liberation - Captive II
+ 1994
+ Mindscape
+
+
+
+
+
+
+
+
+
diff --git a/src/mame/drivers/cd32.c b/src/mame/drivers/cd32.c
index 55befc9e3c6..3aab08c8431 100644
--- a/src/mame/drivers/cd32.c
+++ b/src/mame/drivers/cd32.c
@@ -232,12 +232,25 @@ static UINT16 handle_joystick_potgor(running_machine &machine, UINT16 potgor)
CUSTOM_INPUT_MEMBER(cd32_state::cubo_input)
{
- return handle_joystick_potgor(machine(), m_potgo_value) >> 10;
+ return handle_joystick_potgor(machine(), m_potgo_value) >> 8;
}
+
+
+CUSTOM_INPUT_MEMBER(cd32_state::cd32_sel_mirror_input)
+{
+ UINT8 bits = ioport((const char *)param)->read();
+ return (bits & 0x20)>>5;
+}
+
+
+
static INPUT_PORTS_START( cd32 )
PORT_START("CIA0PORTA")
- PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_SPECIAL )
+ /* this is the regular port for reading a single button joystick on the Amiga, many CD32 games require this to mirror the pad start button! */
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, cd32_state,cd32_sel_mirror_input, "P2")
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, cd32_state,cd32_sel_mirror_input, "P1")
PORT_START("CIA0PORTB")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
@@ -251,40 +264,40 @@ static INPUT_PORTS_START( cd32 )
PORT_BIT( 0xfcfc, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("POTGO")
- PORT_BIT( 0x4400, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, cd32_state,cubo_input, 0)
- PORT_BIT( 0xbbff, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, cd32_state,cubo_input, 0)
+ PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ // CD32 '11' button pad (4 dpad directions + 7 buttons), not read directly
+ PORT_START("P1")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 ||>")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 <<") /* left trigger */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 >>") /* right trigger */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 Green") /* BUTTON3 */
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("P1 Yellow") /* BUTTON4 */
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("P1 Red / SELECT") /* BUTTON1 = START1 */
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME("P1 Blue / STOP") /* BUTTON2 */
PORT_START("P1JOY")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ // CD32 '11' button pad (4 dpad directions + 7 buttons), not read directly
+ PORT_START("P2")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 ||>")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 <<") /* left trigger */
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 >>") /* right trigger */
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 Green") /* BUTTON3 */
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_NAME("P2 Yellow") /* BUTTON4 */
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_NAME("P2 Red / SELECT") /* BUTTON1 = START2 */
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_PLAYER(2) PORT_NAME("P2 Blue / STOP") /* BUTTON2 */
PORT_START("P2JOY")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
- PORT_START("P1")
- PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
- PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1)
- PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) /* BUTTON3 */
- PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(1) /* BUTTON4 */
- PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(1) /* BUTTON1 = START1 */
- PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_PLAYER(1) /* BUTTON2 */
- PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_PLAYER(1)
-
- PORT_START("P2")
- PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2) /* BUTTON3 */
- PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_PLAYER(2) /* BUTTON4 */
- PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_PLAYER(2) /* BUTTON1 = START2 */
- PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_PLAYER(2) /* BUTTON2 */
- PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_PLAYER(2)
PORT_START("DIPSW1")
PORT_DIPNAME( 0x01, 0x01, "DSW1 1" )
@@ -800,6 +813,7 @@ static MACHINE_CONFIG_START( cd32base, cd32_state )
MCFG_SOUND_ROUTE( 1, "rspeaker", 0.50 )
/* cia */
+ // these are setup differently on other amiga drivers (needed for floppy to work) which is correct / why?
MCFG_LEGACY_MOS8520_ADD("cia_0", AMIGA_68EC020_PAL_CLOCK / 10, 0, cia_0_intf)
MCFG_LEGACY_MOS8520_ADD("cia_1", AMIGA_68EC020_PAL_CLOCK / 10, 0, cia_1_intf)
diff --git a/src/mame/includes/cd32.h b/src/mame/includes/cd32.h
index 2d543e5cbc4..fbc1e96b143 100644
--- a/src/mame/includes/cd32.h
+++ b/src/mame/includes/cd32.h
@@ -16,7 +16,8 @@ public:
cd32_state(const machine_config &mconfig, device_type type, const char *tag)
: amiga_state(mconfig, type, tag),
m_microtouch(*this, "microtouch")
- { }
+ {
+ }
required_device m_microtouch;
@@ -26,6 +27,8 @@ public:
void (*m_input_hack)(running_machine &machine);
int m_oldstate[2];
DECLARE_CUSTOM_INPUT_MEMBER(cubo_input);
+ DECLARE_CUSTOM_INPUT_MEMBER(cd32_sel_mirror_input);
+
DECLARE_WRITE32_MEMBER(aga_overlay_w);
DECLARE_WRITE8_MEMBER(cd32_cia_0_porta_w);
DECLARE_READ8_MEMBER(cd32_cia_0_portb_r);