// license:BSD-3-Clause
// copyright-holders:David Haywood
/* JPM System 80 Hardware
TMS9980A CPU
+
???
AY8912?
TMS9902
(is there a 9901 as well?)
---
There are also older platforms also using the TMS CPU, we load some of those roms here too, but many should go into the SRU folder.
System80 is based on the SRU platform, but with more outputs and finally a separate CPU and sound board setup to permit easy repair.
*/
#include "emu.h"
#include "cpu/tms9900/tms9980a.h"
#include "sound/ay8910.h"
#include "machine/74259.h"
#include "machine/tms9902.h"
#include "speaker.h"
#include "jpms80.lh"
// MFME2MAME layouts:
#include "j80bac.lh"
#include "j80bounc.lh"
#include "j80frogh.lh"
#include "j80golds.lh"
#include "j80hotln.lh"
#include "j80myspn.lh"
#include "j80nudg2.lh"
#include "j80rr.lh"
#include "j80supst.lh"
#include "j80supbk.lh"
#include "j80topsp.lh"
#include "j80wsprt2.lh"
class jpms80_state : public driver_device
{
public:
jpms80_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_acc(*this, "acc")
{ }
void jpms80(machine_config &config);
void init_jpms80();
private:
virtual void machine_reset() override;
DECLARE_WRITE_LINE_MEMBER(int1_enable_w);
DECLARE_WRITE_LINE_MEMBER(int2_enable_w);
DECLARE_WRITE_LINE_MEMBER(watchdog_w);
DECLARE_WRITE_LINE_MEMBER(io_enable_w);
void jpms80_io_map(address_map &map);
void jpms80_map(address_map &map);
// devices
required_device<tms9980a_device> m_maincpu;
required_device<tms9902_device> m_acc;
};
WRITE_LINE_MEMBER(jpms80_state::int1_enable_w)
{
}
WRITE_LINE_MEMBER(jpms80_state::int2_enable_w)
{
}
WRITE_LINE_MEMBER(jpms80_state::watchdog_w)
{
}
WRITE_LINE_MEMBER(jpms80_state::io_enable_w)
{
}
void jpms80_state::jpms80_map(address_map &map)
{
map(0x0000, 0x2fff).rom().region("maincpu", 0);
map(0x3000, 0x3fff).ram();
}
void jpms80_state::jpms80_io_map(address_map &map)
{
map.global_mask(0x3ff);
// map(0x0000, 0x001f) // I/O & Optic (in)
map(0x0000, 0x000f).w("outlatch0", FUNC(ls259_device::write_d0));
map(0x0010, 0x001f).w("outlatch1", FUNC(ls259_device::write_d0));
map(0x0020, 0x002f).w("outlatch2", FUNC(ls259_device::write_d0));
map(0x0030, 0x003f).w("outlatch3", FUNC(ls259_device::write_d0));
map(0x0040, 0x004f).w("outlatch4", FUNC(ls259_device::write_d0));
map(0x0050, 0x005f).w("outlatch5", FUNC(ls259_device::write_d0));
map(0x0060, 0x006f).w("outlatch6", FUNC(ls259_device::write_d0));
map(0x0070, 0x007f).w("outlatch7", FUNC(ls259_device::write_d0));
map(0x0080, 0x008f).w("outlatch8", FUNC(ls259_device::write_d0));
map(0x0090, 0x009f).w("outlatch9", FUNC(ls259_device::write_d0));
map(0x00a0, 0x00af).w("outlatch10", FUNC(ls259_device::write_d0));
// map(0x0380, 0x03bf) // AY
map(0x03c0, 0x03ff).rw(m_acc, FUNC(tms9902_device::cruread), FUNC(tms9902_device::cruwrite));
// Lamps, Meters etc. can move around
}
static INPUT_PORTS_START( jpms80 )
INPUT_PORTS_END
void jpms80_state::machine_reset()
{
}
void jpms80_state::jpms80(machine_config &config)
{
// CPU TMS9980A, standard variant; no line connections
TMS9980A(config, m_maincpu, 10_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &jpms80_state::jpms80_map);
m_maincpu->set_addrmap(AS_IO, &jpms80_state::jpms80_io_map);
SPEAKER(config, "mono").front_center();
LS259(config, "outlatch0"); // I/O IC5
LS259(config, "outlatch1"); // I/O IC6
LS259(config, "outlatch2"); // I/O IC7
LS259(config, "outlatch3"); // I/O IC8
LS259(config, "outlatch4"); // I/O IC9
LS259(config, "outlatch5"); // I/O IC10
LS259(config, "outlatch6"); // I/O IC11
LS259(config, "outlatch7"); // I/O IC12
LS259(config, "outlatch8"); // I/O IC13
LS259(config, "outlatch9"); // I/O IC14
ls259_device &outlatch10(LS259(config, "outlatch10")); // I/O IC15
outlatch10.q_out_cb<0>().set(FUNC(jpms80_state::int1_enable_w)); // 50 - INT1 enable (lv3)
outlatch10.q_out_cb<1>().set(FUNC(jpms80_state::int2_enable_w)); // 51 - INT2 enable (lv4)
outlatch10.q_out_cb<2>().set(FUNC(jpms80_state::watchdog_w)); // 52 - Watchdog
outlatch10.q_out_cb<3>().set(FUNC(jpms80_state::io_enable_w)); // 53 - I/O Enable
TMS9902(config, m_acc, 10_MHz_XTAL / 4);
m_acc->int_cb().set_inputline(m_maincpu, INT_9980A_LEVEL3);
AY8912(config, "aysnd", 10_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 1.0);
}
void jpms80_state::init_jpms80()
{
}
ROM_START( j80bac )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "bankacoinp1.bin", 0x0000, 0x1000, CRC(7b82025b) SHA1(f698688c55f8c5dc891e470de8df2eb12f6b1ec5) )
ROM_LOAD( "bankacoinp2.bin", 0x1000, 0x1000, CRC(91d71fbe) SHA1(d0c45218b7568d5293f015334d7d1045bcb2fe03) )
ROM_LOAD( "bankacoinp3.bin", 0x2000, 0x1000, CRC(0c3b2954) SHA1(4342a2a047496caf8569d4519dd8daad47e634e3) )
ROM_END
ROM_START( j80blbnk )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "blankity-bank-p1.bin", 0x0000, 0x1000, CRC(8b2aeca6) SHA1(207db63d5130cb7a8eb9be41d116432f7b7728b0) )
ROM_LOAD( "blankity-bank-p2.bin", 0x1000, 0x1000, CRC(561262da) SHA1(d1f3e7815c5ea3ba7c26ed3b95a16c802f6af50f) )
ROM_LOAD( "blankity-bank-p3.bin", 0x2000, 0x1000, CRC(39925035) SHA1(0af8c8f8074c4873581250474d59d715178cded4) )
ROM_END
ROM_START( j80bounc )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "bouncer.p1", 0x0000, 0x1000, CRC(81de115b) SHA1(0890de1492859c58411fd130ecf721df7611247a) )
ROM_LOAD( "bouncer.p2", 0x1000, 0x1000, CRC(8507ea42) SHA1(e4838fe737c8a9964e0067be460e8bfc18b0a406) )
ROM_END
ROM_START( j80frogh )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "froghop1.bin", 0x0000, 0x1000, CRC(606846f8) SHA1(8796fb647a41dad087b9eb3e24fa7071c933d1ec) )
ROM_LOAD( "froghop2.bin", 0x1000, 0x1000, CRC(b64ed5ad) SHA1(5697b0a16191ee3845f0f4077cf7b597f0b20024) )
ROM_LOAD( "froghop3.bin", 0x2000, 0x1000, CRC(f5b55c0e) SHA1(9fdef9f634f9b832a1bf6e3e3890a7fa328d20e3) )
ROM_END
ROM_START( j80fruit )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "fruit_snappa_1-1.bin", 0x0000, 0x1000, CRC(f6eea72d) SHA1(ae994f9eb68aa6ea127586afb448cc8fbff0c314) )
ROM_LOAD( "fruit_snappa_1-2.bin", 0x1000, 0x1000, CRC(10eccac5) SHA1(3c9cc57a3b51fdae713c11a33677555be3f669bc) )
ROM_LOAD( "fruit_snappa_1-3.bin", 0x2000, 0x1000, CRC(6f938a9a) SHA1(edbf44ae7cb060420b6f952652f08271c4af35bd) )
ROM_REGION( 0x10000, "altrevs", 0 )
// from 'fruit chaser' set, other roms matched.
ROM_LOAD( "fruit31.p1", 0x0000, 0x001000, CRC(406ff4c1) SHA1(10ef59e66debb15b22d25b66ed19f45a242e30ac) )
ROM_END
ROM_START( j80golds )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "goldstep2-1.p1", 0x0000, 0x1000, CRC(bc1e0788) SHA1(5e01881bda22fc00b2d2ac2b80acc67caddea682) )
ROM_LOAD( "goldstep2-2.p2", 0x1000, 0x1000, CRC(6ea82bd9) SHA1(289c9a076b9e5039f09283d64ceb77dfd7ea79ea) )
ROM_END
ROM_START( j80hotln )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "lines2_1.rom", 0x0000, 0x1000, CRC(f0ce5d7f) SHA1(be3f8ff3f83737a004d6a78cc61c3385307df1c3) )
ROM_LOAD( "lines2_2.rom", 0x1000, 0x1000, CRC(d5e69b49) SHA1(fcaa527875f81e03c5a5866d6d8b017450c50d9c) )
ROM_END
ROM_START( j80myspn )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "ms1.bin", 0x0000, 0x1000, CRC(b247374e) SHA1(33399f39bba68eff13e05529174d17f5b1ca0f70) )
ROM_LOAD( "ms2.bin", 0x1000, 0x1000, CRC(721c35df) SHA1(05ea0cdc83823f268becc7b9dd99db61949ad229) )
ROM_END
ROM_START( j80nudg2 )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "ndu.p1", 0x0000, 0x1000, CRC(4cfd3c6f) SHA1(06ad825343178a694585ee3b4ff8400caf15dd21) ) // aka ndudx5-1-5p.p1 (was in j2nuddud)
ROM_END
ROM_START( j80rr )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "jpmroadrunnerp1.bin", 0x0000, 0x1000, CRC(86f50997) SHA1(8bb266274d3ebeee942e5f878f7faae012712382) )
ROM_LOAD( "jpmroadrunnerp2.bin", 0x1000, 0x1000, CRC(aea12b9e) SHA1(6f6eb286c43a9bc04bfcab71713ce59da61cc063) )
ROM_LOAD( "jpmroadrunnerp3.bin", 0x2000, 0x1000, CRC(9b0b6fb9) SHA1(0282189e2945e4aa3a338930666d1eb34022894c) )
ROM_END
ROM_START( j80rra )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "rr.p1", 0x0000, 0x1000, CRC(38cd5043) SHA1(f4b828ad2e761bba91336714357a18f10d79c22b) )
ROM_LOAD( "rr.p2", 0x1000, 0x1000, CRC(81dc46ec) SHA1(17c60590cf5628df6bd109213a3f671b1a6df14b) )
ROM_LOAD( "rr.p3", 0x2000, 0x1000, CRC(5e617600) SHA1(1a2a25f81818fc3abeceb74608b2ffd53fac2c6d) )
ROM_END
ROM_START( j80supst )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "supasteppa2-1.p1", 0x0000, 0x1000, CRC(aac5b165) SHA1(5bf4acb85be227e1f4979fea4552fa5f64e9b7b2) )
ROM_LOAD( "supasteppa2-2.p2", 0x1000, 0x1000, CRC(3a93ea9e) SHA1(24e711a398d7f071fb904993ff0a974b4ac8b1d6) )
ROM_END
ROM_START( j80supbk )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "sbank-4.1.bin", 0x0000, 0x1000, CRC(effd29fa) SHA1(1e20bc6130f5d49db3856c56c64746f3fa49bd9c) )
ROM_LOAD( "sbank-4.2.bin", 0x1000, 0x1000, CRC(6ca5cc1d) SHA1(77d9bb44e6837027b61286f30bcb2c1b0e6a53fb) )
ROM_LOAD( "sbank-4.3.bin", 0x2000, 0x1000, CRC(af08594d) SHA1(ebff60e63e99af102874f4b3f070d9bfd229ab89) )
ROM_END
ROM_START( j80topsp )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "topsprint4-1.p1", 0x0000, 0x1000, CRC(91c4f494) SHA1(e4fd688a1fd23694c4fe8529d07ac248f262ad70) )
ROM_LOAD( "topsprint4-2.p2", 0x1000, 0x1000, CRC(e9ad3706) SHA1(bb6cb1a8ea740be017055e4fa621fabc8df77086) )
ROM_LOAD( "topsprint4-3.p3", 0x2000, 0x1000, CRC(d1abfb54) SHA1(33b11563c6e1ddfaa5527ad7a384fecd03c7de0a) )
ROM_END
ROM_START( j80topup )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "topup3-1.bin", 0x0000, 0x1000, CRC(2feb37e8) SHA1(098671f81fa94b851a8fa41ee7bd3d1b762eb824) )
ROM_LOAD( "topup3-2.bin", 0x1000, 0x1000, CRC(1937e7c9) SHA1(a9ae5163e560642598ec9878276d8785c28eb035) )
ROM_LOAD( "topup3-3.bin", 0x2000, 0x1000, CRC(283d7dd2) SHA1(8246c80c85956a0a3b59d68700319a59b35a5326) )
ROM_END
ROM_START( j80tumbl )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "tumble3-1.bin", 0x0000, 0x1000, CRC(2feb37e8) SHA1(098671f81fa94b851a8fa41ee7bd3d1b762eb824) )
ROM_LOAD( "tumble3-2.bin", 0x1000, 0x1000, CRC(1937e7c9) SHA1(a9ae5163e560642598ec9878276d8785c28eb035) )
ROM_LOAD( "tumble3-3.bin", 0x2000, 0x1000, CRC(23789c80) SHA1(6b6ac4e1dc66d5eb399437e87a9e7ee461bee086) )
ROM_END
ROM_START( j80wsprt )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "winsprint4-1.bin", 0x0000, 0x1000, CRC(57259716) SHA1(76ac953f3edefd0fe540e931bd73f564ea49d0c5) )
ROM_LOAD( "winsprint4-2.bin", 0x1000, 0x1000, CRC(f097bde3) SHA1(22bccd74564fbc2df63ffed3972199d25059b881) )
ROM_LOAD( "winsprint4-3.bin", 0x2000, 0x1000, CRC(c7318871) SHA1(6534f06be122ed0c9665437485fb860547dd1d7f) )
ROM_END
ROM_START( j80wsprt3 )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "winsprint3-1.bin", 0x0000, 0x1000, CRC(1af581c2) SHA1(5e04bf37551fc8fc7f477770635f8a573d659a2f) )
ROM_LOAD( "winsprint3-2.bin", 0x1000, 0x1000, CRC(f097bde3) SHA1(22bccd74564fbc2df63ffed3972199d25059b881) )
ROM_LOAD( "winsprint3-3.bin", 0x2000, 0x1000, CRC(73098120) SHA1(e353714350681c84f4d3d093dbf07f7e8c70e109) )
ROM_END
ROM_START( j80wsprt2 )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "winsprint.p1", 0x0000, 0x1000, CRC(e440c7bb) SHA1(5ef85a93a6170115c750257ac6c755b18b3114a9) )
ROM_LOAD( "winsprint.p2", 0x1000, 0x1000, CRC(225674bf) SHA1(d8a15226ff4f7b16f7f1a8dff969585a6b4536fe) )
ROM_LOAD( "winsprint.p3", 0x2000, 0x1000, CRC(51d11f59) SHA1(756ba5f02c0733d082767cbdaa93105a7d3f31f3) )
ROM_END
ROM_START( j80alad )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "al_p1.bin", 0x0000, 0x001000, CRC(41134b85) SHA1(8d48af9e3eae8dcc5888a3fa8ae9681ff6047dbb) )
ROM_LOAD( "al_p2.bin", 0x1000, 0x001000, CRC(934248eb) SHA1(2abb23907acf5036b63185afb164117f1d1bab0c) )
ROM_LOAD( "al_p3.bin", 0x2000, 0x001000, CRC(da2a56a3) SHA1(1b125be1bd4f0d63c68f370a2a7202f68ff11577) )
ROM_END
ROM_START( j80fortr )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "fortunetrail1.1", 0x0000, 0x001000, CRC(1691b72f) SHA1(be0966c9560249f2529dd76421fe6646adaeeadb) )
ROM_LOAD( "fortunetrail1.2", 0x1000, 0x001000, CRC(02dfcfc4) SHA1(ae97b670a4d5b341ee150cabf3d264a02cd7a32c) )
ROM_END
ROM_START( j80mster )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "masterspyp1.bin", 0x0000, 0x001000, CRC(7264e304) SHA1(cd50fd116226de2980f31728faa6723dca0ac061) )
ROM_LOAD( "masterspyp2.bin", 0x1000, 0x001000, CRC(e6349ee9) SHA1(207a4089e7128143eaeebe1dc082b742b5dfab96) )
ROM_LOAD( "masterspyp3.bin", 0x2000, 0x001000, CRC(83868a58) SHA1(3264dfa7994c62615da2418d1667cb3bd2e00435) )
ROM_END
ROM_START( j80plsnd )
ROM_REGION( 0x3000, "maincpu", 0 )
ROM_LOAD( "plus_p1.bin", 0x0000, 0x000400, CRC(02721d4f) SHA1(ea5da3f08098a9d12c71d41d70f09aca6660d6c5) )
ROM_LOAD( "plus_p2.bin", 0x0400, 0x000400, CRC(f58b492f) SHA1(569805044fa64c1d0c3620f380b4a09152ce2964) )
ROM_LOAD( "plus_p3.bin", 0x0800, 0x000400, CRC(e9584323) SHA1(7b2101626920bed533b392d1064fde305c8c18e8) )
ROM_LOAD( "plus_p4.bin", 0x0c00, 0x000400, CRC(67f9d05f) SHA1(1c441c775f2126861858c65c7634773a86f4fcc5) )
ROM_LOAD( "plus_p5.bin", 0x1000, 0x000400, CRC(d111b2c6) SHA1(c0182a4b163e4dbb67f1c98251b93fa878bff2e2) )
ROM_END
GAMEL( 198?, j80bac, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Bank A Coin (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80bac )
GAMEL( 198?, j80bounc, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Bouncer (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80bounc )
GAMEL( 198?, j80frogh, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Frog Hop (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80frogh )
GAME( 198?, j80fruit, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Fruit Snappa (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL )
GAMEL( 198?, j80golds, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Golden Steppa (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80golds )
GAMEL( 198?, j80hotln, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Hot Lines (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80hotln )
GAMEL( 198?, j80myspn, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Mystery Spin (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80myspn )
GAMEL( 198?, j80nudg2, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Nudge Double Up MkII (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80nudg2 )
GAMEL( 198?, j80rr, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Road Runner (JPM) (SYSTEM80, set 1)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80rr ) // was also in a set named 'Route 66' with identical roms, but text in ROM indicates name is Road Runner, maybe a reskin?
GAMEL( 198?, j80rra, j80rr, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Road Runner (JPM) (SYSTEM80, set 2)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80rr )
GAMEL( 198?, j80supst, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Supa Steppa (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80supst )
GAMEL( 198?, j80supbk, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Superbank (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80supbk )
GAMEL( 198?, j80topsp, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Top Sprint (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80topsp )
GAME( 198?, j80topup, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Top Up (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 198?, j80tumbl, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Tumble (JPM) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL )
GAMEL( 198?, j80wsprt, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Winsprint (JPM) (V4, 5x20p) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80wsprt2 )
GAMEL( 198?, j80wsprt3, j80wsprt, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Winsprint (JPM) (V3, 50p, 5 credits) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80wsprt2 )
GAMEL( 198?, j80wsprt2, j80wsprt, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Winsprint (JPM) (V2, 10x10p) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL, layout_j80wsprt2 )
GAME( 198?, j80blbnk, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "PCP", "Blankity Bank (PCP) (SYSTEM80)", MACHINE_IS_SKELETON_MECHANICAL )
// these look like they're probably SYSTEM80, not 100% sure tho
GAME( 198?, j80alad, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Aladdin's Cave (PCP)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 198?, j80fortr, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Fortune Trail (JPM)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 198?, j80mster, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Masterspy (Pcp)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 198?, j80plsnd, 0, jpms80,jpms80, jpms80_state, init_jpms80, ROT0, "JPM", "Plus Nudge (JPM)", MACHINE_IS_SKELETON_MECHANICAL )