From 378dde23af8dc1f386fb67767df8f679905f3ab2 Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Mon, 17 Dec 2018 12:40:08 +0100 Subject: -cpu/m6502: Removed MCFG macros. [Ryan Holtz] -machine/mos6529, mos8722, namco68, sound/mos6581: Removed MCFG macros. [Ryan Holtz] -machine/pla: Added a dedicated MOS8721 device. [Ryan Holtz] -drivers/apple2gs, apple3, c128, c64, cbm2, plus4, tvboy, vic10, xavix: Removed MACHINE_CONFIG macros. [Ryan Holtz] Thus ended the reign of MCFG within devices/cpu. Briefly a couple systems from each driver. (nw) --- src/devices/bus/cbm2/exp.h | 11 +- src/devices/bus/cbmiec/cbmiec.h | 9 + src/devices/bus/plus4/exp.h | 14 +- src/devices/cpu/e0c6200/e0c6s46.cpp | 2 +- src/devices/cpu/m6502/m3745x.cpp | 139 +++---------- src/devices/cpu/m6502/m3745x.h | 73 +------ src/devices/cpu/m6502/m5074x.cpp | 63 +----- src/devices/cpu/m6502/m5074x.h | 44 +--- src/devices/cpu/m6502/m6502.h | 8 +- src/devices/cpu/m6502/m6510.h | 10 - src/devices/cpu/m6502/m6510t.h | 6 - src/devices/cpu/m6502/m7501.h | 6 - src/devices/cpu/m6502/m8502.h | 6 - src/devices/cpu/m6502/n2a03.cpp | 15 +- src/devices/cpu/m6502/xavix.h | 12 +- src/devices/cpu/m6502/xavix2000.h | 3 - src/devices/machine/appldriv.h | 8 +- src/devices/machine/mos6529.cpp | 29 +-- src/devices/machine/mos6529.h | 47 +---- src/devices/machine/mos8722.h | 35 +--- src/devices/machine/pla.cpp | 10 + src/devices/machine/pla.h | 15 +- src/devices/machine/sonydriv.h | 5 + src/devices/sound/mos6581.h | 18 +- src/devices/sound/nes_apu.h | 2 + src/mame/drivers/a2600.cpp | 40 ++-- src/mame/drivers/apple2gs.cpp | 90 ++++---- src/mame/drivers/apple3.cpp | 57 +++--- src/mame/drivers/c128.cpp | 396 ++++++++++++++++++----------------- src/mame/drivers/c64.cpp | 397 +++++++++++++++++++----------------- src/mame/drivers/cbm2.cpp | 371 +++++++++++++++++---------------- src/mame/drivers/plus4.cpp | 202 +++++++++--------- src/mame/drivers/tvboy.cpp | 38 ++-- src/mame/drivers/vic10.cpp | 65 +++--- src/mame/drivers/xavix.cpp | 131 ++++++------ src/mame/includes/a2600.h | 7 +- src/mame/includes/xavix.h | 5 +- src/mame/machine/namco68.cpp | 23 ++- 38 files changed, 1091 insertions(+), 1321 deletions(-) diff --git a/src/devices/bus/cbm2/exp.h b/src/devices/bus/cbm2/exp.h index 6eff16c5260..51f2cb15119 100644 --- a/src/devices/bus/cbm2/exp.h +++ b/src/devices/bus/cbm2/exp.h @@ -65,7 +65,16 @@ class cbm2_expansion_slot_device : public device_t, { public: // construction/destruction - cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + template + cbm2_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt) + : cbm2_expansion_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } + cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); // computer interface uint8_t read(address_space &space, offs_t offset, uint8_t data, int csbank1, int csbank2, int csbank3); diff --git a/src/devices/bus/cbmiec/cbmiec.h b/src/devices/bus/cbmiec/cbmiec.h index fb889573709..4977bfc97be 100644 --- a/src/devices/bus/cbmiec/cbmiec.h +++ b/src/devices/bus/cbmiec/cbmiec.h @@ -166,6 +166,15 @@ class cbm_iec_slot_device : public device_t, { public: // construction/destruction + template + cbm_iec_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt) + : cbm_iec_slot_device(mconfig, tag, owner, (uint32_t)0) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } cbm_iec_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); static void add_slot(machine_config &config, const char *_tag, int _address, const char *_def_slot); diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h index 0fc56396ca9..e61755a497e 100644 --- a/src/devices/bus/plus4/exp.h +++ b/src/devices/bus/plus4/exp.h @@ -94,13 +94,17 @@ class plus4_expansion_slot_device : public device_t, { public: // construction/destruction + template + plus4_expansion_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock, T &&opts, char const *dflt) + : plus4_expansion_slot_device(mconfig, tag, owner, clock) + { + option_reset(); + opts(*this); + set_default_option(dflt); + set_fixed(false); + } plus4_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_irq_wr_callback(Object &&cb) { return m_write_irq.set_callback(std::forward(cb)); } - template devcb_base &set_cd_rd_callback(Object &&cb) { return m_read_dma_cd.set_callback(std::forward(cb)); } - template devcb_base &set_cd_wr_callback(Object &&cb) { return m_write_dma_cd.set_callback(std::forward(cb)); } - template devcb_base &set_aec_wr_callback(Object &&cb) { return m_write_aec.set_callback(std::forward(cb)); } - auto irq_wr_callback() { return m_write_irq.bind(); } auto cd_rd_callback() { return m_read_dma_cd.bind(); } auto cd_wr_callback() { return m_write_dma_cd.bind(); } diff --git a/src/devices/cpu/e0c6200/e0c6s46.cpp b/src/devices/cpu/e0c6200/e0c6s46.cpp index 4a40dff3d70..ce0687b5088 100644 --- a/src/devices/cpu/e0c6200/e0c6s46.cpp +++ b/src/devices/cpu/e0c6200/e0c6s46.cpp @@ -11,7 +11,7 @@ - finish i/o ports - serial interface - buzzer envelope addition - - add mask options to MCFG (eg. buzzer on output port R4x is optional) + - add mask options for ports (eg. buzzer on output port R4x is optional) */ diff --git a/src/devices/cpu/m6502/m3745x.cpp b/src/devices/cpu/m6502/m3745x.cpp index bee7f00223c..df65754bd78 100644 --- a/src/devices/cpu/m6502/m3745x.cpp +++ b/src/devices/cpu/m6502/m3745x.cpp @@ -40,22 +40,9 @@ DEFINE_DEVICE_TYPE(M37450, m37450_device, "m37450", "Mitsubishi M37450") m3745x_device::m3745x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map) : m740_device(mconfig, type, tag, owner, clock), m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, internal_map), - read_p3(*this), - read_p4(*this), - read_p5(*this), - read_p6(*this), - write_p3(*this), - write_p4(*this), - write_p5(*this), - write_p6(*this), - read_ad_0(*this), - read_ad_1(*this), - read_ad_2(*this), - read_ad_3(*this), - read_ad_4(*this), - read_ad_5(*this), - read_ad_6(*this), - read_ad_7(*this), + m_read_p{{*this}, {*this}, {*this}, {*this}}, + m_write_p{{*this}, {*this}, {*this}, {*this}}, + m_read_ad{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}}, m_intreq1(0), m_intreq2(0), m_intctrl1(0), @@ -71,22 +58,15 @@ m3745x_device::m3745x_device(const machine_config &mconfig, device_type type, co void m3745x_device::device_start() { - read_p3.resolve_safe(0); - read_p4.resolve_safe(0); - read_p5.resolve_safe(0); - read_p6.resolve_safe(0); - write_p3.resolve_safe(); - write_p4.resolve_safe(); - write_p5.resolve_safe(); - write_p6.resolve_safe(); - read_ad_0.resolve_safe(0); - read_ad_1.resolve_safe(0); - read_ad_2.resolve_safe(0); - read_ad_3.resolve_safe(0); - read_ad_4.resolve_safe(0); - read_ad_5.resolve_safe(0); - read_ad_6.resolve_safe(0); - read_ad_7.resolve_safe(0); + for (int i = 0; i < 4; i++) + { + m_read_p[i].resolve_safe(0); + m_write_p[i].resolve_safe(); + } + for (int i = 0; i < 8; i++) + { + m_read_ad[i].resolve_safe(0); + } for (int i = 0; i < NUM_TIMERS; i++) { @@ -252,50 +232,14 @@ void m3745x_device::recalc_irqs() m_last_all_ints = all_ints; } -void m3745x_device::send_port(address_space &space, uint8_t offset, uint8_t data) +void m3745x_device::send_port(uint8_t offset, uint8_t data) { - switch (offset) - { - case 0: - write_p3(data); - break; - - case 1: - write_p4(data); - break; - - case 2: - write_p5(data); - break; - - case 3: - write_p6(data); - break; - } + m_write_p[offset](data); } uint8_t m3745x_device::read_port(uint8_t offset) { - uint8_t incoming = 0; - - switch (offset) - { - case 0: - incoming = read_p3(); - break; - - case 1: - incoming = read_p4(); - break; - - case 2: - incoming = read_p5(); - break; - - case 3: - incoming = read_p6(); - break; - } + uint8_t incoming = m_read_p[offset](); // apply data direction registers incoming &= (m_ddrs[offset] ^ 0xff); @@ -339,37 +283,37 @@ WRITE8_MEMBER(m3745x_device::ports_w) switch (offset) { case 0: // p3 - send_port(space, 0, data & m_ddrs[0]); + send_port(0, data & m_ddrs[0]); m_ports[0] = data; break; case 1: // p3 ddr - send_port(space, 0, m_ports[0] & data); + send_port(0, m_ports[0] & data); m_ddrs[0] = data; break; case 2: // p4 - send_port(space, 1, data & m_ddrs[1]); + send_port(1, data & m_ddrs[1]); m_ports[1] = data; break; case 4: // p5 - send_port(space, 2, data & m_ddrs[2]); + send_port(2, data & m_ddrs[2]); m_ports[2] = data; break; case 5: // p5 ddr - send_port(space, 2, m_ports[2] & data); + send_port(2, m_ports[2] & data); m_ddrs[2] = data; break; case 6: // p6 - send_port(space, 3, data & m_ddrs[3]); + send_port(3, data & m_ddrs[3]); m_ports[3] = data; break; case 7: // p6 ddr - send_port(space, 3, m_ports[3] & data); + send_port(3, m_ports[3] & data); m_ddrs[3] = data; break; } @@ -423,49 +367,12 @@ WRITE8_MEMBER(m3745x_device::intregs_w) READ8_MEMBER(m3745x_device::adc_r) { - uint8_t rv = 0; - switch (offset) { case 0: m_intreq2 &= ~IRQ2_ADC; recalc_irqs(); - - switch (m_adctrl & 7) - { - case 0: - rv = read_ad_0(); - break; - - case 1: - rv = read_ad_1(); - break; - - case 2: - rv = read_ad_2(); - break; - - case 3: - rv = read_ad_3(); - break; - - case 4: - rv = read_ad_4(); - break; - - case 5: - rv = read_ad_5(); - break; - - case 6: - rv = read_ad_6(); - break; - - case 7: - rv = read_ad_7(); - break; - } - return rv; + return m_read_ad[m_adctrl & 7](); case 1: return m_adctrl; diff --git a/src/devices/cpu/m6502/m3745x.h b/src/devices/cpu/m6502/m3745x.h index ca868f09a66..b499019036b 100644 --- a/src/devices/cpu/m6502/m3745x.h +++ b/src/devices/cpu/m6502/m3745x.h @@ -7,28 +7,6 @@ #include "m740.h" -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_M3745X_ADC14_CALLBACKS(_ad0, _ad1, _ad2, _ad3) \ - downcast(device)->set_ad14_callbacks(DEVCB_##_ad0, DEVCB_##_ad1, DEVCB_##_ad2, DEVCB_##_ad3); - -#define MCFG_M3745X_ADC58_CALLBACKS(_ad0, _ad1, _ad2, _ad3) \ - downcast(device)->set_ad58_callbacks(DEVCB_##_ad0, DEVCB_##_ad1, DEVCB_##_ad2, DEVCB_##_ad3); - -#define MCFG_M3745X_PORT3_CALLBACKS(_read, _write) \ - downcast(device)->set_p3_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M3745X_PORT4_CALLBACKS(_read, _write) \ - downcast(device)->set_p4_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M3745X_PORT5_CALLBACKS(_read, _write) \ - downcast(device)->set_p5_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M3745X_PORT6_CALLBACKS(_read, _write) \ - downcast(device)->set_p6_callbacks(DEVCB_##_read, DEVCB_##_write); - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -62,50 +40,13 @@ public: const address_space_config m_program_config; - template void set_p3_callbacks(Read &&rd, Write &&wr) - { - read_p3.set_callback(std::forward(rd)); - write_p3.set_callback(std::forward(wr)); - } - - template void set_p4_callbacks(Read &&rd, Write &&wr) - { - read_p4.set_callback(std::forward(rd)); - write_p4.set_callback(std::forward(wr)); - } - - template void set_p5_callbacks(Read &&rd, Write &&wr) - { - read_p5.set_callback(std::forward(rd)); - write_p5.set_callback(std::forward(wr)); - } - - template void set_p6_callbacks(Read &&rd, Write &&wr) - { - read_p6.set_callback(std::forward(rd)); - write_p6.set_callback(std::forward(wr)); - } - - template void set_ad14_callbacks(Read &&rd, Read2 &&rd2, Read3 &&rd3, Read4 &&rd4) - { - read_ad_0.set_callback(std::forward(rd)); - read_ad_1.set_callback(std::forward(rd2)); - read_ad_2.set_callback(std::forward(rd3)); - read_ad_3.set_callback(std::forward(rd4)); - } - - template void set_ad58_callbacks(Read &&rd, Read2 &&rd2, Read3 &&rd3, Read4 &&rd4) - { - read_ad_4.set_callback(std::forward(rd)); - read_ad_5.set_callback(std::forward(rd2)); - read_ad_6.set_callback(std::forward(rd3)); - read_ad_7.set_callback(std::forward(rd4)); - } + template auto read_p() { return m_read_p[Bit-3].bind(); } + template auto write_p() { return m_write_p[Bit-3].bind(); } + template auto read_ad() { return m_read_ad[Bit].bind(); } - devcb_read8 read_p3, read_p4, read_p5, read_p6; - devcb_write8 write_p3, write_p4, write_p5, write_p6; - devcb_read8 read_ad_0, read_ad_1, read_ad_2, read_ad_3; - devcb_read8 read_ad_4, read_ad_5, read_ad_6, read_ad_7; + devcb_read8 m_read_p[4]; + devcb_write8 m_write_p[4]; + devcb_read8 m_read_ad[8]; DECLARE_READ8_MEMBER(ports_r); DECLARE_WRITE8_MEMBER(ports_w); @@ -127,7 +68,7 @@ protected: virtual void execute_set_input(int inputnum, int state) override; virtual space_config_vector memory_space_config() const override; - void send_port(address_space &space, uint8_t offset, uint8_t data); + void send_port(uint8_t offset, uint8_t data); uint8_t read_port(uint8_t offset); void recalc_irqs(); diff --git a/src/devices/cpu/m6502/m5074x.cpp b/src/devices/cpu/m6502/m5074x.cpp index 67a8267fc8e..9626dc0d9ad 100644 --- a/src/devices/cpu/m6502/m5074x.cpp +++ b/src/devices/cpu/m6502/m5074x.cpp @@ -42,14 +42,8 @@ DEFINE_DEVICE_TYPE(M50741, m50741_device, "m50741", "Mitsubishi M50741") m5074x_device::m5074x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map) : m740_device(mconfig, type, tag, owner, clock), m_program_config("program", ENDIANNESS_LITTLE, 8, 13, 0, internal_map), - read_p0(*this), - read_p1(*this), - read_p2(*this), - read_p3(*this), - write_p0(*this), - write_p1(*this), - write_p2(*this), - write_p3(*this), + m_read_p{{*this}, {*this}, {*this}, {*this}}, + m_write_p{{*this}, {*this}, {*this}, {*this}}, m_intctrl(0), m_tmrctrl(0), m_tmr12pre(0), @@ -70,14 +64,11 @@ m5074x_device::m5074x_device(const machine_config &mconfig, device_type type, co void m5074x_device::device_start() { - read_p0.resolve_safe(0); - read_p1.resolve_safe(0); - read_p2.resolve_safe(0); - read_p3.resolve_safe(0); - write_p0.resolve_safe(); - write_p1.resolve_safe(); - write_p2.resolve_safe(); - write_p3.resolve_safe(); + for (int i = 0; i < 4; i++) + { + m_read_p[i].resolve_safe(0); + m_write_p[i].resolve_safe(); + } for (int i = 0; i < NUM_TIMERS; i++) { @@ -289,48 +280,12 @@ void m5074x_device::recalc_timer(int timer) void m5074x_device::send_port(address_space &space, uint8_t offset, uint8_t data) { - switch (offset) - { - case 0: - write_p0(data); - break; - - case 1: - write_p1(data); - break; - - case 2: - write_p2(data); - break; - - case 3: - write_p3(data); - break; - } + m_write_p[offset](data); } uint8_t m5074x_device::read_port(uint8_t offset) { - uint8_t incoming = 0; - - switch (offset) - { - case 0: - incoming = read_p0(); - break; - - case 1: - incoming = read_p1(); - break; - - case 2: - incoming = read_p2(); - break; - - case 3: - incoming = read_p3(); - break; - } + uint8_t incoming = m_read_p[offset](); // apply data direction registers incoming &= (m_ddrs[offset] ^ 0xff); diff --git a/src/devices/cpu/m6502/m5074x.h b/src/devices/cpu/m6502/m5074x.h index cb1b71a962c..1729ff39d25 100644 --- a/src/devices/cpu/m6502/m5074x.h +++ b/src/devices/cpu/m6502/m5074x.h @@ -15,34 +15,6 @@ #define M5074X_INTERNAL_ROM_REGION "internal" #define M5074X_INTERNAL_ROM(_tag) (_tag ":" M5074X_INTERNAL_ROM_REGION) -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_M5074X_PORT0_READ_CALLBACK(_read) \ - downcast(*device).set_p0_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT1_READ_CALLBACK(_read) \ - downcast(*device).set_p1_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT2_READ_CALLBACK(_read) \ - downcast(*device).set_p2_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT3_READ_CALLBACK(_read) \ - downcast(*device).set_p3_rd_callback(DEVCB_##_read); - -#define MCFG_M5074X_PORT0_WRITE_CALLBACK(_write) \ - downcast(*device).set_p0_wr_callback(DEVCB_##_write); - -#define MCFG_M5074X_PORT1_WRITE_CALLBACK(_write) \ - downcast(*device).set_p1_wr_callback(DEVCB_##_write); - -#define MCFG_M5074X_PORT2_WRITE_CALLBACK(_write) \ - downcast(*device).set_p2_wr_callback(DEVCB_##_write); - -#define MCFG_M5074X_PORT3_WRITE_CALLBACK(_write) \ - downcast(*device).set_p3_wr_callback(DEVCB_##_write); - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -73,17 +45,11 @@ class m5074x_device : public m740_device public: const address_space_config m_program_config; - template devcb_base &set_p0_rd_callback(Object &&cb) { return read_p0.set_callback(std::forward(cb)); } - template devcb_base &set_p1_rd_callback(Object &&cb) { return read_p1.set_callback(std::forward(cb)); } - template devcb_base &set_p2_rd_callback(Object &&cb) { return read_p2.set_callback(std::forward(cb)); } - template devcb_base &set_p3_rd_callback(Object &&cb) { return read_p3.set_callback(std::forward(cb)); } - template devcb_base &set_p0_wr_callback(Object &&cb) { return write_p0.set_callback(std::forward(cb)); } - template devcb_base &set_p1_wr_callback(Object &&cb) { return write_p1.set_callback(std::forward(cb)); } - template devcb_base &set_p2_wr_callback(Object &&cb) { return write_p2.set_callback(std::forward(cb)); } - template devcb_base &set_p3_wr_callback(Object &&cb) { return write_p3.set_callback(std::forward(cb)); } - - devcb_read8 read_p0, read_p1, read_p2, read_p3; - devcb_write8 write_p0, write_p1, write_p2, write_p3; + template auto read_p() { return m_read_p[Bit].bind(); } + template auto write_p() { return m_write_p[Bit].bind(); } + + devcb_read8 m_read_p[4]; + devcb_write8 m_write_p[4]; DECLARE_READ8_MEMBER(ports_r); DECLARE_WRITE8_MEMBER(ports_w); diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h index fc527ad8c5a..b6034d98f0a 100644 --- a/src/devices/cpu/m6502/m6502.h +++ b/src/devices/cpu/m6502/m6502.h @@ -11,12 +11,6 @@ #ifndef MAME_CPU_M6502_M6502_H #define MAME_CPU_M6502_M6502_H -#define MCFG_M6502_DISABLE_CACHE() \ - downcast(device)->disable_cache(); - -#define MCFG_M6502_SYNC_CALLBACK(_cb) \ - downcast(*device).set_sync_callback(DEVCB_##_cb); - class m6502_device : public cpu_device { public: enum { @@ -31,7 +25,7 @@ public: bool get_sync() const { return sync; } void disable_cache() { cache_disabled = true; } - template devcb_base &set_sync_callback(Object &&cb) { return sync_w.set_callback(std::forward(cb)); } + auto sync_cb() { return sync_w.bind(); } devcb_write_line sync_w; diff --git a/src/devices/cpu/m6502/m6510.h b/src/devices/cpu/m6502/m6510.h index 4e686560f5a..28c9ab2443a 100644 --- a/src/devices/cpu/m6502/m6510.h +++ b/src/devices/cpu/m6502/m6510.h @@ -14,12 +14,6 @@ #include "m6502.h" -#define MCFG_M6510_PORT_CALLBACKS(_read, _write) \ - downcast(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M6510_PORT_PULLS(_up, _down) \ - downcast(device)->set_pulls(_up, _down); - class m6510_device : public m6502_device { public: m6510_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -27,10 +21,6 @@ public: uint8_t get_port(); void set_pulls(uint8_t pullup, uint8_t pulldown); - template void set_callbacks(Read &&rd, Write &&wr) { - read_port.set_callback(std::forward(rd)); - write_port.set_callback(std::forward(wr)); - } auto read_callback() { return read_port.bind(); } auto write_callback() { return write_port.bind(); } diff --git a/src/devices/cpu/m6502/m6510t.h b/src/devices/cpu/m6502/m6510t.h index 04e683bd0c3..20db82b97e9 100644 --- a/src/devices/cpu/m6502/m6510t.h +++ b/src/devices/cpu/m6502/m6510t.h @@ -13,12 +13,6 @@ #include "m6510.h" -#define MCFG_M6510T_PORT_CALLBACKS(_read, _write) \ - downcast(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M6510T_PORT_PULLS(_up, _down) \ - downcast(device)->set_pulls(_up, _down); - class m6510t_device : public m6510_device { public: m6510t_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/m7501.h b/src/devices/cpu/m6502/m7501.h index 633d5ab0d78..baa26668fab 100644 --- a/src/devices/cpu/m6502/m7501.h +++ b/src/devices/cpu/m6502/m7501.h @@ -13,12 +13,6 @@ #include "m6510.h" -#define MCFG_M7501_PORT_CALLBACKS(_read, _write) \ - downcast(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M7501_PORT_PULLS(_up, _down) \ - downcast(device)->set_pulls(_up, _down); - class m7501_device : public m6510_device { public: m7501_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/m8502.h b/src/devices/cpu/m6502/m8502.h index bc52b45ef2c..cdd9c8c702f 100644 --- a/src/devices/cpu/m6502/m8502.h +++ b/src/devices/cpu/m6502/m8502.h @@ -14,12 +14,6 @@ #include "m6510.h" -#define MCFG_M8502_PORT_CALLBACKS(_read, _write) \ - downcast(device)->set_callbacks(DEVCB_##_read, DEVCB_##_write); - -#define MCFG_M8502_PORT_PULLS(_up, _down) \ - downcast(device)->set_pulls(_up, _down); - class m8502_device : public m6510_device { public: m8502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/cpu/m6502/n2a03.cpp b/src/devices/cpu/m6502/n2a03.cpp index 6b257316f17..1a05dbbd73b 100644 --- a/src/devices/cpu/m6502/n2a03.cpp +++ b/src/devices/cpu/m6502/n2a03.cpp @@ -74,14 +74,13 @@ READ8_MEMBER(n2a03_device::apu_read_mem) return mintf->program->read_byte(offset); } -MACHINE_CONFIG_START(n2a03_device::device_add_mconfig) - MCFG_DEVICE_ADD("nesapu", NES_APU, DERIVED_CLOCK(1,1) ) - MCFG_NES_APU_IRQ_HANDLER(WRITELINE(*this, n2a03_device, apu_irq)) - MCFG_NES_APU_MEM_READ_CALLBACK(READ8(*this, n2a03_device, apu_read_mem)) - - MCFG_SOUND_ROUTE(ALL_OUTPUTS, ":mono", 0.50) - -MACHINE_CONFIG_END +void n2a03_device::device_add_mconfig(machine_config &config) +{ + NES_APU(config, m_apu, DERIVED_CLOCK(1,1)); + m_apu->irq().set(FUNC(n2a03_device::apu_irq)); + m_apu->mem_read().set(FUNC(n2a03_device::apu_read_mem)); + m_apu->add_route(ALL_OUTPUTS, ":mono", 0.50); +} #include "cpu/m6502/n2a03.hxx" diff --git a/src/devices/cpu/m6502/xavix.h b/src/devices/cpu/m6502/xavix.h index 5946be9c98e..9b28a429dad 100644 --- a/src/devices/cpu/m6502/xavix.h +++ b/src/devices/cpu/m6502/xavix.h @@ -12,9 +12,6 @@ #include "m6502.h" -#define MCFG_XAVIX_VECTOR_CALLBACK(_class, _method) \ - downcast(*device).set_vector_callback(xavix_device::xavix_interrupt_vector_delegate(&_class::_method, #_class "::" #_method, this)); - class xavix_device : public m6502_device { public: xavix_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -52,6 +49,15 @@ public: typedef device_delegate xavix_interrupt_vector_delegate; template void set_vector_callback(Object &&cb) { m_vector_callback = std::forward(cb); } + void set_vector_callback(xavix_interrupt_vector_delegate callback) { m_vector_callback = callback; } + template void set_vector_callback(const char *devname, int16_t (FunctionClass::*callback)(int, int), const char *name) + { + set_vector_callback(xavix_interrupt_vector_delegate(callback, name, devname, static_cast(nullptr))); + } + template void set_vector_callback(int16_t (FunctionClass::*callback)(int, int), const char *name) + { + set_vector_callback(xavix_interrupt_vector_delegate(callback, name, nullptr, static_cast(nullptr))); + } #undef O diff --git a/src/devices/cpu/m6502/xavix2000.h b/src/devices/cpu/m6502/xavix2000.h index 23d8ca9b890..6eec3db88d5 100644 --- a/src/devices/cpu/m6502/xavix2000.h +++ b/src/devices/cpu/m6502/xavix2000.h @@ -12,9 +12,6 @@ #include "xavix.h" -#define MCFG_XAVIX2000_VECTOR_CALLBACK(_class, _method) \ - downcast(*device).set_vector_callback(xavix2000_device::xavix2000_interrupt_vector_delegate(&_class::_method, #_class "::" #_method, this)); - class xavix2000_device : public xavix_device { public: xavix2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/devices/machine/appldriv.h b/src/devices/machine/appldriv.h index 3765705f625..1a396990167 100644 --- a/src/devices/machine/appldriv.h +++ b/src/devices/machine/appldriv.h @@ -28,7 +28,13 @@ class apple525_floppy_image_device : public legacy_floppy_image_device { public: // construction/destruction - apple525_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + apple525_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, const floppy_interface *config, int dividend, int divisor) + : apple525_floppy_image_device(mconfig, tag, owner, (uint32_t)0) + { + set_floppy_config(config); + set_params(dividend, divisor); + } + apple525_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); virtual image_init_result call_load() override; virtual void call_unload() override; diff --git a/src/devices/machine/mos6529.cpp b/src/devices/machine/mos6529.cpp index a1487f13921..b3eaf9d2a67 100644 --- a/src/devices/machine/mos6529.cpp +++ b/src/devices/machine/mos6529.cpp @@ -34,14 +34,7 @@ DEFINE_DEVICE_TYPE(MOS6529, mos6529_device, "mos6529", "MOS 6529") mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MOS6529, tag, owner, clock), m_input(0), - m_p0_handler(*this), - m_p1_handler(*this), - m_p2_handler(*this), - m_p3_handler(*this), - m_p4_handler(*this), - m_p5_handler(*this), - m_p6_handler(*this), - m_p7_handler(*this) + m_p_handler{{*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}, {*this}} { } @@ -53,14 +46,8 @@ mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, d void mos6529_device::device_start() { // resolve callbacks - m_p0_handler.resolve_safe(); - m_p1_handler.resolve_safe(); - m_p2_handler.resolve_safe(); - m_p3_handler.resolve_safe(); - m_p4_handler.resolve_safe(); - m_p5_handler.resolve_safe(); - m_p6_handler.resolve_safe(); - m_p7_handler.resolve_safe(); + for (int i = 0; i < 8; i++) + m_p_handler[i].resolve_safe(); } @@ -80,12 +67,6 @@ READ8_MEMBER( mos6529_device::read ) WRITE8_MEMBER( mos6529_device::write ) { - m_p0_handler(BIT(data, 0)); - m_p1_handler(BIT(data, 1)); - m_p2_handler(BIT(data, 2)); - m_p3_handler(BIT(data, 3)); - m_p4_handler(BIT(data, 4)); - m_p5_handler(BIT(data, 5)); - m_p6_handler(BIT(data, 6)); - m_p7_handler(BIT(data, 7)); + for (int bit = 0; bit < 8; bit++) + m_p_handler[bit](BIT(data, bit)); } diff --git a/src/devices/machine/mos6529.h b/src/devices/machine/mos6529.h index abddc4175c7..d6240477e4d 100644 --- a/src/devices/machine/mos6529.h +++ b/src/devices/machine/mos6529.h @@ -27,35 +27,6 @@ -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_MOS6529_P0_HANDLER(_devcb) \ - downcast(*device).set_p0_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P1_HANDLER(_devcb) \ - downcast(*device).set_p1_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P2_HANDLER(_devcb) \ - downcast(*device).set_p2_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P3_HANDLER(_devcb) \ - downcast(*device).set_p3_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P4_HANDLER(_devcb) \ - downcast(*device).set_p4_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P5_HANDLER(_devcb) \ - downcast(*device).set_p5_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P6_HANDLER(_devcb) \ - downcast(*device).set_p6_handler(DEVCB_##_devcb); - -#define MCFG_MOS6529_P7_HANDLER(_devcb) \ - downcast(*device).set_p7_handler(DEVCB_##_devcb); - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -68,14 +39,7 @@ public: // construction/destruction mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_p0_handler(Object &&cb) { return m_p0_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p1_handler(Object &&cb) { return m_p1_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p2_handler(Object &&cb) { return m_p2_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p3_handler(Object &&cb) { return m_p3_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p4_handler(Object &&cb) { return m_p4_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p5_handler(Object &&cb) { return m_p5_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p6_handler(Object &&cb) { return m_p6_handler.set_callback(std::forward(cb)); } - template devcb_base &set_p7_handler(Object &&cb) { return m_p7_handler.set_callback(std::forward(cb)); } + template auto p_handler() { return m_p_handler[Bit].bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); @@ -95,14 +59,7 @@ protected: uint8_t m_input; - devcb_write_line m_p0_handler; - devcb_write_line m_p1_handler; - devcb_write_line m_p2_handler; - devcb_write_line m_p3_handler; - devcb_write_line m_p4_handler; - devcb_write_line m_p5_handler; - devcb_write_line m_p6_handler; - devcb_write_line m_p7_handler; + devcb_write_line m_p_handler[8]; }; diff --git a/src/devices/machine/mos8722.h b/src/devices/machine/mos8722.h index 744adf415e7..e5d32d4e4ea 100644 --- a/src/devices/machine/mos8722.h +++ b/src/devices/machine/mos8722.h @@ -38,30 +38,6 @@ #pragma once - - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_MOS8722_Z80EN_CALLBACK(_write) \ - downcast(*device).set_z80en_wr_callback(DEVCB_##_write); - -#define MCFG_MOS8722_FSDIR_CALLBACK(_write) \ - downcast(*device).set_fsdir_wr_callback(DEVCB_##_write); - -#define MCFG_MOS8722_GAME_CALLBACK(_read) \ - downcast(*device).set_game_rd_callback(DEVCB_##_read); - -#define MCFG_MOS8722_EXROM_CALLBACK(_read) \ - downcast(*device).set_exrom_rd_callback(DEVCB_##_read); - -#define MCFG_MOS8722_SENSE40_CALLBACK(_read) \ - downcast(*device).set_sense40_rd_callback(DEVCB_##_read); - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -74,12 +50,11 @@ public: // construction/destruction mos8722_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_z80en_wr_callback(Object &&cb) { return m_write_z80en.set_callback(std::forward(cb)); } - template devcb_base &set_fsdir_wr_callback(Object &&cb) { return m_write_fsdir.set_callback(std::forward(cb)); } - template devcb_base &set_game_rd_callback(Object &&cb) { return m_read_game.set_callback(std::forward(cb)); } - template devcb_base &set_exrom_rd_callback(Object &&cb) { return m_read_exrom.set_callback(std::forward(cb)); } - template devcb_base &set_sense40_rd_callback(Object &&cb) { return m_read_sense40.set_callback(std::forward(cb)); } - + auto z80en() { return m_write_z80en.bind(); } + auto fsdir() { return m_write_fsdir.bind(); } + auto game() { return m_read_game.bind(); } + auto exrom() { return m_read_exrom.bind(); } + auto sense40() { return m_read_sense40.bind(); } uint8_t read(offs_t offset, uint8_t data); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/machine/pla.cpp b/src/devices/machine/pla.cpp index 2b73ba36a14..f1ccde8aecc 100644 --- a/src/devices/machine/pla.cpp +++ b/src/devices/machine/pla.cpp @@ -14,6 +14,7 @@ DEFINE_DEVICE_TYPE(PLA, pla_device, "pla", "PLA") DEFINE_DEVICE_TYPE(PLS100, pls100_device, "pls100", "82S100-series PLA") +DEFINE_DEVICE_TYPE(MOS8721, mos8721_device, "mos8721", "MOS 8721 PLA") //------------------------------------------------- // pla_device - constructor @@ -45,6 +46,15 @@ pls100_device::pls100_device(const machine_config &mconfig, const char *tag, dev set_num_terms(48); } +mos8721_device::mos8721_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : pla_device(mconfig, MOS8721, tag, owner, clock) +{ + // TODO: actual number of terms is unknown + set_num_inputs(27); + set_num_outputs(18); + set_num_terms(379); +} + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- diff --git a/src/devices/machine/pla.h b/src/devices/machine/pla.h index b6cfeb42eb8..7e4672b7860 100644 --- a/src/devices/machine/pla.h +++ b/src/devices/machine/pla.h @@ -51,13 +51,6 @@ #define MCFG_PLS100_ADD(tag) \ MCFG_DEVICE_ADD((tag), PLS100) -// MOS 8721 PLA -// TODO: actual number of terms is unknown -#define MCFG_MOS8721_ADD(tag) \ - MCFG_PLA_ADD((tag), 27, 18, 379) - - - ///************************************************************************* // TYPE DEFINITIONS ///************************************************************************* @@ -129,14 +122,20 @@ private: } m_term[MAX_TERMS]; }; - class pls100_device : public pla_device { public: pls100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); }; +class mos8721_device : public pla_device +{ +public: + mos8721_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); +}; + DECLARE_DEVICE_TYPE(PLA, pla_device) DECLARE_DEVICE_TYPE(PLS100, pls100_device) +DECLARE_DEVICE_TYPE(MOS8721, mos8721_device) #endif // MAME_MACHINE_PLA_H diff --git a/src/devices/machine/sonydriv.h b/src/devices/machine/sonydriv.h index f547d93216b..b6e4358eadb 100644 --- a/src/devices/machine/sonydriv.h +++ b/src/devices/machine/sonydriv.h @@ -40,6 +40,11 @@ class sonydriv_floppy_image_device : public legacy_floppy_image_device { public: // construction/destruction + sonydriv_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, const floppy_interface *config) + : sonydriv_floppy_image_device(mconfig, tag, owner, (uint32_t)0) + { + set_floppy_config(config); + } sonydriv_floppy_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); static void legacy_2_drives_add(machine_config &mconfig, const floppy_interface *config); diff --git a/src/devices/sound/mos6581.h b/src/devices/sound/mos6581.h index 6707be8ecac..95af2cbd687 100644 --- a/src/devices/sound/mos6581.h +++ b/src/devices/sound/mos6581.h @@ -29,20 +29,6 @@ #pragma once - - -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_MOS6581_POTX_CALLBACK(_read) \ - downcast(*device).set_potx_rd_callback(DEVCB_##_read); - -#define MCFG_MOS6581_POTY_CALLBACK(_read) \ - downcast(*device).set_poty_rd_callback(DEVCB_##_read); - - - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -64,8 +50,8 @@ public: mos6581_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); ~mos6581_device(); - template devcb_base &set_potx_rd_callback(Object &&cb) { return m_read_potx.set_callback(std::forward(cb)); } - template devcb_base &set_poty_rd_callback(Object &&cb) { return m_read_poty.set_callback(std::forward(cb)); } + auto potx() { return m_read_potx.bind(); } + auto poty() { return m_read_poty.bind(); } DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); diff --git a/src/devices/sound/nes_apu.h b/src/devices/sound/nes_apu.h index 1c1cc33460a..1a20e354331 100644 --- a/src/devices/sound/nes_apu.h +++ b/src/devices/sound/nes_apu.h @@ -54,6 +54,8 @@ public: // configuration helpers template devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(cb)); } template devcb_base &set_mem_read_callback(Object &&cb) { return m_mem_read_cb.set_callback(std::forward(cb)); } + auto irq() { return m_irq_handler.bind(); } + auto mem_read() { return m_mem_read_cb.bind(); } virtual void device_reset() override; virtual void device_clock_changed() override; diff --git a/src/mame/drivers/a2600.cpp b/src/mame/drivers/a2600.cpp index b1c1b186d51..f39261c5a50 100644 --- a/src/mame/drivers/a2600.cpp +++ b/src/mame/drivers/a2600.cpp @@ -506,9 +506,9 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(a2600_state::a2600) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6507, MASTER_CLOCK_NTSC / 3) - MCFG_M6502_DISABLE_CACHE() - MCFG_DEVICE_PROGRAM_MAP(a2600_mem) + M6507(config, m_maincpu, MASTER_CLOCK_NTSC / 3); + m_maincpu->disable_cache(); + m_maincpu->set_addrmap(AS_PROGRAM, &a2600_state::a2600_mem); /* video hardware */ TIA_NTSC_VIDEO(config, m_tia, 0, "tia"); @@ -516,10 +516,10 @@ MACHINE_CONFIG_START(a2600_state::a2600) m_tia->databus_contents_callback().set(FUNC(a2600_state::a2600_get_databus_contents)); m_tia->vsync_callback().set(FUNC(a2600_state::a2600_tia_vsync_callback)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK_NTSC, 228, 26, 26 + 160 + 16, 262, 24 , 24 + 192 + 31 ) - MCFG_SCREEN_UPDATE_DEVICE("tia_video", tia_video_device, screen_update) - MCFG_SCREEN_PALETTE("tia_video:palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(MASTER_CLOCK_NTSC, 228, 26, 26 + 160 + 16, 262, 24 , 24 + 192 + 31); + m_screen->set_screen_update("tia_video", FUNC(tia_video_device::screen_update)); + m_screen->set_palette("tia_video:palette"); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -543,19 +543,19 @@ MACHINE_CONFIG_START(a2600_state::a2600) m_riot->irq_callback().set(FUNC(a2600_state::irq_callback)); #endif - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy") - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr) + VCS_CONTROL_PORT(config, CONTROL1_TAG, vcs_control_port_devices, "joy"); + VCS_CONTROL_PORT(config, CONTROL2_TAG, vcs_control_port_devices, nullptr); a2600_cartslot(config); - MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") + subdevice("cart_list")->set_filter("NTSC"); MACHINE_CONFIG_END MACHINE_CONFIG_START(a2600_state::a2600p) /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6507, MASTER_CLOCK_PAL / 3) - MCFG_DEVICE_PROGRAM_MAP(a2600_mem) - MCFG_M6502_DISABLE_CACHE() + M6507(config, m_maincpu, MASTER_CLOCK_PAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &a2600_state::a2600_mem); + m_maincpu->disable_cache(); /* video hardware */ TIA_PAL_VIDEO(config, m_tia, 0, "tia"); @@ -563,10 +563,10 @@ MACHINE_CONFIG_START(a2600_state::a2600p) m_tia->databus_contents_callback().set(FUNC(a2600_state::a2600_get_databus_contents)); m_tia->vsync_callback().set(FUNC(a2600_state::a2600_tia_vsync_callback_pal)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK_PAL, 228, 26, 26 + 160 + 16, 312, 32, 32 + 228 + 31 ) - MCFG_SCREEN_UPDATE_DEVICE("tia_video", tia_video_device, screen_update) - MCFG_SCREEN_PALETTE("tia_video:palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(MASTER_CLOCK_PAL, 228, 26, 26 + 160 + 16, 312, 32, 32 + 228 + 31); + m_screen->set_screen_update("tia_video", FUNC(tia_video_device::screen_update)); + m_screen->set_palette("tia_video:palette"); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -590,11 +590,11 @@ MACHINE_CONFIG_START(a2600_state::a2600p) m_riot->irq_callback().set(FUNC(a2600_state::irq_callback)); #endif - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy") - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr) + VCS_CONTROL_PORT(config, CONTROL1_TAG, vcs_control_port_devices, "joy"); + VCS_CONTROL_PORT(config, CONTROL2_TAG, vcs_control_port_devices, nullptr); a2600_cartslot(config); - MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") + subdevice("cart_list")->set_filter("PAL"); MACHINE_CONFIG_END diff --git a/src/mame/drivers/apple2gs.cpp b/src/mame/drivers/apple2gs.cpp index 2ee0ed761e9..dd2e049a01c 100644 --- a/src/mame/drivers/apple2gs.cpp +++ b/src/mame/drivers/apple2gs.cpp @@ -4532,7 +4532,8 @@ static void apple2_cards(device_slot_interface &device) // device.option_add("pcxport", A2BUS_PCXPORTER); /* Applied Engineering PC Transporter */ } -MACHINE_CONFIG_START( apple2gs_state::apple2gs ) +void apple2gs_state::apple2gs(machine_config &config) +{ /* basic machine hardware */ G65816(config, m_maincpu, A2GS_MASTER_CLOCK/10); m_maincpu->set_addrmap(AS_PROGRAM, &apple2gs_state::apple2gs_map); @@ -4541,15 +4542,15 @@ MACHINE_CONFIG_START( apple2gs_state::apple2gs ) m_scantimer->configure_scanline(FUNC(apple2gs_state::apple2_interrupt), "screen", 0, 1); config.m_minimum_quantum = attotime::from_hz(60); - MCFG_DEVICE_ADD(A2GS_ADBMCU_TAG, M50741, A2GS_MASTER_CLOCK/8) - MCFG_M5074X_PORT0_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p0_in)) - MCFG_M5074X_PORT0_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p0_out)) - MCFG_M5074X_PORT1_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p1_in)) - MCFG_M5074X_PORT1_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p1_out)) - MCFG_M5074X_PORT2_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p2_in)) - MCFG_M5074X_PORT2_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p2_out)) - MCFG_M5074X_PORT3_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p3_in)) - MCFG_M5074X_PORT3_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p3_out)) + M50741(config, m_adbmicro, A2GS_MASTER_CLOCK/8); + m_adbmicro->read_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_in)); + m_adbmicro->write_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_out)); + m_adbmicro->read_p<1>().set(FUNC(apple2gs_state::adbmicro_p1_in)); + m_adbmicro->write_p<1>().set(FUNC(apple2gs_state::adbmicro_p1_out)); + m_adbmicro->read_p<2>().set(FUNC(apple2gs_state::adbmicro_p2_in)); + m_adbmicro->write_p<2>().set(FUNC(apple2gs_state::adbmicro_p2_out)); + m_adbmicro->read_p<3>().set(FUNC(apple2gs_state::adbmicro_p3_in)); + m_adbmicro->write_p<3>().set(FUNC(apple2gs_state::adbmicro_p3_out)); #if !RUN_ADB_MICRO /* keyboard controller */ @@ -4569,36 +4570,35 @@ MACHINE_CONFIG_START( apple2gs_state::apple2gs ) m_ay3600->ako().set(FUNC(apple2gs_state::ay3600_ako_w)); /* repeat timer. 15 Hz from page 7-15 of "Understanding the Apple IIe" */ - MCFG_TIMER_DRIVER_ADD_PERIODIC("repttmr", apple2gs_state, ay3600_repeat, attotime::from_hz(15)) + TIMER(config, "repttmr").configure_periodic(FUNC(apple2gs_state::ay3600_repeat), attotime::from_hz(15)); #endif NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); APPLE2_VIDEO(config, m_video, A2GS_14M); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(704, 262) // 640+32+32 for the borders - MCFG_SCREEN_VISIBLE_AREA(0,703,0,230) - MCFG_SCREEN_UPDATE_DRIVER(apple2gs_state, screen_update) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(704, 262); // 640+32+32 for the borders + m_screen->set_visarea(0,703,0,230); + m_screen->set_screen_update(FUNC(apple2gs_state::screen_update)); palette_device &palette(PALETTE(config, "palette", 256)); palette.set_init(DEVICE_SELF, FUNC(apple2gs_state::palette_init_apple2gs)); /* sound hardware */ SPEAKER(config, "mono").front_center(); - SPEAKER_SOUND(config, A2GS_SPEAKER_TAG).add_route(ALL_OUTPUTS, "mono", 1.00); + SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_ES5503_ADD(A2GS_DOC_TAG, A2GS_7M) - MCFG_ES5503_OUTPUT_CHANNELS(2) - MCFG_DEVICE_ADDRESS_MAP(0, a2gs_es5503_map) - MCFG_ES5503_IRQ_FUNC(WRITELINE(*this, apple2gs_state, doc_irq_w)) - MCFG_ES5503_ADC_FUNC(READ8(*this, apple2gs_state, doc_adc_read)) - - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + ES5503(config, m_doc, A2GS_7M); + m_doc->set_channels(2); + m_doc->set_addrmap(0, &apple2gs_state::a2gs_es5503_map); + m_doc->irq_func().set(FUNC(apple2gs_state::doc_irq_w)); + m_doc->adc_func().set(FUNC(apple2gs_state::doc_adc_read)); + m_doc->add_route(0, "lspeaker", 1.0); + m_doc->add_route(1, "rspeaker", 1.0); /* RAM */ RAM(config, m_ram).set_default_size("2M").set_extra_options("1M,3M,4M,5M,6M,7M,8M").set_default_value(0x00); @@ -4696,29 +4696,35 @@ MACHINE_CONFIG_START( apple2gs_state::apple2gs ) A2BUS_SLOT(config, "sl6", m_a2bus, apple2_cards, nullptr); A2BUS_SLOT(config, "sl7", m_a2bus, apple2_cards, nullptr); - MCFG_IWM_ADD(A2GS_IWM_TAG, apple2_fdc_interface) - MCFG_LEGACY_FLOPPY_APPLE_2_DRIVES_ADD(apple2gs_floppy525_floppy_interface,15,16) - MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADDITIONAL_ADD(apple2gs_floppy35_floppy_interface) - MCFG_SOFTWARE_LIST_ADD("flop35_list","apple2gs") - MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("flop525_list", "apple2") -MACHINE_CONFIG_END + IWM(config, m_iwm, &apple2_fdc_interface); + + FLOPPY_APPLE(config, FLOPPY_0, &apple2gs_floppy525_floppy_interface, 15, 16); + FLOPPY_APPLE(config, FLOPPY_1, &apple2gs_floppy525_floppy_interface, 15, 16); + + FLOPPY_SONY(config, FLOPPY_2, &apple2gs_floppy35_floppy_interface); + FLOPPY_SONY(config, FLOPPY_3, &apple2gs_floppy35_floppy_interface); -MACHINE_CONFIG_START( apple2gs_state::apple2gsr1 ) + SOFTWARE_LIST(config, "flop35_list").set_original("apple2gs"); + SOFTWARE_LIST(config, "flop525_list").set_compatible("apple2"); +} + +void apple2gs_state::apple2gsr1(machine_config &config) +{ apple2gs(config); // 256K on board + 1M in the expansion slot was common for ROM 01 m_ram->set_default_size("1280K").set_extra_options("256K,512K,768K,1M,2M,3M,4M,5M,6M,7M,8M").set_default_value(0x00); - MCFG_DEVICE_REPLACE(A2GS_ADBMCU_TAG, M50740, A2GS_MASTER_CLOCK/8) - MCFG_M5074X_PORT0_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p0_in)) - MCFG_M5074X_PORT0_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p0_out)) - MCFG_M5074X_PORT1_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p1_in)) - MCFG_M5074X_PORT1_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p1_out)) - MCFG_M5074X_PORT2_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p2_in)) - MCFG_M5074X_PORT2_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p2_out)) - MCFG_M5074X_PORT3_READ_CALLBACK(READ8(*this, apple2gs_state, adbmicro_p3_in)) - MCFG_M5074X_PORT3_WRITE_CALLBACK(WRITE8(*this, apple2gs_state, adbmicro_p3_out)) -MACHINE_CONFIG_END + M50740(config.replace(), m_adbmicro, A2GS_MASTER_CLOCK/8); + m_adbmicro->read_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_in)); + m_adbmicro->write_p<0>().set(FUNC(apple2gs_state::adbmicro_p0_out)); + m_adbmicro->read_p<1>().set(FUNC(apple2gs_state::adbmicro_p1_in)); + m_adbmicro->write_p<1>().set(FUNC(apple2gs_state::adbmicro_p1_out)); + m_adbmicro->read_p<2>().set(FUNC(apple2gs_state::adbmicro_p2_in)); + m_adbmicro->write_p<2>().set(FUNC(apple2gs_state::adbmicro_p2_out)); + m_adbmicro->read_p<3>().set(FUNC(apple2gs_state::adbmicro_p3_in)); + m_adbmicro->write_p<3>().set(FUNC(apple2gs_state::adbmicro_p3_out)); +} /*************************************************************************** diff --git a/src/mame/drivers/apple3.cpp b/src/mame/drivers/apple3.cpp index 5664e05f7dd..1b046a39128 100644 --- a/src/mame/drivers/apple3.cpp +++ b/src/mame/drivers/apple3.cpp @@ -55,12 +55,14 @@ FLOPPY_FORMATS_MEMBER( apple3_state::floppy_formats ) FLOPPY_A216S_FORMAT, FLOPPY_RWTS18_FORMAT, FLOPPY_EDD_FORMAT, FLOPPY_WOZ_FORMAT FLOPPY_FORMATS_END -MACHINE_CONFIG_START(apple3_state::apple3) +void apple3_state::apple3(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6502, 14.318181_MHz_XTAL / 7) /* 2 MHz */ - MCFG_M6502_SYNC_CALLBACK(WRITELINE(*this, apple3_state, apple3_sync_w)) - MCFG_DEVICE_PROGRAM_MAP(apple3_map) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) + M6502(config, m_maincpu, 14.318181_MHz_XTAL / 7); /* 2 MHz */ + m_maincpu->sync_cb().set(FUNC(apple3_state::apple3_sync_w)); + m_maincpu->set_addrmap(AS_PROGRAM, &apple3_state::apple3_map); + + config.m_minimum_quantum = attotime::from_hz(60); input_merger_device &mainirq(INPUT_MERGER_ANY_HIGH(config, "mainirq")); mainirq.output_handler().set_inputline(m_maincpu, m6502_device::IRQ_LINE); @@ -75,8 +77,7 @@ MACHINE_CONFIG_START(apple3_state::apple3) m_screen->screen_vblank().append(m_via[1], FUNC(via6522_device::write_cb2)); m_screen->screen_vblank().append(FUNC(apple3_state::vbl_w)); - MCFG_PALETTE_ADD("palette", 32) - MCFG_PALETTE_INIT_OWNER(apple3_state, apple3 ) + PALETTE(config, m_palette, 32).set_init(FUNC(apple3_state::palette_init_apple3)); /* keyboard controller */ AY3600(config, m_ay3600, 0); @@ -94,25 +95,25 @@ MACHINE_CONFIG_START(apple3_state::apple3) m_ay3600->data_ready().set(FUNC(apple3_state::ay3600_data_ready_w)); /* slot bus */ - MCFG_DEVICE_ADD(m_a2bus, A2BUS, 0) - MCFG_A2BUS_CPU("maincpu") - MCFG_A2BUS_OUT_IRQ_CB(WRITELINE(*this, apple3_state, a2bus_irq_w)) - MCFG_A2BUS_OUT_NMI_CB(WRITELINE(*this, apple3_state, a2bus_nmi_w)) - //MCFG_A2BUS_OUT_INH_CB(WRITELINE(*this, apple3_state, a2bus_inh_w)) + A2BUS(config, m_a2bus, 0); + m_a2bus->set_cputag("maincpu"); + m_a2bus->irq_w().set(FUNC(apple3_state::a2bus_irq_w)); + m_a2bus->nmi_w().set(FUNC(apple3_state::a2bus_nmi_w)); + //m_a2bus->inh_w().set(FUNC(apple3_state::a2bus_inh_w)); A2BUS_SLOT(config, "sl1", m_a2bus, apple3_cards, nullptr); A2BUS_SLOT(config, "sl2", m_a2bus, apple3_cards, nullptr); A2BUS_SLOT(config, "sl3", m_a2bus, apple3_cards, nullptr); A2BUS_SLOT(config, "sl4", m_a2bus, apple3_cards, nullptr); /* fdc */ - MCFG_DEVICE_ADD("fdc", APPLEIII_FDC, 1021800*2) - MCFG_FLOPPY_DRIVE_ADD("0", a3_floppies, "525", apple3_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("1", a3_floppies, "525", apple3_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("2", a3_floppies, "525", apple3_state::floppy_formats) - MCFG_FLOPPY_DRIVE_ADD("3", a3_floppies, "525", apple3_state::floppy_formats) + APPLEIII_FDC(config, m_fdc, 1021800*2); + FLOPPY_CONNECTOR(config, "0", a3_floppies, "525", apple3_state::floppy_formats); + FLOPPY_CONNECTOR(config, "1", a3_floppies, "525", apple3_state::floppy_formats); + FLOPPY_CONNECTOR(config, "2", a3_floppies, "525", apple3_state::floppy_formats); + FLOPPY_CONNECTOR(config, "3", a3_floppies, "525", apple3_state::floppy_formats); /* softlist for fdc */ - MCFG_SOFTWARE_LIST_ADD("flop525_list","apple3") + SOFTWARE_LIST(config, "flop525_list").set_original("apple3"); /* acia */ MOS6551(config, m_acia, 0); @@ -129,10 +130,10 @@ MACHINE_CONFIG_START(apple3_state::apple3) // TODO: remove cts kludge from machine/apple3.cpp and come up with a good way of coping with pull up resistors. /* paddle */ - MCFG_TIMER_DRIVER_ADD("pdltimer", apple3_state, paddle_timer); + TIMER(config, "pdltimer").configure_generic(FUNC(apple3_state::paddle_timer)); /* rtc */ - MCFG_DEVICE_ADD("rtc", MM58167, 32.768_kHz_XTAL) + MM58167(config, m_rtc, 32.768_kHz_XTAL); /* via */ VIA6522(config, m_via[0], 14.318181_MHz_XTAL / 14); @@ -147,17 +148,19 @@ MACHINE_CONFIG_START(apple3_state::apple3) /* sound */ SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("bell", DAC_1BIT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.99) - MCFG_DEVICE_ADD("dac", DAC_6BIT_BINARY_WEIGHTED, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.125) // 6522.b5(pb0-pb5) + 320k,160k,80k,40k,20k,10k - MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) - MCFG_SOUND_ROUTE(0, "bell", 1.0, DAC_VREF_POS_INPUT) - MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) + DAC_1BIT(config, m_bell, 0).add_route(ALL_OUTPUTS, "speaker", 0.99); + DAC_6BIT_BINARY_WEIGHTED(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.125); // 6522.b5(pb0-pb5) + 320k,160k,80k,40k,20k,10k + voltage_regulator_device &vref(VOLTAGE_REGULATOR(config, "vref", 0)); + vref.set_output(5.0); + vref.add_route(0, "bell", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT); + vref.add_route(0, "dac", -1.0, DAC_VREF_NEG_INPUT); - MCFG_TIMER_DRIVER_ADD_PERIODIC("c040", apple3_state, apple3_c040_tick, attotime::from_hz(2000)) + TIMER(config, "c040").configure_periodic(FUNC(apple3_state::apple3_c040_tick), attotime::from_hz(2000)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("256K").set_extra_options("128K, 512K"); -MACHINE_CONFIG_END +} static INPUT_PORTS_START( apple3 ) diff --git a/src/mame/drivers/c128.cpp b/src/mame/drivers/c128.cpp index 8c5f0b3b171..2b406c91097 100644 --- a/src/mame/drivers/c128.cpp +++ b/src/mame/drivers/c128.cpp @@ -1632,19 +1632,21 @@ void c128_state::machine_reset() // MACHINE_CONFIG( ntsc ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::ntsc) +void c128_state::ntsc(machine_config &config) +{ // basic hardware - MCFG_DEVICE_ADD(Z80A_TAG, Z80, XTAL(14'318'181)*2/3.5/2) - MCFG_DEVICE_PROGRAM_MAP(z80_mem) - MCFG_DEVICE_IO_MAP(z80_io) - MCFG_QUANTUM_PERFECT_CPU(Z80A_TAG) - - MCFG_DEVICE_ADD(M8502_TAG, M8502, XTAL(14'318'181)*2/3.5/8) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M8502_PORT_CALLBACKS(READ8(*this, c128_state, cpu_r), WRITE8(*this, c128_state, cpu_w)) - MCFG_M8502_PORT_PULLS(0x07, 0x20) - MCFG_DEVICE_PROGRAM_MAP(m8502_mem) - MCFG_QUANTUM_PERFECT_CPU(M8502_TAG) + Z80(config, m_maincpu, XTAL(14'318'181)*2/3.5/2); + m_maincpu->set_addrmap(AS_PROGRAM, &c128_state::z80_mem); + m_maincpu->set_addrmap(AS_IO, &c128_state::z80_io); + config.m_perfect_cpu_quantum = subtag(Z80A_TAG); + + M8502(config, m_subcpu, XTAL(14'318'181)*2/3.5/8); + m_subcpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_subcpu->read_callback().set(FUNC(c128_state::cpu_r)); + m_subcpu->write_callback().set(FUNC(c128_state::cpu_w)); + m_subcpu->set_pulls(0x07, 0x20); + m_subcpu->set_addrmap(AS_PROGRAM, &c128_state::m8502_mem); + config.m_perfect_cpu_quantum = subtag(M8502_TAG); input_merger_device &irq(INPUT_MERGER_ANY_HIGH(config, "irq")); irq.output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); @@ -1659,66 +1661,73 @@ MACHINE_CONFIG_START(c128_state::ntsc) m_vdc->set_addrmap(0, &c128_state::vdc_videoram_map); m_vdc->set_show_border_area(true); m_vdc->set_char_width(8); - MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(640, 200) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) - MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update) - - mos8564_device &mos8564(MOS8564(config, MOS8564_TAG, XTAL(14'318'181)*2/3.5)); - mos8564.set_cpu(M8502_TAG); - mos8564.irq_callback().set("irq", FUNC(input_merger_device::in_w<1>)); - mos8564.k_callback().set(FUNC(c128_state::vic_k_w)); - mos8564.set_screen(SCREEN_VIC_TAG); - mos8564.set_addrmap(0, &c128_state::vic_videoram_map); - mos8564.set_addrmap(1, &c128_state::vic_colorram_map); - - MCFG_SCREEN_ADD(SCREEN_VIC_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS8564_TAG, mos8564_device, screen_update) - - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, MOS8563_TAG, gfx_c128) + + screen_device &screen_vdc(SCREEN(config, SCREEN_VDC_TAG, SCREEN_TYPE_RASTER)); + screen_vdc.set_refresh_hz(60); + screen_vdc.set_size(640, 200); + screen_vdc.set_visarea(0, 640-1, 0, 200-1); + screen_vdc.set_screen_update(MOS8563_TAG, FUNC(mos8563_device::screen_update)); + + MOS8564(config, m_vic, XTAL(14'318'181)*2/3.5); + m_vic->set_cpu(m_subcpu); + m_vic->irq_callback().set("irq", FUNC(input_merger_device::in_w<1>)); + m_vic->k_callback().set(FUNC(c128_state::vic_k_w)); + m_vic->set_screen(SCREEN_VIC_TAG); + m_vic->set_addrmap(0, &c128_state::vic_videoram_map); + m_vic->set_addrmap(1, &c128_state::vic_colorram_map); + + screen_device &screen_vic(SCREEN(config, SCREEN_VIC_TAG, SCREEN_TYPE_RASTER)); + screen_vic.set_refresh_hz(VIC6567_VRETRACERATE); + screen_vic.set_size(VIC6567_COLUMNS, VIC6567_LINES); + screen_vic.set_visarea(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1); + screen_vic.set_screen_update(MOS8564_TAG, FUNC(mos8564_device::screen_update)); + + GFXDECODE(config, "gfxdecode", MOS8563_TAG, gfx_c128); // sound hardware SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(14'318'181)*2/3.5/8) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c128_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c128_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) + MOS6581(config, m_sid, XTAL(14'318'181)*2/3.5/8); + m_sid->potx().set(FUNC(c128_state::sid_potx_r)); + m_sid->poty().set(FUNC(c128_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "speaker", 0.5); // devices - MCFG_DEVICE_ADD(MOS8722_TAG, MOS8722, XTAL(14'318'181)*2/3.5/8) - MCFG_MOS8722_Z80EN_CALLBACK(WRITELINE(*this, c128_state, mmu_z80en_w)) - MCFG_MOS8722_FSDIR_CALLBACK(WRITELINE(*this, c128_state, mmu_fsdir_w)) - MCFG_MOS8722_GAME_CALLBACK(READLINE(*this, c128_state, mmu_game_r)) - MCFG_MOS8722_EXROM_CALLBACK(READLINE(*this, c128_state, mmu_exrom_r)) - MCFG_MOS8722_SENSE40_CALLBACK(READLINE(*this, c128_state, mmu_sense40_r)) - MCFG_MOS8721_ADD(MOS8721_TAG) - MCFG_DEVICE_ADD(MOS6526_1_TAG, MOS6526, XTAL(14'318'181)*2/3.5/8) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("irq", input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(*this, c128_state, cia1_cnt_w)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(*this, c128_state, cia1_sp_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c128_state, cia1_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia1_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c128_state, cia1_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia1_pb_w)) - MCFG_DEVICE_ADD(MOS6526_2_TAG, MOS6526, XTAL(14'318'181)*2/3.5/8) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(m_nmi, input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_6)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_7)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c128_state, cia2_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia2_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c128_state, cia2_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia2_pb_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8)) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", WRITELINE(MOS6526_2_TAG, mos6526_device, flag_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS8564_TAG, mos8564_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") + MOS8722(config, m_mmu, XTAL(14'318'181)*2/3.5/8); + m_mmu->z80en().set(FUNC(c128_state::mmu_z80en_w)); + m_mmu->fsdir().set(FUNC(c128_state::mmu_fsdir_w)); + m_mmu->game().set(FUNC(c128_state::mmu_game_r)); + m_mmu->exrom().set(FUNC(c128_state::mmu_exrom_r)); + m_mmu->sense40().set(FUNC(c128_state::mmu_sense40_r)); + + MOS8721(config, m_pla); + + MOS6526(config, m_cia1, XTAL(14'318'181)*2/3.5/8); + m_cia1->set_tod_clock(60); + m_cia1->irq_wr_callback().set("irq", FUNC(input_merger_device::in_w<0>)); + m_cia1->cnt_wr_callback().set(FUNC(c128_state::cia1_cnt_w)); + m_cia1->sp_wr_callback().set(FUNC(c128_state::cia1_sp_w)); + m_cia1->pa_rd_callback().set(FUNC(c128_state::cia1_pa_r)); + m_cia1->pa_wr_callback().set(FUNC(c128_state::cia1_pa_w)); + m_cia1->pb_rd_callback().set(FUNC(c128_state::cia1_pb_r)); + m_cia1->pb_wr_callback().set(FUNC(c128_state::cia1_pb_w)); + + MOS6526(config, m_cia2, XTAL(14'318'181)*2/3.5/8); + m_cia2->set_tod_clock(60); + m_cia2->irq_wr_callback().set(m_nmi, FUNC(input_merger_device::in_w<0>)); + m_cia2->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_6)); + m_cia2->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_7)); + m_cia2->pa_rd_callback().set(FUNC(c128_state::cia2_pa_r)); + m_cia2->pa_wr_callback().set(FUNC(c128_state::cia2_pa_w)); + m_cia2->pb_rd_callback().set(FUNC(c128_state::cia2_pb_r)); + m_cia2->pb_wr_callback().set(FUNC(c128_state::cia2_pb_w)); + m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8)); + + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530"); + m_cassette->read_handler().set(m_cia2, FUNC(mos6526_device::flag_w)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(m_vic, FUNC(mos8564_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); C64_EXPANSION_SLOT(config, m_exp, XTAL(14'318'181)*2/3.5/8, c64_expansion_cards, nullptr); m_exp->irq_callback().set("irq", FUNC(input_merger_device::in_w<2>)); @@ -1746,89 +1755,93 @@ MACHINE_CONFIG_START(c128_state::ntsc) m_user->pl_handler().set(FUNC(c128_state::write_user_pb7)); m_user->pm_handler().set(FUNC(c128_state::write_user_pa2)); - MCFG_QUICKLOAD_ADD("quickload", c128_state, cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(c128_state, cbm_c64), this), "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_ADD("cart_list", "c128_cart") - MCFG_SOFTWARE_LIST_ADD("cass_list_c64", "c64_cass") - MCFG_SOFTWARE_LIST_ADD("flop_list_c64", "c64_flop") - MCFG_SOFTWARE_LIST_ADD("flop_list", "c128_flop") - MCFG_SOFTWARE_LIST_ADD("from_list", "c128_rom") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("cass_list_c64", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("flop_list_c64", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("from_list", "NTSC") + SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10"); + SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart"); + SOFTWARE_LIST(config, "cart_list").set_original("c128_cart"); + SOFTWARE_LIST(config, "cass_list_c64").set_original("c64_cass"); + SOFTWARE_LIST(config, "flop_list_c64").set_original("c64_flop"); + SOFTWARE_LIST(config, "flop_list").set_original("c128_flop"); + SOFTWARE_LIST(config, "from_list").set_original("c128_rom"); + subdevice("cart_list_vic10")->set_filter("NTSC"); + subdevice("cart_list_c64")->set_filter("NTSC"); + subdevice("cart_list")->set_filter("NTSC"); + subdevice("cass_list_c64")->set_filter("NTSC"); + subdevice("flop_list_c64")->set_filter("NTSC"); + subdevice("flop_list")->set_filter("NTSC"); + subdevice("from_list")->set_filter("NTSC"); // function ROM - MCFG_GENERIC_SOCKET_ADD("from", generic_plain_slot, "c128_rom") - MCFG_GENERIC_EXTENSIONS("bin,rom") + GENERIC_SOCKET(config, "from", generic_plain_slot, "c128_rom", "bin,rom"); // internal ram RAM(config, RAM_TAG).set_default_size("128K"); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( c128 ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::c128) +void c128_state::c128(machine_config &config) +{ ntsc(config); - MCFG_CBM_IEC_ADD("c1571") - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(*this, c128_state, iec_srq_w)) - MCFG_CBM_IEC_BUS_DATA_CALLBACK(WRITELINE(*this, c128_state, iec_data_w)) -MACHINE_CONFIG_END + cbm_iec_slot_device::add(config, m_iec, "c1571"); + m_iec->srq_callback().set(FUNC(c128_state::iec_srq_w)); + m_iec->data_callback().set(FUNC(c128_state::iec_data_w)); +} //------------------------------------------------- // MACHINE_CONFIG( c128dcr ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::c128dcr) +void c128_state::c128dcr(machine_config &config) +{ ntsc(config); - MCFG_CBM_IEC_ADD("c1571") // TODO c1571cr - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(*this, c128_state, iec_srq_w)) - MCFG_CBM_IEC_BUS_DATA_CALLBACK(WRITELINE(*this, c128_state, iec_data_w)) -MACHINE_CONFIG_END + cbm_iec_slot_device::add(config, m_iec, "c1571"); // TODO c1571cr + m_iec->srq_callback().set(FUNC(c128_state::iec_srq_w)); + m_iec->data_callback().set(FUNC(c128_state::iec_data_w)); +} //------------------------------------------------- // MACHINE_CONFIG( c128d81 ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::c128d81) +void c128_state::c128d81(machine_config &config) +{ ntsc(config); - MCFG_CBM_IEC_ADD(nullptr) - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(*this, c128_state, iec_srq_w)) - MCFG_CBM_IEC_BUS_DATA_CALLBACK(WRITELINE(*this, c128_state, iec_data_w)) + cbm_iec_slot_device::add(config, m_iec, nullptr); + m_iec->srq_callback().set(FUNC(c128_state::iec_srq_w)); + m_iec->data_callback().set(FUNC(c128_state::iec_data_w)); - MCFG_DEVICE_MODIFY("iec8") - MCFG_DEVICE_SLOT_INTERFACE(c128d81_iec_devices, "c1563", false) -MACHINE_CONFIG_END + CBM_IEC_SLOT(config.replace(), "iec8", c128d81_iec_devices, "c1563"); +} //------------------------------------------------- // MACHINE_CONFIG( pal ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::pal) +void c128_state::pal(machine_config &config) +{ // basic hardware - MCFG_DEVICE_ADD(Z80A_TAG, Z80, XTAL(17'734'472)*2/4.5/2) - MCFG_DEVICE_PROGRAM_MAP(z80_mem) - MCFG_DEVICE_IO_MAP(z80_io) - MCFG_QUANTUM_PERFECT_CPU(Z80A_TAG) - - MCFG_DEVICE_ADD(M8502_TAG, M8502, XTAL(17'734'472)*2/4.5/8) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M8502_PORT_CALLBACKS(READ8(*this, c128_state, cpu_r), WRITE8(*this, c128_state, cpu_w)) - MCFG_M8502_PORT_PULLS(0x07, 0x20) - MCFG_DEVICE_PROGRAM_MAP(m8502_mem) - MCFG_QUANTUM_PERFECT_CPU(M8502_TAG) + Z80(config, m_maincpu, XTAL(17'734'472)*2/4.5/2); + m_maincpu->set_addrmap(AS_PROGRAM, &c128_state::z80_mem); + m_maincpu->set_addrmap(AS_IO, &c128_state::z80_io); + config.m_perfect_cpu_quantum = subtag(Z80A_TAG); + + M8502(config, m_subcpu, XTAL(17'734'472)*2/4.5/8); + m_subcpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_subcpu->read_callback().set(FUNC(c128_state::cpu_r)); + m_subcpu->write_callback().set(FUNC(c128_state::cpu_w)); + m_subcpu->set_pulls(0x07, 0x20); + m_subcpu->set_addrmap(AS_PROGRAM, &c128_state::m8502_mem); + config.m_perfect_cpu_quantum = subtag(M8502_TAG); input_merger_device &irq(INPUT_MERGER_ANY_HIGH(config, "irq")); irq.output_handler().set_inputline(m_maincpu, INPUT_LINE_IRQ0); @@ -1843,11 +1856,12 @@ MACHINE_CONFIG_START(c128_state::pal) m_vdc->set_addrmap(0, &c128_state::vdc_videoram_map); m_vdc->set_show_border_area(true); m_vdc->set_char_width(8); - MCFG_SCREEN_ADD(SCREEN_VDC_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(640, 200) - MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 200-1) - MCFG_SCREEN_UPDATE_DEVICE(MOS8563_TAG, mos8563_device, screen_update) + + screen_device &screen_vdc(SCREEN(config, SCREEN_VDC_TAG, SCREEN_TYPE_RASTER)); + screen_vdc.set_refresh_hz(60); + screen_vdc.set_size(640, 200); + screen_vdc.set_visarea(0, 640-1, 0, 200-1); + screen_vdc.set_screen_update(MOS8563_TAG, FUNC(mos8563_device::screen_update)); mos8566_device &mos8566(MOS8566(config, MOS8566_TAG, XTAL(17'734'472)*2/4.5)); mos8566.set_cpu(M8502_TAG); @@ -1857,52 +1871,58 @@ MACHINE_CONFIG_START(c128_state::pal) mos8566.set_addrmap(0, &c128_state::vic_videoram_map); mos8566.set_addrmap(1, &c128_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_VIC_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS8566_TAG, mos8566_device, screen_update) + screen_device &screen_vic(SCREEN(config, SCREEN_VIC_TAG, SCREEN_TYPE_RASTER)); + screen_vic.set_refresh_hz(VIC6569_VRETRACERATE); + screen_vic.set_size(VIC6569_COLUMNS, VIC6569_LINES); + screen_vic.set_visarea(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1); + screen_vic.set_screen_update(MOS8566_TAG, FUNC(mos8566_device::screen_update)); - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, MOS8563_TAG, gfx_c128) + GFXDECODE(config, "gfxdecode", MOS8563_TAG, gfx_c128); // sound hardware SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(17'734'472)*2/4.5/8) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c128_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c128_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 0.5) + MOS6581(config, m_sid, XTAL(17'734'472)*2/4.5/8); + m_sid->potx().set(FUNC(c128_state::sid_potx_r)); + m_sid->poty().set(FUNC(c128_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "speaker", 0.5); // devices - MCFG_DEVICE_ADD(MOS8722_TAG, MOS8722, XTAL(17'734'472)*2/4.5/8) - MCFG_MOS8722_Z80EN_CALLBACK(WRITELINE(*this, c128_state, mmu_z80en_w)) - MCFG_MOS8722_FSDIR_CALLBACK(WRITELINE(*this, c128_state, mmu_fsdir_w)) - MCFG_MOS8722_GAME_CALLBACK(READLINE(*this, c128_state, mmu_game_r)) - MCFG_MOS8722_EXROM_CALLBACK(READLINE(*this, c128_state, mmu_exrom_r)) - MCFG_MOS8722_SENSE40_CALLBACK(READLINE(*this, c128_state, mmu_sense40_r)) - MCFG_MOS8721_ADD(MOS8721_TAG) - MCFG_DEVICE_ADD(MOS6526_1_TAG, MOS6526, XTAL(17'734'472)*2/4.5/8) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("irq", input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(*this, c128_state, cia1_cnt_w)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(*this, c128_state, cia1_sp_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c128_state, cia1_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia1_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c128_state, cia1_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia1_pb_w)) - MCFG_DEVICE_ADD(MOS6526_2_TAG, MOS6526, XTAL(17'734'472)*2/4.5/8) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(m_nmi, input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_6)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_7)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c128_state, cia2_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia2_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c128_state, cia2_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c128_state, cia2_pb_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8)) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", WRITELINE(MOS6526_2_TAG, mos6526_device, flag_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS8566_TAG, mos8566_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") + MOS8722(config, m_mmu, XTAL(17'734'472)*2/4.5/8); + m_mmu->z80en().set(FUNC(c128_state::mmu_z80en_w)); + m_mmu->fsdir().set(FUNC(c128_state::mmu_fsdir_w)); + m_mmu->game().set(FUNC(c128_state::mmu_game_r)); + m_mmu->exrom().set(FUNC(c128_state::mmu_exrom_r)); + m_mmu->sense40().set(FUNC(c128_state::mmu_sense40_r)); + + MOS8721(config, m_pla); + + MOS6526(config, m_cia1, XTAL(17'734'472)*2/4.5/8); + m_cia1->set_tod_clock(50); + m_cia1->irq_wr_callback().set("irq", FUNC(input_merger_device::in_w<0>)); + m_cia1->cnt_wr_callback().set(FUNC(c128_state::cia1_cnt_w)); + m_cia1->sp_wr_callback().set(FUNC(c128_state::cia1_sp_w)); + m_cia1->pa_rd_callback().set(FUNC(c128_state::cia1_pa_r)); + m_cia1->pa_wr_callback().set(FUNC(c128_state::cia1_pa_w)); + m_cia1->pb_rd_callback().set(FUNC(c128_state::cia1_pb_r)); + m_cia1->pb_wr_callback().set(FUNC(c128_state::cia1_pb_w)); + + MOS6526(config, m_cia2, XTAL(17'734'472)*2/4.5/8); + m_cia2->set_tod_clock(50); + m_cia2->irq_wr_callback().set(m_nmi, FUNC(input_merger_device::in_w<0>)); + m_cia2->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_6)); + m_cia2->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_7)); + m_cia2->pa_rd_callback().set(FUNC(c128_state::cia2_pa_r)); + m_cia2->pa_wr_callback().set(FUNC(c128_state::cia2_pa_w)); + m_cia2->pb_rd_callback().set(FUNC(c128_state::cia2_pb_r)); + m_cia2->pb_wr_callback().set(FUNC(c128_state::cia2_pb_w)); + m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8)); + + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530"); + m_cassette->read_handler().set(m_cia2, FUNC(mos6526_device::flag_w)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS8566_TAG, FUNC(mos8566_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); C64_EXPANSION_SLOT(config, m_exp, XTAL(17'734'472)*2/4.5/8, c64_expansion_cards, nullptr); m_exp->irq_callback().set("irq", FUNC(input_merger_device::in_w<2>)); @@ -1930,55 +1950,57 @@ MACHINE_CONFIG_START(c128_state::pal) m_user->pl_handler().set(FUNC(c128_state::write_user_pb7)); m_user->pm_handler().set(FUNC(c128_state::write_user_pa2)); - MCFG_QUICKLOAD_ADD("quickload", c128_state, cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(c128_state, cbm_c64), this), "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_ADD("cart_list", "c128_cart") - MCFG_SOFTWARE_LIST_ADD("cass_list_c64", "c64_cass") - MCFG_SOFTWARE_LIST_ADD("flop_list_c64", "c64_flop") - MCFG_SOFTWARE_LIST_ADD("flop_list", "c128_flop") - MCFG_SOFTWARE_LIST_ADD("from_list", "c128_rom") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cass_list_c64", "PAL") - MCFG_SOFTWARE_LIST_FILTER("flop_list_c64", "PAL") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL") - MCFG_SOFTWARE_LIST_FILTER("from_list", "PAL") + SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10"); + SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart"); + SOFTWARE_LIST(config, "cart_list").set_original("c128_cart"); + SOFTWARE_LIST(config, "cass_list_c64").set_original("c64_cass"); + SOFTWARE_LIST(config, "flop_list_c64").set_original("c64_flop"); + SOFTWARE_LIST(config, "flop_list").set_original("c128_flop"); + SOFTWARE_LIST(config, "from_list").set_original("c128_rom"); + subdevice("cart_list_vic10")->set_filter("PAL"); + subdevice("cart_list_c64")->set_filter("PAL"); + subdevice("cart_list")->set_filter("PAL"); + subdevice("cass_list_c64")->set_filter("PAL"); + subdevice("flop_list_c64")->set_filter("PAL"); + subdevice("flop_list")->set_filter("PAL"); + subdevice("from_list")->set_filter("PAL"); // function ROM - MCFG_GENERIC_SOCKET_ADD("from", generic_plain_slot, "c128_rom") - MCFG_GENERIC_EXTENSIONS("bin,rom") + GENERIC_SOCKET(config, "from", generic_plain_slot, "c128_rom", "bin,rom"); // internal ram RAM(config, RAM_TAG).set_default_size("128K"); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( c128pal ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::c128pal) +void c128_state::c128pal(machine_config &config) +{ pal(config); - MCFG_CBM_IEC_ADD("c1571") - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(*this, c128_state, iec_srq_w)) - MCFG_CBM_IEC_BUS_DATA_CALLBACK(WRITELINE(*this, c128_state, iec_data_w)) -MACHINE_CONFIG_END + cbm_iec_slot_device::add(config, m_iec, "c1571"); + m_iec->srq_callback().set(FUNC(c128_state::iec_srq_w)); + m_iec->data_callback().set(FUNC(c128_state::iec_data_w)); +} //------------------------------------------------- // MACHINE_CONFIG( c128dcrp ) //------------------------------------------------- -MACHINE_CONFIG_START(c128_state::c128dcrp) +void c128_state::c128dcrp(machine_config &config) +{ pal(config); - MCFG_CBM_IEC_ADD("c1571") // TODO c1571cr - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(*this, c128_state, iec_srq_w)) - MCFG_CBM_IEC_BUS_DATA_CALLBACK(WRITELINE(*this, c128_state, iec_data_w)) -MACHINE_CONFIG_END + cbm_iec_slot_device::add(config, m_iec, "c1571"); // TODO c1571cr + m_iec->srq_callback().set(FUNC(c128_state::iec_srq_w)); + m_iec->data_callback().set(FUNC(c128_state::iec_data_w)); +} diff --git a/src/mame/drivers/c64.cpp b/src/mame/drivers/c64.cpp index 06e03400d59..f606bf6ce02 100644 --- a/src/mame/drivers/c64.cpp +++ b/src/mame/drivers/c64.cpp @@ -1263,14 +1263,16 @@ void c64_state::machine_reset() // MACHINE_CONFIG( ntsc ) //------------------------------------------------- -MACHINE_CONFIG_START(c64_state::ntsc) +void c64_state::ntsc(machine_config &config) +{ // basic hardware - MCFG_DEVICE_ADD(M6510_TAG, M6510, XTAL(14'318'181)/14) - MCFG_DEVICE_PROGRAM_MAP(c64_mem) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M6510_PORT_CALLBACKS(READ8(*this, c64_state, cpu_r), WRITE8(*this, c64_state, cpu_w)) - MCFG_M6510_PORT_PULLS(0x17, 0xc8) - MCFG_QUANTUM_PERFECT_CPU(M6510_TAG) + M6510(config, m_maincpu, XTAL(14'318'181)/14); + m_maincpu->set_addrmap(AS_PROGRAM, &c64_state::c64_mem); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->read_callback().set(FUNC(c64_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(c64_state::cpu_w)); + m_maincpu->set_pulls(0x17, 0xc8); + config.m_perfect_cpu_quantum = subtag(M6510_TAG); input_merger_device &irq(INPUT_MERGER_ANY_HIGH(config, "irq")); irq.output_handler().set_inputline(m_maincpu, m6510_device::IRQ_LINE); @@ -1286,46 +1288,52 @@ MACHINE_CONFIG_START(c64_state::ntsc) mos6567.set_addrmap(0, &c64_state::vic_videoram_map); mos6567.set_addrmap(1, &c64_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS6567_TAG, mos6567_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(VIC6567_VRETRACERATE); + screen.set_size(VIC6567_COLUMNS, VIC6567_LINES); + screen.set_visarea(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1); + screen.set_screen_update(MOS6567_TAG, FUNC(mos6567_device::screen_update)); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(14'318'181)/14) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c64_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c64_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS6581(config, m_sid, XTAL(14'318'181)/14); + m_sid->potx().set(FUNC(c64_state::sid_potx_r)); + m_sid->poty().set(FUNC(c64_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_PLS100_ADD(PLA_TAG) - MCFG_DEVICE_ADD(MOS6526_1_TAG, MOS6526, XTAL(14'318'181)/14) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("irq", input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_4)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_5)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c64_state, cia1_pa_r)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c64_state, cia1_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia1_pb_w)) - MCFG_DEVICE_ADD(MOS6526_2_TAG, MOS6526, XTAL(14'318'181)/14) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(m_nmi, input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_6)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_7)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c64_state, cia2_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia2_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c64_state, cia2_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia2_pb_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8)) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", WRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) - MCFG_CBM_IEC_ADD("c1541") - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) - MCFG_CBM_IEC_BUS_ATN_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_9)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6567_TAG, mos6567_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") + PLS100(config, m_pla); + + MOS6526(config, m_cia1, XTAL(14'318'181)/14); + m_cia1->set_tod_clock(60); + m_cia1->irq_wr_callback().set("irq", FUNC(input_merger_device::in_w<0>)); + m_cia1->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_4)); + m_cia1->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_5)); + m_cia1->pa_rd_callback().set(FUNC(c64_state::cia1_pa_r)); + m_cia1->pb_rd_callback().set(FUNC(c64_state::cia1_pb_r)); + m_cia1->pb_wr_callback().set(FUNC(c64_state::cia1_pb_w)); + + MOS6526(config, m_cia2, XTAL(14'318'181)/14); + m_cia2->set_tod_clock(60); + m_cia2->irq_wr_callback().set(m_nmi, FUNC(input_merger_device::in_w<0>)); + m_cia2->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_6)); + m_cia2->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_7)); + m_cia2->pa_rd_callback().set(FUNC(c64_state::cia2_pa_r)); + m_cia2->pa_wr_callback().set(FUNC(c64_state::cia2_pa_w)); + m_cia2->pb_rd_callback().set(FUNC(c64_state::cia2_pb_r)); + m_cia2->pb_wr_callback().set(FUNC(c64_state::cia2_pb_w)); + m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8)); + + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530"); + m_cassette->read_handler().set(m_cia1, FUNC(mos6526_device::flag_w)); + + cbm_iec_slot_device::add(config, m_iec, "c1541"); + m_iec->srq_callback().set(m_cia1, FUNC(mos6526_device::flag_w)); + m_iec->data_callback().set(m_user, FUNC(pet_user_port_device::write_9)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS6567_TAG, FUNC(mos6567_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); C64_EXPANSION_SLOT(config, m_exp, XTAL(14'318'181)/14, c64_expansion_cards, nullptr); m_exp->irq_callback().set("irq", FUNC(input_merger_device::in_w<2>)); @@ -1353,89 +1361,94 @@ MACHINE_CONFIG_START(c64_state::ntsc) m_user->pl_handler().set(FUNC(c64_state::write_user_pb7)); m_user->pm_handler().set(FUNC(c64_state::write_user_pa2)); - MCFG_QUICKLOAD_ADD("quickload", c64_state, cbm_c64, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(c64_state, cbm_c64), this), "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_ADD("cass_list", "c64_cass") - MCFG_SOFTWARE_LIST_ADD("flop_list", "c64_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("cass_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC") + SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10"); + SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart"); + SOFTWARE_LIST(config, "cass_list").set_original("c64_cass"); + SOFTWARE_LIST(config, "flop_list").set_original("c64_flop"); + subdevice("cart_list_vic10")->set_filter("NTSC"); + subdevice("cart_list_c64")->set_filter("NTSC"); + subdevice("cass_list")->set_filter("NTSC"); + subdevice("flop_list")->set_filter("NTSC"); // internal ram RAM(config, RAM_TAG).set_default_size("64K"); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( pet64 ) //------------------------------------------------- -MACHINE_CONFIG_START(c64_state::pet64) +void c64_state::pet64(machine_config &config) +{ ntsc(config); // TODO monochrome green palette -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( ntsc_sx ) //------------------------------------------------- -MACHINE_CONFIG_START(sx64_state::ntsc_sx) +void sx64_state::ntsc_sx(machine_config &config) +{ ntsc(config); // basic hardware - MCFG_DEVICE_MODIFY(M6510_TAG) - MCFG_M6510_PORT_CALLBACKS(READ8(*this, sx64_state, cpu_r), WRITE8(*this, sx64_state, cpu_w)) - MCFG_M6510_PORT_PULLS(0x07, 0xc0) + m_maincpu->read_callback().set(FUNC(sx64_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(sx64_state::cpu_w)); + m_maincpu->set_pulls(0x07, 0xc0); // devices - MCFG_DEVICE_MODIFY("iec8") - MCFG_DEVICE_SLOT_INTERFACE(sx1541_iec_devices, "sx1541", false) -MACHINE_CONFIG_END + CBM_IEC_SLOT(config.replace(), "iec8", sx1541_iec_devices, "sx1541"); +} //------------------------------------------------- // MACHINE_CONFIG( ntsc_dx ) //------------------------------------------------- -MACHINE_CONFIG_START(sx64_state::ntsc_dx) +void sx64_state::ntsc_dx(machine_config &config) +{ ntsc_sx(config); // devices - MCFG_DEVICE_MODIFY("iec9") - MCFG_DEVICE_SLOT_INTERFACE(sx1541_iec_devices, "sx1541", false) -MACHINE_CONFIG_END + CBM_IEC_SLOT(config.replace(), "iec9", sx1541_iec_devices, "sx1541"); +} //------------------------------------------------- // MACHINE_CONFIG( ntsc_c ) //------------------------------------------------- -MACHINE_CONFIG_START(c64c_state::ntsc_c) +void c64c_state::ntsc_c(machine_config &config) +{ ntsc(config); - MCFG_DEVICE_REPLACE(MOS6581_TAG, MOS8580, XTAL(14'318'181)/14) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c64_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c64_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + MOS8580(config.replace(), m_sid, XTAL(14'318'181)/14); + m_sid->potx().set(FUNC(c64_state::sid_potx_r)); + m_sid->poty().set(FUNC(c64_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); +} //------------------------------------------------- // MACHINE_CONFIG( pal ) //------------------------------------------------- -MACHINE_CONFIG_START(c64_state::pal) +void c64_state::pal(machine_config &config) +{ // basic hardware - MCFG_DEVICE_ADD(M6510_TAG, M6510, XTAL(17'734'472)/18) - MCFG_DEVICE_PROGRAM_MAP(c64_mem) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M6510_PORT_CALLBACKS(READ8(*this, c64_state, cpu_r), WRITE8(*this, c64_state, cpu_w)) - MCFG_M6510_PORT_PULLS(0x17, 0xc8) - MCFG_QUANTUM_PERFECT_CPU(M6510_TAG) + M6510(config, m_maincpu, XTAL(17'734'472)/18); + m_maincpu->set_addrmap(AS_PROGRAM, &c64_state::c64_mem); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->read_callback().set(FUNC(c64_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(c64_state::cpu_w)); + m_maincpu->set_pulls(0x17, 0xc8); + config.m_perfect_cpu_quantum = subtag(M6510_TAG); input_merger_device &irq(INPUT_MERGER_ANY_HIGH(config, "irq")); irq.output_handler().set_inputline(m_maincpu, m6510_device::IRQ_LINE); @@ -1451,47 +1464,52 @@ MACHINE_CONFIG_START(c64_state::pal) mos6569.set_addrmap(0, &c64_state::vic_videoram_map); mos6569.set_addrmap(1, &c64_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS6569_TAG, mos6569_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(VIC6569_VRETRACERATE); + screen.set_size(VIC6569_COLUMNS, VIC6569_LINES); + screen.set_visarea(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1); + screen.set_screen_update(MOS6569_TAG, FUNC(mos6569_device::screen_update)); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(17'734'472)/18) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c64_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c64_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS6581(config, m_sid, XTAL(17'734'472)/18); + m_sid->potx().set(FUNC(c64_state::sid_potx_r)); + m_sid->poty().set(FUNC(c64_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_PLS100_ADD(PLA_TAG) - MCFG_DEVICE_ADD(MOS6526_1_TAG, MOS6526, XTAL(17'734'472)/18) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("irq", input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_4)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_5)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c64_state, cia1_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia1_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c64_state, cia1_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia1_pb_w)) - MCFG_DEVICE_ADD(MOS6526_2_TAG, MOS6526, XTAL(17'734'472)/18) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(m_nmi, input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_6)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_7)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c64_state, cia2_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia2_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c64_state, cia2_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia2_pb_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8)) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", WRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) - MCFG_CBM_IEC_ADD("c1541") - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) - MCFG_CBM_IEC_BUS_ATN_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_9)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6569_TAG, mos6569_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") + PLS100(config, m_pla); + + MOS6526(config, m_cia1, XTAL(17'734'472)/18); + m_cia1->set_tod_clock(50); + m_cia1->irq_wr_callback().set("irq", FUNC(input_merger_device::in_w<0>)); + m_cia1->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_4)); + m_cia1->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_5)); + m_cia1->pa_rd_callback().set(FUNC(c64_state::cia1_pa_r)); + m_cia1->pb_rd_callback().set(FUNC(c64_state::cia1_pb_r)); + m_cia1->pb_wr_callback().set(FUNC(c64_state::cia1_pb_w)); + + MOS6526(config, m_cia2, XTAL(17'734'472)/18); + m_cia2->set_tod_clock(50); + m_cia2->irq_wr_callback().set(m_nmi, FUNC(input_merger_device::in_w<0>)); + m_cia2->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_6)); + m_cia2->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_7)); + m_cia2->pa_rd_callback().set(FUNC(c64_state::cia2_pa_r)); + m_cia2->pa_wr_callback().set(FUNC(c64_state::cia2_pa_w)); + m_cia2->pb_rd_callback().set(FUNC(c64_state::cia2_pb_r)); + m_cia2->pb_wr_callback().set(FUNC(c64_state::cia2_pb_w)); + m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8)); + + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530"); + m_cassette->read_handler().set(m_cia1, FUNC(mos6526_device::flag_w)); + + cbm_iec_slot_device::add(config, m_iec, "c1541"); + m_iec->srq_callback().set(m_cia1, FUNC(mos6526_device::flag_w)); + m_iec->data_callback().set(m_user, FUNC(pet_user_port_device::write_9)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS6569_TAG, FUNC(mos6569_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); C64_EXPANSION_SLOT(config, m_exp, XTAL(17'734'472)/18, c64_expansion_cards, nullptr); m_exp->irq_callback().set("irq", FUNC(input_merger_device::in_w<2>)); @@ -1519,66 +1537,70 @@ MACHINE_CONFIG_START(c64_state::pal) m_user->pl_handler().set(FUNC(c64_state::write_user_pb7)); m_user->pm_handler().set(FUNC(c64_state::write_user_pa2)); - MCFG_QUICKLOAD_ADD("quickload", c64_state, cbm_c64, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(c64_state, cbm_c64), this), "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_ADD("cass_list", "c64_cass") - MCFG_SOFTWARE_LIST_ADD("flop_list", "c64_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cass_list", "PAL") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL") + SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10"); + SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart"); + SOFTWARE_LIST(config, "cass_list").set_original("c64_cass"); + SOFTWARE_LIST(config, "flop_list").set_original("c64_flop"); + subdevice("cart_list_vic10")->set_filter("PAL"); + subdevice("cart_list_c64")->set_filter("PAL"); + subdevice("cass_list")->set_filter("PAL"); + subdevice("flop_list")->set_filter("PAL"); // internal ram RAM(config, RAM_TAG).set_default_size("64K"); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( pal_sx ) //------------------------------------------------- -MACHINE_CONFIG_START(sx64_state::pal_sx) +void sx64_state::pal_sx(machine_config &config) +{ pal(config); // basic hardware - MCFG_DEVICE_MODIFY(M6510_TAG) - MCFG_M6510_PORT_CALLBACKS(READ8(*this, sx64_state, cpu_r), WRITE8(*this, sx64_state, cpu_w)) - MCFG_M6510_PORT_PULLS(0x07, 0xc0) + m_maincpu->read_callback().set(FUNC(sx64_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(sx64_state::cpu_w)); + m_maincpu->set_pulls(0x07, 0xc0); // devices - MCFG_DEVICE_MODIFY("iec8") - MCFG_DEVICE_SLOT_INTERFACE(sx1541_iec_devices, "sx1541", false) -MACHINE_CONFIG_END + CBM_IEC_SLOT(config.replace(), "iec8", sx1541_iec_devices, "sx1541"); +} //------------------------------------------------- // MACHINE_CONFIG( pal_c ) //------------------------------------------------- -MACHINE_CONFIG_START(c64c_state::pal_c) +void c64c_state::pal_c(machine_config &config) +{ pal(config); - MCFG_DEVICE_REPLACE(MOS6581_TAG, MOS8580, XTAL(17'734'472)/18) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c64_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c64_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) -MACHINE_CONFIG_END + MOS8580(config.replace(), m_sid, XTAL(17'734'472)/18); + m_sid->potx().set(FUNC(c64_state::sid_potx_r)); + m_sid->poty().set(FUNC(c64_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); +} //------------------------------------------------- // MACHINE_CONFIG( pal_gs ) //------------------------------------------------- -MACHINE_CONFIG_START(c64gs_state::pal_gs) +void c64gs_state::pal_gs(machine_config &config) +{ // basic hardware - MCFG_DEVICE_ADD(M6510_TAG, M6510, XTAL(17'734'472)/18) - MCFG_DEVICE_PROGRAM_MAP(c64_mem) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M6510_PORT_CALLBACKS(READ8(*this, c64gs_state, cpu_r), WRITE8(*this, c64gs_state, cpu_w)) - MCFG_M6510_PORT_PULLS(0x07, 0xc0) - MCFG_QUANTUM_PERFECT_CPU(M6510_TAG) + M6510(config, m_maincpu, XTAL(17'734'472)/18); + m_maincpu->set_addrmap(AS_PROGRAM, &c64gs_state::c64_mem); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->read_callback().set(FUNC(c64gs_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(c64gs_state::cpu_w)); + m_maincpu->set_pulls(0x07, 0xc0); + config.m_perfect_cpu_quantum = subtag(M6510_TAG); input_merger_device &irq(INPUT_MERGER_ANY_HIGH(config, "irq")); irq.output_handler().set_inputline(m_maincpu, m6510_device::IRQ_LINE); @@ -1594,46 +1616,50 @@ MACHINE_CONFIG_START(c64gs_state::pal_gs) mos8565.set_addrmap(0, &c64_state::vic_videoram_map); mos8565.set_addrmap(1, &c64_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS6569_TAG, mos8565_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(VIC6569_VRETRACERATE); + screen.set_size(VIC6569_COLUMNS, VIC6569_LINES); + screen.set_visarea(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1); + screen.set_screen_update(MOS6569_TAG, FUNC(mos8565_device::screen_update)); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS8580, XTAL(17'734'472)/18) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, c64_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, c64_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS8580(config, m_sid, XTAL(17'734'472)/18); + m_sid->potx().set(FUNC(c64_state::sid_potx_r)); + m_sid->poty().set(FUNC(c64_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_PLS100_ADD(PLA_TAG) - MCFG_DEVICE_ADD(MOS6526_1_TAG, MOS6526, XTAL(17'734'472)/18) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("irq", input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_4)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_5)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c64gs_state, cia1_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia1_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c64gs_state, cia1_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia1_pb_w)) - MCFG_DEVICE_ADD(MOS6526_2_TAG, MOS6526, XTAL(17'734'472)/18) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(m_nmi, input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_6)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_7)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, c64_state, cia2_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia2_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c64_state, cia2_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c64_state, cia2_pb_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8)) - MCFG_CBM_IEC_ADD(nullptr) - MCFG_CBM_IEC_BUS_SRQ_CALLBACK(WRITELINE(MOS6526_1_TAG, mos6526_device, flag_w)) - MCFG_CBM_IEC_BUS_ATN_CALLBACK(WRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_9)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6569_TAG, mos6569_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") + PLS100(config, m_pla); + + MOS6526(config, m_cia1, XTAL(17'734'472)/18); + m_cia1->set_tod_clock(50); + m_cia1->irq_wr_callback().set("irq", FUNC(input_merger_device::in_w<0>)); + m_cia1->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_4)); + m_cia1->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_5)); + m_cia1->pa_rd_callback().set(FUNC(c64gs_state::cia1_pa_r)); + m_cia1->pa_wr_callback().set(FUNC(c64_state::cia1_pa_w)); + m_cia1->pb_rd_callback().set(FUNC(c64gs_state::cia1_pb_r)); + m_cia1->pb_wr_callback().set(FUNC(c64_state::cia1_pb_w)); + + MOS6526(config, m_cia2, XTAL(17'734'472)/18); + m_cia2->set_tod_clock(50); + m_cia2->irq_wr_callback().set(m_nmi, FUNC(input_merger_device::in_w<0>)); + m_cia2->cnt_wr_callback().set(m_user, FUNC(pet_user_port_device::write_6)); + m_cia2->sp_wr_callback().set(m_user, FUNC(pet_user_port_device::write_7)); + m_cia2->pa_rd_callback().set(FUNC(c64_state::cia2_pa_r)); + m_cia2->pa_wr_callback().set(FUNC(c64_state::cia2_pa_w)); + m_cia2->pb_rd_callback().set(FUNC(c64_state::cia2_pb_r)); + m_cia2->pb_wr_callback().set(FUNC(c64_state::cia2_pb_w)); + m_cia2->pc_wr_callback().set(m_user, FUNC(pet_user_port_device::write_8)); + + cbm_iec_slot_device::add(config, m_iec, nullptr); + m_iec->srq_callback().set(m_cia1, FUNC(mos6526_device::flag_w)); + m_iec->data_callback().set(m_user, FUNC(pet_user_port_device::write_9)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS6569_TAG, FUNC(mos6569_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); C64_EXPANSION_SLOT(config, m_exp, XTAL(17'734'472)/18, c64_expansion_cards, nullptr); m_exp->irq_callback().set("irq", FUNC(input_merger_device::in_w<2>)); @@ -1661,17 +1687,18 @@ MACHINE_CONFIG_START(c64gs_state::pal_gs) m_user->pl_handler().set(FUNC(c64_state::write_user_pb7)); m_user->pm_handler().set(FUNC(c64_state::write_user_pa2)); - MCFG_QUICKLOAD_ADD("quickload", c64_state, cbm_c64, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(c64_state, cbm_c64), this), "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10") - MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart") - MCFG_SOFTWARE_LIST_FILTER("cart_list_vic10", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cart_list_c64", "PAL") + SOFTWARE_LIST(config, "cart_list_vic10").set_original("vic10"); + SOFTWARE_LIST(config, "cart_list_c64").set_original("c64_cart"); + subdevice("cart_list_vic10")->set_filter("PAL"); + subdevice("cart_list_c64")->set_filter("PAL"); // internal ram RAM(config, RAM_TAG).set_default_size("64K"); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/cbm2.cpp b/src/mame/drivers/cbm2.cpp index 1bf71b3a4b0..4926cb11007 100644 --- a/src/mame/drivers/cbm2.cpp +++ b/src/mame/drivers/cbm2.cpp @@ -106,7 +106,7 @@ public: m_tpi2_pb(0) { } - required_device m_maincpu; + required_device m_maincpu; required_device m_pla1; optional_device m_crtc; optional_device m_palette; @@ -2242,15 +2242,16 @@ void cbm2_state::_256k(machine_config &config) // MACHINE_CONFIG( p500_ntsc ) //------------------------------------------------- -MACHINE_CONFIG_START(p500_state::p500_ntsc) +void p500_state::p500_ntsc(machine_config &config) +{ MCFG_MACHINE_START_OVERRIDE(p500_state, p500_ntsc) MCFG_MACHINE_RESET_OVERRIDE(p500_state, p500) // basic hardware - MCFG_DEVICE_ADD(M6509_TAG, M6509, XTAL(14'318'181)/14) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_DEVICE_PROGRAM_MAP(p500_mem) - MCFG_QUANTUM_PERFECT_CPU(M6509_TAG) + M6509(config, m_maincpu, XTAL(14'318'181)/14); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->set_addrmap(AS_PROGRAM, &p500_state::p500_mem); + config.m_perfect_cpu_quantum = subtag(M6509_TAG); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6509_device::IRQ_LINE); @@ -2262,22 +2263,22 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc) mos6567.set_addrmap(0, &p500_state::vic_videoram_map); mos6567.set_addrmap(1, &p500_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS6567_TAG, mos6567_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(VIC6567_VRETRACERATE); + screen.set_size(VIC6567_COLUMNS, VIC6567_LINES); + screen.set_visarea(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1); + screen.set_screen_update(MOS6567_TAG, FUNC(mos6567_device::screen_update)); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(14'318'181)/14) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, p500_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, p500_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS6581(config, m_sid, XTAL(14'318'181)/14); + m_sid->potx().set(FUNC(p500_state::sid_potx_r)); + m_sid->poty().set(FUNC(p500_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_PLS100_ADD(PLA1_TAG) - MCFG_PLS100_ADD(PLA2_TAG) + PLS100(config, m_pla1); + PLS100(config, m_pla2); TPI6525(config, m_tpi1, 0); m_tpi1->out_irq_cb().set("mainirq", FUNC(input_merger_device::in_w<0>)); @@ -2302,16 +2303,16 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc) m_acia->rts_handler().set(RS232_TAG, FUNC(rs232_port_device::write_rts)); m_acia->rxc_handler().set(RS232_TAG, FUNC(rs232_port_device::write_etc)); - MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526A, XTAL(14'318'181)/14) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, cnt_w)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, sp_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, cia_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(USER_PORT_TAG, cbm2_user_port_device, d2_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, pc_w)) + MOS6526A(config, m_cia, XTAL(14'318'181)/14); + m_cia->set_tod_clock(60); + m_cia->irq_wr_callback().set(m_tpi1, FUNC(tpi6525_device::i2_w)); + m_cia->cnt_wr_callback().set(m_user, FUNC(cbm2_user_port_device::cnt_w)); + m_cia->sp_wr_callback().set(m_user, FUNC(cbm2_user_port_device::sp_w)); + m_cia->pa_rd_callback().set(FUNC(cbm2_state::cia_pa_r)); + m_cia->pa_wr_callback().set(FUNC(cbm2_state::cia_pa_w)); + m_cia->pb_rd_callback().set(FUNC(cbm2_state::cia_pb_r)); + m_cia->pb_wr_callback().set(m_user, FUNC(cbm2_user_port_device::d2_w)); + m_cia->pc_wr_callback().set(m_user, FUNC(cbm2_user_port_device::pc_w)); DS75160A(config, m_ieee1, 0); m_ieee1->read_callback().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); @@ -2335,16 +2336,18 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc) m_ieee2->out_atn().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w)); m_ieee2->out_srq().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w)); - MCFG_CBM_IEEE488_ADD("c8050") - MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w)) + IEEE488(config, m_ieee, 0); + ieee488_slot_device::add_cbm_defaults(config, "c8050"); + m_ieee->srq_callback().set(m_tpi1, FUNC(tpi6525_device::i1_w)); - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, nullptr, WRITELINE(MOS6526_TAG, mos6526_device, flag_w)) + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, nullptr); + m_cassette->read_handler().set(m_cia, FUNC(mos6526_device::flag_w)); - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6567_TAG, mos6567_device, lp_w)) + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS6567_TAG, FUNC(mos6567_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, nullptr); - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr) - MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL(14'318'181)/14, cbm2_expansion_cards, nullptr) + CBM2_EXPANSION_SLOT(config, m_exp, XTAL(14'318'181)/14, cbm2_expansion_cards, nullptr); CBM2_USER_PORT(config, m_user, cbm2_user_port_cards, nullptr); m_user->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<1>)); @@ -2358,32 +2361,34 @@ MACHINE_CONFIG_START(p500_state::p500_ntsc) rs232.dsr_handler().set(m_acia, FUNC(mos6551_device::write_dsr)); rs232.cts_handler().set(m_acia, FUNC(mos6551_device::write_cts)); - MCFG_QUICKLOAD_ADD("quickload", p500_state, p500, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(p500_state, p500), this), "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS); // internal ram _128k(config); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list", "cbm2_cart") - MCFG_SOFTWARE_LIST_ADD("flop_list", "p500_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart"); + SOFTWARE_LIST(config, "flop_list").set_original("p500_flop"); + subdevice("cart_list")->set_filter("NTSC"); + subdevice("flop_list")->set_filter("NTSC"); +} //------------------------------------------------- // MACHINE_CONFIG( p500_pal ) //------------------------------------------------- -MACHINE_CONFIG_START(p500_state::p500_pal) +void p500_state::p500_pal(machine_config &config) +{ MCFG_MACHINE_START_OVERRIDE(p500_state, p500_pal) MCFG_MACHINE_RESET_OVERRIDE(p500_state, p500) // basic hardware - MCFG_DEVICE_ADD(M6509_TAG, M6509, XTAL(17'734'472)/18) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_DEVICE_PROGRAM_MAP(p500_mem) - MCFG_QUANTUM_PERFECT_CPU(M6509_TAG) + M6509(config, m_maincpu, XTAL(17'734'472)/18); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->set_addrmap(AS_PROGRAM, &p500_state::p500_mem); + config.m_perfect_cpu_quantum = subtag(M6509_TAG); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6509_device::IRQ_LINE); @@ -2395,22 +2400,22 @@ MACHINE_CONFIG_START(p500_state::p500_pal) mos6569.set_addrmap(0, &p500_state::vic_videoram_map); mos6569.set_addrmap(1, &p500_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6569_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6569_COLUMNS, VIC6569_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS6569_TAG, mos6569_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(VIC6569_VRETRACERATE); + screen.set_size(VIC6569_COLUMNS, VIC6569_LINES); + screen.set_visarea(0, VIC6569_VISIBLECOLUMNS - 1, 0, VIC6569_VISIBLELINES - 1); + screen.set_screen_update(MOS6569_TAG, FUNC(mos6569_device::screen_update)); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(17'734'472)/18) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, p500_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, p500_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS6581(config, m_sid, XTAL(17'734'472)/18); + m_sid->potx().set(FUNC(p500_state::sid_potx_r)); + m_sid->poty().set(FUNC(p500_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_PLS100_ADD(PLA1_TAG) - MCFG_PLS100_ADD(PLA2_TAG) + PLS100(config, m_pla1); + PLS100(config, m_pla2); TPI6525(config, m_tpi1, 0); m_tpi1->out_irq_cb().set("mainirq", FUNC(input_merger_device::in_w<1>)); @@ -2432,16 +2437,16 @@ MACHINE_CONFIG_START(p500_state::p500_pal) m_acia->irq_handler().set(m_tpi1, FUNC(tpi6525_device::i4_w)); m_acia->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); - MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526A, XTAL(17'734'472)/18) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, cnt_w)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, sp_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, cia_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(USER_PORT_TAG, cbm2_user_port_device, d2_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, pc_w)) + MOS6526A(config, m_cia, XTAL(17'734'472)/18); + m_cia->set_tod_clock(50); + m_cia->irq_wr_callback().set(m_tpi1, FUNC(tpi6525_device::i2_w)); + m_cia->cnt_wr_callback().set(m_user, FUNC(cbm2_user_port_device::cnt_w)); + m_cia->sp_wr_callback().set(m_user, FUNC(cbm2_user_port_device::sp_w)); + m_cia->pa_rd_callback().set(FUNC(cbm2_state::cia_pa_r)); + m_cia->pa_wr_callback().set(FUNC(cbm2_state::cia_pa_w)); + m_cia->pb_rd_callback().set(FUNC(cbm2_state::cia_pb_r)); + m_cia->pb_wr_callback().set(m_user, FUNC(cbm2_user_port_device::d2_w)); + m_cia->pc_wr_callback().set(m_user, FUNC(cbm2_user_port_device::pc_w)); DS75160A(config, m_ieee1, 0); m_ieee1->read_callback().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); @@ -2465,15 +2470,18 @@ MACHINE_CONFIG_START(p500_state::p500_pal) m_ieee2->out_atn().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w)); m_ieee2->out_srq().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w)); - MCFG_CBM_IEEE488_ADD("c8050") - MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w)) + IEEE488(config, m_ieee, 0); + ieee488_slot_device::add_cbm_defaults(config, "c8050"); + m_ieee->srq_callback().set(m_tpi1, FUNC(tpi6525_device::i1_w)); - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, nullptr, WRITELINE(MOS6526_TAG, mos6526_device, flag_w)) + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, nullptr); + m_cassette->read_handler().set(m_cia, FUNC(mos6526_device::flag_w)); - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6569_TAG, mos6569_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr) - MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL(17'734'472)/18, cbm2_expansion_cards, nullptr) + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS6567_TAG, FUNC(mos6567_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, nullptr); + + CBM2_EXPANSION_SLOT(config, m_exp, XTAL(17'734'472)/18, cbm2_expansion_cards, nullptr); CBM2_USER_PORT(config, m_user, cbm2_user_port_cards, nullptr); m_user->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<2>)); @@ -2487,45 +2495,47 @@ MACHINE_CONFIG_START(p500_state::p500_pal) rs232.dsr_handler().set(m_acia, FUNC(mos6551_device::write_dsr)); rs232.cts_handler().set(m_acia, FUNC(mos6551_device::write_cts)); - MCFG_QUICKLOAD_ADD("quickload", p500_state, p500, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(p500_state, p500), this), "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS); // internal ram _128k(config); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list", "cbm2_cart") - MCFG_SOFTWARE_LIST_ADD("flop_list", "p500_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart"); + SOFTWARE_LIST(config, "flop_list").set_original("p500_flop"); + subdevice("cart_list")->set_filter("PAL"); + subdevice("flop_list")->set_filter("PAL"); +} //------------------------------------------------- // MACHINE_CONFIG( cbm2lp_ntsc ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc) +void cbm2_state::cbm2lp_ntsc(machine_config &config) +{ MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_ntsc) MCFG_MACHINE_RESET_OVERRIDE(cbm2_state, cbm2) // basic hardware - MCFG_DEVICE_ADD(M6509_TAG, M6509, XTAL(18'000'000)/9) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_DEVICE_PROGRAM_MAP(cbm2_mem) - MCFG_QUANTUM_PERFECT_CPU(M6509_TAG) + M6509(config, m_maincpu, XTAL(18'000'000)/9); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->set_addrmap(AS_PROGRAM, &cbm2_state::cbm2_mem); + config.m_perfect_cpu_quantum = subtag(M6509_TAG); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6509_device::IRQ_LINE); // video hardware - MCFG_SCREEN_ADD_MONOCHROME(SCREEN_TAG, RASTER, rgb_t::green()) - MCFG_SCREEN_UPDATE_DEVICE(MC68B45_TAG, mc6845_device, screen_update) - - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(768, 312) - MCFG_SCREEN_VISIBLE_AREA(0, 768-1, 0, 312-1) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_color(rgb_t::green()); + screen.set_screen_update(MC68B45_TAG, FUNC(mc6845_device::screen_update)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(768, 312); + screen.set_visarea(0, 768-1, 0, 312-1); - MCFG_PALETTE_ADD_MONOCHROME("palette") + PALETTE(config, "palette", 2).set_init("palette", FUNC(palette_device::palette_init_monochrome)); MC6845(config, m_crtc, XTAL(18'000'000)/9); m_crtc->set_screen(SCREEN_TAG); @@ -2535,13 +2545,13 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc) // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(18'000'000)/9) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, cbm2_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, cbm2_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS6581(config, m_sid, XTAL(18'000'000)/9); + m_sid->potx().set(FUNC(p500_state::sid_potx_r)); + m_sid->poty().set(FUNC(p500_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_PLS100_ADD(PLA1_TAG) + PLS100(config, m_pla1); TPI6525(config, m_tpi1, 0); m_tpi1->out_irq_cb().set("mainirq", FUNC(input_merger_device::in_w<1>)); @@ -2561,16 +2571,16 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc) m_acia->irq_handler().set(m_tpi1, FUNC(tpi6525_device::i4_w)); m_acia->txd_handler().set(RS232_TAG, FUNC(rs232_port_device::write_txd)); - MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526A, XTAL(18'000'000)/9) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i2_w)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, cnt_w)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, sp_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pa_r)) - MCFG_MOS6526_PA_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, cia_pa_w)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, cia_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(USER_PORT_TAG, cbm2_user_port_device, d2_w)) - MCFG_MOS6526_PC_CALLBACK(WRITELINE(USER_PORT_TAG, cbm2_user_port_device, pc_w)) + MOS6526A(config, m_cia, XTAL(18'000'000)/9); + m_cia->set_tod_clock(60); + m_cia->irq_wr_callback().set(m_tpi1, FUNC(tpi6525_device::i2_w)); + m_cia->cnt_wr_callback().set(m_user, FUNC(cbm2_user_port_device::cnt_w)); + m_cia->sp_wr_callback().set(m_user, FUNC(cbm2_user_port_device::sp_w)); + m_cia->pa_rd_callback().set(FUNC(cbm2_state::cia_pa_r)); + m_cia->pa_wr_callback().set(FUNC(cbm2_state::cia_pa_w)); + m_cia->pb_rd_callback().set(FUNC(cbm2_state::cia_pb_r)); + m_cia->pb_wr_callback().set(m_user, FUNC(cbm2_user_port_device::d2_w)); + m_cia->pc_wr_callback().set(m_user, FUNC(cbm2_user_port_device::pc_w)); DS75160A(config, m_ieee1, 0); m_ieee1->read_callback().set(IEEE488_TAG, FUNC(ieee488_device::dio_r)); @@ -2594,14 +2604,17 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc) m_ieee2->out_atn().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w)); m_ieee2->out_srq().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w)); - MCFG_CBM_IEEE488_ADD("c8050") - MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w)) + IEEE488(config, m_ieee, 0); + ieee488_slot_device::add_cbm_defaults(config, "c8050"); + m_ieee->srq_callback().set(m_tpi1, FUNC(tpi6525_device::i1_w)); + + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, nullptr); + m_cassette->read_handler().set(m_cia, FUNC(mos6526_device::flag_w)); - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, nullptr, WRITELINE(MOS6526_TAG, mos6526_device, flag_w)) + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, nullptr); - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr) - MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL(18'000'000)/9, cbm2_expansion_cards, nullptr) + CBM2_EXPANSION_SLOT(config, m_exp, XTAL(18'000'000)/9, cbm2_expansion_cards, nullptr); CBM2_USER_PORT(config, m_user, cbm2_user_port_cards, nullptr); m_user->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<2>)); @@ -2615,180 +2628,190 @@ MACHINE_CONFIG_START(cbm2_state::cbm2lp_ntsc) rs232.dsr_handler().set(m_acia, FUNC(mos6551_device::write_dsr)); rs232.cts_handler().set(m_acia, FUNC(mos6551_device::write_cts)); - MCFG_QUICKLOAD_ADD("quickload", cbm2_state, cbmb, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS) + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(cbm2_state, cbmb), this), "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list", "cbm2_cart") - MCFG_SOFTWARE_LIST_ADD("flop_list", "cbm2_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "cart_list").set_original("cbm2_cart"); + SOFTWARE_LIST(config, "flop_list").set_original("cbm2_flop"); + subdevice("cart_list")->set_filter("NTSC"); + subdevice("flop_list")->set_filter("NTSC"); +} //------------------------------------------------- // MACHINE_CONFIG( b128 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::b128) +void cbm2_state::b128(machine_config &config) +{ cbm2lp_ntsc(config); _128k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( b256 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::b256) +void cbm2_state::b256(machine_config &config) +{ cbm2lp_ntsc(config); _256k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( cbm2lp_pal ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::cbm2lp_pal) +void cbm2_state::cbm2lp_pal(machine_config &config) +{ cbm2lp_ntsc(config); MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal) - - MCFG_DEVICE_MODIFY(MOS6526_TAG) - MCFG_MOS6526_TOD(50) -MACHINE_CONFIG_END + m_cia->set_tod_clock(50); +} //------------------------------------------------- // MACHINE_CONFIG( cbm610 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::cbm610) +void cbm2_state::cbm610(machine_config &config) +{ cbm2lp_pal(config); _128k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( cbm620 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::cbm620) +void cbm2_state::cbm620(machine_config &config) +{ cbm2lp_pal(config); _256k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( cbm2hp_ntsc ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::cbm2hp_ntsc) +void cbm2_state::cbm2hp_ntsc(machine_config &config) +{ cbm2lp_ntsc(config); m_tpi2->in_pc_cb().set(FUNC(cbm2hp_state::tpi2_pc_r)); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( b128hp ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2hp_state::b128hp) +void cbm2hp_state::b128hp(machine_config &config) +{ cbm2hp_ntsc(config); _128k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( b256hp ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2hp_state::b256hp) +void cbm2hp_state::b256hp(machine_config &config) +{ cbm2hp_ntsc(config); _256k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( bx256hp ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2hp_state::bx256hp) +void cbm2hp_state::bx256hp(machine_config &config) +{ b256hp(config); MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2x_ntsc) - MCFG_DEVICE_ADD(m_ext_cpu, I8088, XTAL(12'000'000)) - MCFG_DEVICE_PROGRAM_MAP(ext_mem) - MCFG_DEVICE_IO_MAP(ext_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(EXT_I8259A_TAG, pic8259_device, inta_cb) + I8088(config, m_ext_cpu, XTAL(12'000'000)); + m_ext_cpu->set_addrmap(AS_PROGRAM, &cbm2hp_state::ext_mem); + m_ext_cpu->set_addrmap(AS_IO, &cbm2hp_state::ext_io); + m_ext_cpu->set_irq_acknowledge_callback(EXT_I8259A_TAG, FUNC(pic8259_device::inta_cb)); PIC8259(config, m_ext_pic, 0); m_ext_pic->out_int_callback().set_inputline(m_ext_cpu, INPUT_LINE_IRQ0); TPI6525(config, m_ext_tpi, 0); - m_ext_tpi->in_pa_cb().set(EXT_MOS6526_TAG, FUNC(mos6526_device::pa_r)); + m_ext_tpi->in_pa_cb().set(m_ext_cia, FUNC(mos6526_device::pa_r)); m_ext_tpi->in_pb_cb().set(FUNC(cbm2_state::ext_tpi_pb_r)); m_ext_tpi->out_pb_cb().set(FUNC(cbm2_state::ext_tpi_pb_w)); m_ext_tpi->out_pc_cb().set(FUNC(cbm2_state::ext_tpi_pc_w)); - MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL(18'000'000)/9) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, cbm2_state, ext_cia_irq_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(EXT_MOS6525_TAG, tpi6525_device, pa_r)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, ext_cia_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, ext_cia_pb_w)) + MOS6526(config, m_ext_cia, XTAL(18'000'000)/9); + m_ext_cia->set_tod_clock(60); + m_ext_cia->irq_wr_callback().set(FUNC(cbm2_state::ext_cia_irq_w)); + m_ext_cia->pa_rd_callback().set(m_ext_tpi, FUNC(tpi6525_device::pa_r)); + m_ext_cia->pb_rd_callback().set(FUNC(cbm2_state::ext_cia_pb_r)); + m_ext_cia->pb_wr_callback().set(FUNC(cbm2_state::ext_cia_pb_w)); - MCFG_SOFTWARE_LIST_ADD("flop_list2", "bx256hp_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop_list2").set_original("bx256hp_flop"); +} //------------------------------------------------- // MACHINE_CONFIG( cbm2hp_pal ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2_state::cbm2hp_pal) +void cbm2_state::cbm2hp_pal(machine_config &config) +{ cbm2hp_ntsc(config); MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal) // devices m_tpi2->in_pc_cb().set(FUNC(cbm2hp_state::tpi2_pc_r)); - - MCFG_DEVICE_MODIFY(MOS6526_TAG) - MCFG_MOS6526_TOD(50) -MACHINE_CONFIG_END + m_cia->set_tod_clock(50); +} //------------------------------------------------- // MACHINE_CONFIG( cbm710 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2hp_state::cbm710) +void cbm2hp_state::cbm710(machine_config &config) +{ cbm2hp_pal(config); _128k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( cbm720 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2hp_state::cbm720) +void cbm2hp_state::cbm720(machine_config &config) +{ cbm2hp_pal(config); _256k(config); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( cbm730 ) //------------------------------------------------- -MACHINE_CONFIG_START(cbm2hp_state::cbm730) +void cbm2hp_state::cbm730(machine_config &config) +{ cbm720(config); MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2x_pal) - MCFG_DEVICE_ADD(m_ext_cpu, I8088, XTAL(12'000'000)) - MCFG_DEVICE_PROGRAM_MAP(ext_mem) - MCFG_DEVICE_IO_MAP(ext_io) - MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE(EXT_I8259A_TAG, pic8259_device, inta_cb) + I8088(config, m_ext_cpu, XTAL(12'000'000)); + m_ext_cpu->set_addrmap(AS_PROGRAM, &cbm2hp_state::ext_mem); + m_ext_cpu->set_addrmap(AS_IO, &cbm2hp_state::ext_io); + m_ext_cpu->set_irq_acknowledge_callback(EXT_I8259A_TAG, FUNC(pic8259_device::inta_cb)); PIC8259(config, m_ext_pic, 0); m_ext_pic->out_int_callback().set_inputline(m_ext_cpu, INPUT_LINE_IRQ0); @@ -2799,15 +2822,15 @@ MACHINE_CONFIG_START(cbm2hp_state::cbm730) m_ext_tpi->out_pb_cb().set(FUNC(cbm2_state::ext_tpi_pb_w)); m_ext_tpi->out_pc_cb().set(FUNC(cbm2_state::ext_tpi_pc_w)); - MCFG_DEVICE_ADD(EXT_MOS6526_TAG, MOS6526, XTAL(18'000'000)/9) - MCFG_MOS6526_TOD(50) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, cbm2_state, ext_cia_irq_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(EXT_MOS6525_TAG, tpi6525_device, pa_r)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, cbm2_state, ext_cia_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, cbm2_state, ext_cia_pb_w)) + MOS6526(config, m_ext_cia, XTAL(18'000'000)/9); + m_ext_cia->set_tod_clock(50); + m_ext_cia->irq_wr_callback().set(FUNC(cbm2_state::ext_cia_irq_w)); + m_ext_cia->pa_rd_callback().set(m_ext_tpi, FUNC(tpi6525_device::pa_r)); + m_ext_cia->pb_rd_callback().set(FUNC(cbm2_state::ext_cia_pb_r)); + m_ext_cia->pb_wr_callback().set(FUNC(cbm2_state::ext_cia_pb_w)); - MCFG_SOFTWARE_LIST_ADD("flop_list2", "bx256hp_flop") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "flop_list2").set_original("bx256hp_flop"); +} diff --git a/src/mame/drivers/plus4.cpp b/src/mame/drivers/plus4.cpp index 4aed0eef155..3f7866dcd5b 100644 --- a/src/mame/drivers/plus4.cpp +++ b/src/mame/drivers/plus4.cpp @@ -840,24 +840,26 @@ void plus4_state::machine_reset() // MACHINE_CONFIG( plus4 ) //------------------------------------------------- -MACHINE_CONFIG_START(plus4_state::plus4) +void plus4_state::plus4(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD(MOS7501_TAG, M7501, 0) - MCFG_DEVICE_PROGRAM_MAP(plus4_mem) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M7501_PORT_CALLBACKS(READ8(*this, plus4_state, cpu_r), WRITE8(*this, plus4_state, cpu_w)) - MCFG_M7501_PORT_PULLS(0x00, 0xc0) - MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG) + M7501(config, m_maincpu, 0); + m_maincpu->set_addrmap(AS_PROGRAM, &plus4_state::plus4_mem); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->read_callback().set(FUNC(plus4_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(plus4_state::cpu_w)); + m_maincpu->set_pulls(0x00, 0xc0); + config.m_perfect_cpu_quantum = subtag(MOS7501_TAG); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m7501_device::IRQ_LINE); // video and sound hardware - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(mos7360_device::PAL_VRETRACERATE) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_SIZE(336, 216) - MCFG_SCREEN_VISIBLE_AREA(0, 336 - 1, 0, 216 - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS7360_TAG, mos7360_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(mos7360_device::PAL_VRETRACERATE); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + screen.set_size(336, 216); + screen.set_visarea(0, 336 - 1, 0, 216 - 1); + screen.set_screen_update(MOS7360_TAG, FUNC(mos7360_device::screen_update)); SPEAKER(config, "mono").front_center(); @@ -869,7 +871,7 @@ MACHINE_CONFIG_START(plus4_state::plus4) m_ted->add_route(ALL_OUTPUTS, "mono", 0.25); // devices - MCFG_PLS100_ADD(PLA_TAG) + PLS100(config, m_pla); PET_USER_PORT(config, m_user, plus4_user_port_cards, nullptr); m_user->p4_handler().set(m_spi_user, FUNC(mos6529_device::write_p2)); // cassette sense @@ -893,130 +895,128 @@ MACHINE_CONFIG_START(plus4_state::plus4) m_acia->txd_handler().set(m_user, FUNC(pet_user_port_device::write_m)); m_acia->irq_handler().set("mainirq", FUNC(input_merger_device::in_w<1>)); - MCFG_DEVICE_ADD(m_spi_user, MOS6529, 0) - MCFG_MOS6529_P0_HANDLER(WRITELINE(m_user, pet_user_port_device, write_b)) - MCFG_MOS6529_P1_HANDLER(WRITELINE(m_user, pet_user_port_device, write_k)) - MCFG_MOS6529_P2_HANDLER(WRITELINE(m_user, pet_user_port_device, write_4)) - MCFG_MOS6529_P3_HANDLER(WRITELINE(m_user, pet_user_port_device, write_5)) - MCFG_MOS6529_P4_HANDLER(WRITELINE(m_user, pet_user_port_device, write_6)) - MCFG_MOS6529_P5_HANDLER(WRITELINE(m_user, pet_user_port_device, write_7)) - MCFG_MOS6529_P6_HANDLER(WRITELINE(m_user, pet_user_port_device, write_j)) - MCFG_MOS6529_P7_HANDLER(WRITELINE(m_user, pet_user_port_device, write_f)) - - MCFG_DEVICE_ADD(MOS6529_KB_TAG, MOS6529, 0) - MCFG_MOS6529_P0_HANDLER(WRITELINE(*this, plus4_state, write_kb0)) - MCFG_MOS6529_P1_HANDLER(WRITELINE(*this, plus4_state, write_kb1)) - MCFG_MOS6529_P2_HANDLER(WRITELINE(*this, plus4_state, write_kb2)) - MCFG_MOS6529_P3_HANDLER(WRITELINE(*this, plus4_state, write_kb3)) - MCFG_MOS6529_P4_HANDLER(WRITELINE(*this, plus4_state, write_kb4)) - MCFG_MOS6529_P5_HANDLER(WRITELINE(*this, plus4_state, write_kb5)) - MCFG_MOS6529_P6_HANDLER(WRITELINE(*this, plus4_state, write_kb6)) - MCFG_MOS6529_P7_HANDLER(WRITELINE(*this, plus4_state, write_kb7)) - - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NOOP) - - MCFG_CBM_IEC_ADD("c1541") - MCFG_CBM_IEC_BUS_ATN_CALLBACK(WRITELINE(m_user, pet_user_port_device, write_9)) - - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") - MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL(14'318'181)/16, plus4_expansion_cards, nullptr) - MCFG_PLUS4_EXPANSION_SLOT_IRQ_CALLBACK(WRITELINE("mainirq", input_merger_device, in_w<2>)) - MCFG_PLUS4_EXPANSION_SLOT_CD_INPUT_CALLBACK(READ8(*this, plus4_state, read)) - MCFG_PLUS4_EXPANSION_SLOT_CD_OUTPUT_CALLBACK(WRITE8(*this, plus4_state, write)) - MCFG_PLUS4_EXPANSION_SLOT_AEC_CALLBACK(INPUTLINE(MOS7501_TAG, INPUT_LINE_HALT)) - - MCFG_QUICKLOAD_ADD("quickload", plus4_state, cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) + MOS6529(config, m_spi_user, 0); + m_spi_user->p_handler<0>().set(m_user, FUNC(pet_user_port_device::write_b)); + m_spi_user->p_handler<1>().set(m_user, FUNC(pet_user_port_device::write_k)); + m_spi_user->p_handler<2>().set(m_user, FUNC(pet_user_port_device::write_4)); + m_spi_user->p_handler<3>().set(m_user, FUNC(pet_user_port_device::write_5)); + m_spi_user->p_handler<4>().set(m_user, FUNC(pet_user_port_device::write_6)); + m_spi_user->p_handler<5>().set(m_user, FUNC(pet_user_port_device::write_7)); + m_spi_user->p_handler<6>().set(m_user, FUNC(pet_user_port_device::write_j)); + m_spi_user->p_handler<7>().set(m_user, FUNC(pet_user_port_device::write_f)); + + MOS6529(config, m_spi_kb, 0); + m_spi_kb->p_handler<0>().set(FUNC(plus4_state::write_kb0)); + m_spi_kb->p_handler<1>().set(FUNC(plus4_state::write_kb1)); + m_spi_kb->p_handler<2>().set(FUNC(plus4_state::write_kb2)); + m_spi_kb->p_handler<3>().set(FUNC(plus4_state::write_kb3)); + m_spi_kb->p_handler<4>().set(FUNC(plus4_state::write_kb4)); + m_spi_kb->p_handler<5>().set(FUNC(plus4_state::write_kb5)); + m_spi_kb->p_handler<6>().set(FUNC(plus4_state::write_kb6)); + m_spi_kb->p_handler<7>().set(FUNC(plus4_state::write_kb7)); + + PET_DATASSETTE_PORT(config, m_cassette, plus4_datassette_devices, "c1531"); + m_cassette->read_handler().set_nop(); + + cbm_iec_slot_device::add(config, m_iec, "c1541"); + m_iec->atn_callback().set(m_user, FUNC(pet_user_port_device::write_9)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); + + PLUS4_EXPANSION_SLOT(config, m_exp, XTAL(14'318'181)/16, plus4_expansion_cards, nullptr); + m_exp->irq_wr_callback().set("mainirq", FUNC(input_merger_device::in_w<2>)); + m_exp->cd_rd_callback().set(FUNC(plus4_state::read)); + m_exp->cd_wr_callback().set(FUNC(plus4_state::write)); + m_exp->aec_wr_callback().set_inputline(MOS7501_TAG, INPUT_LINE_HALT); + + quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0)); + quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(plus4_state, cbm_c16), this), "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS); // internal ram RAM(config, m_ram).set_default_size("64K"); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( plus4p ) //------------------------------------------------- -MACHINE_CONFIG_START(c16_state::plus4p) +void c16_state::plus4p(machine_config &config) +{ plus4(config); - MCFG_DEVICE_MODIFY(MOS7501_TAG) - MCFG_DEVICE_CLOCK(XTAL(17'734'470)/20) - - MCFG_DEVICE_MODIFY(MOS7360_TAG) - MCFG_DEVICE_CLOCK(XTAL(17'734'470)/5) + m_maincpu->set_clock(XTAL(17'734'470)/20); + m_ted->set_clock(XTAL(17'734'470)/5); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list", "plus4_cart") - MCFG_SOFTWARE_LIST_ADD("cass_list", "plus4_cass") - MCFG_SOFTWARE_LIST_ADD("flop_list", "plus4_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL") - MCFG_SOFTWARE_LIST_FILTER("cass_list", "PAL") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL") -MACHINE_CONFIG_END - + SOFTWARE_LIST(config, "cart_list").set_original("plus4_cart"); + SOFTWARE_LIST(config, "cass_list").set_original("plus4_cass"); + SOFTWARE_LIST(config, "flop_list").set_original("plus4_flop"); + subdevice("cart_list")->set_filter("PAL"); + subdevice("cass_list")->set_filter("PAL"); + subdevice("flop_list")->set_filter("PAL"); +} //------------------------------------------------- // MACHINE_CONFIG( plus4n ) //------------------------------------------------- -MACHINE_CONFIG_START(c16_state::plus4n) +void c16_state::plus4n(machine_config &config) +{ plus4(config); - MCFG_DEVICE_MODIFY(MOS7501_TAG) - MCFG_DEVICE_CLOCK(XTAL(14'318'181)/16) - - MCFG_DEVICE_MODIFY(MOS7360_TAG) - MCFG_DEVICE_CLOCK(XTAL(14'318'181)/4) + m_maincpu->set_clock(XTAL(14'318'181)/16); + m_ted->set_clock(XTAL(14'318'181)/4); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list", "plus4_cart") - MCFG_SOFTWARE_LIST_ADD("cass_list", "plus4_cass") - MCFG_SOFTWARE_LIST_ADD("flop_list", "plus4_flop") - MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("cass_list", "NTSC") - MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC") -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "cart_list").set_original("plus4_cart"); + SOFTWARE_LIST(config, "cass_list").set_original("plus4_cass"); + SOFTWARE_LIST(config, "flop_list").set_original("plus4_flop"); + subdevice("cart_list")->set_filter("NTSC"); + subdevice("cass_list")->set_filter("NTSC"); + subdevice("flop_list")->set_filter("NTSC"); +} //------------------------------------------------- // MACHINE_CONFIG( c16n ) //------------------------------------------------- -MACHINE_CONFIG_START(c16_state::c16n) +void c16_state::c16n(machine_config &config) +{ plus4n(config); - MCFG_DEVICE_MODIFY(MOS7501_TAG) - MCFG_M7501_PORT_CALLBACKS(READ8(*this, c16_state, cpu_r), WRITE8(*this, plus4_state, cpu_w)) - MCFG_M7501_PORT_PULLS(0x00, 0xc0) + m_maincpu->read_callback().set(FUNC(c16_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(plus4_state::cpu_w)); + m_maincpu->set_pulls(0x00, 0xc0); - MCFG_DEVICE_REMOVE(MOS6551_TAG) - MCFG_DEVICE_REMOVE(MOS6529_USER_TAG) - MCFG_DEVICE_REMOVE(PET_USER_PORT_TAG) + config.device_remove(MOS6551_TAG); + config.device_remove(MOS6529_USER_TAG); + config.device_remove(PET_USER_PORT_TAG); - MCFG_DEVICE_MODIFY(CBM_IEC_TAG) - MCFG_CBM_IEC_BUS_ATN_CALLBACK(NOOP) + m_iec->atn_callback().set_nop(); m_ram->set_default_size("16K").set_extra_options("64K"); -MACHINE_CONFIG_END +} //------------------------------------------------- // MACHINE_CONFIG( c16p ) //------------------------------------------------- -MACHINE_CONFIG_START(c16_state::c16p) +void c16_state::c16p(machine_config &config) +{ plus4p(config); - MCFG_DEVICE_MODIFY(MOS7501_TAG) - MCFG_M7501_PORT_CALLBACKS(READ8(*this, c16_state, cpu_r), WRITE8(*this, plus4_state, cpu_w)) - MCFG_M7501_PORT_PULLS(0x00, 0xc0) + m_maincpu->read_callback().set(FUNC(c16_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(plus4_state::cpu_w)); + m_maincpu->set_pulls(0x00, 0xc0); - MCFG_DEVICE_REMOVE(MOS6551_TAG) - MCFG_DEVICE_REMOVE(MOS6529_USER_TAG) - MCFG_DEVICE_REMOVE(PET_USER_PORT_TAG) + config.device_remove(MOS6551_TAG); + config.device_remove(MOS6529_USER_TAG); + config.device_remove(PET_USER_PORT_TAG); - MCFG_DEVICE_MODIFY(CBM_IEC_TAG) - MCFG_CBM_IEC_BUS_ATN_CALLBACK(NOOP) + m_iec->atn_callback().set_nop(); m_ram->set_default_size("16K").set_extra_options("64K"); -MACHINE_CONFIG_END +} void c16_state::c232(machine_config &config) @@ -1030,13 +1030,13 @@ void c16_state::c232(machine_config &config) // MACHINE_CONFIG( v364 ) //------------------------------------------------- -MACHINE_CONFIG_START(c16_state::v364) +void c16_state::v364(machine_config &config) +{ plus4n(config); - MCFG_DEVICE_ADD(T6721A_TAG, T6721A, XTAL(640'000)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + T6721A(config, T6721A_TAG, XTAL(640'000)).add_route(ALL_OUTPUTS, "mono", 0.25); - MCFG_MOS8706_ADD(MOS8706_TAG, XTAL(14'318'181)/16) -MACHINE_CONFIG_END + MOS8706(config, m_vslsi, XTAL(14'318'181)/16); +} diff --git a/src/mame/drivers/tvboy.cpp b/src/mame/drivers/tvboy.cpp index 514743d235b..e276e01f772 100644 --- a/src/mame/drivers/tvboy.cpp +++ b/src/mame/drivers/tvboy.cpp @@ -76,11 +76,12 @@ void tvboy_state::tvboy_mem(address_map &map) #define MASTER_CLOCK_PAL 3546894 -MACHINE_CONFIG_START(tvboy_state::tvboyii) +void tvboy_state::tvboyii(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M6507, MASTER_CLOCK_PAL / 3) - MCFG_DEVICE_PROGRAM_MAP(tvboy_mem) - MCFG_M6502_DISABLE_CACHE() + M6507(config, m_maincpu, MASTER_CLOCK_PAL / 3); + m_maincpu->set_addrmap(AS_PROGRAM, &tvboy_state::tvboy_mem); + m_maincpu->disable_cache(); /* video hardware */ TIA_PAL_VIDEO(config, m_tia, 0, "tia"); @@ -88,24 +89,23 @@ MACHINE_CONFIG_START(tvboy_state::tvboyii) m_tia->databus_contents_callback().set(FUNC(tvboy_state::a2600_get_databus_contents)); m_tia->vsync_callback().set(FUNC(tvboy_state::a2600_tia_vsync_callback_pal)); - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS( MASTER_CLOCK_PAL, 228, 26, 26 + 160 + 16, 312, 32, 32 + 228 + 31 ) - MCFG_SCREEN_UPDATE_DEVICE("tia_video", tia_video_device, screen_update) - MCFG_SCREEN_PALETTE("tia_video:palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_raw(MASTER_CLOCK_PAL, 228, 26, 26 + 160 + 16, 312, 32, 32 + 228 + 31); + m_screen->set_screen_update("tia_video", FUNC(tia_video_device::screen_update)); + m_screen->set_palette("tia_video:palette"); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_SOUND_TIA_ADD("tia", MASTER_CLOCK_PAL/114) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90) + TIA(config, "tia", MASTER_CLOCK_PAL/114).add_route(ALL_OUTPUTS, "mono", 0.90); /* devices */ #if USE_NEW_RIOT - MCFG_DEVICE_ADD("riot", MOS6532n, MASTER_CLOCK_PAL / 3) - MCFG_MOS6530n_IN_PA_CB(READ8(*this, tvboy_state, switch_A_r)) - MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, tvboy_state, switch_A_w)) - MCFG_MOS6530n_IN_PB_CB(READ8(*this, tvboy_state, riot_input_port_8_r)) - MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, tvboy_state, switch_B_w)) - MCFG_MOS6530n_IRQ_CB(WRITELINE(*this, tvboy_state, irq_callback)) + MOS6532_NEW(config, m_riot, MASTER_CLOCK_PAL / 3); + m_riot->pa_rd_callback().set(FUNC(tvboy_state::switch_A_r)); + m_riot->pa_wr_callback().set(FUNC(tvboy_state::switch_A_w)); + m_riot->pb_rd_callback().set(FUNC(tvboy_state::riot_input_port_8_r)); + m_riot->pb_wr_callback().set(FUNC(tvboy_state::switch_B_w)); + m_riot->irq_wr_callback().set(FUNC(tvboy_state::irq_callback)); #else RIOT6532(config, m_riot, MASTER_CLOCK_PAL / 3); m_riot->in_pa_callback().set(FUNC(tvboy_state::switch_A_r)); @@ -115,9 +115,9 @@ MACHINE_CONFIG_START(tvboy_state::tvboyii) m_riot->irq_callback().set(FUNC(tvboy_state::irq_callback)); #endif - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy") - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, nullptr) -MACHINE_CONFIG_END + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, "joy"); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, nullptr); +} static INPUT_PORTS_START( tvboyii ) PORT_START("SWB") diff --git a/src/mame/drivers/vic10.cpp b/src/mame/drivers/vic10.cpp index 4ab46cfc9dd..cc3a96c2c7e 100644 --- a/src/mame/drivers/vic10.cpp +++ b/src/mame/drivers/vic10.cpp @@ -640,14 +640,16 @@ void vic10_state::machine_reset() // MACHINE_CONFIG( vic10 ) //------------------------------------------------- -MACHINE_CONFIG_START(vic10_state::vic10) +void vic10_state::vic10(machine_config &config) +{ // basic hardware - MCFG_DEVICE_ADD(M6510_TAG, M6510, XTAL(8'000'000)/8) - MCFG_DEVICE_PROGRAM_MAP(vic10_mem) - MCFG_M6502_DISABLE_CACHE() // address decoding is 100% dynamic, no RAM/ROM banks - MCFG_M6510_PORT_CALLBACKS(READ8(*this, vic10_state, cpu_r), WRITE8(*this, vic10_state, cpu_w)) - MCFG_M6510_PORT_PULLS(0x10, 0x20) - MCFG_QUANTUM_PERFECT_CPU(M6510_TAG) + M6510(config, m_maincpu, XTAL(8'000'000)/8); + m_maincpu->set_addrmap(AS_PROGRAM, &vic10_state::vic10_mem); + m_maincpu->disable_cache(); // address decoding is 100% dynamic, no RAM/ROM banks + m_maincpu->read_callback().set(FUNC(vic10_state::cpu_r)); + m_maincpu->write_callback().set(FUNC(vic10_state::cpu_w)); + m_maincpu->set_pulls(0x10, 0x20); + config.m_perfect_cpu_quantum = subtag(M6510_TAG); INPUT_MERGER_ANY_HIGH(config, "mainirq").output_handler().set_inputline(m_maincpu, m6510_device::IRQ_LINE); @@ -659,32 +661,35 @@ MACHINE_CONFIG_START(vic10_state::vic10) mos8566.set_addrmap(0, &vic10_state::vic_videoram_map); mos8566.set_addrmap(1, &vic10_state::vic_colorram_map); - MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) - MCFG_SCREEN_REFRESH_RATE(VIC6566_VRETRACERATE) - MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) - MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) - MCFG_SCREEN_UPDATE_DEVICE(MOS6566_TAG, mos6566_device, screen_update) + screen_device &screen(SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER)); + screen.set_refresh_hz(VIC6566_VRETRACERATE); + screen.set_size(VIC6567_COLUMNS, VIC6567_LINES); + screen.set_visarea(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1); + screen.set_screen_update(MOS6566_TAG, FUNC(mos6566_device::screen_update)); // sound hardware SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD(MOS6581_TAG, MOS6581, XTAL(8'000'000)/8) - MCFG_MOS6581_POTX_CALLBACK(READ8(*this, vic10_state, sid_potx_r)) - MCFG_MOS6581_POTY_CALLBACK(READ8(*this, vic10_state, sid_poty_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) + MOS6581(config, m_sid, XTAL(8'000'000)/8); + m_sid->potx().set(FUNC(vic10_state::sid_potx_r)); + m_sid->poty().set(FUNC(vic10_state::sid_poty_r)); + m_sid->add_route(ALL_OUTPUTS, "mono", 1.00); // devices - MCFG_DEVICE_ADD(MOS6526_TAG, MOS6526, XTAL(8'000'000)/8) - MCFG_MOS6526_TOD(60) - MCFG_MOS6526_IRQ_CALLBACK(WRITELINE("mainirq", input_merger_device, in_w<0>)) - MCFG_MOS6526_CNT_CALLBACK(WRITELINE(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, cnt_w)) - MCFG_MOS6526_SP_CALLBACK(WRITELINE(VIC10_EXPANSION_SLOT_TAG, vic10_expansion_slot_device, sp_w)) - MCFG_MOS6526_PA_INPUT_CALLBACK(READ8(*this, vic10_state, cia_pa_r)) - MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, vic10_state, cia_pb_r)) - MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, vic10_state, cia_pb_w)) - MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", WRITELINE(MOS6526_TAG, mos6526_device, flag_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, nullptr) - MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(MOS6566_TAG, mos6566_device, lp_w)) - MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy") + MOS6526(config, m_cia, XTAL(8'000'000)/8); + m_cia->set_tod_clock(60); + m_cia->irq_wr_callback().set("mainirq", FUNC(input_merger_device::in_w<0>)); + m_cia->cnt_wr_callback().set(m_exp, FUNC(vic10_expansion_slot_device::cnt_w)); + m_cia->sp_wr_callback().set(m_exp, FUNC(vic10_expansion_slot_device::sp_w)); + m_cia->pa_rd_callback().set(FUNC(vic10_state::cia_pa_r)); + m_cia->pb_rd_callback().set(FUNC(vic10_state::cia_pb_r)); + m_cia->pb_wr_callback().set(FUNC(vic10_state::cia_pb_w)); + + PET_DATASSETTE_PORT(config, m_cassette, cbm_datassette_devices, "c1530"); + m_cassette->read_handler().set(m_cia, FUNC(mos6526_device::flag_w)); + + VCS_CONTROL_PORT(config, m_joy1, vcs_control_port_devices, nullptr); + m_joy1->trigger_wr_callback().set(MOS6566_TAG, FUNC(mos6566_device::lp_w)); + VCS_CONTROL_PORT(config, m_joy2, vcs_control_port_devices, "joy"); VIC10_EXPANSION_SLOT(config, m_exp, XTAL(8'000'000)/8, vic10_expansion_cards, nullptr); m_exp->irq_callback().set("mainirq", FUNC(input_merger_device::in_w<2>)); @@ -693,11 +698,11 @@ MACHINE_CONFIG_START(vic10_state::vic10) m_exp->sp_callback().set(m_cia, FUNC(mos6526_device::sp_w)); // software list - MCFG_SOFTWARE_LIST_ADD("cart_list", "vic10") + SOFTWARE_LIST(config, "cart_list").set_original("vic10"); // internal ram RAM(config, RAM_TAG).set_default_size("4K"); -MACHINE_CONFIG_END +} diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp index 3f641e81cdb..5824b9764b9 100644 --- a/src/mame/drivers/xavix.cpp +++ b/src/mame/drivers/xavix.cpp @@ -794,34 +794,34 @@ static GFXDECODE_START( gfx_xavix ) GFXDECODE_END -MACHINE_CONFIG_START(xavix_state::xavix) - +void xavix_state::xavix(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",XAVIX,MAIN_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(xavix_map) - MCFG_DEVICE_ADDRESS_MAP(5, xavix_lowbus_map) - MCFG_DEVICE_ADDRESS_MAP(6, xavix_extbus_map) - MCFG_M6502_DISABLE_CACHE() - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", xavix_state, interrupt) - MCFG_XAVIX_VECTOR_CALLBACK(xavix_state, get_vectors) + XAVIX(config, m_maincpu, MAIN_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &xavix_state::xavix_map); + m_maincpu->set_addrmap(5, &xavix_state::xavix_lowbus_map); + m_maincpu->set_addrmap(6, &xavix_state::xavix_extbus_map); + m_maincpu->disable_cache(); + m_maincpu->set_vblank_int("screen", FUNC(xavix_state::interrupt)); + m_maincpu->set_vector_callback(FUNC(xavix_state::get_vectors)); - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", xavix_state, scanline_cb, "screen", 0, 1) + TIMER(config, "scantimer").configure_scanline(FUNC(xavix_state::scanline_cb), "screen", 0, 1); ADDRESS_MAP_BANK(config, "lowbus").set_map(&xavix_state::xavix_lowbus_map).set_options(ENDIANNESS_LITTLE, 8, 24, 0x8000); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) - MCFG_SCREEN_UPDATE_DRIVER(xavix_state, screen_update) - MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_PALETTE("palette") + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); + m_screen->set_screen_update(FUNC(xavix_state::screen_update)); + m_screen->set_size(32*8, 32*8); + m_screen->set_visarea(0*8, 32*8-1, 2*8, 30*8-1); + m_screen->set_palette(m_palette); //MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE) - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_xavix) + GFXDECODE(config, m_gfxdecode, m_palette, gfx_xavix); - MCFG_PALETTE_ADD_INIT_BLACK("palette", 256) + PALETTE(config, m_palette, 256).set_init("palette", FUNC(palette_device::palette_init_all_black)); /* sound hardware */ @@ -835,83 +835,81 @@ MACHINE_CONFIG_START(xavix_state::xavix) //m_sound->add_route(ALL_OUTPUTS, "mono", 1.0); m_sound->add_route(0, "lspeaker", 1.0); m_sound->add_route(1, "rspeaker", 1.0); +} -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(xavix_i2c_state::xavix_i2c_24lc04) +void xavix_i2c_state::xavix_i2c_24lc04(machine_config &config) +{ xavix(config); // according to http://ww1.microchip.com/downloads/en/devicedoc/21708k.pdf 'the master transmits up to 16 data bytes' however this breaks the Nostalgia games // of note Galplus Phalanx on Namco Nostalgia 2, which will hang between stages unable to properly access the device, but with no page support it doesn't hang and scores save I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x200); // 24LC04 on Nostalgia games, 24C04 on others -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(xavix_i2c_state::xavix_i2c_24c08) +void xavix_i2c_state::xavix_i2c_24c08(machine_config &config) +{ xavix(config); I2CMEM(config, "i2cmem", 0)/*.set_page_size(16)*/.set_data_size(0x400); // 24C08 (Excite Fishing DX) -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(xavix_state::xavixp) +void xavix_state::xavixp(machine_config &config) +{ xavix(config); + m_screen->set_refresh_hz(50); +} - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_REFRESH_RATE(50) -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(xavix_state::xavix2000) +void xavix_state::xavix2000(machine_config &config) +{ xavix(config); - MCFG_DEVICE_REMOVE("maincpu") + XAVIX2000(config.replace(), m_maincpu, MAIN_CLOCK); + m_maincpu->set_addrmap(AS_PROGRAM, &xavix_state::xavix_map); + m_maincpu->set_addrmap(5, &xavix_state::superxavix_lowbus_map); + m_maincpu->set_addrmap(6, &xavix_state::xavix_extbus_map); + m_maincpu->disable_cache(); + m_maincpu->set_vblank_int("screen", FUNC(xavix_state::interrupt)); + m_maincpu->set_vector_callback(FUNC(xavix_state::get_vectors)); - MCFG_DEVICE_ADD("maincpu",XAVIX2000,MAIN_CLOCK) - MCFG_DEVICE_PROGRAM_MAP(xavix_map) - MCFG_DEVICE_ADDRESS_MAP(5, superxavix_lowbus_map) - MCFG_DEVICE_ADDRESS_MAP(6, xavix_extbus_map) - MCFG_M6502_DISABLE_CACHE() - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", xavix_state, interrupt) - MCFG_XAVIX_VECTOR_CALLBACK(xavix_state, get_vectors) - - MCFG_DEVICE_REMOVE("palette") - MCFG_PALETTE_ADD_INIT_BLACK("palette", 512) - -MACHINE_CONFIG_END + m_palette->set_entries(512); +} -MACHINE_CONFIG_START(xavix_i2c_state::xavix2000_i2c_24c04) +void xavix_i2c_state::xavix2000_i2c_24c04(machine_config &config) +{ xavix2000(config); I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x200); // 24C04 -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(xavix_i2c_state::xavix2000_i2c_24c02) +void xavix_i2c_state::xavix2000_i2c_24c02(machine_config &config) +{ xavix2000(config); I2CMEM(config, "i2cmem", 0).set_page_size(16).set_data_size(0x100); // 24C02 -MACHINE_CONFIG_END - +} -MACHINE_CONFIG_START(xavix_mtrk_state::xavix_mtrk) +void xavix_mtrk_state::xavix_mtrk(machine_config &config) +{ xavix(config); XAVIX_MTRK_WHEEL(config, m_wheel, 0); m_wheel->event_out_cb().set(FUNC(xavix_state::ioevent_trg08)); +} -MACHINE_CONFIG_END - -MACHINE_CONFIG_START(xavix_mtrk_state::xavix_mtrkp) +void xavix_mtrk_state::xavix_mtrkp(machine_config &config) +{ xavix_mtrk(config); - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_REFRESH_RATE(50) -MACHINE_CONFIG_END + m_screen->set_refresh_hz(50); +} -MACHINE_CONFIG_START(xavix_madfb_state::xavix_madfb) +void xavix_madfb_state::xavix_madfb(machine_config &config) +{ xavix(config); XAVIX_MADFB_BALL(config, m_ball, 0); m_ball->event_out_cb().set(FUNC(xavix_state::ioevent_trg01)); - -MACHINE_CONFIG_END +} DEVICE_IMAGE_LOAD_MEMBER( xavix_ekara_state, ekara_cart ) { @@ -926,18 +924,17 @@ DEVICE_IMAGE_LOAD_MEMBER( xavix_ekara_state, ekara_cart ) return image_init_result::PASS; } -MACHINE_CONFIG_START(xavix_ekara_state::xavix_ekara) +void xavix_ekara_state::xavix_ekara(machine_config &config) +{ xavix(config); - MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "ekara_cart") - MCFG_GENERIC_EXTENSIONS("bin") - MCFG_GENERIC_WIDTH(GENERIC_ROM8_WIDTH) - MCFG_GENERIC_LOAD(xavix_ekara_state, ekara_cart) + generic_cartslot_device &cartslot(GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "ekara_cart", "bin")); + m_cart->set_width(GENERIC_ROM8_WIDTH); + cartslot.set_device_load(device_image_load_delegate(&xavix_ekara_state::device_image_load_ekara_cart, this)); /* software lists */ - MCFG_SOFTWARE_LIST_ADD("cart_list","ekara") - -MACHINE_CONFIG_END + SOFTWARE_LIST(config, "cart_list").set_original("ekara"); +} void xavix_state::init_xavix() { diff --git a/src/mame/includes/a2600.h b/src/mame/includes/a2600.h index b3fc8edce24..3aa017a3c92 100644 --- a/src/mame/includes/a2600.h +++ b/src/mame/includes/a2600.h @@ -73,14 +73,13 @@ protected: #else required_device m_riot; #endif + required_device m_joy1; + required_device m_joy2; + required_device m_screen; private: uint16_t m_current_screen_height; - required_device m_joy1; - required_device m_joy2; - - required_device m_screen; required_ioport m_swb; }; diff --git a/src/mame/includes/xavix.h b/src/mame/includes/xavix.h index 81ffb085de7..2d8a20b796b 100644 --- a/src/mame/includes/xavix.h +++ b/src/mame/includes/xavix.h @@ -69,8 +69,8 @@ public: m_in0(*this, "IN0"), m_in1(*this, "IN1"), m_maincpu(*this, "maincpu"), - m_sprite_xhigh_ignore_hack(true), m_screen(*this, "screen"), + m_sprite_xhigh_ignore_hack(true), m_mainram(*this, "mainram"), m_fragment_sprite(*this, "fragment_sprite"), m_rom_dma_src(*this,"rom_dma_src"), @@ -114,6 +114,7 @@ protected: required_ioport m_in0; required_ioport m_in1; required_device m_maincpu; + required_device m_screen; private: @@ -406,8 +407,6 @@ private: DECLARE_READ8_MEMBER(mult_param_r); DECLARE_WRITE8_MEMBER(mult_param_w); - required_device m_screen; - void update_irqs(); uint8_t m_irqsource; diff --git a/src/mame/machine/namco68.cpp b/src/mame/machine/namco68.cpp index 9cb340c18a1..170e7af9dee 100644 --- a/src/mame/machine/namco68.cpp +++ b/src/mame/machine/namco68.cpp @@ -96,13 +96,22 @@ void namcoc68_device::c68_default_am(address_map &map) void namcoc68_device::device_add_mconfig(machine_config &config) { - m3745x_device* device = &M37450(config, m_mcu, DERIVED_CLOCK(1, 1)); // ugly, needs modernizing - MCFG_M3745X_ADC14_CALLBACKS(READ8(*this, namcoc68_device, mcuan0_r), READ8(*this, namcoc68_device, mcuan1_r), READ8(*this, namcoc68_device, mcuan2_r), READ8(*this, namcoc68_device, mcuan3_r)) - MCFG_M3745X_ADC58_CALLBACKS(READ8(*this, namcoc68_device, mcuan4_r), READ8(*this, namcoc68_device, mcuan5_r), READ8(*this, namcoc68_device, mcuan6_r), READ8(*this, namcoc68_device, mcuan7_r)) - MCFG_M3745X_PORT3_CALLBACKS(READ8(*this, namcoc68_device, mcuc_r), WRITE8(*this, namcoc68_device, c68_p3_w)) // coins/test/service - MCFG_M3745X_PORT5_CALLBACKS(READ8(*this, namcoc68_device, c68_p5_r), NOOP) // muxed player 1/2 - MCFG_M3745X_PORT6_CALLBACKS(READ8(*this, namcoc68_device, unk_r), NOOP) // unused in sgunner2 - MCFG_DEVICE_PROGRAM_MAP(c68_default_am) + M37450(config, m_mcu, DERIVED_CLOCK(1, 1)); + m_mcu->read_ad<0>().set(FUNC(namcoc68_device::mcuan0_r)); + m_mcu->read_ad<1>().set(FUNC(namcoc68_device::mcuan1_r)); + m_mcu->read_ad<2>().set(FUNC(namcoc68_device::mcuan2_r)); + m_mcu->read_ad<3>().set(FUNC(namcoc68_device::mcuan3_r)); + m_mcu->read_ad<4>().set(FUNC(namcoc68_device::mcuan4_r)); + m_mcu->read_ad<5>().set(FUNC(namcoc68_device::mcuan5_r)); + m_mcu->read_ad<6>().set(FUNC(namcoc68_device::mcuan6_r)); + m_mcu->read_ad<7>().set(FUNC(namcoc68_device::mcuan7_r)); + m_mcu->read_p<3>().set(FUNC(namcoc68_device::mcuc_r)); // coins/test/service + m_mcu->write_p<3>().set(FUNC(namcoc68_device::c68_p3_w)); + m_mcu->read_p<5>().set(FUNC(namcoc68_device::c68_p5_r)); // muxed player 1/2 + m_mcu->write_p<5>().set_nop(); + m_mcu->read_p<6>().set(FUNC(namcoc68_device::unk_r)); // unused in sgunner2 + m_mcu->write_p<6>().set_nop(); + m_mcu->set_addrmap(AS_PROGRAM, &namcoc68_device::c68_default_am); } void namcoc68_device::device_resolve_objects() -- cgit v1.2.3