From 03731d39a2fb5f92f0dc0cc8d2c7a1befa301e31 Mon Sep 17 00:00:00 2001 From: Scott Stone Date: Sat, 3 Nov 2012 21:08:51 +0000 Subject: [PATCH] [MESS] Improved the inputs in CD32 (by adding a mirror of the first button where the regular Amiga reads it) this allows the majority of the booting CD32 games to actually be started. [David Haywood] [MESS] Expanded cd32.xml softlist entries to highlight more future test cases. [David Haywood] --- hash/cd32.xml | 148 ++++++++++++++++++++++++++++++++++----- src/mame/drivers/cd32.c | 60 ++++++++++------ src/mame/includes/cd32.h | 5 +- 3 files changed, 171 insertions(+), 42 deletions(-) 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);