summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-03-21 20:29:13 +0100
committer hap <happppp@users.noreply.github.com>2020-03-21 20:29:31 +0100
commit4e87b6340ea8eb1119b87ce267072ea53d927edc (patch)
tree128b95c3fe0157b88ffada55eb16e1f2b77d3929
parentf128d1d0c19060c66f12b053a5e3e76753ae553d (diff)
hh_tms1k: put binary dumped output PLAs in rom file instead of hardcoding in source (nw)
-rw-r--r--src/devices/cpu/tms1000/tms1k_base.cpp4
-rw-r--r--src/devices/cpu/tms1000/tms1k_base.h1
-rw-r--r--src/mame/drivers/hh_tms1k.cpp65
3 files changed, 26 insertions, 44 deletions
diff --git a/src/devices/cpu/tms1000/tms1k_base.cpp b/src/devices/cpu/tms1000/tms1k_base.cpp
index 3f14dba6c5e..f669a349662 100644
--- a/src/devices/cpu/tms1000/tms1k_base.cpp
+++ b/src/devices/cpu/tms1000/tms1k_base.cpp
@@ -79,6 +79,7 @@ tms1k_base_device::tms1k_base_device(const machine_config &mconfig, device_type
, m_mpla(*this, "mpla")
, m_ipla(*this, "ipla")
, m_opla(*this, "opla")
+ , m_opla_b(*this, "opla_b")
, m_spla(*this, "spla")
, m_o_pins(o_pins)
, m_r_pins(r_pins)
@@ -138,6 +139,9 @@ void tms1k_base_device::device_start()
m_write_ctl.resolve_safe();
m_write_pdc.resolve_safe();
+ if (m_opla_b != nullptr && m_output_pla_table == nullptr)
+ set_output_pla(&m_opla_b->as_u16());
+
// zerofill
m_pc = 0;
m_sr = 0;
diff --git a/src/devices/cpu/tms1000/tms1k_base.h b/src/devices/cpu/tms1000/tms1k_base.h
index b01d5380293..b4c8df9ed43 100644
--- a/src/devices/cpu/tms1000/tms1k_base.h
+++ b/src/devices/cpu/tms1000/tms1k_base.h
@@ -207,6 +207,7 @@ protected:
optional_device<pla_device> m_mpla;
optional_device<pla_device> m_ipla;
optional_device<pla_device> m_opla;
+ optional_memory_region m_opla_b; // binary dump of output PLA, in place of PLA file
optional_device<pla_device> m_spla;
u8 m_pc; // 6 or 7-bit program counter
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 1416e052eb0..8af983a1c31 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -72,6 +72,7 @@
@MP3208 TMS1000 1977, Milton Bradley Electronic Battleship (1977, model 4750B)
@MP3226 TMS1000 1978, Milton Bradley Simon (Rev A)
*MP3232 TMS1000 1979, Fonas 2-Player Baseball (no "MP" on chip label)
+ *MP3260 TMS1000 1979, Electroplay Quickfire
@MP3300 TMS1000 1979, Milton Bradley Simon (Rev F)
@MP3301A TMS1000 1979, Milton Bradley Big Trak
@MP3320A TMS1000 1979, Coleco Head to Head: Electronic Basketball
@@ -775,7 +776,7 @@ ROM_START( mathmagi )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, BAD_DUMP CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_mathmagi_output.pla", 0, 365, NO_DUMP )
ROM_END
@@ -1327,18 +1328,10 @@ static INPUT_PORTS_START( zodiac )
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-// output PLA is not decapped, dumped electronically
-static const u16 zodiac_output_pla[0x20] =
-{
- 0x01, 0x08, 0xa0, 0xa8, 0x40, 0x48, 0xe0, 0xe8, 0x06, 0x10, 0xa6, 0xb0, 0x46, 0x50, 0xe6, 0xf0,
- 0x7e, 0x0c, 0xb6, 0x9e, 0xcc, 0xda, 0xfa, 0x0e, 0xfe, 0xce, 0xee, 0xbc, 0xf2, 0x3c, 0x70, 0x7c
-};
-
void zodiac_state::zodiac(machine_config &config)
{
/* basic machine hardware */
TMS1100(config, m_maincpu, 500000); // approximation - RC osc. R=18K, C=100pF
- m_maincpu->set_output_pla(zodiac_output_pla);
m_maincpu->k().set(FUNC(zodiac_state::read_k));
m_maincpu->r().set(FUNC(zodiac_state::write_r));
m_maincpu->o().set(FUNC(zodiac_state::write_o));
@@ -1362,8 +1355,11 @@ ROM_START( zodiac )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common3_micro.pla", 0, 867, BAD_DUMP CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_zodiac_output.pla", 0, 365, NO_DUMP )
+
+ ROM_REGION16_LE( 0x40, "maincpu:opla_b", ROMREGION_ERASE00 ) // verified, electronic dump
+ ROM_LOAD16_BYTE( "tms1100_zodiac_output.bin", 0, 0x20, CRC(d35d64cb) SHA1(315e7ca9a18a06ff7dc0b95c6f119e093b15a41f) )
ROM_END
@@ -2966,22 +2962,10 @@ static INPUT_PORTS_START( cnfball2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-// output PLA is not decapped
-static const u16 cnfball2_output_pla[0x20] =
-{
- // first half was dumped electronically
- 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40, 0x01, 0x08, 0x02, 0x04, 0x00,
-
- // rest is unused, game only outputs with status bit clear
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0
-};
-
void cnfball2_state::cnfball2(machine_config &config)
{
/* basic machine hardware */
TMS1100(config, m_maincpu, 325000); // approximation - RC osc. R=47K, C=47pF
- m_maincpu->set_output_pla(cnfball2_output_pla);
m_maincpu->k().set(FUNC(cnfball2_state::read_k));
m_maincpu->r().set(FUNC(cnfball2_state::write_r));
m_maincpu->o().set(FUNC(cnfball2_state::write_o));
@@ -3005,8 +2989,11 @@ ROM_START( cnfball2 )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, BAD_DUMP CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_cnfball2_output.pla", 0, 365, NO_DUMP )
+
+ ROM_REGION16_LE( 0x40, "maincpu:opla_b", ROMREGION_ERASE00 ) // verified, electronic dump, 2nd half unused
+ ROM_LOAD16_BYTE( "tms1100_cnfball2_output.bin", 0, 0x20, CRC(c51d7404) SHA1(3a00c69b52b7d0dd12ccd66428130592c7e06240) )
ROM_END
@@ -6126,7 +6113,7 @@ ROM_START( elecbowl )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common3_micro.pla", 0, 867, BAD_DUMP CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_elecbowl_output.pla", 0, 365, NO_DUMP )
ROM_END
@@ -8760,7 +8747,7 @@ ROM_START( alphie )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1000_common2_micro.pla", 0, 867, BAD_DUMP CRC(d33da3cf) SHA1(13c4ebbca227818db75e6db0d45b66ba5e207776) ) // not in patent description
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1000_alphie_output.pla", 0, 365, NO_DUMP ) // "
ROM_END
@@ -8928,20 +8915,12 @@ static INPUT_PORTS_START( tcfballa )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("Display")
INPUT_PORTS_END
-// output PLA is not decapped, dumped electronically
-static const u16 tcfballa_output_pla[0x20] =
-{
- 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x46, 0x70, 0x00, 0x00, 0x00,
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
void tcfballa_state::tcfballa(machine_config &config)
{
tcfball(config);
/* basic machine hardware */
m_maincpu->set_clock(375000); // approximation - RC osc. R=47K, C=50pF
- m_maincpu->set_output_pla(tcfballa_output_pla);
config.set_default_layout(layout_tcfballa);
}
@@ -8954,8 +8933,11 @@ ROM_START( tcfballa )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, BAD_DUMP CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_tcfballa_output.pla", 0, 365, NO_DUMP )
+
+ ROM_REGION16_LE( 0x40, "maincpu:opla_b", ROMREGION_ERASE00 ) // verified, electronic dump
+ ROM_LOAD16_BYTE( "tms1100_tcfballa_output.bin", 0, 0x20, CRC(887ad9a5) SHA1(a2bac48f555df098c1f1f0fa663e5bcb989b8987) )
ROM_END
@@ -9131,7 +9113,7 @@ ROM_START( tandy12 )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_tandy12_output.pla", 0, 365, NO_DUMP )
ROM_END
@@ -12075,18 +12057,10 @@ static INPUT_PORTS_START( ssports4 )
PORT_BIT( 0x0c, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
-// output PLA is not decapped, dumped electronically
-static const u16 ssports4_output_pla[0x20] =
-{
- 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40
-};
-
void ssports4_state::ssports4(machine_config &config)
{
/* basic machine hardware */
TMS1100(config, m_maincpu, 375000); // approximation - RC osc. R=47K, C=47pF
- m_maincpu->set_output_pla(ssports4_output_pla);
m_maincpu->k().set(FUNC(ssports4_state::read_k));
m_maincpu->r().set(FUNC(ssports4_state::write_r));
m_maincpu->o().set(FUNC(ssports4_state::write_o));
@@ -12111,8 +12085,11 @@ ROM_START( ssports4 )
ROM_REGION( 867, "maincpu:mpla", 0 )
ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, BAD_DUMP CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) ) // not verified
- ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_REGION( 365, "maincpu:opla", ROMREGION_ERASE00 )
ROM_LOAD( "tms1100_ssports4_output.pla", 0, 365, NO_DUMP )
+
+ ROM_REGION16_LE( 0x40, "maincpu:opla_b", ROMREGION_ERASE00 ) // verified, electronic dump
+ ROM_LOAD16_BYTE( "tms1100_ssports4_output.bin", 0, 0x20, CRC(cd6f162f) SHA1(3348edb697e996b5ab82be54076b9cd444e0f2b1) )
ROM_END