summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2021-09-22 03:26:09 +0100
committer GitHub <noreply@github.com>2021-09-21 22:26:09 -0400
commit47e5d8c5c6b0c53aa678be9ea63ae4255349e170 (patch)
treef1d0947622e310c0593704de7604a6f8da81a06f
parent1d819e186abff50670ac2ac9d51ba896ff6c0d72 (diff)
Dumped the 68705P3 MCUs on 2 different types of sp.ACE fruit machine reel driver PCBs [TTX] (#8593)
-rw-r--r--scripts/target/mame/arcade.lua2
-rw-r--r--src/mame/drivers/acesp.cpp220
-rw-r--r--src/mame/layout/ace_sp_dmd.lay39
-rw-r--r--src/mame/machine/ace_sp_reelctrl.cpp63
-rw-r--r--src/mame/machine/ace_sp_reelctrl.h54
5 files changed, 314 insertions, 64 deletions
diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua
index a75805cfeb8..c35a6523198 100644
--- a/scripts/target/mame/arcade.lua
+++ b/scripts/target/mame/arcade.lua
@@ -4788,6 +4788,8 @@ files {
MAME_DIR .. "src/mame/drivers/acefruit.cpp",
MAME_DIR .. "src/mame/drivers/aces1.cpp",
MAME_DIR .. "src/mame/drivers/acesp.cpp",
+ MAME_DIR .. "src/mame/machine/ace_sp_reelctrl.cpp",
+ MAME_DIR .. "src/mame/machine/ace_sp_reelctrl.h",
MAME_DIR .. "src/mame/drivers/age_candy.cpp",
MAME_DIR .. "src/mame/drivers/alinvade.cpp",
MAME_DIR .. "src/mame/drivers/amaticmg.cpp",
diff --git a/src/mame/drivers/acesp.cpp b/src/mame/drivers/acesp.cpp
index ddf28e958c9..1f39b35d536 100644
--- a/src/mame/drivers/acesp.cpp
+++ b/src/mame/drivers/acesp.cpp
@@ -4,59 +4,120 @@
sp.ACE system by ACE
based roughly on the Mach2000 hardware used by Castle
- skeleton driver!
+ Skeleton driver!
- should all games have OKI roms? are most missing?
- I think it was optional, some probably just use the AY..
+ Some games have OKI sample ROMs, others just use the AYs,
+ this depends on the additional plug-in boards.
+ We need to verify which is which as some samples could be missing
- has an undumped 'reel processor' (68705 like Mach2000?)
+ Some manufacturers, such as PCP, also used this hardware with
+ different reel controllers etc.
based on internal accesses it seems to use a 6303Y (like Mach2000)
which does NOT have the same internal map as a 6303R
+
+ some ROMsets here contain a single larger ROM instead of 2 smaller
+ ones, these need verifying to make sure they contain unique data
+ and removing if they do not.
+
*/
#include "emu.h"
#include "cpu/m6800/m6801.h"
#include "machine/6821pia.h"
+#include "machine/timer.h"
+
+#include "machine/ace_sp_reelctrl.h"
+
+#include "ace_sp_dmd.lh"
class ace_sp_state : public driver_device
{
public:
ace_sp_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ : driver_device(mconfig, type, tag)
+ , m_dmdram(*this, "dmdram")
+ , m_sevensegram(*this, "sevensegram")
+ , m_dmd(*this, "dotmatrix%u", 0U)
+ , m_maincpu(*this, "maincpu")
+ , m_reelctrl(*this, "reelctrl")
{ }
void ace_sp(machine_config &config);
+ void ace_sp_pcp(machine_config &config);
void init_ace_sp();
void init_ace_cr();
private:
+ void machine_start() override;
+
+ TIMER_DEVICE_CALLBACK_MEMBER(gen_fixfreq);
+
void ace_sp_map(address_map &map);
+ void dmd_w(offs_t offset, uint8_t data);
+ void sevenseg_w(offs_t offset, uint8_t data);
+
+ uint8_t serial_r(offs_t offset);
+ void serial_w(offs_t offset, uint8_t data);
+
+ required_shared_ptr<uint8_t> m_dmdram;
+ required_shared_ptr<uint8_t> m_sevensegram;
+
+ output_finder<1536> m_dmd;
+
// devices
- required_device<cpu_device> m_maincpu;
+ required_device<hd6303y_cpu_device> m_maincpu;
+ required_device<ace_sp_reelctrl_base_device> m_reelctrl;
};
+void ace_sp_state::machine_start()
+{
+ m_dmd.resolve();
+}
+
+void ace_sp_state::dmd_w(offs_t offset, uint8_t data)
+{
+ m_dmdram[offset] = data;
+
+ for (int i = 0; i < 8; i++)
+ m_dmd[(offset * 8) + i] = (data >> i) & 1;
+}
+void ace_sp_state::sevenseg_w(offs_t offset, uint8_t data)
+{
+ m_sevensegram[offset] = data;
+}
+
+uint8_t ace_sp_state::serial_r(offs_t offset)
+{
+ logerror("%s: serial_r\n", machine().describe_context());
+ return machine().rand();
+}
+
+void ace_sp_state::serial_w(offs_t offset, uint8_t data)
+{
+ logerror("%s: serial_w %02x\n", machine().describe_context(), data);
+}
void ace_sp_state::ace_sp_map(address_map &map)
{
/**** 6303Y internal area ****/
//----- 0x0000 - 0x0027 is internal registers -----
- map(0x0000, 0x0027).ram();
+ map(0x0000, 0x0027).m(m_maincpu, FUNC(hd6303y_cpu_device::hd6301y_io));
//----- 0x0028 - 0x003f is external access -----
- // 0x30 - reels write
+ // 0x30 - to/from reel MCU
// 0x31 - lamp high
// 0x32 - lamp low
// 0x33 - lamp stb
// 0x34 - shift stb
// 0x35 - shift clk
- // 0x36 - sio
+ map(0x36, 0x36).ram().rw(FUNC(ace_sp_state::serial_r), FUNC(ace_sp_state::serial_w)); // 0x36 - sio
+
// 0x37 - watchdog?
map(0x0038, 0x003b).rw("pia0", FUNC(pia6821_device::read), FUNC(pia6821_device::write));
/* 0x3c */
@@ -66,9 +127,11 @@ void ace_sp_state::ace_sp_map(address_map &map)
//----- 0x0040 - 0x013f is internal RAM (256 bytes) -----
map(0x0040, 0x013f).ram();
-
/**** regular map ****/
- map(0x0140, 0x1fff).ram();
+ map(0x0140, 0x1eff).ram();
+ map(0x1f00, 0x1fbf).ram().w(FUNC(ace_sp_state::dmd_w)).share("dmdram"); // DMD controller shares the RAM? or does this get uploaded somewhere?
+ map(0x1fc0, 0x1fff).ram().w(FUNC(ace_sp_state::sevenseg_w)).share("sevensegram");
+
map(0x2000, 0xffff).rom();
}
@@ -85,19 +148,45 @@ void ace_sp_state::ace_sp_portmap(address_map &map)
static INPUT_PORTS_START( ace_sp )
INPUT_PORTS_END
+TIMER_DEVICE_CALLBACK_MEMBER(ace_sp_state::gen_fixfreq)
+{
+ // 6303Y must take vector 0xffea periodically, as amongst other things it clears a counter
+ // in RAM which is increased in one of the other interrupts, with a time-out check which
+ // will cause the game to jump back to the reset vector if it fails
+ //
+ // adding code to the core to generate it at the moment then causes a stack overflow issue
+ // instead, which again the code checks for, and resets if the stack grows too large
+
+ //m_maincpu->force_irq2();
+}
void ace_sp_state::ace_sp(machine_config &config)
{
- HD6303Y(config, m_maincpu, 1000000);
+ HD6303Y(config, m_maincpu, 2000000); // unknown clock
m_maincpu->set_addrmap(AS_PROGRAM, &ace_sp_state::ace_sp_map);
PIA6821(config, "pia0", 0);
+
+ // unknown frequency
+ TIMER(config, "fixedfreq").configure_periodic(FUNC(ace_sp_state::gen_fixfreq), attotime::from_hz(50));
+
+ ACE_SP_REELCTRL(config, m_reelctrl, 2000000); // unknown clock
+
+ config.set_default_layout(layout_ace_sp_dmd);
}
+void ace_sp_state::ace_sp_pcp(machine_config &config)
+{
+ ace_sp(config);
+
+ ACE_SP_REELCTRL_PCP(config.replace(), m_reelctrl, 2000000);
+}
+
+
#define SP_CBOWL_SOUND \
ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) \
- ROM_LOAD( "cashbowlsnd1.bin", 0x0000, 0x80000, CRC(44e67cef) SHA1(3cfe48122da527e82f9058e0c5b81b5096bf4181) ) \
+ ROM_LOAD( "cashbowlsnd1.bin", 0x00000, 0x80000, CRC(44e67cef) SHA1(3cfe48122da527e82f9058e0c5b81b5096bf4181) ) \
ROM_LOAD( "cashbowlsnd2.bin", 0x80000, 0x80000, CRC(a28291a2) SHA1(c07b585cee89bc35c880d24eb6124796d6df423c) )
ROM_START( sp_cbowl )
ROM_REGION( 0x80000, "maincpu", 0 )
@@ -122,7 +211,7 @@ ROM_END
ROM_START( sp_cbowlc )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "cb.bin", 0x0000, 0x010000, CRC(dc454e67) SHA1(57f470fbb44fe50c9c8068bbcdc9b41c617b0d82) ) // just a merged rom?
+ ROM_LOAD( "cb.bin", 0x00000, 0x10000, CRC(dc454e67) SHA1(57f470fbb44fe50c9c8068bbcdc9b41c617b0d82) ) // just a merged rom?
SP_CBOWL_SOUND
ROM_END
@@ -326,7 +415,7 @@ ROM_END
#define SP_EMMRD_SOUND \
ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) \
- ROM_LOAD( "edsnd1.bin", 0x0000, 0x80000, CRC(e91382d7) SHA1(499a0606e9bbabcf207c8778323899b7b81ae372) ) \
+ ROM_LOAD( "edsnd1.bin", 0x00000, 0x80000, CRC(e91382d7) SHA1(499a0606e9bbabcf207c8778323899b7b81ae372) ) \
ROM_LOAD( "edsnd2.bin", 0x80000, 0x80000, CRC(0e103080) SHA1(2dcfcb35d04f34e4bc6da32f2d23bd8685654f8e) )
@@ -416,13 +505,13 @@ ROM_END
ROM_START( sp_emmrdn )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0015rp50.bin", 0x0000, 0x010000, CRC(e37fa624) SHA1(3d7e09a259ed53a88cd4c9dc2e39b1aadb7049c7) ) // just a merged rom?
+ ROM_LOAD( "0015rp50.bin", 0x00000, 0x10000, CRC(e37fa624) SHA1(3d7e09a259ed53a88cd4c9dc2e39b1aadb7049c7) ) // just a merged rom?
SP_EMMRD_SOUND
ROM_END
ROM_START( sp_emmrdo )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0015rp60.bin", 0x0000, 0x010000, CRC(b27378c8) SHA1(dd8dfc587d0c051d1144f4b0205bd8d4a28ceaaf) ) // just a merged rom?
+ ROM_LOAD( "0015rp60.bin", 0x00000, 0x10000, CRC(b27378c8) SHA1(dd8dfc587d0c051d1144f4b0205bd8d4a28ceaaf) ) // just a merged rom?
SP_EMMRD_SOUND
ROM_END
@@ -636,13 +725,13 @@ ROM_END
ROM_START( sp_zigzgl )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0013rp50.bin", 0x0000, 0x010000, CRC(5e7ba11a) SHA1(30477ff930e9f23bf32a5bdf8573fc47ed26773d) ) // just a merged rom?
+ ROM_LOAD( "0013rp50.bin", 0x00000, 0x10000, CRC(5e7ba11a) SHA1(30477ff930e9f23bf32a5bdf8573fc47ed26773d) ) // just a merged rom?
SP_ZIGZAG_SOUND
ROM_END
ROM_START( sp_zigzgm )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0013rp60.bin", 0x0000, 0x010000, CRC(fb439994) SHA1(0820cf663ed5f9600d4e0313a7b3c6f8b28db471) ) // just a merged rom?
+ ROM_LOAD( "0013rp60.bin", 0x00000, 0x10000, CRC(fb439994) SHA1(0820cf663ed5f9600d4e0313a7b3c6f8b28db471) ) // just a merged rom?
SP_ZIGZAG_SOUND
ROM_END
@@ -860,13 +949,13 @@ ROM_END
ROM_START( sp_goldm2 )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0017rp40.bin", 0x0000, 0x010000, CRC(6cdd6c14) SHA1(ef57586a770c0693eb16b381356a90040ab000a6) ) // merged rom?
+ ROM_LOAD( "0017rp40.bin", 0x00000, 0x10000, CRC(6cdd6c14) SHA1(ef57586a770c0693eb16b381356a90040ab000a6) ) // merged rom?
SP_GOLDM_SOUND
ROM_END
ROM_START( sp_goldm3 )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0017rp50.bin", 0x0000, 0x010000, CRC(56e77a5d) SHA1(5eae450637f5e57a08e67306d394a03ad18093aa) )
+ ROM_LOAD( "0017rp50.bin", 0x00000, 0x10000, CRC(56e77a5d) SHA1(5eae450637f5e57a08e67306d394a03ad18093aa) )
SP_GOLDM_SOUND
ROM_END
@@ -1306,7 +1395,7 @@ ROM_END
#define SP_JURAS_SOUND \
ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) \
- ROM_LOAD( "jt8_snd1.bin", 0x0000, 0x80000, CRC(54f02e21) SHA1(1f2142e3cad828f3f07b729ad8394392c3a5ef46) ) \
+ ROM_LOAD( "jt8_snd1.bin", 0x00000, 0x80000, CRC(54f02e21) SHA1(1f2142e3cad828f3f07b729ad8394392c3a5ef46) ) \
ROM_LOAD( "jt8_snd2.bin", 0x80000, 0x80000, CRC(6ae75d87) SHA1(f6a73c26f7715b2a2d69b05d7729571b05b2fdaa) )
ROM_START( sp_juras )
@@ -1466,15 +1555,15 @@ ROM_END
/* not used, or missing? */
ROM_START( sp_playa )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "playitagain-v1-6pound1.bin", 0x0000, 0x8000, CRC(e377e7af) SHA1(4ca7c8ddd15791f4d45bebe861fd3c193c7227e0) )
- ROM_LOAD( "playitagain-v1-6pound2.bin", 0x8000, 0x8000, CRC(7bab5c33) SHA1(46bc6fe7d5cdd998fc1e4e9a4b1a6a95cd160cf0) )
+ ROM_LOAD( "playitagain-v1-6pound2.bin", 0x0000, 0x8000, CRC(7bab5c33) SHA1(46bc6fe7d5cdd998fc1e4e9a4b1a6a95cd160cf0) )
+ ROM_LOAD( "playitagain-v1-6pound1.bin", 0x8000, 0x8000, CRC(e377e7af) SHA1(4ca7c8ddd15791f4d45bebe861fd3c193c7227e0) )
SP_PLAYA_SOUND
ROM_END
ROM_START( sp_playaa )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "575 pask p3.2.bin", 0x0000, 0x8000, CRC(f7d2d40d) SHA1(83e4e83217fef8d92bcba3edf1250d09243f9f79) )
- ROM_LOAD( "575 pa p3.1.bin", 0x0000, 0x8000, CRC(9e51ff86) SHA1(a2da9eee6b5f7211296e8633e5ec8eeec8ec77fd) )
+ ROM_LOAD( "575 pa p3.1.bin", 0x8000, 0x8000, CRC(9e51ff86) SHA1(a2da9eee6b5f7211296e8633e5ec8eeec8ec77fd) )
SP_PLAYA_SOUND
ROM_END
@@ -1537,7 +1626,7 @@ ROM_END
#define SP_SPELL_SOUND \
ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) \
- ROM_LOAD( "spellboundsnd1.bin", 0x0000, 0x80000, CRC(ab462981) SHA1(a88728eb8c5dbf114007551c7b5d4eb06cc7eb0b) ) \
+ ROM_LOAD( "spellboundsnd1.bin", 0x00000, 0x80000, CRC(ab462981) SHA1(a88728eb8c5dbf114007551c7b5d4eb06cc7eb0b) ) \
ROM_LOAD( "spellboundsnd2.bin", 0x80000, 0x80000, CRC(9ada4413) SHA1(2dc9b42cdd3a64b5e5d3eab0d68b109258d12eda) )
ROM_START( sp_spell )
@@ -1598,13 +1687,13 @@ ROM_END
ROM_START( sp_spelli )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0009p5.bin", 0x0000, 0x010000, CRC(5d94418e) SHA1(92a9b6deed307b99bb57193d9974a0b4d76ee569) ) // merged rom
+ ROM_LOAD( "0009p5.bin", 0x00000, 0x10000, CRC(5d94418e) SHA1(92a9b6deed307b99bb57193d9974a0b4d76ee569) ) // merged rom
SP_SPELL_SOUND
ROM_END
ROM_START( sp_spellj )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0009p6.bin", 0x0000, 0x010000, CRC(1b55acee) SHA1(8364cf5b1c1d50f10e1e80031e9b8a587ec0bd39) ) // merged rom
+ ROM_LOAD( "0009p6.bin", 0x00000, 0x10000, CRC(1b55acee) SHA1(8364cf5b1c1d50f10e1e80031e9b8a587ec0bd39) ) // merged rom
SP_SPELL_SOUND
ROM_END
@@ -1980,13 +2069,13 @@ ROM_END
ROM_START( sp_tzfet )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0011rp40.bin", 0x0000, 0x010000, CRC(80600391) SHA1(d45e909bfe26e18047ece19bb8004f14a3388427) ) // merged rom?
+ ROM_LOAD( "0011rp40.bin", 0x00000, 0x10000, CRC(80600391) SHA1(d45e909bfe26e18047ece19bb8004f14a3388427) ) // merged rom?
SP_TZFE_SOUND
ROM_END
ROM_START( sp_tzfeu )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0011rp50.bin", 0x0000, 0x010000, CRC(0ad67cf0) SHA1(b4b436f1f0f0b9a0b50013f85c21f203bf8528d0) ) // merged rom
+ ROM_LOAD( "0011rp50.bin", 0x00000, 0x10000, CRC(0ad67cf0) SHA1(b4b436f1f0f0b9a0b50013f85c21f203bf8528d0) ) // merged rom
SP_TZFE_SOUND
ROM_END
@@ -2114,7 +2203,7 @@ ROM_END
ROM_START( sp_brkbkd )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0008p6.bin", 0x0000, 0x010000, CRC(4fc20e58) SHA1(4530998a60731283430801028a59b7a4fbd3f1bc) ) // merged rom
+ ROM_LOAD( "0008p6.bin", 0x00000, 0x10000, CRC(4fc20e58) SHA1(4530998a60731283430801028a59b7a4fbd3f1bc) ) // merged rom
SP_BRKBK_SOUND
ROM_END
@@ -2427,56 +2516,56 @@ ROM_END
ROM_START( sp_donky )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2b", 0x0000, 0x8000, CRC(49c60006) SHA1(9a4964df1238f267cdf05fa063f7de8b5716da10) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkya )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2c", 0x0000, 0x8000, CRC(c482c400) SHA1(dc5087260772807725ce08e7fd89ee5c19406fe5) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkyb )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2d", 0x0000, 0x8000, CRC(4fd3db89) SHA1(f1233adfbfd95c87ebf7706bb242b7297947699c) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkyc )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2e", 0x0000, 0x8000, CRC(c2971f8f) SHA1(c14db5294c397148293c496d52ac0b41067952b2) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkyd )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2f", 0x0000, 0x8000, CRC(05e1c1df) SHA1(c00fe8553eac50229dc6bf2a5016c353fcb61c82) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkye )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2g", 0x0000, 0x8000, CRC(88a505d9) SHA1(0d10f8e102daddde840b582cb962270f6180a399) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkyf )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2h", 0x0000, 0x8000, CRC(03f41a50) SHA1(907a947449a7dccfff00dca2536e0bc230b5771d) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
ROM_START( sp_donkyg )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "dd663p2i", 0x0000, 0x8000, CRC(8eb0de56) SHA1(6411e9008b09f9387622911e09d954dc7e89c6cf) )
- ROM_LOAD( "dd663p2a", 0x0000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
+ ROM_LOAD( "dd663p2a", 0x8000, 0x8000, CRC(9a477e7e) SHA1(d6206495c1a75ac2c1ce51f24ca18898916b6e11) )
SP_DONKY_SOUND
ROM_END
@@ -2500,7 +2589,7 @@ ROM_END
ROM_START( sp_festi )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0001rp10.bin", 0x0000, 0x010000, CRC(e584c26e) SHA1(dc48e27895c5c0b2004f6bc74ec0bdfa24af9613) ) // merged rom
+ ROM_LOAD( "0001rp10.bin", 0x00000, 0x10000, CRC(e584c26e) SHA1(dc48e27895c5c0b2004f6bc74ec0bdfa24af9613) ) // merged rom
SP_FESTI_SOUND
ROM_END
@@ -2771,7 +2860,7 @@ ROM_END
/* not used, or missing? */
ROM_START( sp_gol )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "gl706p04.bin", 0x0000, 0x010000, CRC(01a48714) SHA1(0a48cfad05905450aa2a7c9dc22f937377894ff0) ) // merged rom
+ ROM_LOAD( "gl706p04.bin", 0x00000, 0x10000, CRC(01a48714) SHA1(0a48cfad05905450aa2a7c9dc22f937377894ff0) ) // merged rom
SP_GOL_SOUND
ROM_END
@@ -2840,26 +2929,26 @@ ROM_END
ROM_START( sp_goldse )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "724p2-0b.bin", 0x0000, 0x8000, CRC(39c3a458) SHA1(6fe06283e8d942c3fa851a29c069dbcf4a9f07a5) )
- ROM_LOAD( "724p2-0a.bin", 0x0000, 0x8000, CRC(26c9e283) SHA1(7b817b89ff751c068de4c76ee1ddb68183bca5c8) )
+ ROM_LOAD( "724p2-0a.bin", 0x8000, 0x8000, CRC(26c9e283) SHA1(7b817b89ff751c068de4c76ee1ddb68183bca5c8) )
SP_GOLDS_SOUND
ROM_END
ROM_START( sp_goldsf )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "724p2-0z.bin", 0x0000, 0x8000, CRC(1219607f) SHA1(c5b4b92a237884df5cc4ca5d5563c9b66b183fa5) )
- ROM_LOAD( "724p2-0a.bin", 0x0000, 0x8000, CRC(26c9e283) SHA1(7b817b89ff751c068de4c76ee1ddb68183bca5c8) )
+ ROM_LOAD( "724p2-0a.bin", 0x8000, 0x8000, CRC(26c9e283) SHA1(7b817b89ff751c068de4c76ee1ddb68183bca5c8) )
SP_GOLDS_SOUND
ROM_END
ROM_START( sp_goldsg )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0021rp30.bin", 0x0000, 0x010000, CRC(3228013a) SHA1(dcf41ddd3003804062cde928bcb5bc409fa66c75) )
+ ROM_LOAD( "0021rp30.bin", 0x00000, 0x10000, CRC(3228013a) SHA1(dcf41ddd3003804062cde928bcb5bc409fa66c75) )
SP_GOLDS_SOUND
ROM_END
ROM_START( sp_goldsh )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0022rp30.bin", 0x0000, 0x010000, CRC(28b80866) SHA1(9f8af3d5cb6a03cba5ba37f2177390eef2950eb4) )
+ ROM_LOAD( "0022rp30.bin", 0x00000, 0x10000, CRC(28b80866) SHA1(9f8af3d5cb6a03cba5ba37f2177390eef2950eb4) )
SP_GOLDS_SOUND
ROM_END
@@ -2959,7 +3048,7 @@ ROM_END
/* not used, or missing? */
ROM_START( sp_lotto )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "sp705p14.bin", 0x0000, 0x010000, CRC(46a8a503) SHA1(39d40c6d34ec1879b037d13b47e648ae09f345d8) ) // merged rom
+ ROM_LOAD( "sp705p14.bin", 0x00000, 0x10000, CRC(46a8a503) SHA1(39d40c6d34ec1879b037d13b47e648ae09f345d8) ) // merged rom
SP_LOTTO_SOUND
ROM_END
@@ -3060,7 +3149,7 @@ ROM_END
ROM_START( sp_megmog )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0004p6.bin", 0x0000, 0x010000, CRC(fcfa212d) SHA1(968cc358450d85e6fd4e3086347be7d34d68e012) ) // merged rom
+ ROM_LOAD( "0004p6.bin", 0x00000, 0x10000, CRC(fcfa212d) SHA1(968cc358450d85e6fd4e3086347be7d34d68e012) ) // merged rom
SP_MEGMO_SOUND
ROM_END
@@ -3287,13 +3376,13 @@ ROM_END
ROM_START( sp_onboxm )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0016rp40.bin", 0x0000, 0x010000, CRC(591e3e24) SHA1(b147bfc19aa46eb3237b270d771031caaf978850) ) // merged rom
+ ROM_LOAD( "0016rp40.bin", 0x00000, 0x10000, CRC(591e3e24) SHA1(b147bfc19aa46eb3237b270d771031caaf978850) ) // merged rom
SP_ONBOX_SOUND
ROM_END
ROM_START( sp_onboxn )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "0016rp50.bin", 0x0000, 0x010000, CRC(73c5c449) SHA1(453969ec5c4fe1ce8f118110106e31126a358cda) ) // merged rom
+ ROM_LOAD( "0016rp50.bin", 0x00000, 0x10000, CRC(73c5c449) SHA1(453969ec5c4fe1ce8f118110106e31126a358cda) ) // merged rom
SP_ONBOX_SOUND
ROM_END
@@ -3418,7 +3507,7 @@ ROM_END
ROM_START( sp_pistep )
ROM_REGION( 0x80000, "maincpu", 0 )
- ROM_LOAD( "otp10.bin", 0x0000, 0x010000, CRC(8a9e40df) SHA1(be1c8c5733d65dbdfefcaeb35050d82d59c75450) ) // merged rom
+ ROM_LOAD( "otp10.bin", 0x00000, 0x10000, CRC(8a9e40df) SHA1(be1c8c5733d65dbdfefcaeb35050d82d59c75450) ) // merged rom
SP_PISTE_SOUND
ROM_END
@@ -3781,10 +3870,10 @@ ROM_END
ROM_REGION( 0x100000, "oki", ROMREGION_ERASE00 ) \
/* actually I think this rom is just a bad dump, there is a rom which is the same in the JPM HW set, */ \
/* but twice the size. Also this isn't an oki rom! */ \
- ROM_LOAD( "atw80snd.bin", 0x0000, 0x020000, CRC(b002e11c) SHA1(f7133f4bb8c31feaad0a7b9ee88749f9b7877575) )
+ ROM_LOAD( "atw80snd.bin", 0x00000, 0x20000, CRC(b002e11c) SHA1(f7133f4bb8c31feaad0a7b9ee88749f9b7877575) )
ROM_START( sp_atw )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "artwld80", 0x0000, 0x010000, CRC(3ff314c3) SHA1(345df80243953b35916449b0aa6ffaf9d3501d2b) ) // pre-decrypted? bootleg?
+ ROM_LOAD( "artwld80", 0x00000, 0x10000, CRC(3ff314c3) SHA1(345df80243953b35916449b0aa6ffaf9d3501d2b) ) // pre-decrypted? bootleg?
SP_ATW_SOUND
ROM_END
@@ -3794,13 +3883,13 @@ ROM_END
ROM_START( sp_five )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "fn19.bin", 0x0000, 0x010000, CRC(4721ccf8) SHA1(a6b7b238df7e7cf45c049b4fb16bf0c05fb95b41) )
+ ROM_LOAD( "fn19.bin", 0x00000, 0x10000, CRC(4721ccf8) SHA1(a6b7b238df7e7cf45c049b4fb16bf0c05fb95b41) )
SP_FIVE_SOUND
ROM_END
ROM_START( sp_fivea )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "fn19p.bin", 0x0000, 0x010000, CRC(ac2de72f) SHA1(61263944fe29b5f5c79c987989a784b32700c902) )
+ ROM_LOAD( "fn19p.bin", 0x00000, 0x10000, CRC(ac2de72f) SHA1(61263944fe29b5f5c79c987989a784b32700c902) )
SP_FIVE_SOUND
ROM_END
@@ -3811,19 +3900,19 @@ ROM_END
ROM_START( sp_crun )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "crun411.bin", 0x0000, 0x010000, CRC(74a69327) SHA1(087d791b8e5c43a9c614f5f4344ce2524a8c445d) )
+ ROM_LOAD( "crun411.bin", 0x00000, 0x10000, CRC(74a69327) SHA1(087d791b8e5c43a9c614f5f4344ce2524a8c445d) )
SP_CRUN_SOUND
ROM_END
ROM_START( sp_cruna )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "em111.bin", 0x0000, 0x010000, CRC(c1e9d4ec) SHA1(49eadcf7880d68c1559e94f4389eca739a3b04d7) )
+ ROM_LOAD( "em111.bin", 0x00000, 0x10000, CRC(c1e9d4ec) SHA1(49eadcf7880d68c1559e94f4389eca739a3b04d7) )
SP_CRUN_SOUND
ROM_END
ROM_START( sp_crunb )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "em111p.bin", 0x0000, 0x010000, CRC(bbe90c64) SHA1(5e65c318f14f7aa160f3d0daeb1f3038df162b65) )
+ ROM_LOAD( "em111p.bin", 0x00000, 0x10000, CRC(bbe90c64) SHA1(5e65c318f14f7aa160f3d0daeb1f3038df162b65) )
SP_CRUN_SOUND
ROM_END
@@ -3839,7 +3928,7 @@ ROM_END
ROM_START( sp_roofa )
ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "034p1-2i.bin", 0x000000, 0x008000, CRC(a64797fc) SHA1(7437dc2e203efc525aab251da5196d31b95d159a) )
+ ROM_LOAD( "034p1-2i.bin", 0x0000, 0x8000, CRC(a64797fc) SHA1(7437dc2e203efc525aab251da5196d31b95d159a) )
ROM_LOAD( "034p1-2a.bin", 0x8000, 0x8000, NO_DUMP )
SP_ROOF_SOUND
ROM_END
@@ -4419,11 +4508,6 @@ GAME( 199?, sp_tkpikd, sp_tkpik, ace_sp, ace_sp, ace_sp_state, init_ace_sp, R
GAME( 199?, sp_tkpike, sp_tkpik, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Ace", "Take Your Pick (Ace) (sp.ACE) (set 6)",MACHINE_IS_SKELETON_MECHANICAL )
GAME( 199?, sp_tkpikf, sp_tkpik, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Ace", "Take Your Pick (Ace) (sp.ACE) (set 7)",MACHINE_IS_SKELETON_MECHANICAL )
// not sure.. looks like 6303 code to me
-GAME( 199?, sp_carry, 0, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0,"Pcp", "Carry On (Pcp) (sp.ACE?) (set 1)",MACHINE_IS_SKELETON_MECHANICAL )
-GAME( 199?, sp_carrya, sp_carry, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0,"Pcp", "Carry On (Pcp) (sp.ACE?) (set 2)",MACHINE_IS_SKELETON_MECHANICAL )
-// not sure.. looks like 6303 code to me
-GAME( 199?, sp_front, 0, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Bwb", "Final Frontier (Bwb) (sp.ACE?)",MACHINE_IS_SKELETON_MECHANICAL )
-// not sure.. looks like 6303 code to me
GAME( 199?, sp_atw, 0, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Crystal","Around The World In Eighty Days (Crystal) (sp.ACE?)",MACHINE_IS_SKELETON_MECHANICAL )
// not sure.. looks like 6303 code to me
GAME( 199?, sp_five, 0, ace_sp, ace_sp, ace_sp_state, init_ace_cr, ROT0, "Crystal","Fiver Fever (Crystal) (sp.ACE?) (set 1)",MACHINE_IS_SKELETON_MECHANICAL )
@@ -4438,3 +4522,11 @@ GAME( 199?, sp_roof, 0, ace_sp, ace_sp, ace_sp_state, init_ace_sp, R
GAME( 199?, sp_roofa, sp_roof, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Ace", "Thru' The Roof (Ace) (sp.ACE) (set 2)",MACHINE_IS_SKELETON_MECHANICAL )
GAME( 199?, sp_cpal, 0, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Ace", "Caesars Palace (Ace) (sp.ACE?)",MACHINE_IS_SKELETON_MECHANICAL ) // was in an IMPACT set, might be a different game but CPU seems correct for here
+
+// these show something
+
+GAME( 199?, sp_carry, 0, ace_sp_pcp, ace_sp, ace_sp_state, init_ace_sp, ROT0,"Pcp", "Carry On (Pcp) (sp.ACE) (set 1)",MACHINE_IS_SKELETON_MECHANICAL )
+GAME( 199?, sp_carrya, sp_carry, ace_sp_pcp, ace_sp, ace_sp_state, init_ace_sp, ROT0,"Pcp", "Carry On (Pcp) (sp.ACE) (set 2)",MACHINE_IS_SKELETON_MECHANICAL )
+// boots to 'Fire Crak V1' (maybe DMD wasn't visible on this machine or this is mislabaled?)
+GAME( 199?, sp_front, 0, ace_sp, ace_sp, ace_sp_state, init_ace_sp, ROT0, "Bwb", "Final Frontier (Bwb) (sp.ACE)",MACHINE_IS_SKELETON_MECHANICAL )
+
diff --git a/src/mame/layout/ace_sp_dmd.lay b/src/mame/layout/ace_sp_dmd.lay
new file mode 100644
index 00000000000..e00e8abeabd
--- /dev/null
+++ b/src/mame/layout/ace_sp_dmd.lay
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+ <element name="dotmatrixdot">
+ <rect>
+ <color red="0" green="0" blue="0" />
+ <bounds left="-0.05" top="-0.05" right="1.05" bottom="1.05" />
+ </rect>
+ <disk>
+ <color state="1" red="1.0" green="1.0" blue="1.0" />
+ <color state="0" red="0.125" green="0.125" blue="0.125" />
+ </disk>
+ </element>
+
+ <group name="dmd">
+ <repeat count="24">
+ <param name="s" start="0" increment="64" />
+ <param name="y" start="0" increment="1" />
+ <repeat count="64">
+ <param name="n" start="~s~" increment="1" />
+ <param name="x" start="0" increment="1" />
+ <element name="dotmatrix~n~" ref="dotmatrixdot" state="0">
+ <bounds x="~x~" y="~y~" width="1" height="1" />
+ <color red="1.0" green="0.12" blue="0.12" />
+ </element>
+ </repeat>
+ </repeat>
+ </group>
+
+ <view name="AWP Simulated Video">
+ <group ref="dmd">
+ <bounds x="0" y="0" width="520" height="168" />
+ </group>
+ </view>
+
+</mamelayout>
diff --git a/src/mame/machine/ace_sp_reelctrl.cpp b/src/mame/machine/ace_sp_reelctrl.cpp
new file mode 100644
index 00000000000..b4fd316b235
--- /dev/null
+++ b/src/mame/machine/ace_sp_reelctrl.cpp
@@ -0,0 +1,63 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+// This device handles the reel controller boards for the sp.ACE system which were based around a 68705P3 MCU
+// The PCP version is a reverse engineered clone of the original ACE one, created by PCP to get their own
+// games on the platform. They are not fully compatible with each other.
+
+#include "emu.h"
+#include "ace_sp_reelctrl.h"
+
+DEFINE_DEVICE_TYPE(ACE_SP_REELCTRL, ace_sp_reelctrl_device, "ace_sp_reelctrl", "ACE sp.ACE Reel Controller PCB")
+DEFINE_DEVICE_TYPE(ACE_SP_REELCTRL_PCP, ace_sp_reelctrl_pcp_device, "ace_sp_reelctrl_pcp", "ACE sp.ACE Reel Controller PCB (PCP clone)")
+
+ace_sp_reelctrl_base_device::ace_sp_reelctrl_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, type, tag, owner, clock)
+ , m_mcu(*this, "mcu")
+{
+}
+
+ace_sp_reelctrl_device::ace_sp_reelctrl_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : ace_sp_reelctrl_base_device(mconfig, ACE_SP_REELCTRL, tag, owner, clock)
+{
+}
+
+ace_sp_reelctrl_pcp_device::ace_sp_reelctrl_pcp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : ace_sp_reelctrl_base_device(mconfig, ACE_SP_REELCTRL_PCP, tag, owner, clock)
+{
+}
+
+
+void ace_sp_reelctrl_base_device::device_start()
+{
+}
+
+void ace_sp_reelctrl_base_device::device_reset()
+{
+}
+
+void ace_sp_reelctrl_base_device::device_add_mconfig(machine_config &config)
+{
+ M68705P3(config, m_mcu, DERIVED_CLOCK(1, 1));
+}
+
+ROM_START( ace_sp_reelctrl )
+ ROM_REGION16_BE( 0x0800, "mcu", 0 )
+ ROM_LOAD( "ace reel mcu v9 _space_.bin", 0, 0x0800, CRC(d7b91fe0) SHA1(44f78da8138caf4f79f1e8e9a2abe53d79c0fe79) ) // MC68705P3 internal ROM
+ROM_END
+
+const tiny_rom_entry *ace_sp_reelctrl_device::device_rom_region() const
+{
+ return ROM_NAME(ace_sp_reelctrl);
+}
+
+ROM_START( ace_sp_reelctrl_pcp )
+ ROM_REGION16_BE( 0x0800, "mcu", 0 )
+ ROM_LOAD( "pcp reel mcu fcr 1 _space_.bin", 0, 0x0800, CRC(1c8019bf) SHA1(d1d6ea68d9aace4a4ea0de212f17426bccfe5856) ) // MC68705P3 internal ROM
+ROM_END
+
+const tiny_rom_entry *ace_sp_reelctrl_pcp_device::device_rom_region() const
+{
+ return ROM_NAME(ace_sp_reelctrl_pcp);
+}
+
diff --git a/src/mame/machine/ace_sp_reelctrl.h b/src/mame/machine/ace_sp_reelctrl.h
new file mode 100644
index 00000000000..949e4755382
--- /dev/null
+++ b/src/mame/machine/ace_sp_reelctrl.h
@@ -0,0 +1,54 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#ifndef MAME_MACHINE_ACE_SP_REELCTRL_H
+#define MAME_MACHINE_ACE_SP_REELCTRL_H
+
+#pragma once
+
+#include "cpu/m6805/m68705.h"
+
+class ace_sp_reelctrl_base_device : public device_t
+{
+public:
+protected:
+ ace_sp_reelctrl_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
+
+ // device-level overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ virtual void device_add_mconfig(machine_config &config) override;
+
+private:
+ required_device<m68705p_device> m_mcu;
+};
+
+class ace_sp_reelctrl_device : public ace_sp_reelctrl_base_device
+{
+public:
+ ace_sp_reelctrl_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+};
+
+class ace_sp_reelctrl_pcp_device : public ace_sp_reelctrl_base_device
+{
+public:
+ ace_sp_reelctrl_pcp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+};
+
+DECLARE_DEVICE_TYPE(ACE_SP_REELCTRL, ace_sp_reelctrl_device)
+DECLARE_DEVICE_TYPE(ACE_SP_REELCTRL_PCP, ace_sp_reelctrl_pcp_device)
+
+
+#endif // #define MAME_MACHINE_ACE_SP_REELCTRL_H
+