From c8c51551fcab5ac9b0e634bd09e935a22b467b53 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 2 Oct 2016 23:43:40 +0200 Subject: [PATCH] fidel6502: fix low battery status in Excellence sets (nw) --- src/mame/drivers/fidel6502.cpp | 46 +++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index aa3637ad5f2..f9c6a84cf27 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -418,6 +418,7 @@ public: DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch); DECLARE_READ8_MEMBER(fexcelv_speech_r); DECLARE_WRITE8_MEMBER(fexcel_ttl_w); + DECLARE_READ8_MEMBER(fexcelb_ttl_r); DECLARE_READ8_MEMBER(fexcel_ttl_r); // Chesster @@ -786,15 +787,27 @@ WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w) } } -READ8_MEMBER(fidel6502_state::fexcel_ttl_r) +READ8_MEMBER(fidel6502_state::fexcelb_ttl_r) { // a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC UINT8 d6 = (m_inp_matrix[9].read_safe(0xff) >> offset & 1) ? 0x40 : 0; - + // a0-a2,d7: multiplexed inputs (active low) return d6 | ((read_inputs(9) >> offset & 1) ? 0 : 0x80); } +READ8_MEMBER(fidel6502_state::fexcel_ttl_r) +{ + UINT8 d7 = 0x80; + + // 74259(1) Q7 + 74251 I0: battery status + if (m_inp_mux == 1 && ~m_led_select & 0x80) + d7 = m_inp_matrix[9]->read() & 0x80; + + // a0-a2,d7: multiplexed inputs (active low) + return d7 & ((read_inputs(9) >> offset & 1) ? 0 : 0x80); +} + /****************************************************************************** @@ -926,12 +939,18 @@ static ADDRESS_MAP_START( fexcel_map, AS_PROGRAM, 8, fidel6502_state ) AM_RANGE(0xc000, 0xffff) AM_ROM ADDRESS_MAP_END -static ADDRESS_MAP_START( fexcelb_map, AS_PROGRAM, 8, fidel6502_state ) +static ADDRESS_MAP_START( fexcelp_map, AS_PROGRAM, 8, fidel6502_state ) AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x3ff8) AM_READWRITE(fexcel_ttl_r, fexcel_ttl_w) AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END +static ADDRESS_MAP_START( fexcelb_map, AS_PROGRAM, 8, fidel6502_state ) + AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM + AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x3ff8) AM_READWRITE(fexcelb_ttl_r, fexcel_ttl_w) + AM_RANGE(0x8000, 0xffff) AM_ROM +ADDRESS_MAP_END + // Chesster @@ -1041,7 +1060,7 @@ static INPUT_PORTS_START( sc12 ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE") INPUT_PORTS_END -static INPUT_PORTS_START( fexcel ) +static INPUT_PORTS_START( fexcelb ) PORT_INCLUDE( sc12 ) PORT_MODIFY("IN.8") @@ -1056,7 +1075,7 @@ static INPUT_PORTS_START( fexcel ) INPUT_PORTS_END static INPUT_PORTS_START( fexcelv ) - PORT_INCLUDE( fexcel ) + PORT_INCLUDE( fexcelb ) PORT_START("IN.9") PORT_CONFNAME( 0x03, 0x00, "Language" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidel6502_state, fexcelv_bankswitch, 0) @@ -1068,6 +1087,15 @@ static INPUT_PORTS_START( fexcelv ) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("speech", s14001a_device, busy_r) INPUT_PORTS_END +static INPUT_PORTS_START( fexcel ) + PORT_INCLUDE( fexcelb ) + + PORT_START("IN.9") + PORT_CONFNAME( 0x80, 0x00, "Battery Status" ) + PORT_CONFSETTING( 0x80, "Low" ) + PORT_CONFSETTING( 0x00, DEF_STR( Normal ) ) +INPUT_PORTS_END + static INPUT_PORTS_START( csc ) PORT_INCLUDE( sc12 ) @@ -1631,7 +1659,7 @@ static MACHINE_CONFIG_DERIVED( fexcelp, fexcel ) /* basic machine hardware */ MCFG_CPU_REPLACE("maincpu", R65C02, XTAL_5MHz) - MCFG_CPU_PROGRAM_MAP(fexcelb_map) + MCFG_CPU_PROGRAM_MAP(fexcelp_map) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( fexcelv, fexcelb ) @@ -1926,7 +1954,7 @@ ROM_END ROM_START( fexcel ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("101-1072b01.ic5", 0xc000, 0x4000, CRC(fd2f6064) SHA1(f84bb98bdb9565a04891eb6820597d7aecc90c21) ) + ROM_LOAD("101-1072b01.ic5", 0xc000, 0x4000, CRC(fd2f6064) SHA1(f84bb98bdb9565a04891eb6820597d7aecc90c21) ) // RCA ROM_END ROM_START( fexcela ) @@ -1997,9 +2025,9 @@ CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, CONS( 1985, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "The Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1985, fexcela, fexcel, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "The Excellence (model EP12)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, fexcelb, fexcel, 0, fexcelb, fexcel, driver_device, 0, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1986, fexcelp, fexcel, 0, fexcelp, fexcel, driver_device, 0, "Fidelity Electronics", "The Par Excellence (model 6083)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, fexcelb, fexcel, 0, fexcelb, fexcelb, driver_device, 0, "Fidelity Electronics", "The Excellence (model 6080B)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence (model 6092)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1987, fexceld, fexcel, 0, fexceld, fexcel, driver_device, 0, "Fidelity Electronics", "Excel Display (model 6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1987, fexceld, fexcel, 0, fexceld, fexcelb, driver_device, 0, "Fidelity Electronics", "Excel Display (model 6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1990, chesster, 0, 0, chesster, chesster, fidel6502_state, chesster, "Fidelity Electronics", "Chesster Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )