taito/taito_o.cpp: tie irq 7 to all clear switch, allows game init from user side

This commit is contained in:
angelosa 2023-11-22 19:26:24 +01:00
parent c007e1b7c4
commit 97f01e2774
2 changed files with 40 additions and 31 deletions

View File

@ -946,7 +946,7 @@ ROM_END
} // anonymous namespace } // anonymous namespace
// YEAR, NAME, PARENT, MACHINE, INPUT, STATE, INIT, MONITOR, COMPANY, FULLNAME FLAGS
GAME( 1994, dmndrby, 0, dderby, dderby, dmndrby_state, empty_init, ROT0, "Electrocoin", "Diamond Derby (Win bet, newer)", MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hack? GAME( 1994, dmndrby, 0, dderby, dderby, dmndrby_state, empty_init, ROT0, "Electrocoin", "Diamond Derby (Win bet, newer)", MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hack?
GAME( 1986, dmndrbya, dmndrby, dderby, dderbya, dmndrby_state, empty_init, ROT0, "Electrocoin", "Diamond Derby (Win bet, original)", MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1986, dmndrbya, dmndrby, dderby, dderbya, dmndrby_state, empty_init, ROT0, "Electrocoin", "Diamond Derby (Win bet, original)", MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
GAME( 1986, dmndrbybl, dmndrby, dderby, dderbybl, dmndrby_quinella_state, empty_init, ROT0, "bootleg (EDG Impeuropex)", "Diamond Derby (Quinella bet, EDG Impeuropex bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1986, dmndrbybl, dmndrby, dderby, dderbybl, dmndrby_quinella_state, empty_init, ROT0, "bootleg (EDG Impeuropex)", "Diamond Derby (Quinella bet, EDG Impeuropex bootleg)", MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
// Original Japanese Quinella version known to exist, cfr. flyer, published by Tsumara Ltd. (SNK spin-off?)

View File

@ -29,9 +29,6 @@ Eibise (C) 1990 Taito.
TODO: TODO:
- Opto coin chutes, similar if not same as taito/pkspirit.cpp
- parentj: throws "MESSAGE ERROR" on boot, hold ALL CLEAR SW and RESET (keys 9 and R) for a little while.
Notice that holding SERVICE1 (reset) implicitly means no NVRAM restore.
- parentj: lower part of dealer arm GFX is x flipped, - parentj: lower part of dealer arm GFX is x flipped,
is it even supposed to be shown but rather be masked by the text layer? is it even supposed to be shown but rather be masked by the text layer?
- eibise: middle reel shows sprite wraparound glitch; - eibise: middle reel shows sprite wraparound glitch;
@ -40,7 +37,9 @@ TODO:
Notes: Notes:
- Press R to reset errors; - Press R to reset errors;
- parentj: if it throws "MESSAGE ERROR" on boot then it needs All Clear SW being pressed,
which in turn is tied to irq 7 service for proper initialization of NVRAM.
POST expect that a credit string is available at $10156a cfr. https://tcrf.net/Parent_Jack
**************************************************************************************************/ **************************************************************************************************/
@ -82,6 +81,7 @@ public:
{ } { }
void taitoo(machine_config &config); void taitoo(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(all_clear_cb);
private: private:
// devices // devices
@ -179,6 +179,14 @@ void taitoo_state::prg_map(address_map &map)
map(0x500800, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x500800, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
} }
INPUT_CHANGED_MEMBER(taitoo_state::all_clear_cb)
{
if (oldval && !newval)
m_maincpu->set_input_line(7, HOLD_LINE);
}
static INPUT_PORTS_START( parentj ) static INPUT_PORTS_START( parentj )
PORT_START("COIN") PORT_START("COIN")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("opto1", taitoio_opto_device, coin_sense_w) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("opto1", taitoio_opto_device, coin_sense_w)
@ -207,7 +215,7 @@ static INPUT_PORTS_START( parentj )
PORT_BIT (0x0001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper Over") // "Hop Over"? PORT_BIT (0x0001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Hopper Over") // "Hop Over"?
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("opto2", taitoio_opto_device, opto_h_r) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("opto2", taitoio_opto_device, opto_h_r)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("opto2", taitoio_opto_device, opto_l_r) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("opto2", taitoio_opto_device, opto_l_r)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("All Clear SW") PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_GAMBLE_SERVICE ) PORT_NAME("All Clear SW") PORT_CHANGED_MEMBER(DEVICE_SELF, taitoo_state, all_clear_cb, 0)
PORT_SERVICE_NO_TOGGLE(0x0010, IP_ACTIVE_LOW ) PORT_SERVICE_NO_TOGGLE(0x0010, IP_ACTIVE_LOW )
PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // battery error if '1' PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // battery error if '1'
@ -252,6 +260,7 @@ static INPUT_PORTS_START( parentj )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "DSWB:1" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "DSWB:1" )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( eibise ) static INPUT_PORTS_START( eibise )
PORT_START("COIN") PORT_START("COIN")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("opto1", taitoio_opto_device, coin_sense_w) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_WRITE_LINE_DEVICE_MEMBER("opto1", taitoio_opto_device, coin_sense_w)