summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author bmcphail <bmcphail@vcmame.net>2018-08-22 14:35:46 -0400
committer bmcphail <bmcphail@vcmame.net>2018-08-22 14:35:46 -0400
commitb2e856bbc00864d6696fd1c880680f9229ee71a6 (patch)
treec3a9fd593c9341f78e7e46ed9770a93e58ec970a /src/mame
parent7eeb77c1551e9e1c2f221e41d440dfd3bef5141b (diff)
parent2ed5eafa69939491d782617d83025dff732ef99a (diff)
Merge branch 'master' of https://github.com/mamedev/mame
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/drivers/amiga.cpp72
-rw-r--r--src/mame/drivers/amusco.cpp14
-rw-r--r--src/mame/drivers/cp1.cpp12
-rw-r--r--src/mame/drivers/cvs.cpp113
-rw-r--r--src/mame/drivers/equites.cpp10
-rw-r--r--src/mame/drivers/exp85.cpp2
-rw-r--r--src/mame/drivers/g627.cpp10
-rw-r--r--src/mame/drivers/galaxia.cpp4
-rw-r--r--src/mame/drivers/kyocera.cpp40
-rw-r--r--src/mame/drivers/mephistp.cpp10
-rw-r--r--src/mame/drivers/meyc8088.cpp18
-rw-r--r--src/mame/drivers/paranoia.cpp10
-rw-r--r--src/mame/drivers/sbugger.cpp10
-rw-r--r--src/mame/drivers/sdk85.cpp6
-rw-r--r--src/mame/drivers/testconsole.cpp2
-rw-r--r--src/mame/drivers/tourvis.cpp10
-rw-r--r--src/mame/drivers/unkhorse.cpp8
-rw-r--r--src/mame/drivers/videosaa.cpp183
-rw-r--r--src/mame/drivers/vixen.cpp20
-rw-r--r--src/mame/drivers/vp415.cpp8
-rw-r--r--src/mame/includes/cvs.h22
-rw-r--r--src/mame/mame.lst6
23 files changed, 418 insertions, 173 deletions
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index b4a23feeb3e..f938e9c1ae4 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -1316,6 +1316,7 @@ vicdual.cpp
victory.cpp
videopin.cpp
videopkr.cpp
+videosaa.cpp
vigilant.cpp
vindictr.cpp
viper.cpp
diff --git a/src/mame/drivers/amiga.cpp b/src/mame/drivers/amiga.cpp
index 8cbbaaf8e71..4eabbdab678 100644
--- a/src/mame/drivers/amiga.cpp
+++ b/src/mame/drivers/amiga.cpp
@@ -8,6 +8,7 @@
#include "emu.h"
#include "includes/amiga.h"
+
#include "bus/amiga/keyboard/keyboard.h"
#include "bus/amiga/zorro/zorro.h"
#include "cpu/m68000/m68000.h"
@@ -1437,12 +1438,6 @@ MACHINE_CONFIG_START(amiga_state::amiga_base)
MCFG_CENTRONICS_SELECT_HANDLER(WRITELINE(*this, amiga_state, centronics_select_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
- // keyboard
- MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", "a500_us")
- MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
- MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
- MCFG_AMIGA_KEYBOARD_KRST_HANDLER(WRITELINE(*this, amiga_state, kbreset_w))
-
// software
MCFG_SOFTWARE_LIST_ADD("wb_list", "amiga_workbench")
MCFG_SOFTWARE_LIST_ADD("hardware_list", "amiga_hardware")
@@ -1453,6 +1448,12 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a1000_state::a1000)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", amiga_keyboard_devices, "a2000_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
MCFG_DEVICE_PROGRAM_MAP(a1000_mem)
@@ -1465,6 +1466,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a1000_state::a1000n)
a1000(config);
+
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
MCFG_DEVICE_REMOVE("screen")
@@ -1481,6 +1483,12 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a2000_state::a2000)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", amiga_keyboard_devices, "a2000_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
MCFG_DEVICE_PROGRAM_MAP(a2000_mem)
@@ -1506,6 +1514,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a2000_state::a2000n)
a2000(config);
+
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_CLOCK(amiga_state::CLK_7M_NTSC)
MCFG_DEVICE_REMOVE("screen")
@@ -1522,6 +1531,13 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a500_state::a500)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", a500_keyboard_devices, "a500_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+ MCFG_AMIGA_KEYBOARD_KRST_HANDLER(WRITELINE(*this, amiga_state, kbreset_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
MCFG_DEVICE_PROGRAM_MAP(a500_mem)
@@ -1552,6 +1568,12 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(cdtv_state::cdtv)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", amiga_keyboard_devices, "a2000_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
MCFG_DEVICE_PROGRAM_MAP(cdtv_mem)
@@ -1623,6 +1645,12 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a3000_state::a3000)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", amiga_keyboard_devices, "a2000_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68030, XTAL(32'000'000) / 2)
MCFG_DEVICE_PROGRAM_MAP(a3000_mem)
@@ -1653,6 +1681,13 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a500p_state::a500p)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", a500_keyboard_devices, "a500_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+ MCFG_AMIGA_KEYBOARD_KRST_HANDLER(WRITELINE(*this, amiga_state, kbreset_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
MCFG_DEVICE_PROGRAM_MAP(a500p_mem)
@@ -1687,6 +1722,13 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a600_state::a600)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", a600_keyboard_devices, "a600_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+ MCFG_AMIGA_KEYBOARD_KRST_HANDLER(WRITELINE(*this, amiga_state, kbreset_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68000, amiga_state::CLK_7M_PAL)
MCFG_DEVICE_PROGRAM_MAP(a600_mem)
@@ -1729,6 +1771,13 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a1200_state::a1200)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", amiga_keyboard_devices, "a1200_us") // FIXME: replace with Amiga 1200 devices when we have mask ROM dump
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+ MCFG_AMIGA_KEYBOARD_KRST_HANDLER(WRITELINE(*this, amiga_state, kbreset_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2)
MCFG_DEVICE_PROGRAM_MAP(a1200_mem)
@@ -1789,6 +1838,12 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a4000_state::a4000)
amiga_base(config);
+
+ // keyboard
+ MCFG_AMIGA_KEYBOARD_INTERFACE_ADD("kbd", amiga_keyboard_devices, "a2000_us")
+ MCFG_AMIGA_KEYBOARD_KCLK_HANDLER(WRITELINE("cia_0", mos8520_device, cnt_w))
+ MCFG_AMIGA_KEYBOARD_KDAT_HANDLER(WRITELINE("cia_0", mos8520_device, sp_w))
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68040, XTAL(50'000'000) / 2)
MCFG_DEVICE_PROGRAM_MAP(a4000_mem)
@@ -1819,6 +1874,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a4000_state::a4000n)
a4000(config);
+
MCFG_DEVICE_REMOVE("screen")
ntsc_video(config);
MCFG_DEVICE_MODIFY("screen")
@@ -1863,6 +1919,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(cd32_state::cd32)
amiga_base(config);
+
// main cpu
MCFG_DEVICE_ADD("maincpu", M68EC020, amiga_state::CLK_28M_PAL / 2)
MCFG_DEVICE_PROGRAM_MAP(cd32_mem)
@@ -1900,11 +1957,11 @@ MACHINE_CONFIG_START(cd32_state::cd32)
MCFG_CDROM_ADD("cdrom")
MCFG_CDROM_INTERFACE("cd32_cdrom")
MCFG_SOFTWARE_LIST_ADD("cd_list", "cd32")
- MCFG_DEVICE_REMOVE("kbd")
MACHINE_CONFIG_END
MACHINE_CONFIG_START(cd32_state::cd32n)
cd32(config);
+
MCFG_DEVICE_MODIFY("maincpu")
MCFG_DEVICE_CLOCK(amiga_state::CLK_28M_NTSC / 2)
MCFG_DEVICE_REMOVE("screen")
@@ -1934,6 +1991,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(a4000_state::a4000tn)
a4000(config);
+
MCFG_DEVICE_REMOVE("screen")
ntsc_video(config);
MCFG_DEVICE_MODIFY("screen")
diff --git a/src/mame/drivers/amusco.cpp b/src/mame/drivers/amusco.cpp
index 0c18032b648..54263f56049 100644
--- a/src/mame/drivers/amusco.cpp
+++ b/src/mame/drivers/amusco.cpp
@@ -558,17 +558,17 @@ MACHINE_CONFIG_START(amusco_state::amusco)
MCFG_I8255_IN_PORTB_CB(IOPORT("IN1"))
MCFG_I8255_IN_PORTC_CB(IOPORT("IN2"))
- MCFG_DEVICE_ADD("lpt_interface", I8155, 0)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, amusco_state, lpt_data_w))
- MCFG_I8155_IN_PORTB_CB(READ8(*this, amusco_state, lpt_status_r))
+ i8155_device &i8155a(I8155(config, "lpt_interface", 0));
+ i8155a.out_pa_callback().set(FUNC(amusco_state::lpt_data_w));
+ i8155a.in_pb_callback().set(FUNC(amusco_state::lpt_status_r));
// Port C uses ALT 3 mode, which MAME does not currently emulate
MCFG_DEVICE_ADD("rtc", MSM5832, 32.768_kHz_XTAL)
- MCFG_DEVICE_ADD("rtc_interface", I8155, 0)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, amusco_state, rtc_control_w))
- MCFG_I8155_IN_PORTC_CB(READ8("rtc", msm5832_device, data_r))
- MCFG_I8155_OUT_PORTC_CB(WRITE8("rtc", msm5832_device, data_w))
+ i8155_device &i8155b(I8155(config, "rtc_interface", 0));
+ i8155b.out_pa_callback().set(FUNC(amusco_state::rtc_control_w));
+ i8155b.in_pc_callback().set("rtc", FUNC(msm5832_device::data_r));
+ i8155b.out_pc_callback().set("rtc", FUNC(msm5832_device::data_w));
MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(30), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH)
diff --git a/src/mame/drivers/cp1.cpp b/src/mame/drivers/cp1.cpp
index 7fdf206a24c..ff9532ff477 100644
--- a/src/mame/drivers/cp1.cpp
+++ b/src/mame/drivers/cp1.cpp
@@ -277,13 +277,13 @@ MACHINE_CONFIG_START(cp1_state::cp1)
maincpu.t0_in_cb().set_log("t0_r");
maincpu.t1_in_cb().set_log("t1_r");
- MCFG_DEVICE_ADD("i8155", I8155, 0)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, cp1_state, i8155_porta_w))
- MCFG_I8155_IN_PORTB_CB(READ8(*this, cp1_state, i8155_portb_r))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, cp1_state, i8155_portb_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, cp1_state, i8155_portc_w))
+ i8155_device &i8155(I8155(config, "i8155", 0));
+ i8155.out_pa_callback().set(FUNC(cp1_state::i8155_porta_w));
+ i8155.in_pb_callback().set(FUNC(cp1_state::i8155_portb_r));
+ i8155.out_pb_callback().set(FUNC(cp1_state::i8155_portb_w));
+ i8155.out_pc_callback().set(FUNC(cp1_state::i8155_portc_w));
- MCFG_DEVICE_ADD("i8155_cp3", I8155, 0)
+ I8155(config, "i8155_cp3", 0);
config.set_default_layout(layout_cp1);
diff --git a/src/mame/drivers/cvs.cpp b/src/mame/drivers/cvs.cpp
index 8c376d0ffaf..cb8ae39a1b7 100644
--- a/src/mame/drivers/cvs.cpp
+++ b/src/mame/drivers/cvs.cpp
@@ -1549,23 +1549,21 @@ ROM_END
*
*************************************/
-void cvs_state::init_huncholy()
+READ8_MEMBER(cvs_state::huncholy_prot_r)
{
- uint8_t *ROM = memregion("maincpu")->base();
+ if (offset == 1)
+ {
+ m_protection_counter++;
+ if ((m_protection_counter & 0x0f) == 0x01) return 0x00;
+ return 0xff;
+ }
- /* patch out protection */
- ROM[0x0082] = 0xc0;
- ROM[0x0083] = 0xc0;
- ROM[0x0084] = 0xc0;
- ROM[0x00b7] = 0xc0;
- ROM[0x00b8] = 0xc0;
- ROM[0x00b9] = 0xc0;
- ROM[0x00d9] = 0xc0;
- ROM[0x00da] = 0xc0;
- ROM[0x00db] = 0xc0;
- ROM[0x4456] = 0xc0;
- ROM[0x4457] = 0xc0;
- ROM[0x4458] = 0xc0;
+ return 0; // offset 0
+}
+
+void cvs_state::init_huncholy()
+{
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x6ff1, 0x6ff2, read8_delegate(FUNC(cvs_state::huncholy_prot_r),this));
}
@@ -1578,57 +1576,48 @@ void cvs_state::init_hunchbaka()
}
-void cvs_state::init_superbik()
+READ8_MEMBER(cvs_state::superbik_prot_r)
{
- uint8_t *ROM = memregion("maincpu")->base();
+ m_protection_counter++;
+ if ((m_protection_counter & 0x0f) == 0x02) return 0;
+ return 0xff;
+}
- /* patch out protection */
- ROM[0x0079] = 0xc0;
- ROM[0x007a] = 0xc0;
- ROM[0x007b] = 0xc0;
- ROM[0x0081] = 0xc0;
- ROM[0x0082] = 0xc0;
- ROM[0x0083] = 0xc0;
- ROM[0x00b6] = 0xc0;
- ROM[0x00b7] = 0xc0;
- ROM[0x00b8] = 0xc0;
- ROM[0x0168] = 0xc0;
- ROM[0x0169] = 0xc0;
- ROM[0x016a] = 0xc0;
-
- ROM[0x413f] = 0xc0;
- ROM[0x4140] = 0xc0;
- ROM[0x4141] = 0xc0;
-
- /* and speed up the protection check */
- ROM[0x0099] = 0xc0;
- ROM[0x009a] = 0xc0;
- ROM[0x009b] = 0xc0;
- ROM[0x00bb] = 0xc0;
- ROM[0x00bc] = 0xc0;
- ROM[0x00bd] = 0xc0;
+void cvs_state::init_superbik()
+{
+ m_protection_counter = 0;
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x73f1, 0x73f2, read8_delegate(FUNC(cvs_state::superbik_prot_r),this));
}
-void cvs_state::init_hero()
+READ8_MEMBER(cvs_state::hero_prot_r)
{
- uint8_t *ROM = memregion("maincpu")->base();
+ u8 *ROM = memregion("maincpu")->base() + 0x73f0;
+
+ switch (offset + 0x73f0)
+ {
+ case 0x73f0: // pc: 7d, ab9
+ return 0xff; // 0x03 at this address in ROM
- /* patch out protection */
- ROM[0x0087] = 0xc0;
- ROM[0x0088] = 0xc0;
- ROM[0x0aa1] = 0xc0;
- ROM[0x0aa2] = 0xc0;
- ROM[0x0aa3] = 0xc0;
- ROM[0x0aaf] = 0xc0;
- ROM[0x0ab0] = 0xc0;
- ROM[0x0ab1] = 0xc0;
- ROM[0x0abd] = 0xc0;
- ROM[0x0abe] = 0xc0;
- ROM[0x0abf] = 0xc0;
- ROM[0x4de0] = 0xc0;
- ROM[0x4de1] = 0xc0;
- ROM[0x4de2] = 0xc0;
+ case 0x73f1: // pc: 83, read and then overwritten by 0x73f2 read
+ return 0; // 0x02 at this address in ROM
+
+ case 0x73f2: // pc: 86, needs to match read from 0x73f0
+ return 0xff & 0x7e; // 0x04 at this address in ROM
+
+ case 0x73f9: // pc: A9f, not sure what this is suppose to do?
+ return 0x00; // 0x1e at this address in ROM
+
+ case 0x73fe: // aa8
+ return 0xff; // 0x5e at this address in ROM
+ }
+
+ return ROM[offset];
+}
+
+void cvs_state::init_hero()
+{
+ m_maincpu->space(AS_PROGRAM).install_read_handler(0x73f0, 0x73ff, read8_delegate(FUNC(cvs_state::hero_prot_r),this));
}
@@ -1672,8 +1661,8 @@ GAME( 1982, diggerc, 0, cvs, diggerc, cvs_state, empty_init, ROT90
GAME( 1983, heartatk, 0, cvs, heartatk, cvs_state, empty_init, ROT90, "Century Electronics", "Heart Attack", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1983, hunchbak, 0, cvs, hunchbak, cvs_state, empty_init, ROT90, "Century Electronics", "Hunchback (set 1)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1983, hunchbaka, hunchbak, cvs, hunchbak, cvs_state, init_hunchbaka, ROT90, "Century Electronics", "Hunchback (set 2)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1983, superbik, 0, cvs, superbik, cvs_state, init_superbik, ROT90, "Century Electronics", "Superbike", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE )
-GAME( 1983, raiders, 0, cvs, raiders, cvs_state, init_raiders, ROT90, "Century Electronics", "Raiders", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
-GAME( 1983, raidersr3, raiders, cvs, raiders, cvs_state, init_raiders, ROT90, "Century Electronics", "Raiders (Rev.3)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, superbik, 0, cvs, superbik, cvs_state, init_superbik, ROT90, "Century Electronics", "Superbike", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
+GAME( 1983, raiders, 0, cvs, raiders, cvs_state, init_raiders, ROT90, "Century Electronics", "Raiders", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_UNEMULATED_PROTECTION| MACHINE_SUPPORTS_SAVE )
+GAME( 1983, raidersr3, raiders, cvs, raiders, cvs_state, init_raiders, ROT90, "Century Electronics", "Raiders (Rev.3)", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_UNEMULATED_PROTECTION| MACHINE_SUPPORTS_SAVE )
GAME( 1984, hero, 0, cvs, hero, cvs_state, init_hero, ROT90, "Century Electronics / Seatongrove Ltd", "Hero", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // (C) 1984 CVS on titlescreen, (C) 1983 Seatongrove on highscore screen
GAME( 1984, huncholy, 0, cvs, huncholy, cvs_state, init_huncholy, ROT90, "Century Electronics / Seatongrove Ltd", "Hunchback Olympic", MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp
index 8a408c924d4..07878546874 100644
--- a/src/mame/drivers/equites.cpp
+++ b/src/mame/drivers/equites.cpp
@@ -1047,11 +1047,11 @@ MACHINE_CONFIG_START(equites_state::common_sound)
MCFG_DEVICE_IO_MAP(sound_portmap)
MCFG_I8085A_CLK_OUT_DEVICE("audio8155")
- MCFG_DEVICE_ADD("audio8155", I8155, 0)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, equites_state, equites_8155_porta_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, equites_state, equites_8155_portb_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, equites_state, equites_8155_portc_w))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, equites_state, equites_8155_timer_pulse))
+ i8155_device &i8155(I8155(config, "audio8155", 0));
+ i8155.out_pa_callback().set(FUNC(equites_state::equites_8155_porta_w));
+ i8155.out_pb_callback().set(FUNC(equites_state::equites_8155_portb_w));
+ i8155.out_pc_callback().set(FUNC(equites_state::equites_8155_portc_w));
+ i8155.out_to_callback().set(FUNC(equites_state::equites_8155_timer_pulse));
/* sound hardware */
SPEAKER(config, "speaker").front_center();
diff --git a/src/mame/drivers/exp85.cpp b/src/mame/drivers/exp85.cpp
index efadf87c382..a6c4eea8cf6 100644
--- a/src/mame/drivers/exp85.cpp
+++ b/src/mame/drivers/exp85.cpp
@@ -194,7 +194,7 @@ MACHINE_CONFIG_START(exp85_state::exp85)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* devices */
- MCFG_DEVICE_ADD(I8155_TAG, I8155, 6.144_MHz_XTAL/2)
+ I8155(config, I8155_TAG, 6.144_MHz_XTAL/2);
MCFG_DEVICE_ADD(I8355_TAG, I8355, 6.144_MHz_XTAL/2)
MCFG_I8355_IN_PA_CB(READ8(*this, exp85_state, i8355_a_r))
diff --git a/src/mame/drivers/g627.cpp b/src/mame/drivers/g627.cpp
index 322780abe5a..63f78774e00 100644
--- a/src/mame/drivers/g627.cpp
+++ b/src/mame/drivers/g627.cpp
@@ -302,11 +302,11 @@ MACHINE_CONFIG_START(g627_state::g627)
MCFG_DEVICE_PROGRAM_MAP(mem_map)
MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_ADD("i8156", I8156, 14138000/8)
- MCFG_I8155_IN_PORTA_CB(READ8(*this, g627_state, porta_r))
- MCFG_I8155_IN_PORTB_CB(READ8(*this, g627_state, portb_r))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, g627_state, portc_w))
- MCFG_I8155_OUT_TIMEROUT_CB(INPUTLINE("maincpu", INPUT_LINE_NMI))
+ i8156_device &i8156(I8156(config, "i8156", 14138000/8));
+ i8156.in_pa_callback().set(FUNC(g627_state::porta_r));
+ i8156.in_pb_callback().set(FUNC(g627_state::portb_r));
+ i8156.out_pc_callback().set(FUNC(g627_state::portc_w));
+ i8156.out_to_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
MCFG_NVRAM_ADD_0FILL("nvram")
diff --git a/src/mame/drivers/galaxia.cpp b/src/mame/drivers/galaxia.cpp
index 69fdfa9beb7..39a90258bd0 100644
--- a/src/mame/drivers/galaxia.cpp
+++ b/src/mame/drivers/galaxia.cpp
@@ -308,7 +308,7 @@ MACHINE_CONFIG_START(galaxia_state::galaxia)
MCFG_DEVICE_IO_MAP(galaxia_io_map)
MCFG_DEVICE_DATA_MAP(galaxia_data_map)
MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank))
- MCFG_S2650_FLAG_OUTPUT(WRITELINE(*this, cvs_state, write_s2650_flag))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(*this, galaxia_state, write_s2650_flag))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -352,7 +352,7 @@ MACHINE_CONFIG_START(galaxia_state::astrowar)
MCFG_DEVICE_IO_MAP(galaxia_io_map)
MCFG_DEVICE_DATA_MAP(galaxia_data_map)
MCFG_S2650_SENSE_INPUT(READLINE("screen", screen_device, vblank))
- MCFG_S2650_FLAG_OUTPUT(WRITELINE(*this, cvs_state, write_s2650_flag))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(*this, galaxia_state, write_s2650_flag))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/kyocera.cpp b/src/mame/drivers/kyocera.cpp
index 29cf737aa30..a7348a87446 100644
--- a/src/mame/drivers/kyocera.cpp
+++ b/src/mame/drivers/kyocera.cpp
@@ -1363,11 +1363,11 @@ MACHINE_CONFIG_START(kc85_state::kc85)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* devices */
- MCFG_DEVICE_ADD(I8155_TAG, I8155, XTAL(4'915'200)/2)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, kc85_state, i8155_pa_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, kc85_state, i8155_pb_w))
- MCFG_I8155_IN_PORTC_CB(READ8(*this, kc85_state, i8155_pc_r))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, kc85_state, i8155_to_w))
+ i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
+ i8155.out_pa_callback().set(FUNC(kc85_state::i8155_pa_w));
+ i8155.out_pb_callback().set(FUNC(kc85_state::i8155_pb_w));
+ i8155.in_pc_callback().set(FUNC(kc85_state::i8155_pc_r));
+ i8155.out_to_callback().set(FUNC(kc85_state::i8155_to_w));
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL(32'768), NOOP, INPUTLINE(I8085_TAG, I8085_RST75_LINE))
@@ -1411,11 +1411,11 @@ MACHINE_CONFIG_START(pc8201_state::pc8201)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* devices */
- MCFG_DEVICE_ADD(I8155_TAG, I8155, XTAL(4'915'200)/2)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, kc85_state, i8155_pa_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, kc85_state, i8155_pb_w))
- MCFG_I8155_IN_PORTC_CB(READ8(*this, kc85_state, i8155_pc_r))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, kc85_state, i8155_to_w))
+ i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
+ i8155.out_pa_callback().set(FUNC(kc85_state::i8155_pa_w));
+ i8155.out_pb_callback().set(FUNC(kc85_state::i8155_pb_w));
+ i8155.in_pc_callback().set(FUNC(kc85_state::i8155_pc_r));
+ i8155.out_to_callback().set(FUNC(kc85_state::i8155_to_w));
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL(32'768), NOOP, INPUTLINE(I8085_TAG, I8085_RST75_LINE))
@@ -1469,11 +1469,11 @@ MACHINE_CONFIG_START(trsm100_state::trsm100)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* devices */
- MCFG_DEVICE_ADD(I8155_TAG, I8155, XTAL(4'915'200)/2)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, kc85_state, i8155_pa_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, kc85_state, i8155_pb_w))
- MCFG_I8155_IN_PORTC_CB(READ8(*this, kc85_state, i8155_pc_r))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, kc85_state, i8155_to_w))
+ i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
+ i8155.out_pa_callback().set(FUNC(kc85_state::i8155_pa_w));
+ i8155.out_pb_callback().set(FUNC(kc85_state::i8155_pb_w));
+ i8155.in_pc_callback().set(FUNC(kc85_state::i8155_pc_r));
+ i8155.out_to_callback().set(FUNC(kc85_state::i8155_to_w));
MCFG_UPD1990A_ADD(UPD1990A_TAG, XTAL(32'768), NOOP, INPUTLINE(I8085_TAG, I8085_RST75_LINE))
@@ -1526,11 +1526,11 @@ MACHINE_CONFIG_START(tandy200_state::tandy200)
// MCFG_TCM5089_ADD(TCM5089_TAG, XTAL(3'579'545))
/* devices */
- MCFG_DEVICE_ADD(I8155_TAG, I8155, XTAL(4'915'200)/2)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, tandy200_state, i8155_pa_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, tandy200_state, i8155_pb_w))
- MCFG_I8155_IN_PORTC_CB(READ8(*this, tandy200_state, i8155_pc_r))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, tandy200_state, i8155_to_w))
+ i8155_device &i8155(I8155(config, I8155_TAG, XTAL(4'915'200)/2));
+ i8155.out_pa_callback().set(FUNC(tandy200_state::i8155_pa_w));
+ i8155.out_pb_callback().set(FUNC(tandy200_state::i8155_pb_w));
+ i8155.in_pc_callback().set(FUNC(tandy200_state::i8155_pc_r));
+ i8155.out_to_callback().set(FUNC(tandy200_state::i8155_to_w));
MCFG_DEVICE_ADD(RP5C01A_TAG, RP5C01, XTAL(32'768))
diff --git a/src/mame/drivers/mephistp.cpp b/src/mame/drivers/mephistp.cpp
index 915909fc55e..7ae993818ae 100644
--- a/src/mame/drivers/mephistp.cpp
+++ b/src/mame/drivers/mephistp.cpp
@@ -172,11 +172,13 @@ MACHINE_CONFIG_START(mephisto_pinball_state::mephisto)
//MCFG_I8256_IRQ_HANDLER(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
//MCFG_I8256_TXD_HANDLER(INPUTLINE("audiocpu", MCS51_RX_LINE))
- MCFG_DEVICE_ADD("ic20", I8155, XTAL(18'000'000)/6)
- //MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE("muart", i8256_device, write_txc))
+ I8155(config, "ic20", XTAL(18'000'000)/6);
+ //i8155_device &i8155_1(I8155(config, "ic20", XTAL(18'000'000)/6));
+ //i8155_1.out_to_callback().set("muart", FUNC(i8256_device::write_txc));
- MCFG_DEVICE_ADD("ic9", I8155, XTAL(18'000'000)/6)
- //MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, mephisto_pinball_state, clk_shift_w))
+ I8155(config, "ic9", XTAL(18'000'000)/6);
+ //i8155_device &i8155_2(I8155(config, "ic9", XTAL(18'000'000)/6));
+ //i8155_2.out_to_callback().set(FUNC(mephisto_pinball_state::clk_shift_w));
MCFG_DEVICE_ADD("soundcpu", I8051, XTAL(12'000'000))
MCFG_DEVICE_PROGRAM_MAP(mephisto_8051_map) // EA tied high for external program ROM
diff --git a/src/mame/drivers/meyc8088.cpp b/src/mame/drivers/meyc8088.cpp
index 04610e5e222..78b09f77814 100644
--- a/src/mame/drivers/meyc8088.cpp
+++ b/src/mame/drivers/meyc8088.cpp
@@ -370,19 +370,19 @@ MACHINE_CONFIG_START(meyc8088_state::meyc8088)
MCFG_DEVICE_ADD(m_maincpu, I8088, (XTAL(15'000'000) / 3) * 0.95) // NOTE: underclocked to prevent errors on diagnostics, MAME i8088 cycle timing is probably inaccurate
MCFG_DEVICE_PROGRAM_MAP(meyc8088_map)
- MCFG_DEVICE_ADD("i8155_1", I8155, XTAL(15'000'000) / (3*1))
+ i8155_device &i8155_1(I8155(config, "i8155_1", XTAL(15'000'000) / (3*1)));
// all ports set to input
- MCFG_I8155_IN_PORTA_CB(READ8(*this, meyc8088_state, input_r))
- MCFG_I8155_IN_PORTB_CB(IOPORT("SW"))
- MCFG_I8155_IN_PORTC_CB(READ8(*this, meyc8088_state, status_r))
+ i8155_1.in_pa_callback().set(FUNC(meyc8088_state::input_r));
+ i8155_1.in_pb_callback().set_ioport("SW");
+ i8155_1.in_pc_callback().set(FUNC(meyc8088_state::status_r));
// i8251A trigger txc/rxc (debug related, unpopulated on sold boards)
- MCFG_DEVICE_ADD("i8155_2", I8155, XTAL(15'000'000) / (3*32))
+ i8155_device &i8155_2(I8155(config, "i8155_2", XTAL(15'000'000) / (3*32)));
// all ports set to output
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, meyc8088_state, lights2_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, meyc8088_state, lights1_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, meyc8088_state, common_w))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE("dac", dac_bit_interface, write))
+ i8155_2.out_pa_callback().set(FUNC(meyc8088_state::lights2_w));
+ i8155_2.out_pb_callback().set(FUNC(meyc8088_state::lights1_w));
+ i8155_2.out_pc_callback().set(FUNC(meyc8088_state::common_w));
+ i8155_2.out_to_callback().set("dac", FUNC(dac_bit_interface::write));
MCFG_NVRAM_ADD_0FILL("nvram")
diff --git a/src/mame/drivers/paranoia.cpp b/src/mame/drivers/paranoia.cpp
index fbe47b2aa19..e51b1d7e0bd 100644
--- a/src/mame/drivers/paranoia.cpp
+++ b/src/mame/drivers/paranoia.cpp
@@ -185,11 +185,11 @@ MACHINE_CONFIG_START(paranoia_state::paranoia)
MCFG_DEVICE_PROGRAM_MAP(paranoia_z80_map)
MCFG_DEVICE_IO_MAP(paranoia_z80_io_map)
- MCFG_DEVICE_ADD("i8155", I8155, 1000000 /*?*/)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, paranoia_state, i8155_a_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, paranoia_state, i8155_b_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, paranoia_state, i8155_c_w))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, paranoia_state, i8155_timer_out))
+ i8155_device &i8155(I8155(config, "i8155", 1000000 /*?*/));
+ i8155.out_pa_callback().set(FUNC(paranoia_state::i8155_a_w));
+ i8155.out_pb_callback().set(FUNC(paranoia_state::i8155_b_w));
+ i8155.out_pc_callback().set(FUNC(paranoia_state::i8155_c_w));
+ i8155.out_to_callback().set(FUNC(paranoia_state::i8155_timer_out));
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/sbugger.cpp b/src/mame/drivers/sbugger.cpp
index b7870da3b67..b45c15a53cb 100644
--- a/src/mame/drivers/sbugger.cpp
+++ b/src/mame/drivers/sbugger.cpp
@@ -220,11 +220,11 @@ MACHINE_CONFIG_START(sbugger_state::sbugger)
MCFG_DEVICE_PROGRAM_MAP(sbugger_map)
MCFG_DEVICE_IO_MAP(sbugger_io_map)
- MCFG_DEVICE_ADD("i8156", I8156, 200000) /* freq is an approximation */
- MCFG_I8155_IN_PORTA_CB(IOPORT("INPUTS"))
- MCFG_I8155_IN_PORTB_CB(IOPORT("DSW1"))
- MCFG_I8155_IN_PORTC_CB(IOPORT("DSW2"))
- MCFG_I8155_OUT_TIMEROUT_CB(INPUTLINE("maincpu", I8085_RST75_LINE))
+ i8156_device &i8156(I8156(config, "i8156", 200000)); /* freq is an approximation */
+ i8156.in_pa_callback().set_ioport("INPUTS");
+ i8156.in_pb_callback().set_ioport("DSW1");
+ i8156.in_pc_callback().set_ioport("DSW2");
+ i8156.out_to_callback().set_inputline(m_maincpu, I8085_RST75_LINE);
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_sbugger)
diff --git a/src/mame/drivers/sdk85.cpp b/src/mame/drivers/sdk85.cpp
index 239942208ae..dbca31faeb1 100644
--- a/src/mame/drivers/sdk85.cpp
+++ b/src/mame/drivers/sdk85.cpp
@@ -158,10 +158,10 @@ MACHINE_CONFIG_START(sdk85_state::sdk85)
MCFG_DEVICE_ADD("expromio", I8355, 6.144_MHz_XTAL / 2) // Expansion ROM (A15)
- MCFG_DEVICE_ADD("ramio", I8155, 6.144_MHz_XTAL / 2) // Basic RAM (A16)
- MCFG_I8155_OUT_TIMEROUT_CB(INPUTLINE("maincpu", I8085_TRAP_LINE))
+ i8155_device &i8155(I8155(config, "ramio", 6.144_MHz_XTAL / 2)); // Basic RAM (A16)
+ i8155.out_to_callback().set_inputline(m_maincpu, I8085_TRAP_LINE);
- MCFG_DEVICE_ADD("expramio", I8155, 6.144_MHz_XTAL / 2) // Expansion RAM (A17)
+ I8155(config, "expramio", 6.144_MHz_XTAL / 2); // Expansion RAM (A17)
/* video hardware */
config.set_default_layout(layout_sdk85);
diff --git a/src/mame/drivers/testconsole.cpp b/src/mame/drivers/testconsole.cpp
index ee68ee91d28..f9e118cc6c2 100644
--- a/src/mame/drivers/testconsole.cpp
+++ b/src/mame/drivers/testconsole.cpp
@@ -180,7 +180,7 @@ MACHINE_CONFIG_START(whouse_testcons_state::whousetc)
MCFG_DEVICE_PROGRAM_MAP(program_map)
MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_ADD("i8155", I8155, 6.144_MHz_XTAL)
+ I8155(config, "i8155", 6.144_MHz_XTAL);
MCFG_DEVICE_ADD("i8255", I8255, 0)
diff --git a/src/mame/drivers/tourvis.cpp b/src/mame/drivers/tourvis.cpp
index 6b04d125006..19daf8c831d 100644
--- a/src/mame/drivers/tourvis.cpp
+++ b/src/mame/drivers/tourvis.cpp
@@ -419,11 +419,11 @@ MACHINE_CONFIG_START(tourvision_state::tourvision)
MCFG_HUC6270_VRAM_SIZE(0x10000)
MCFG_HUC6270_IRQ_CHANGED_CB(INPUTLINE("maincpu", 0))
- MCFG_DEVICE_ADD("i8155", I8155, 1000000 /*?*/)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(*this, tourvision_state, tourvision_i8155_a_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, tourvision_state, tourvision_i8155_b_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, tourvision_state, tourvision_i8155_c_w))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, tourvision_state, tourvision_timer_out))
+ i8155_device &i8155(I8155(config, "i8155", 1000000 /*?*/));
+ i8155.out_pa_callback().set(FUNC(tourvision_state::tourvision_i8155_a_w));
+ i8155.out_pb_callback().set(FUNC(tourvision_state::tourvision_i8155_b_w));
+ i8155.out_pc_callback().set(FUNC(tourvision_state::tourvision_i8155_c_w));
+ i8155.out_to_callback().set(FUNC(tourvision_state::tourvision_timer_out));
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
diff --git a/src/mame/drivers/unkhorse.cpp b/src/mame/drivers/unkhorse.cpp
index 290caa9a691..becbcfb60ee 100644
--- a/src/mame/drivers/unkhorse.cpp
+++ b/src/mame/drivers/unkhorse.cpp
@@ -199,10 +199,10 @@ MACHINE_CONFIG_START(horse_state::horse)
MCFG_DEVICE_PROGRAM_MAP(horse_map)
MCFG_DEVICE_IO_MAP(horse_io_map)
- MCFG_DEVICE_ADD("i8155", I8155, XTAL(12'000'000) / 4) // port A input, B output, C output but unused
- MCFG_I8155_IN_PORTA_CB(READ8(*this, horse_state, input_r))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, horse_state, output_w))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE("speaker", speaker_sound_device, level_w))
+ i8155_device &i8155(I8155(config, "i8155", XTAL(12'000'000) / 4)); // port A input, B output, C output but unused
+ i8155.in_pa_callback().set(FUNC(horse_state::input_r));
+ i8155.out_pb_callback().set(FUNC(horse_state::output_w));
+ i8155.out_to_callback().set("speaker", FUNC(speaker_sound_device::level_w));
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/videosaa.cpp b/src/mame/drivers/videosaa.cpp
new file mode 100644
index 00000000000..8f975ff0cd1
--- /dev/null
+++ b/src/mame/drivers/videosaa.cpp
@@ -0,0 +1,183 @@
+// license:BSD-3-Clause
+// copyright-holders:
+/*
+ Skeleton driver for gambling (?) games running on very similar PCBs manufactured by 'Videos A A'.
+
+ Probably manufactured in Italy since PCBs are marked 'lato componenti' (components side) and 'lato
+ saldature' (solder side). Lady Gum's 68HC705 ROM contains strings in French, though.
+
+ PCBs couldn't be tested so game titles are taken from ROM stickers.
+
+ The only complete dump is Lady Gum, all the others are missing at least the 68HC705 internal ROM.
+
+ Hardware overview:
+ Main CPU: MC68HC705C8ACS (verified on Winner, stickers and PCB marks on other games say 68HC705)
+ CRTC: HD46505SP-2
+ Sound: NEC D7759C
+ RAM: 2 x 6116 or equivalent
+ OSC: 10 MHz
+ Dips: 1 x 8 dips bank
+*/
+
+#include "emu.h"
+#include "emupal.h"
+#include "cpu/m6805/m68hc05.h"
+#include "sound/upd7759.h"
+#include "video/mc6845.h"
+#include "screen.h"
+
+class videosaa_state : public driver_device
+{
+public:
+ videosaa_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu")
+ { }
+
+ void videosaa(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+ virtual void video_start() override;
+
+private:
+ required_device<cpu_device> m_maincpu;
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+};
+
+void videosaa_state::video_start()
+{
+}
+
+uint32_t videosaa_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ return 0;
+}
+
+static INPUT_PORTS_START( videosaa )
+INPUT_PORTS_END
+
+static const gfx_layout tiles_layout = // seems to give reasonable results but needs verifying
+{
+ 8,8,
+ RGN_FRAC(1,3),
+ 3,
+ { RGN_FRAC(1,3), RGN_FRAC(2,3), RGN_FRAC(0,3) },
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
+ 8*8
+};
+
+static GFXDECODE_START( gfx )
+ GFXDECODE_ENTRY( "gfx", 0, tiles_layout, 0, 1 )
+GFXDECODE_END
+
+void videosaa_state::machine_start()
+{
+}
+
+void videosaa_state::machine_reset()
+{
+}
+
+void videosaa_state::videosaa(machine_config &config)
+{
+ /* basic machine hardware */
+ M68HC705C8A(config, m_maincpu, 10_MHz_XTAL); // unknown divider
+
+ /* video hardware */
+ // all wrong
+ screen_device& screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
+ screen.set_size(640, 480);
+ screen.set_visarea(0, 640-1, 0, 480-1);
+ screen.set_screen_update(FUNC(videosaa_state::screen_update));
+
+ H46505(config, "crtc", 10_MHz_XTAL); // unknown divider
+
+ GFXDECODE(config, "gfxdecode", "palette", gfx);
+
+ palette_device& palette(PALETTE(config, "palette", 8));
+ palette.set_init("palette", FUNC(palette_device::palette_init_3bit_rgb));
+
+ /* sound hardware */
+ UPD7759(config, "upd");
+}
+
+/***************************************************************************
+
+ Game drivers
+
+***************************************************************************/
+
+ROM_START( jokrlady )
+ ROM_REGION(0x2000, "maincpu", 0)
+ ROM_LOAD( "68hc705-jokerlady.0d", 0x0000, 0x2000, NO_DUMP ) // was missing on the PCB
+
+ ROM_REGION( 0x6000, "gfx", 0 ) // all 27C64
+ ROM_LOAD( "jokerlady-video0.5b", 0x0000, 0x2000, NO_DUMP ) // damaged, reads weren't consistent
+ ROM_LOAD( "jokerlady-video1.7b", 0x2000, 0x2000, CRC(196932d8) SHA1(5130f03dd88f841a00ef328f12c6211bec377c77) )
+ ROM_LOAD( "jokerlady-video2.8b", 0x4000, 0x2000, CRC(58d62dbd) SHA1(cfcab2ca0c081f62185ce59e98124e2c5d368f49) )
+
+ ROM_REGION( 0x10000, "upd", 0 )
+ ROM_LOAD( "jokerlady-msg0.5a", 0x00000, 0x10000, NO_DUMP ) // 27512, damaged, reads weren't consistent
+
+ ROM_REGION( 0x200, "plds", 0 )
+ ROM_LOAD( "st16as15hb1.9c", 0x000, 0x117, NO_DUMP )
+ROM_END
+
+ROM_START( ladygum )
+ ROM_REGION(0x2000, "maincpu", 0)
+ ROM_LOAD( "68hc705-ladygum-4.0d", 0x0000, 0x2000, CRC(ea099edf) SHA1(eb0e4ccb025cf2a71d2016d501b4da11f8d21677) ) // actual label 68hc705-ladygum-#4.0d
+
+ ROM_REGION( 0x6000, "gfx", 0 ) // all 27C64
+ ROM_LOAD( "ladygum-video0.5b", 0x0000, 0x2000, CRC(c1b72a5b) SHA1(abb9c19be474a83e4f4568a5431634ba7a61d8db) )
+ ROM_LOAD( "ladygum-video1.7b", 0x2000, 0x2000, CRC(70448e1f) SHA1(3c0a94284193e7d0f4efb8ffa746b9150d0119e4) )
+ ROM_LOAD( "ladygum-video2.8b", 0x4000, 0x2000, CRC(58d62dbd) SHA1(cfcab2ca0c081f62185ce59e98124e2c5d368f49) )
+
+ ROM_REGION( 0x10000, "upd", 0 )
+ ROM_LOAD( "ladygum-msg0.5a", 0x00000, 0x10000, CRC(c1f23f58) SHA1(c89579e53545291638be66e51512458b67251f67) ) // 27512
+
+ ROM_REGION( 0x200, "plds", 0 )
+ ROM_LOAD( "st16as15hb1.9c", 0x000, 0x117, CRC(a76721d4) SHA1(c9f14107eceeeed9fa788916e3c40c9dd2fe5c41) )
+ROM_END
+
+ROM_START( paradar )
+ ROM_REGION(0x2000, "maincpu", 0)
+ ROM_LOAD( "68hc705-paradar.0d", 0x0000, 0x2000, NO_DUMP )
+
+ ROM_REGION( 0x6000, "gfx", 0 ) // all 27C64
+ ROM_LOAD( "paradar-video0.5b", 0x0000, 0x2000, CRC(b66a8b54) SHA1(aecc7b8ceed6189954a7cd3550d90dabd3bb23d6) )
+ ROM_LOAD( "paradar-video1.7b", 0x2000, 0x2000, CRC(72b05246) SHA1(65988850188915583870a7fbb23b84193c1e753d) )
+ ROM_LOAD( "paradar-video2.8b", 0x4000, 0x2000, CRC(b5eb61a0) SHA1(3ce63c7a68cf3e5343ceec53d477a1322e7f2929) )
+
+ ROM_REGION( 0x10000, "upd", 0 )
+ ROM_LOAD( "paradar-msg0.5a", 0x00000, 0x10000, CRC(81f7c0cb) SHA1(15ee0c12a8f9c94beac7e5fe894e5f82a53d9fc1) ) // 27512
+
+ ROM_REGION( 0x200, "plds", 0 )
+ ROM_LOAD( "gal16v8b.9c", 0x000, 0x117, CRC(3e031d55) SHA1(827c5380ec54bb162873bf19a19218255bd73e9d) )
+ROM_END
+
+ROM_START( winner ) // dump confirmed from 3 different PCBs
+ ROM_REGION(0x2000, "maincpu", 0)
+ ROM_LOAD( "68hc705-winner.0d", 0x0000, 0x2000, NO_DUMP ) // programmer gives a 'BOOTLOADER NOT RESPONDING' error
+
+ ROM_REGION( 0x6000, "gfx", 0 ) // all 27C64
+ ROM_LOAD( "winner-video0.5b", 0x0000, 0x2000, CRC(14740cf5) SHA1(ac3dc4de1d3135a33eb68e73e527059d53638354) )
+ ROM_LOAD( "winner-video1.7b", 0x2000, 0x2000, CRC(caa4ef76) SHA1(2dab5bbe2a4bd60247219a9fc38cae017b81cdbf) )
+ ROM_LOAD( "winner-video2.8b", 0x4000, 0x2000, CRC(ed520709) SHA1(10707aa2985eea06724c1f32c55c3c6b17e57333) )
+
+ ROM_REGION( 0x10000, "upd", 0 )
+ ROM_LOAD( "winner-msg0.5a", 0x00000, 0x10000, CRC(81f7c0cb) SHA1(15ee0c12a8f9c94beac7e5fe894e5f82a53d9fc1) ) // 27512
+
+ ROM_REGION( 0x200, "plds", 0 )
+ ROM_LOAD( "palce16v8h-25pc-4.9c", 0x000, 0x117, CRC(ac0347ee) SHA1(26b27d2037400c06e63528e0e59be6d7d1a81cab) )
+ROM_END
+
+GAME( 1995?, jokrlady, 0, videosaa, videosaa, videosaa_state, empty_init, ROT0, "Videos A A", "Joker Lady", MACHINE_IS_SKELETON )
+GAME( 1995?, ladygum, 0, videosaa, videosaa, videosaa_state, empty_init, ROT0, "Videos A A", "Lady Gum", MACHINE_IS_SKELETON )
+GAME( 1995?, paradar, 0, videosaa, videosaa, videosaa_state, empty_init, ROT0, "Videos A A", "Paradar", MACHINE_IS_SKELETON )
+GAME( 1995?, winner, 0, videosaa, videosaa, videosaa_state, empty_init, ROT0, "Videos A A", "Winner", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/vixen.cpp b/src/mame/drivers/vixen.cpp
index 010e24cf639..19455fbff65 100644
--- a/src/mame/drivers/vixen.cpp
+++ b/src/mame/drivers/vixen.cpp
@@ -764,16 +764,16 @@ MACHINE_CONFIG_START(vixen_state::vixen)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
// devices
- MCFG_DEVICE_ADD(P8155H_TAG, I8155, 23.9616_MHz_XTAL / 6)
- MCFG_I8155_IN_PORTA_CB(READ8(*this, vixen_state, i8155_pa_r))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, vixen_state, i8155_pb_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, vixen_state, i8155_pc_w))
-
- MCFG_DEVICE_ADD(P8155H_IO_TAG, I8155, 23.9616_MHz_XTAL / 6)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(m_ieee488, ieee488_device, host_dio_w))
- MCFG_I8155_OUT_PORTB_CB(WRITE8(*this, vixen_state, io_i8155_pb_w))
- MCFG_I8155_OUT_PORTC_CB(WRITE8(*this, vixen_state, io_i8155_pc_w))
- MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(*this, vixen_state, io_i8155_to_w))
+ i8155_device &i8155(I8155(config, P8155H_TAG, 23.9616_MHz_XTAL / 6));
+ i8155.in_pa_callback().set(FUNC(vixen_state::i8155_pa_r));
+ i8155.out_pb_callback().set(FUNC(vixen_state::i8155_pb_w));
+ i8155.out_pc_callback().set(FUNC(vixen_state::i8155_pc_w));
+
+ i8155_device &i8155_io(I8155(config, P8155H_IO_TAG, 23.9616_MHz_XTAL / 6));
+ i8155_io.out_pa_callback().set(m_ieee488, FUNC(ieee488_device::host_dio_w));
+ i8155_io.out_pb_callback().set(FUNC(vixen_state::io_i8155_pb_w));
+ i8155_io.out_pc_callback().set(FUNC(vixen_state::io_i8155_pc_w));
+ i8155_io.out_to_callback().set(FUNC(vixen_state::io_i8155_to_w));
MCFG_DEVICE_ADD(P8251A_TAG, I8251, 0)
MCFG_I8251_TXD_HANDLER(WRITELINE(RS232_TAG, rs232_port_device, write_txd))
diff --git a/src/mame/drivers/vp415.cpp b/src/mame/drivers/vp415.cpp
index 8bc039dc66c..0881c3e66ae 100644
--- a/src/mame/drivers/vp415.cpp
+++ b/src/mame/drivers/vp415.cpp
@@ -528,10 +528,10 @@ MACHINE_CONFIG_START(vp415_state::vp415)
MCFG_DEVICE_PROGRAM_MAP(drive_program_map)
MCFG_DEVICE_IO_MAP(drive_io_map)
- MCFG_DEVICE_ADD(I8155_TAG, I8155, 0)
- MCFG_I8155_OUT_PORTA_CB(WRITE8(CHARGEN_TAG, mb88303_device, da_w))
- MCFG_I8155_IN_PORTB_CB(READ8(*this, vp415_state, drive_i8155_pb_r))
- MCFG_I8155_IN_PORTC_CB(READ8(*this, vp415_state, drive_i8155_pc_r))
+ i8155_device &i8155(I8155(config, I8155_TAG, 0));
+ i8155.out_pa_callback().set(CHARGEN_TAG, FUNC(mb88303_device::da_w));
+ i8155.in_pb_callback().set(FUNC(vp415_state::drive_i8155_pb_r));
+ i8155.in_pc_callback().set(FUNC(vp415_state::drive_i8155_pc_r));
MCFG_DEVICE_ADD(I8255_TAG, I8255, 0)
MCFG_I8255_OUT_PORTA_CB(WRITE8(*this, vp415_state, drive_i8255_pa_w))
diff --git a/src/mame/includes/cvs.h b/src/mame/includes/cvs.h
index 49499306105..3687b2971c8 100644
--- a/src/mame/includes/cvs.h
+++ b/src/mame/includes/cvs.h
@@ -48,8 +48,20 @@ public:
, m_lamps(*this, "lamp%u", 1U)
{ }
+ void init_raiders();
+ void init_huncholy();
+ void init_hero();
+ void init_superbik();
+ void init_hunchbaka();
+ void cvs(machine_config &config);
+
+protected:
+
+ DECLARE_WRITE_LINE_MEMBER(write_s2650_flag); // used by galaxia_state
+ DECLARE_READ8_MEMBER(huncholy_prot_r);
+ DECLARE_READ8_MEMBER(superbik_prot_r);
+ DECLARE_READ8_MEMBER(hero_prot_r);
DECLARE_READ_LINE_MEMBER(speech_rom_read_bit);
- DECLARE_WRITE_LINE_MEMBER(write_s2650_flag);
DECLARE_WRITE_LINE_MEMBER(cvs_slave_cpu_interrupt);
DECLARE_READ8_MEMBER(cvs_input_r);
DECLARE_WRITE8_MEMBER(cvs_speech_rom_address_lo_w);
@@ -75,11 +87,6 @@ public:
DECLARE_WRITE8_MEMBER(cvs_unknown_w);
DECLARE_WRITE8_MEMBER(cvs_tms5110_ctl_w);
DECLARE_WRITE8_MEMBER(cvs_tms5110_pdc_w);
- void init_raiders();
- void init_huncholy();
- void init_hero();
- void init_superbik();
- void init_hunchbaka();
DECLARE_VIDEO_START(cvs);
DECLARE_PALETTE_INIT(cvs);
uint32_t screen_update_cvs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -90,14 +97,12 @@ public:
void cvs_init_stars();
void cvs_update_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, const pen_t star_pen, bool update_always);
void start_393hz_timer();
- void cvs(machine_config &config);
void cvs_dac_cpu_map(address_map &map);
void cvs_main_cpu_data_map(address_map &map);
void cvs_main_cpu_io_map(address_map &map);
void cvs_main_cpu_map(address_map &map);
void cvs_speech_cpu_map(address_map &map);
-protected:
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -123,6 +128,7 @@ protected:
int m_s2650_flag;
emu_timer *m_cvs_393hz_timer;
uint8_t m_cvs_393hz_clock;
+ uint8_t m_protection_counter;
uint8_t m_character_banking_mode;
uint16_t m_character_ram_page_start;
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index dcbadec3fb2..418c8c0d8f9 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -38200,6 +38200,12 @@ videocba // (c) 1987 InterFlip
videodad // (c) 1987 InterFlip
videopkr // (c) 1984 InterFlip
+@source:videosaa.cpp
+jokrlady //
+ladygum //
+paradar //
+winner //
+
@source:vigilant.cpp
buccanrs // (c) 1989 Duintronic
buccanrsa // (c) 1989 Duintronic