summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mahlemiut <mahlemiut@users.noreply.github.com>2013-10-01 11:01:16 +0000
committer mahlemiut <mahlemiut@users.noreply.github.com>2013-10-01 11:01:16 +0000
commit6fcda61d9ad77e01978f56725734029f9a4d12f7 (patch)
tree0159bf11baa2352d8e1e0f53b34745c794d427e1
parent975435ad75b206eca277899eb44ca2786cbeb422 (diff)
wpc_an: added ROM banking, switches, and IRQs. Games now start to boot.
-rw-r--r--.gitattributes1
-rw-r--r--src/mame/drivers/wpc_an.c407
-rw-r--r--src/mame/layout/wpc_an.lay151
-rw-r--r--src/mame/mame.mak2
4 files changed, 491 insertions, 70 deletions
diff --git a/.gitattributes b/.gitattributes
index ce3982d880c..e5b10ec4e06 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -4997,6 +4997,7 @@ src/mame/layout/wecleman.lay svneol=native#text/plain
src/mame/layout/wico.lay svneol=native#text/plain
src/mame/layout/wildone.lay svneol=native#text/plain
src/mame/layout/wldarrow.lay svneol=native#text/plain
+src/mame/layout/wpc_an.lay svneol=native#text/plain
src/mame/layout/zac_1.lay svneol=native#text/plain
src/mame/layout/zac_2.lay svneol=native#text/plain
src/mame/layout/zac_proto.lay svneol=native#text/plain
diff --git a/src/mame/drivers/wpc_an.c b/src/mame/drivers/wpc_an.c
index bd6e4c6b1d3..5e4c1d2fab2 100644
--- a/src/mame/drivers/wpc_an.c
+++ b/src/mame/drivers/wpc_an.c
@@ -5,46 +5,330 @@
#include "emu.h"
#include "cpu/m6809/m6809.h"
+#include "wpc_an.lh"
+
+#define LOG_WPC (1)
+
+/* AMFDS9 */
+/* Printer board */
+#define WPC_PRINTBUSY (0x10) /* xxxxx R: Printer ready ??? */
+#define WPC_PRINTDATA (0x11) /* xxxxx W: send to printer */
+#define WPC_PRINTDATAX (0x12) /* xxxxx W: 0: Printer data available */
+/* Sound board */
+#define WPC_SOUNDIF (0x2c) /* xxx RW: Sound board interface */
+#define WPC_SOUNDBACK (0x2d) /* xxx RW: R: Sound data availble, W: Reset soundboard ? */
+
+#define WPC_SOLENOID1 (0x30) /* xxxxxx W: Solenoid 25-28 */
+#define WPC_SOLENOID2 (0x31) /* xxxxxx W: Solenoid 1- 8 */
+#define WPC_SOLENOID3 (0x32) /* xxxxxx W: Solenoid 17-24 */
+#define WPC_SOLENOID4 (0x33) /* xxxxxx W: Solenoid 9-16 */
+#define WPC_LAMPROW (0x34) /* xxxxxx W: Lamp row */
+#define WPC_LAMPCOLUMN (0x35) /* xxxxxx W: Lamp column enable */
+#define WPC_GILAMPS (0x36) /* W: GI lights ?? */
+#define WPC_DIPSWITCH (0x37) /* xxxxxx R: CPU board dip-switches */
+#define WPC_SWCOINDOOR (0x38) /* xxxxxx W: Coin door switches */
+#define WPC_SWROWREAD (0x39) /* xxxx R: Switch row read */
+#define WPC_SWCOLSELECT (0x3a) /* xxxx W: Switch column enable */
+#define WPC_ALPHAPOS (0x3b) /* x W: Select alphanumeric position */
+#define WPC_ALPHA1LO (0x3c) /* x W: Display 1st row hi bits */
+#define WPC_ALPHA1HI (0x3d) /* x W: Display 1st row lo bits */
+#define WPC_ALPHA2LO (0x3e) /* x W: Display 2nd row hi bits */
+#define WPC_ALPHA2HI (0x3f) /* x W: b 2nd row lo bits */
+#define WPC_LED (0x42) /* xxxxxx W: CPU LED (bit 7) */
+#define WPC_IRQACK (0x43) /* W: IRQ Ack ??? */
+#define WPC_SHIFTADRH (0x44) /* xxxxxx RW: See above */
+#define WPC_SHIFTADRL (0x45) /* xxxxxx RW: See above */
+#define WPC_SHIFTBIT (0x46) /* xxxxxx RW: See above */
+#define WPC_SHIFTBIT2 (0x47) /* xxxxxx RW: See above */
+#define WPC_RTCHOUR (0x4a) /* xxxxxx RW: Real time clock: hour */
+#define WPC_RTCMIN (0x4b) /* xxxxxx RW: Real time clock: minute */
+#define WPC_ROMBANK (0x4c) /* xxxxxx W: Rombank switch */
+#define WPC_PROTMEM (0x4d) /* xxxxxx W: enabled/disable protected memory */
+#define WPC_PROTMEMCTRL (0x4e) /* xxxxxx W: Set protected memory area */
+#define WPC_WATCHDOG (0x4f) /* xxxxxx W: Watchdog */
class wpc_an_state : public driver_device
{
public:
wpc_an_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
+ m_maincpu(*this, "maincpu"),
+ m_cpubank(*this, "cpubank")
{ }
protected:
// devices
required_device<cpu_device> m_maincpu;
+ required_memory_bank m_cpubank;
// driver_device overrides
virtual void machine_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+ static const device_timer_id TIMER_VBLANK = 0;
+ static const device_timer_id TIMER_IRQ = 1;
+ static const device_timer_id TIMER_ZEROCROSS = 2;
public:
DECLARE_DRIVER_INIT(wpc_an);
+ DECLARE_READ8_MEMBER(wpc_r);
+ DECLARE_WRITE8_MEMBER(wpc_w);
+private:
+ UINT8 m_alpha_pos; // selected LED position
+ UINT16 m_alpha_data[40];
+ UINT16 m_vblank_count;
+ UINT32 m_irq_count;
+ UINT8 m_switch_col; // select switch column
+ bool m_zerocross;
+ UINT8 m_bankmask;
+ emu_timer* m_vblank_timer;
+ emu_timer* m_irq_timer;
+ emu_timer* m_zc_timer;
};
static ADDRESS_MAP_START( wpc_an_map, AS_PROGRAM, 8, wpc_an_state )
- AM_RANGE(0x0000, 0xffff) AM_NOP
+ AM_RANGE(0x0000, 0x2fff) AM_RAM
+ AM_RANGE(0x3c00, 0x3faf) AM_RAM
+ AM_RANGE(0x3fb0, 0x3fff) AM_READWRITE(wpc_r,wpc_w) // WPC device
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("cpubank")
+ AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
static INPUT_PORTS_START( wpc_an )
+ PORT_START("INP0")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("INP1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) // left flipper
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) // right flipper
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER )
+
+ PORT_START("INP2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) // always closed
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K)
+
+ PORT_START("INP4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
+
+ PORT_START("INP8")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("INP10")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
+
+ PORT_START("INP20")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
+
+ PORT_START("INP40")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LALT)
+ PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("INP80")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("COIN")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service / Escape") PORT_CODE(KEYCODE_DEL_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_VOLUME_DOWN ) PORT_CODE(KEYCODE_MINUS_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_VOLUME_UP ) PORT_CODE(KEYCODE_PLUS_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Begin Test / Enter") PORT_CODE(KEYCODE_ENTER_PAD)
+
+ PORT_START("DIPS")
+ PORT_DIPNAME(0x01,0x01,"Switch 1") PORT_DIPLOCATION("SWA:1")
+ PORT_DIPSETTING(0x00,DEF_STR( Off ))
+ PORT_DIPSETTING(0x01,DEF_STR( On ))
+ PORT_DIPNAME(0x02,0x02,"Switch 2") PORT_DIPLOCATION("SWA:2")
+ PORT_DIPSETTING(0x00,DEF_STR( Off ))
+ PORT_DIPSETTING(0x02,DEF_STR( On ))
+ PORT_DIPNAME(0x04,0x00,"W20") PORT_DIPLOCATION("SWA:3")
+ PORT_DIPSETTING(0x00,DEF_STR( Off ))
+ PORT_DIPSETTING(0x04,DEF_STR( On ))
+ PORT_DIPNAME(0x08,0x00,"W19") PORT_DIPLOCATION("SWA:4")
+ PORT_DIPSETTING(0x00,DEF_STR( Off ))
+ PORT_DIPSETTING(0x08,DEF_STR( On ))
+ PORT_DIPNAME(0xf0,0x00,"Country") PORT_DIPLOCATION("SWA:5,6,7,8")
+ PORT_DIPSETTING(0x00,"USA 1")
+ PORT_DIPSETTING(0x10,"France 1")
+ PORT_DIPSETTING(0x20,"Germany")
+ PORT_DIPSETTING(0x30,"France 2")
+ PORT_DIPSETTING(0x40,"Unknown 1")
+ PORT_DIPSETTING(0x50,"Unknown 2")
+ PORT_DIPSETTING(0x60,"Unknown 3")
+ PORT_DIPSETTING(0x70,"Unknown 4")
+ PORT_DIPSETTING(0x80,"Export 1")
+ PORT_DIPSETTING(0x90,"France 3")
+ PORT_DIPSETTING(0xa0,"Export 2")
+ PORT_DIPSETTING(0xb0,"France 4")
+ PORT_DIPSETTING(0xc0,"UK")
+ PORT_DIPSETTING(0xd0,"Europe")
+ PORT_DIPSETTING(0xe0,"Spain")
+ PORT_DIPSETTING(0xf0,"USA 2")
+
INPUT_PORTS_END
+void wpc_an_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ int x;
+ switch(id)
+ {
+ case TIMER_VBLANK:
+ m_vblank_count++;
+ // update LED segments
+ for(x=0;x<16;x++)
+ {
+ output_set_digit_value(x,BITSWAP16(m_alpha_data[x], 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
+ output_set_digit_value(x+16,BITSWAP16(m_alpha_data[20+x], 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
+ }
+ memset(m_alpha_data,0,40*2);
+ break;
+ case TIMER_IRQ:
+ m_maincpu->set_input_line(M6809_IRQ_LINE,ASSERT_LINE);
+ break;
+ case TIMER_ZEROCROSS:
+ m_zerocross = true;
+ break;
+ }
+}
+
+READ8_MEMBER(wpc_an_state::wpc_r)
+{
+ UINT8 ret = 0x00;
+ char kbdrow[8];
+
+ switch(offset)
+ {
+ case WPC_WATCHDOG:
+ if(m_zerocross)
+ {
+ ret |= 0x80;
+ m_irq_count = 0;
+ }
+ m_zerocross = false;
+ break;
+ case WPC_SWROWREAD:
+ sprintf(kbdrow,"INP%X",(m_switch_col));
+ ret = ~ioport(kbdrow)->read();
+ break;
+ case WPC_SWCOINDOOR:
+ ret = ~ioport("COIN")->read();
+ break;
+ case WPC_DIPSWITCH:
+ ret = ioport("DIPS")->read();
+ break;
+ }
+ return ret;
+}
+
+WRITE8_MEMBER(wpc_an_state::wpc_w)
+{
+ switch(offset)
+ {
+ case WPC_ROMBANK:
+ m_cpubank->set_entry(data & m_bankmask);
+ if(LOG_WPC) logerror("WPC: ROM bank set to %02x\n",data & m_bankmask);
+ break;
+ case WPC_ALPHAPOS:
+ m_alpha_pos = data & 0x1f;
+ break;
+ case WPC_ALPHA1LO:
+ m_alpha_data[m_alpha_pos] |= data;
+ break;
+ case WPC_ALPHA1HI:
+ m_alpha_data[m_alpha_pos] |= (data << 8);
+ break;
+ case WPC_ALPHA2LO:
+ m_alpha_data[20+m_alpha_pos] |= data;
+ break;
+ case WPC_ALPHA2HI:
+ m_alpha_data[20+m_alpha_pos] |= (data << 8);
+ break;
+ case WPC_IRQACK:
+ m_maincpu->set_input_line(M6809_IRQ_LINE,CLEAR_LINE);
+ break;
+ case WPC_WATCHDOG:
+ if(data & 0x80)
+ {
+ m_irq_count++;
+ m_maincpu->set_input_line(M6809_IRQ_LINE,CLEAR_LINE);
+ }
+ break;
+ case WPC_SWCOLSELECT:
+ m_switch_col = data;
+ break;
+ }
+}
+
void wpc_an_state::machine_reset()
{
+ m_cpubank->set_entry(0);
+ m_vblank_count = 0;
+ m_irq_count = 0;
+ m_zerocross = false;
}
DRIVER_INIT_MEMBER(wpc_an_state,wpc_an)
{
+ UINT8 *ROM = memregion("maincpu")->base();
+ m_cpubank->configure_entries(0, 32, &ROM[0x10000], 0x4000);
+ m_cpubank->set_entry(0);
+ m_vblank_timer = timer_alloc(TIMER_VBLANK);
+ m_vblank_timer->adjust(attotime::from_hz(60),0,attotime::from_hz(60));
+ m_irq_timer = timer_alloc(TIMER_IRQ);
+ m_irq_timer->adjust(attotime::from_hz(976),0,attotime::from_hz(976));
+ m_zc_timer = timer_alloc(TIMER_ZEROCROSS);
+ m_zc_timer->adjust(attotime::from_hz(120),0,attotime::from_hz(120));
+ m_bankmask = ((memregion("maincpu")->bytes()-0x10000) >> 14) - 1;
+ logerror("WPC: ROM bank mask = %02x\n",m_bankmask);
}
static MACHINE_CONFIG_START( wpc_an, wpc_an_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M6809, 2000000)
MCFG_CPU_PROGRAM_MAP(wpc_an_map)
+
+ MCFG_DEFAULT_LAYOUT(layout_wpc_an)
MACHINE_CONFIG_END
@@ -52,10 +336,9 @@ MACHINE_CONFIG_END
/ Dr. Dude
/------------------*/
ROM_START(dd_p7)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x020000, "user2", 0)
- ROM_LOAD("dude_u6.p7", 0x00000, 0x020000, CRC(b6c35b98) SHA1(5e9d70ce40669e2f402561dc1d8aa70a8b8a2958))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("dude_u6.p7", 0x10000, 0x18000, CRC(b6c35b98) SHA1(5e9d70ce40669e2f402561dc1d8aa70a8b8a2958))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x30000, "sound1", 0)
ROM_LOAD("dude_u4.l1", 0x00000, 0x10000, CRC(3eeef714) SHA1(74dcc83958cb62819e0ac36ca83001694faafec7))
@@ -64,10 +347,9 @@ ROM_START(dd_p7)
ROM_END
ROM_START(dd_p06)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x020000, "user2", 0)
- ROM_LOAD("u6-pa6.wpc", 0x00000, 0x020000, CRC(fb72571b) SHA1(a12b32eac3141c881064e6de2f49d6d213248fde))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u6-pa6.wpc", 0x10000, 0x18000, CRC(fb72571b) SHA1(a12b32eac3141c881064e6de2f49d6d213248fde))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x30000, "sound1", 0)
ROM_LOAD("dude_u4.l1", 0x00000, 0x10000, CRC(3eeef714) SHA1(74dcc83958cb62819e0ac36ca83001694faafec7))
@@ -79,10 +361,9 @@ ROM_END
/ Funhouse
/--------------*/
ROM_START(fh_l9)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x040000, "user2", 0)
- ROM_LOAD("funh_l9.rom", 0x00000, 0x040000, CRC(c8f90ff8) SHA1(8d200ea30a68f5e3ba1ac9232a516c44b765eb45))
+ ROM_REGION(0x50000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("funh_l9.rom", 0x10000, 0x38000, CRC(c8f90ff8) SHA1(8d200ea30a68f5e3ba1ac9232a516c44b765eb45))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("fh_u18.sl3", 0x000000, 0x20000, CRC(7f6c7045) SHA1(8c8d601e8e6598507d75b4955ccc51623124e8ab))
@@ -100,10 +381,9 @@ ROM_START(fh_l9)
ROM_END
ROM_START(fh_l9b)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x040000, "user2", 0)
- ROM_LOAD("fh_l9ger.rom", 0x00000, 0x040000, CRC(e9b32a8f) SHA1(deb77f0d025001ddcc3045b4e49176c54896da3f))
+ ROM_REGION(0x50000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("fh_l9ger.rom", 0x10000, 0x38000, CRC(e9b32a8f) SHA1(deb77f0d025001ddcc3045b4e49176c54896da3f))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x010000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("fh_u18.sl3", 0x000000, 0x20000, CRC(7f6c7045) SHA1(8c8d601e8e6598507d75b4955ccc51623124e8ab))
@@ -121,10 +401,9 @@ ROM_START(fh_l9b)
ROM_END
ROM_START(fh_l3)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x020000, "user2", 0)
- ROM_LOAD("u6-l3.rom", 0x00000, 0x020000, CRC(7a74d702) SHA1(91540cdc62c855b4139b202aa6ad5440b2dee141))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u6-l3.rom", 0x10000, 0x18000, CRC(7a74d702) SHA1(91540cdc62c855b4139b202aa6ad5440b2dee141))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("fh_u18.sl2", 0x000000, 0x20000, CRC(11c8944a) SHA1(425d8da5a036c41e054d201b99856319fd5ef9e2))
@@ -142,10 +421,9 @@ ROM_START(fh_l3)
ROM_END
ROM_START(fh_l4)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x040000, "user2", 0)
- ROM_LOAD("u6-l4.rom", 0x00000, 0x020000, CRC(f438aaca) SHA1(42bf75325a0e85a4334a5a710c2eddf99160ffbf))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u6-l4.rom", 0x10000, 0x18000, CRC(f438aaca) SHA1(42bf75325a0e85a4334a5a710c2eddf99160ffbf))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("fh_u18.sl2", 0x000000, 0x20000, CRC(11c8944a) SHA1(425d8da5a036c41e054d201b99856319fd5ef9e2))
@@ -164,10 +442,9 @@ ROM_START(fh_l4)
ROM_END
ROM_START(fh_l5)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x040000, "user2", 0)
- ROM_LOAD("u6-l5.rom", 0x00000, 0x020000, CRC(e2b25da4) SHA1(87129e18c60a65035ade2f4766c154d5d333696b))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u6-l5.rom", 0x10000, 0x18000, CRC(e2b25da4) SHA1(87129e18c60a65035ade2f4766c154d5d333696b))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("fh_u18.sl2", 0x000000, 0x20000, CRC(11c8944a) SHA1(425d8da5a036c41e054d201b99856319fd5ef9e2))
@@ -185,10 +462,9 @@ ROM_START(fh_l5)
ROM_END
ROM_START(fh_905h)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x080000, "user2", 0)
- ROM_LOAD("fh_905h.rom", 0x00000, 0x080000, CRC(445b632a) SHA1(6e277027a1d025e2b93f0d7736b414ba3a68a4f8))
+ ROM_REGION(0x90000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("fh_905h.rom", 0x10000, 0x78000, CRC(445b632a) SHA1(6e277027a1d025e2b93f0d7736b414ba3a68a4f8))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("fh_u18.sl3", 0x000000, 0x20000, CRC(7f6c7045) SHA1(8c8d601e8e6598507d75b4955ccc51623124e8ab))
@@ -210,10 +486,9 @@ ROM_END
/ Harley Davidson
/------------------*/
ROM_START(hd_l3)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x020000, "user2", 0)
- ROM_LOAD("harly_l3.rom", 0x00000, 0x020000, CRC(65f2e0b4) SHA1(a44216c13b9f9adf4161ff6f9eeceba28ef37963))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("harly_l3.rom", 0x10000, 0x18000, CRC(65f2e0b4) SHA1(a44216c13b9f9adf4161ff6f9eeceba28ef37963))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("hd_u18.rom", 0x000000, 0x20000, CRC(810d98c0) SHA1(8080cbbe0f346020b2b2b8e97015dbb615dbadb3))
@@ -227,10 +502,9 @@ ROM_START(hd_l3)
ROM_END
ROM_START(hd_l1)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x020000, "user2", 0)
- ROM_LOAD("u6-l1.rom", 0x00000, 0x020000, CRC(a0bdcfbf) SHA1(f906ffa2d4d04e87225bf711a07dd3bee1655a40))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u6-l1.rom", 0x10000, 0x18000, CRC(a0bdcfbf) SHA1(f906ffa2d4d04e87225bf711a07dd3bee1655a40))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1", 0)
ROM_LOAD("u18-sp1.rom", 0x000000, 0x20000, CRC(708aa419) SHA1(cfc2692fb3bcbacceb85021e282bfbc8dcdf8fcc))
@@ -247,10 +521,9 @@ ROM_END
/ The Machine: Bride of Pinbot
/------------------*/
ROM_START(bop_l7)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x40000, "user2", 0)
- ROM_LOAD("tmbopl_7.rom", 0x00000, 0x40000, CRC(773e1488) SHA1(36e8957b3903b99844a76bf15ba393b17db0db59))
+ ROM_REGION(0x50000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tmbopl_7.rom", 0x10000, 0x38000, CRC(773e1488) SHA1(36e8957b3903b99844a76bf15ba393b17db0db59))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1",0)
ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
@@ -268,10 +541,9 @@ ROM_START(bop_l7)
ROM_END
ROM_START(bop_l6)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x20000, "user2", 0)
- ROM_LOAD("tmbopl_6.rom", 0x00000, 0x20000, CRC(96b844d6) SHA1(981194c249a8fc2534e24ef672380d751a5dc5fd))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tmbopl_6.rom", 0x10000, 0x18000, CRC(96b844d6) SHA1(981194c249a8fc2534e24ef672380d751a5dc5fd))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1",0)
ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
@@ -289,10 +561,9 @@ ROM_START(bop_l6)
ROM_END
ROM_START(bop_l5)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x20000, "user2", 0)
- ROM_LOAD("tmbopl_5.rom", 0x00000, 0x20000, CRC(fd5c426d) SHA1(e006f8e39cf382249db0b969cf966fd8deaa344a))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tmbopl_5.rom", 0x10000, 0x18000, CRC(fd5c426d) SHA1(e006f8e39cf382249db0b969cf966fd8deaa344a))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1",0)
ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
@@ -310,10 +581,9 @@ ROM_START(bop_l5)
ROM_END
ROM_START(bop_l4)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x20000, "user2", 0)
- ROM_LOAD("tmbopl_4.rom", 0x00000, 0x20000, CRC(eea14ecd) SHA1(afd670bdc3680f12360561a1a5e5854718c099f7))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("tmbopl_4.rom", 0x10000, 0x18000, CRC(eea14ecd) SHA1(afd670bdc3680f12360561a1a5e5854718c099f7))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1",0)
ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
@@ -331,10 +601,9 @@ ROM_START(bop_l4)
ROM_END
ROM_START(bop_l3)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x20000, "user2", 0)
- ROM_LOAD("bop_l3.u6", 0x00000, 0x20000, CRC(cd4d219d) SHA1(4e73dca186867ebee07682deab058a45cee53be1))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("bop_l3.u6", 0x10000, 0x18000, CRC(cd4d219d) SHA1(4e73dca186867ebee07682deab058a45cee53be1))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1",0)
ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
@@ -352,10 +621,9 @@ ROM_START(bop_l3)
ROM_END
ROM_START(bop_l2)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x20000, "user2", 0)
- ROM_LOAD("bop_l2.u6", 0x00000, 0x20000, CRC(17ee1f56) SHA1(bee68ed5680455f23dc33e889acec83cba68b1dc))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("bop_l2.u6", 0x10000, 0x18000, CRC(17ee1f56) SHA1(bee68ed5680455f23dc33e889acec83cba68b1dc))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
ROM_REGION(0x180000, "sound1",0)
ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
@@ -376,10 +644,9 @@ ROM_END
/ Test Fixture Alphanumeric
/============*/
ROM_START(tfa_13)
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_REGION(0x2000, "user1", ROMREGION_ERASEFF)
- ROM_REGION(0x020000, "user2", 0)
- ROM_LOAD("u6_l3.rom", 0x00000, 0x020000, CRC(bf4a37b5) SHA1(91b8bba6182e818a34252a4b2a0b86a2a44d9c42))
+ ROM_REGION(0x30000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD("u6_l3.rom", 0x10000, 0x18000, CRC(bf4a37b5) SHA1(91b8bba6182e818a34252a4b2a0b86a2a44d9c42))
+ ROM_CONTINUE(0x8000,0x8000)
ROM_END
GAME(1990, tfa_13, 0, wpc_an, wpc_an, wpc_an_state, wpc_an, ROT0, "Bally", "WPC Test Fixture: Alphanumeric (1.3)", GAME_IS_SKELETON_MECHANICAL)
diff --git a/src/mame/layout/wpc_an.lay b/src/mame/layout/wpc_an.lay
new file mode 100644
index 00000000000..c7d3defdb56
--- /dev/null
+++ b/src/mame/layout/wpc_an.lay
@@ -0,0 +1,151 @@
+<!-- wpc_an.lay -->
+
+<!-- 2013-10-01: Initial version. -->
+
+<mamelayout version="2">
+
+ <element name="digit" defstate="0">
+ <led14segsc>
+ <color red="1.0" green="0.0" blue="0.0" />
+ </led14segsc>
+ </element>
+ <element name="ldigit" defstate="0">
+ <led7seg>
+ <color red="1.0" green="0.0" blue="0.0" />
+ </led7seg>
+ </element>
+ <element name="diagled" defstate="0">
+ <disk>
+ <color red="1.0" green="0.0" blue="0.0" />
+ </disk>
+ </element>
+ <element name="background">
+ <rect>
+ <bounds left="0" top="0" right="1" bottom="1" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+
+ <view name="Default Layout">
+
+ <!-- Background -->
+ <backdrop element="background">
+ <bounds left="0" top="20" right="318" bottom="394" />
+ </backdrop>
+
+ <!-- LEDs -->
+
+ <!-- Player 1 Score -->
+ <bezel name="digit0" element="digit">
+ <bounds left="10" top="45" right="30" bottom="84" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds left="34" top="45" right="54" bottom="84" />
+ </bezel>
+ <bezel name="digit2" element="digit">
+ <bounds left="58" top="45" right="78" bottom="84" />
+ </bezel>
+ <bezel name="digit3" element="digit">
+ <bounds left="82" top="45" right="102" bottom="84" />
+ </bezel>
+ <bezel name="digit4" element="digit">
+ <bounds left="106" top="45" right="126" bottom="84" />
+ </bezel>
+ <bezel name="digit5" element="digit">
+ <bounds left="130" top="45" right="150" bottom="84" />
+ </bezel>
+ <bezel name="digit6" element="digit">
+ <bounds left="154" top="45" right="174" bottom="84" />
+ </bezel>
+ <bezel name="digit7" element="digit">
+ <bounds left="178" top="45" right="198" bottom="84" />
+ </bezel>
+
+ <!-- Player 2 Score -->
+ <bezel name="digit8" element="digit">
+ <bounds left="202" top="45" right="222" bottom="84" />
+ </bezel>
+ <bezel name="digit9" element="digit">
+ <bounds left="226" top="45" right="246" bottom="84" />
+ </bezel>
+ <bezel name="digit10" element="digit">
+ <bounds left="250" top="45" right="270" bottom="84" />
+ </bezel>
+ <bezel name="digit11" element="digit">
+ <bounds left="274" top="45" right="294" bottom="84" />
+ </bezel>
+ <bezel name="digit12" element="digit">
+ <bounds left="298" top="45" right="318" bottom="84" />
+ </bezel>
+ <bezel name="digit13" element="digit">
+ <bounds left="322" top="45" right="342" bottom="84" />
+ </bezel>
+ <bezel name="digit14" element="digit">
+ <bounds left="346" top="45" right="366" bottom="84" />
+ </bezel>
+ <bezel name="digit15" element="digit">
+ <bounds left="370" top="45" right="390" bottom="84" />
+ </bezel>
+
+ <!-- Player 3 Score -->
+ <bezel name="digit16" element="digit">
+ <bounds left="10" top="100" right="30" bottom="139" />
+ </bezel>
+ <bezel name="digit17" element="digit">
+ <bounds left="34" top="100" right="54" bottom="139" />
+ </bezel>
+ <bezel name="digit18" element="digit">
+ <bounds left="58" top="100" right="78" bottom="139" />
+ </bezel>
+ <bezel name="digit19" element="digit">
+ <bounds left="82" top="100" right="102" bottom="139" />
+ </bezel>
+ <bezel name="digit20" element="digit">
+ <bounds left="106" top="100" right="126" bottom="139" />
+ </bezel>
+ <bezel name="digit21" element="digit">
+ <bounds left="130" top="100" right="150" bottom="139" />
+ </bezel>
+ <bezel name="digit22" element="digit">
+ <bounds left="154" top="100" right="174" bottom="139" />
+ </bezel>
+ <bezel name="digit23" element="digit">
+ <bounds left="178" top="100" right="198" bottom="139" />
+ </bezel>
+
+ <!-- Player 4 Score -->
+ <bezel name="digit24" element="digit">
+ <bounds left="202" top="100" right="222" bottom="139" />
+ </bezel>
+ <bezel name="digit25" element="digit">
+ <bounds left="226" top="100" right="246" bottom="139" />
+ </bezel>
+ <bezel name="digit26" element="digit">
+ <bounds left="250" top="100" right="270" bottom="139" />
+ </bezel>
+ <bezel name="digit27" element="digit">
+ <bounds left="274" top="100" right="294" bottom="139" />
+ </bezel>
+ <bezel name="digit28" element="digit">
+ <bounds left="298" top="100" right="318" bottom="139" />
+ </bezel>
+ <bezel name="digit29" element="digit">
+ <bounds left="322" top="100" right="342" bottom="139" />
+ </bezel>
+ <bezel name="digit30" element="digit">
+ <bounds left="346" top="100" right="366" bottom="139" />
+ </bezel>
+ <bezel name="digit31" element="digit">
+ <bounds left="370" top="100" right="390" bottom="139" />
+ </bezel>
+
+ <!-- Credits and Balls -->
+ <bezel name="digit60" element="diagled">
+ <bounds left="200" top="200" right="210" bottom="210" />
+ </bezel>
+ </view>
+</mamelayout> \ No newline at end of file
diff --git a/src/mame/mame.mak b/src/mame/mame.mak
index d42350d326d..b1166ae2261 100644
--- a/src/mame/mame.mak
+++ b/src/mame/mame.mak
@@ -2661,6 +2661,8 @@ $(DRIVERS)/warpwarp.o: $(LAYOUT)/geebee.lh \
$(LAYOUT)/navarone.lh \
$(LAYOUT)/sos.lh
+$(DRIVERS)/wpc_an.o: $(LAYOUT)/wpc_an.lh
+
$(DRIVERS)/wecleman.o: $(LAYOUT)/wecleman.lh
$(DRIVERS)/wico.o: $(LAYOUT)/wico.lh