summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-08-07 18:20:15 +0200
committer mooglyguy <therealmogminer@gmail.com>2018-08-07 18:20:47 +0200
commitc8342d71185707847804b266e73679cdb6508daf (patch)
treef66777cd182d86c765ce45345f758e8f443255f5
parentbaa87eda6c7903a3c17053b394a532d652c6c1a7 (diff)
-cop400, nvram, tlc34076, watchdog: Modern configuration accessors, nw
- i8279, 2608intf, es5503, tms34061, z80scc: devcb3 accessors, nw - cops, enmirage, gameplan, goupil, gts3, gts3a, itech32, itech8, jr100, jvh, lisa, lwriter: Machine config modernization, nw
-rw-r--r--src/devices/cpu/cop400/cop400.h7
-rw-r--r--src/devices/machine/i8279.h7
-rw-r--r--src/devices/machine/nvram.h8
-rw-r--r--src/devices/machine/watchdog.h7
-rw-r--r--src/devices/machine/z80scc.h15
-rw-r--r--src/devices/sound/2608intf.h1
-rw-r--r--src/devices/sound/es5503.h2
-rw-r--r--src/devices/video/tlc34076.h6
-rw-r--r--src/devices/video/tms34061.h1
-rw-r--r--src/mame/drivers/cops.cpp85
-rw-r--r--src/mame/drivers/enmirage.cpp50
-rw-r--r--src/mame/drivers/gameplan.cpp82
-rw-r--r--src/mame/drivers/goupil.cpp357
-rw-r--r--src/mame/drivers/gts3.cpp47
-rw-r--r--src/mame/drivers/gts3a.cpp81
-rw-r--r--src/mame/drivers/itech32.cpp395
-rw-r--r--src/mame/drivers/itech8.cpp403
-rw-r--r--src/mame/drivers/jr100.cpp71
-rw-r--r--src/mame/drivers/jvh.cpp38
-rw-r--r--src/mame/drivers/lisa.cpp120
-rw-r--r--src/mame/drivers/lwriter.cpp61
-rw-r--r--src/mame/drivers/pet.cpp10
-rw-r--r--src/mame/includes/itech32.h127
-rw-r--r--src/mame/includes/itech8.h52
-rw-r--r--src/mame/includes/lisa.h3
-rw-r--r--src/mame/video/gameplan.cpp29
-rw-r--r--src/mame/video/itech32.cpp169
-rw-r--r--src/mame/video/itech8.cpp55
28 files changed, 1163 insertions, 1126 deletions
diff --git a/src/devices/cpu/cop400/cop400.h b/src/devices/cpu/cop400/cop400.h
index 5dbff8a9281..3fa806d2b06 100644
--- a/src/devices/cpu/cop400/cop400.h
+++ b/src/devices/cpu/cop400/cop400.h
@@ -135,6 +135,13 @@ public:
template<class Object> devcb_base &set_write_sk_callback(Object &&cb) { return m_write_sk.set_callback(std::forward<Object>(cb)); }
template<class Object> devcb_base &set_read_cko_callback(Object &&cb) { return m_read_cko.set_callback(std::forward<Object>(cb)); }
+ void set_config(cop400_cki_bond cki, cop400_cko_bond cko, bool has_microbus)
+ {
+ set_cki(cki);
+ set_cko(cko);
+ set_microbus(has_microbus);
+ }
+
void set_cki(cop400_cki_bond cki) { m_cki = cki; }
void set_cko(cop400_cko_bond cko) { m_cko = cko; }
void set_microbus(bool has_microbus) { m_has_microbus = has_microbus; }
diff --git a/src/devices/machine/i8279.h b/src/devices/machine/i8279.h
index 80c492b2b6e..fd78d23ed62 100644
--- a/src/devices/machine/i8279.h
+++ b/src/devices/machine/i8279.h
@@ -82,6 +82,13 @@ public:
template <class Object> devcb_base &set_in_rl_callback(Object &&cb) { return m_in_rl_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_in_shift_callback(Object &&cb) { return m_in_shift_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_in_ctrl_callback(Object &&cb) { return m_in_ctrl_cb.set_callback(std::forward<Object>(cb)); }
+ auto out_irq_callback() { return m_out_irq_cb.bind(); }
+ auto out_sl_callback() { return m_out_sl_cb.bind(); }
+ auto out_disp_callback() { return m_out_disp_cb.bind(); }
+ auto out_bd_callback() { return m_out_bd_cb.bind(); }
+ auto in_rl_callback() { return m_in_rl_cb.bind(); }
+ auto in_shift_callback() { return m_in_shift_cb.bind(); }
+ auto in_ctrl_callback() { return m_in_ctrl_cb.bind(); }
// read & write handlers
DECLARE_READ8_MEMBER(read);
diff --git a/src/devices/machine/nvram.h b/src/devices/machine/nvram.h
index 8a1e031844d..dd5a89660ba 100644
--- a/src/devices/machine/nvram.h
+++ b/src/devices/machine/nvram.h
@@ -83,6 +83,14 @@ public:
m_default_value = DEFAULT_CUSTOM;
m_custom_handler = std::forward<Object>(cb);
}
+ template <class FunctionClass> void set_custom_handler(const char *devname, void (FunctionClass::*callback)(nvram_device &, void *, size_t), const char *name)
+ {
+ set_custom_handler(init_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
+ }
+ template <class FunctionClass> void set_custom_handler(void (FunctionClass::*callback)(nvram_device &, void *, size_t), const char *name)
+ {
+ set_custom_handler(init_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ }
// controls
void set_base(void *base, size_t length) { m_base = base; m_length = length; }
diff --git a/src/devices/machine/watchdog.h b/src/devices/machine/watchdog.h
index cb01199e417..d7cb3d25db7 100644
--- a/src/devices/machine/watchdog.h
+++ b/src/devices/machine/watchdog.h
@@ -31,12 +31,7 @@ class watchdog_timer_device : public device_t
{
public:
// construction/destruction
- watchdog_timer_device(const machine_config &mconfig, const char *tag, device_t *owner)
- : watchdog_timer_device(mconfig, tag, owner, (uint32_t)0)
- {
- }
-
- watchdog_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ watchdog_timer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
// inline configuration helpers
void set_vblank_count(const char *screen_tag, int32_t count) { m_screen_tag = screen_tag; m_vblank_count = count; }
diff --git a/src/devices/machine/z80scc.h b/src/devices/machine/z80scc.h
index 4927fccab3b..b2a79d3b9a1 100644
--- a/src/devices/machine/z80scc.h
+++ b/src/devices/machine/z80scc.h
@@ -387,6 +387,21 @@ public:
template <unsigned N, class Object> devcb_base &set_out_rxdrq_callback(Object &&cb) { return m_out_rxdrq_cb[N].set_callback(std::forward<Object>(cb)); }
template <unsigned N, class Object> devcb_base &set_out_txdrq_callback(Object &&cb) { return m_out_txdrq_cb[N].set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_out_int_callback(Object &&cb) { return m_out_int_cb.set_callback(std::forward<Object>(cb)); }
+
+ auto out_txda_callback() { return m_out_txd_cb[0].bind(); }
+ auto out_dtra_callback() { return m_out_dtr_cb[0].bind(); }
+ auto out_rtsa_callback() { return m_out_rts_cb[0].bind(); }
+ auto out_wreqa_callback() { return m_out_wreq_cb[0].bind(); }
+ auto out_synca_callback() { return m_out_sync_cb[0].bind(); }
+ auto out_rxdrqa_callback() { return m_out_rxdrq_cb[0].bind(); }
+ auto out_txdrqa_callback() { return m_out_txdrq_cb[0].bind(); }
+ auto out_txdb_callback() { return m_out_txd_cb[1].bind(); }
+ auto out_dtrb_callback() { return m_out_dtr_cb[1].bind(); }
+ auto out_rtsb_callback() { return m_out_rts_cb[1].bind(); }
+ auto out_wreqb_callback() { return m_out_wreq_cb[1].bind(); }
+ auto out_syncb_callback() { return m_out_sync_cb[1].bind(); }
+ auto out_rxdrqb_callback() { return m_out_rxdrq_cb[1].bind(); }
+ auto out_txdrqb_callback() { return m_out_txdrq_cb[1].bind(); }
auto out_int_callback() { return m_out_int_cb.bind(); }
void set_cputag(const char *tag) { m_cputag = tag; }
diff --git a/src/devices/sound/2608intf.h b/src/devices/sound/2608intf.h
index cf96aa35be9..d3ba76506ee 100644
--- a/src/devices/sound/2608intf.h
+++ b/src/devices/sound/2608intf.h
@@ -21,6 +21,7 @@ public:
// configuration helpers
template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
+ auto irq_handler() { return m_irq_handler.bind(); }
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
diff --git a/src/devices/sound/es5503.h b/src/devices/sound/es5503.h
index 640ecc400cf..1625f864851 100644
--- a/src/devices/sound/es5503.h
+++ b/src/devices/sound/es5503.h
@@ -33,6 +33,8 @@ public:
template <class Object> devcb_base &set_irqf(Object &&cb) { return m_irq_func.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_adcf(Object &&cb) { return m_adc_func.set_callback(std::forward<Object>(cb)); }
+ auto irq_func() { return m_irq_func.bind(); }
+ auto adc_func() { return m_adc_func.bind(); }
DECLARE_READ8_MEMBER(read);
DECLARE_WRITE8_MEMBER(write);
diff --git a/src/devices/video/tlc34076.h b/src/devices/video/tlc34076.h
index c9e678cde12..fb816dd1181 100644
--- a/src/devices/video/tlc34076.h
+++ b/src/devices/video/tlc34076.h
@@ -29,6 +29,12 @@ public:
};
// construction/destruction
+ tlc34076_device(const machine_config &mconfig, const char *tag, device_t *owner, tlc34076_bits bits)
+ : tlc34076_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ set_bits(bits);
+ }
+
tlc34076_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// configuration helpers
diff --git a/src/devices/video/tms34061.h b/src/devices/video/tms34061.h
index f4f674b1083..e4f92e75ac2 100644
--- a/src/devices/video/tms34061.h
+++ b/src/devices/video/tms34061.h
@@ -47,6 +47,7 @@ public:
void set_rowshift(uint8_t rowshift) { m_rowshift = rowshift; }
void set_vram_size(uint32_t vramsize) { m_vramsize = vramsize; }
template <class Object> devcb_base &set_interrupt_callback(Object &&cb) { return m_interrupt_cb.set_callback(std::forward<Object>(cb)); }
+ auto int_callback() { return m_interrupt_cb.bind(); }
/* reads/writes to the 34061 */
uint8_t read(address_space &space, int col, int row, int func);
diff --git a/src/mame/drivers/cops.cpp b/src/mame/drivers/cops.cpp
index ad3a6439eb1..7dcb02ab709 100644
--- a/src/mame/drivers/cops.cpp
+++ b/src/mame/drivers/cops.cpp
@@ -69,6 +69,7 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void revlatns(machine_config &config);
+ void base(machine_config &config);
void cops(machine_config &config);
void cops_map(address_map &map);
void revlatns_map(address_map &map);
@@ -918,70 +919,54 @@ void cops_state::init_cops()
membank("sysbank1")->set_entry(2);
}
-MACHINE_CONFIG_START(cops_state::cops)
+void cops_state::base(machine_config &config)
+{
+ M6502(config, m_maincpu, MAIN_CLOCK/2);
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, MAIN_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(cops_map)
+ SONY_LDP1450(config, m_ld, 9600);
+ m_ld->set_screen("screen");
- /* video hardware */
- MCFG_LASERDISC_LDP1450_ADD("laserdisc",9600)
- MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc")
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_video_attributes(VIDEO_SELF_RENDER);
+ screen.set_raw(XTAL(14'318'181)*2, 910, 0, 704, 525, 44, 524);
+ screen.set_screen_update("laserdisc", FUNC(laserdisc_device::screen_update));
/* via */
- MCFG_DEVICE_ADD("via6522_1", VIA6522, MAIN_CLOCK/2)
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, cops_state, via1_irq))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, cops_state, via1_b_w))
- MCFG_VIA6522_CB1_HANDLER(WRITE8(*this, cops_state, via1_cb1_w))
-
- MCFG_DEVICE_ADD("via6522_2", VIA6522, MAIN_CLOCK/2)
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, cops_state, via2_irq))
+ via6522_device &via1(VIA6522(config, "via6522_1", MAIN_CLOCK/2));
+ via1.irq_handler().set(FUNC(cops_state::via1_irq));
+ via1.writepb_handler().set(FUNC(cops_state::via1_b_w));
+ via1.cb1_handler().set(FUNC(cops_state::via1_cb1_w));
- MCFG_DEVICE_ADD("via6522_3", VIA6522, MAIN_CLOCK/2)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, cops_state, cdrom_data_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, cops_state, cdrom_data_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, cops_state, cdrom_ctrl_w))
+ SPEAKER(config, "mono").front_center();
/* acia (really a 65C52)*/
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
/* TODO: Verify clock */
- MCFG_DEVICE_ADD("snsnd", SN76489, MAIN_CLOCK/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(cops_state::revlatns)
-
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, MAIN_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(revlatns_map)
-
- /* video hardware */
- MCFG_LASERDISC_LDP1450_ADD("laserdisc",9600)
- MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", "laserdisc")
-
- /* via */
- MCFG_DEVICE_ADD("via6522_1", VIA6522, MAIN_CLOCK/2)
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, cops_state, via1_irq))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, cops_state, via1_b_w))
- MCFG_VIA6522_CB1_HANDLER(WRITE8(*this, cops_state, via1_cb1_w))
+ SN76489(config, m_sn, MAIN_CLOCK/2);
+ m_sn->add_route(ALL_OUTPUTS, "mono", 0.50);
+}
- MCFG_DEVICE_ADD("rtc", MSM6242, XTAL(32'768))
+void cops_state::cops(machine_config &config)
+{
+ base(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cops_state::cops_map);
- /* acia (really a 65C52)*/
+ via6522_device &via2(VIA6522(config, "via6522_2", MAIN_CLOCK/2));
+ via2.irq_handler().set(FUNC(cops_state::via2_irq));
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
+ via6522_device &via3(VIA6522(config, "via6522_3", MAIN_CLOCK/2));
+ via3.readpa_handler().set(FUNC(cops_state::cdrom_data_r));
+ via3.writepa_handler().set(FUNC(cops_state::cdrom_data_w));
+ via3.writepb_handler().set(FUNC(cops_state::cdrom_ctrl_w));
+}
- /* TODO: Verify clock */
- MCFG_DEVICE_ADD("snsnd", SN76489, MAIN_CLOCK/2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+void cops_state::revlatns(machine_config &config)
+{
+ base(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &cops_state::revlatns_map);
-MACHINE_CONFIG_END
+ MSM6242(config, "rtc", XTAL(32'768));
+}
/***************************************************************************
diff --git a/src/mame/drivers/enmirage.cpp b/src/mame/drivers/enmirage.cpp
index d299c13dc17..a41abd4f9e1 100644
--- a/src/mame/drivers/enmirage.cpp
+++ b/src/mame/drivers/enmirage.cpp
@@ -220,36 +220,36 @@ WRITE8_MEMBER(enmirage_state::mirage_via_write_portb)
}
}
-MACHINE_CONFIG_START(enmirage_state::mirage)
- MCFG_DEVICE_ADD("maincpu", MC6809E, 2000000)
- MCFG_DEVICE_PROGRAM_MAP(mirage_map)
+void enmirage_state::mirage(machine_config &config)
+{
+ MC6809E(config, m_maincpu, 2000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &enmirage_state::mirage_map);
config.set_default_layout(layout_mirage);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_ES5503_ADD("es5503", 7000000)
- MCFG_ES5503_OUTPUT_CHANNELS(2)
- MCFG_ES5503_IRQ_FUNC(WRITELINE(*this, enmirage_state, mirage_doc_irq))
- MCFG_ES5503_ADC_FUNC(READ8(*this, enmirage_state, mirage_adc_read))
-
- MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
- MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
-
- MCFG_DEVICE_ADD("via6522", VIA6522, 1000000)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, enmirage_state, mirage_via_write_porta))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, enmirage_state, mirage_via_write_portb))
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
-
- MCFG_DEVICE_ADD("acia6850", ACIA6850, 0)
- MCFG_ACIA6850_IRQ_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE))
-
- MCFG_DEVICE_ADD("wd1772", WD1772, 8000000)
- MCFG_WD_FDC_INTRQ_CALLBACK(INPUTLINE("maincpu", INPUT_LINE_NMI))
- MCFG_WD_FDC_DRQ_CALLBACK(INPUTLINE("maincpu", M6809_IRQ_LINE))
-
- MCFG_FLOPPY_DRIVE_ADD("wd1772:0", ensoniq_floppies, "35dd", enmirage_state::floppy_formats)
-MACHINE_CONFIG_END
+ es5503_device &es5503(ES5503(config, "es5503", 7000000));
+ es5503.set_channels(2);
+ es5503.irq_func().set(FUNC(enmirage_state::mirage_doc_irq));
+ es5503.adc_func().set(FUNC(enmirage_state::mirage_adc_read));
+ es5503.add_route(0, "lspeaker", 1.0);
+ es5503.add_route(1, "rspeaker", 1.0);
+
+ VIA6522(config, m_via, 1000000);
+ m_via->writepa_handler().set(FUNC(enmirage_state::mirage_via_write_porta));
+ m_via->writepb_handler().set(FUNC(enmirage_state::mirage_via_write_portb));
+ m_via->irq_handler().set_inputline(m_maincpu, M6809_IRQ_LINE);
+
+ acia6850_device &acia6850(ACIA6850(config, "acia6850", 0));
+ acia6850.irq_handler().set_inputline(m_maincpu, M6809_FIRQ_LINE);
+
+ WD1772(config, m_fdc, 8000000);
+ m_fdc->intrq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
+ m_fdc->drq_wr_callback().set_inputline(m_maincpu, M6809_IRQ_LINE);
+
+ FLOPPY_CONNECTOR(config, "wd1772:0", ensoniq_floppies, "35dd", enmirage_state::floppy_formats);
+}
static INPUT_PORTS_START( mirage )
INPUT_PORTS_END
diff --git a/src/mame/drivers/gameplan.cpp b/src/mame/drivers/gameplan.cpp
index 49a96999e17..57fdb0a0629 100644
--- a/src/mame/drivers/gameplan.cpp
+++ b/src/mame/drivers/gameplan.cpp
@@ -959,18 +959,17 @@ MACHINE_RESET_MEMBER(gameplan_state,gameplan)
m_video_data = 0;
}
-MACHINE_CONFIG_START(gameplan_state::gameplan)
-
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M6502, GAMEPLAN_MAIN_CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(gameplan_main_map)
+void gameplan_state::gameplan(machine_config &config)
+{
+ M6502(config, m_maincpu, GAMEPLAN_MAIN_CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &gameplan_state::gameplan_main_map);
- MCFG_DEVICE_ADD("audiocpu", M6502, GAMEPLAN_AUDIO_CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(gameplan_audio_map)
+ M6502(config, m_audiocpu, GAMEPLAN_AUDIO_CPU_CLOCK);
+ m_audiocpu->set_addrmap(AS_PROGRAM, &gameplan_state::gameplan_audio_map);
- MCFG_DEVICE_ADD("riot", RIOT6532, GAMEPLAN_AUDIO_CPU_CLOCK)
- MCFG_RIOT6532_OUT_PB_CB(WRITE8(*this, gameplan_state, r6532_soundlatch_w))
- MCFG_RIOT6532_IRQ_CB(WRITELINE(*this, gameplan_state, r6532_irq))
+ RIOT6532(config, m_riot, GAMEPLAN_AUDIO_CPU_CLOCK);
+ m_riot->out_pb_callback().set(FUNC(gameplan_state::r6532_soundlatch_w));
+ m_riot->irq_callback().set(FUNC(gameplan_state::r6532_irq));
MCFG_MACHINE_START_OVERRIDE(gameplan_state,gameplan)
MCFG_MACHINE_RESET_OVERRIDE(gameplan_state,gameplan)
@@ -981,50 +980,47 @@ MACHINE_CONFIG_START(gameplan_state::gameplan)
/* audio hardware */
SPEAKER(config, "mono").front_center();
- MCFG_GENERIC_LATCH_8_ADD("soundlatch")
+ GENERIC_LATCH_8(config, m_soundlatch, 0);
- MCFG_DEVICE_ADD("aysnd", AY8910, GAMEPLAN_AY8910_CLOCK)
- MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW2"))
- MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW3"))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
+ ay8910_device &aysnd(AY8910(config, "aysnd", GAMEPLAN_AY8910_CLOCK));
+ aysnd.port_a_read_callback().set_ioport("DSW2");
+ aysnd.port_b_read_callback().set_ioport("DSW3");
+ aysnd.add_route(ALL_OUTPUTS, "mono", 0.33);
/* via */
- MCFG_DEVICE_ADD("via6522_0", VIA6522, GAMEPLAN_MAIN_CPU_CLOCK)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, gameplan_state, video_data_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gameplan_state, gameplan_video_command_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, gameplan_state, video_command_trigger_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, gameplan_state, via_irq))
-
- MCFG_DEVICE_ADD("via6522_1", VIA6522, GAMEPLAN_MAIN_CPU_CLOCK)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, gameplan_state, io_port_r))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gameplan_state, io_select_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, gameplan_state, coin_w))
-
- MCFG_DEVICE_ADD("via6522_2", VIA6522, GAMEPLAN_MAIN_CPU_CLOCK)
- MCFG_VIA6522_READPB_HANDLER(READ8("soundlatch", generic_latch_8_device, read))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, gameplan_state, audio_cmd_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, gameplan_state, audio_trigger_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, gameplan_state, audio_reset_w))
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(gameplan_state::leprechn)
+ VIA6522(config, m_via_0, GAMEPLAN_MAIN_CPU_CLOCK);
+ m_via_0->writepa_handler().set(FUNC(gameplan_state::video_data_w));
+ m_via_0->writepb_handler().set(FUNC(gameplan_state::gameplan_video_command_w));
+ m_via_0->ca2_handler().set(FUNC(gameplan_state::video_command_trigger_w));
+ m_via_0->irq_handler().set(FUNC(gameplan_state::via_irq));
+
+ VIA6522(config, m_via_1, GAMEPLAN_MAIN_CPU_CLOCK);
+ m_via_1->readpa_handler().set(FUNC(gameplan_state::io_port_r));
+ m_via_1->writepb_handler().set(FUNC(gameplan_state::io_select_w));
+ m_via_1->cb2_handler().set(FUNC(gameplan_state::coin_w));
+
+ VIA6522(config, m_via_2, GAMEPLAN_MAIN_CPU_CLOCK);
+ m_via_2->readpb_handler().set(m_soundlatch, FUNC(generic_latch_8_device::read));
+ m_via_2->writepa_handler().set(FUNC(gameplan_state::audio_cmd_w));
+ m_via_2->ca2_handler().set(FUNC(gameplan_state::audio_trigger_w));
+ m_via_2->cb2_handler().set(FUNC(gameplan_state::audio_reset_w));
+}
+
+void gameplan_state::leprechn(machine_config &config)
+{
gameplan(config);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_CLOCK(LEPRECHAUN_MAIN_CPU_CLOCK)
+ m_maincpu->set_clock(LEPRECHAUN_MAIN_CPU_CLOCK);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("audiocpu")
- MCFG_DEVICE_PROGRAM_MAP(leprechn_audio_map)
+ m_audiocpu->set_addrmap(AS_PROGRAM, &gameplan_state::leprechn_audio_map);
/* video hardware */
leprechn_video(config);
/* via */
- MCFG_DEVICE_MODIFY("via6522_0")
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, gameplan_state, leprechn_videoram_r))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gameplan_state, leprechn_video_command_w))
-MACHINE_CONFIG_END
+ m_via_0->readpb_handler().set(FUNC(gameplan_state::leprechn_videoram_r));
+ m_via_0->writepb_handler().set(FUNC(gameplan_state::leprechn_video_command_w));
+}
diff --git a/src/mame/drivers/goupil.cpp b/src/mame/drivers/goupil.cpp
index 58f1fcf2f50..2edb7938366 100644
--- a/src/mame/drivers/goupil.cpp
+++ b/src/mame/drivers/goupil.cpp
@@ -43,74 +43,101 @@
#define VIDEO_CLOCK MAIN_CLOCK / 8 /* 1.75 Mhz */
#define CPU_CLOCK MAIN_CLOCK / 4 /* 1 Mhz */
-class goupil_g1_state : public driver_device
+class goupil_base_state : public driver_device
{
public:
- goupil_g1_state(const machine_config &mconfig, device_type type, const char *tag)
+ goupil_base_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_acia(*this, "ef6850")
- , m_ef9364(*this, "ef9364")
, m_maincpu(*this, "maincpu")
+ , m_acia(*this, "ef6850")
, m_via_video(*this, "m_via_video")
, m_via_keyb(*this, "m_via_keyb")
, m_via_modem(*this, "m_via_modem")
+ , m_palette(*this, "palette")
+ , m_screen(*this, "screen")
, m_fdc(*this, "fd1791")
, m_floppy0(*this, "fd1791:0")
, m_floppy1(*this, "fd1791:1")
+ , m_ctrl(*this, "CTR0")
, m_floppy(nullptr)
{ }
- DECLARE_WRITE8_MEMBER(via_video_pba_w);
- DECLARE_WRITE8_MEMBER(via_video_pbb_w);
- DECLARE_WRITE_LINE_MEMBER(via_video_ca2_w);
-
DECLARE_READ8_MEMBER(kbd1_r);
DECLARE_READ8_MEMBER(kbd2_r);
DECLARE_READ8_MEMBER(shift_kb1_r);
- DECLARE_READ8_MEMBER(shift_kb2_r);
DECLARE_READ8_MEMBER(ctrl_kb1_r);
- DECLARE_READ8_MEMBER(ctrl_kb2_r);
DECLARE_WRITE8_MEMBER(scanlines_kbd1_w);
DECLARE_WRITE8_MEMBER(scanlines_kbd2_w);
- DECLARE_READ_LINE_MEMBER(via_keyb_ca2_r);
-
- virtual void machine_start() override;
+ void base(machine_config &config);
+protected:
virtual void machine_reset() override;
- uint8_t m_row_kbd1;
- uint8_t m_row_kbd2;
- int old_state_ca2;
- uint8_t via_video_pbb_data;
- uint8_t cnttim;
- uint8_t valkeyb;
- TIMER_DEVICE_CALLBACK_MEMBER(goupil_scanline);
-
- void goupil_g1(machine_config &config);
- void goupil_mem(address_map &map);
-protected:
+ required_device<m6808_cpu_device> m_maincpu;
required_device<acia6850_device> m_acia;
- optional_device<ef9364_device> m_ef9364;
- required_device<cpu_device> m_maincpu;
required_device<via6522_device> m_via_video;
required_device<via6522_device> m_via_keyb;
required_device<via6522_device> m_via_modem;
+ required_device<palette_device> m_palette;
+ required_device<screen_device> m_screen;
required_device<fd1791_device> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
+ required_ioport m_ctrl;
floppy_image_device *m_floppy;
+
+ uint8_t m_row_kbd1;
+ uint8_t m_row_kbd2;
+ uint8_t m_cnttim;
+ uint8_t m_valkeyb;
};
-class goupil_g2_state : public goupil_g1_state
+class goupil_g1_state : public goupil_base_state
+{
+public:
+ goupil_g1_state(const machine_config &mconfig, device_type type, const char *tag)
+ : goupil_base_state(mconfig, type, tag)
+ , m_ef9364(*this, "ef9364")
+ , m_scanline_timer(nullptr)
+ , m_old_state_ca2(0)
+ , m_via_video_pbb_data(0)
+ { }
+
+ DECLARE_WRITE8_MEMBER(via_video_pba_w);
+ DECLARE_WRITE8_MEMBER(via_video_pbb_w);
+ DECLARE_WRITE_LINE_MEMBER(via_video_ca2_w);
+
+ void goupil_g1(machine_config &config);
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ enum
+ {
+ TIMER_SCANLINE
+ };
+
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+private:
+ void mem(address_map &map);
+
+ required_device<ef9364_device> m_ef9364;
+
+ emu_timer *m_scanline_timer;
+ int m_old_state_ca2;
+ uint8_t m_via_video_pbb_data;
+};
+
+class goupil_g2_state : public goupil_base_state
{
public:
goupil_g2_state(const machine_config &mconfig, device_type type, const char *tag)
- : goupil_g1_state(mconfig, type, tag),
- m_palette(*this, "palette"),
- m_visu24x80_ram(*this, RAM_TAG),
- m_visu24x80_rom(*this, "visu_24x80")
+ : goupil_base_state(mconfig, type, tag)
+ , m_visu24x80_ram(*this, RAM_TAG)
+ , m_visu24x80_rom(*this, "visu_24x80")
{
}
@@ -121,10 +148,10 @@ public:
DECLARE_WRITE8_MEMBER(visu24x80_ram_w);
void goupil_g2(machine_config &config);
- void goupil_g2_mem(address_map &map);
-protected:
- required_device<palette_device> m_palette;
+private:
+ void mem(address_map &map);
+
required_device<ram_device> m_visu24x80_ram;
required_region_ptr<uint8_t> m_visu24x80_rom;
};
@@ -138,12 +165,20 @@ protected:
* Keyboard I/O Handlers *
***********************************/
-TIMER_DEVICE_CALLBACK_MEMBER( goupil_g1_state::goupil_scanline )
+void goupil_g1_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- m_ef9364->update_scanline((uint16_t)param);
+ switch (id)
+ {
+ case TIMER_SCANLINE:
+ m_ef9364->update_scanline((uint16_t)m_screen->vpos());
+ m_scanline_timer->adjust(m_screen->time_until_pos(m_screen->vpos() + 10));
+ break;
+ default:
+ assert_always(false, "Unknown id in goupil_g1_state::device_timer");
+ }
}
-void goupil_g1_state::goupil_mem(address_map &map)
+void goupil_g1_state::mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3FFF).ram();
@@ -171,7 +206,7 @@ void goupil_g1_state::goupil_mem(address_map &map)
map(0xF800, 0xFFFF).rom().region("maincpu", 0xF800); // Monitor (MON 1 + MON 2)
}
-void goupil_g2_state::goupil_g2_mem(address_map &map)
+void goupil_g2_state::mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3FFF).ram();
@@ -202,58 +237,22 @@ void goupil_g2_state::goupil_g2_mem(address_map &map)
map(0xF800, 0xFFFF).rom().region("maincpu", 0xF800); // Monitor (MON 2)
}
-WRITE8_MEMBER( goupil_g1_state::scanlines_kbd1_w )
+WRITE8_MEMBER( goupil_base_state::scanlines_kbd1_w )
{
m_row_kbd1 = data;
}
-READ8_MEMBER( goupil_g1_state::ctrl_kb1_r )
+READ8_MEMBER( goupil_base_state::ctrl_kb1_r )
{
- char kbdrow[6];
- unsigned char data;
-
- kbdrow[0] = 'C';
- kbdrow[1] = 'T';
- kbdrow[2] = 'R';
- kbdrow[3] = '0';
- kbdrow[4] = 0;
-
- data = ioport(kbdrow)->read();
- if( data & 0x02 )
- return 1;
- else
- return 0;
+ return BIT(m_ctrl->read(), 1);
}
-READ8_MEMBER( goupil_g1_state::ctrl_kb2_r )
+READ8_MEMBER( goupil_base_state::shift_kb1_r )
{
- return 1;
+ return BIT(m_ctrl->read(), 0);
}
-READ8_MEMBER( goupil_g1_state::shift_kb1_r )
-{
- char kbdrow[6];
- unsigned char data;
-
- kbdrow[0] = 'C';
- kbdrow[1] = 'T';
- kbdrow[2] = 'R';
- kbdrow[3] = '0';
- kbdrow[4] = 0;
-
- data = ioport(kbdrow)->read();
- if( data & 0x01 )
- return 1;
- else
- return 0;
-}
-
-READ8_MEMBER( goupil_g1_state::shift_kb2_r )
-{
- return 1;
-}
-
-READ8_MEMBER( goupil_g1_state::kbd1_r )
+READ8_MEMBER( goupil_base_state::kbd1_r )
{
char kbdrow[6];
uint8_t data = 0xff;
@@ -268,17 +267,12 @@ READ8_MEMBER( goupil_g1_state::kbd1_r )
return data;
}
-WRITE8_MEMBER( goupil_g1_state::scanlines_kbd2_w )
+WRITE8_MEMBER( goupil_base_state::scanlines_kbd2_w )
{
m_row_kbd2 = data & 7;
}
-READ_LINE_MEMBER( goupil_g1_state::via_keyb_ca2_r )
-{
- return 0;
-}
-
-READ8_MEMBER( goupil_g1_state::kbd2_r )
+READ8_MEMBER( goupil_base_state::kbd2_r )
{
char kbdrow[6];
uint8_t data = 0xff;
@@ -451,40 +445,44 @@ static void goupil_floppies(device_slot_interface &device)
device.option_add("525qd", FLOPPY_525_QD);
}
-void goupil_g1_state::machine_start()
+void goupil_base_state::machine_reset()
{
- std::string region_tag;
-
m_floppy = nullptr;
- valkeyb = 0xFF;
+ m_valkeyb = 0xFF;
+}
+
+void goupil_g1_state::machine_start()
+{
+ m_scanline_timer = timer_alloc(TIMER_SCANLINE);
}
void goupil_g1_state::machine_reset()
{
+ goupil_base_state::machine_reset();
+ m_scanline_timer->adjust(m_screen->time_until_pos(m_screen->vpos() + 10));
+ m_old_state_ca2 = 0;
+ m_via_video_pbb_data = 0;
}
WRITE8_MEMBER(goupil_g1_state::via_video_pba_w)
{
LOG("%s: write via_video_pba_w reg : 0x%X\n",machine().describe_context(),data);
-
- if(m_ef9364)
- m_ef9364->char_latch_w(data);
+ m_ef9364->char_latch_w(data);
}
WRITE8_MEMBER(goupil_g1_state::via_video_pbb_w)
{
LOG("%s: write via_video_pbb_w reg : 0x%X\n",machine().describe_context(),data);
-
- via_video_pbb_data = data;
+ m_via_video_pbb_data = data;
}
WRITE_LINE_MEMBER( goupil_g1_state::via_video_ca2_w )
{
- if(old_state_ca2==0 && state==1 && m_ef9364)
+ if (!m_old_state_ca2 && state)
{
- m_ef9364->command_w(via_video_pbb_data&0xF);
+ m_ef9364->command_w(m_via_video_pbb_data & 0xF);
}
- old_state_ca2 = state;
+ m_old_state_ca2 = state;
}
// Visu 24x80 video card update row.
@@ -527,122 +525,91 @@ READ8_MEMBER( goupil_g2_state::visu24x80_ram_r )
return data;
}
-MACHINE_CONFIG_START(goupil_g1_state::goupil_g1)
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M6808, CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(goupil_mem)
-
- /* sound hardware */
- // TODO !
-
- MCFG_DEVICE_ADD ("ef6850", ACIA6850, 0)
+void goupil_base_state::base(machine_config &config)
+{
+ M6808(config, m_maincpu, CPU_CLOCK);
- /* screen */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_UPDATE_DEVICE("ef9364", ef9364_device, screen_update)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(50);
- MCFG_SCREEN_SIZE((64*8), (16*(8+4)))
- MCFG_SCREEN_VISIBLE_AREA(0, (64*8)-1, 0, (16*(8+4))-1)
- MCFG_PALETTE_ADD("palette", 16)
+ // TODO: sound hardware
- MCFG_DEVICE_ADD("ef9364", EF9364, VIDEO_CLOCK)
- MCFG_EF9364_PALETTE("palette")
- MCFG_EF9364_PAGES_CNT(1);
- MCFG_TIMER_DRIVER_ADD_SCANLINE("goupil_sl", goupil_g1_state, goupil_scanline, "screen", 0, 10)
+ ACIA6850(config, m_acia, 0);
- MCFG_DEVICE_ADD("m_via_video", VIA6522, CPU_CLOCK / 4)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, goupil_g1_state, via_video_pba_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, goupil_g1_state, via_video_pbb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, goupil_g1_state, via_video_ca2_w))
+ // TODO: Is this specific to the G1?
+ VIA6522(config, m_via_video, CPU_CLOCK / 4);
- MCFG_DEVICE_ADD("m_via_keyb", VIA6522, CPU_CLOCK / 4)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6808_IRQ_LINE))
+ VIA6522(config, m_via_keyb, CPU_CLOCK / 4);
+ m_via_keyb->irq_handler().set_inputline(m_maincpu, M6808_IRQ_LINE);
- MCFG_DEVICE_ADD("m_via_modem", VIA6522, CPU_CLOCK / 4)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6808_IRQ_LINE))
+ VIA6522(config, m_via_modem, CPU_CLOCK / 4);
+ m_via_modem->irq_handler().set_inputline(m_maincpu, M6808_IRQ_LINE);
/* Floppy */
- MCFG_DEVICE_ADD("fd1791", FD1791, 8_MHz_XTAL)
- MCFG_FLOPPY_DRIVE_ADD("fd1791:0", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fd1791:1", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
+ FD1791(config, m_fdc, 8_MHz_XTAL);
+ FLOPPY_CONNECTOR(config, m_floppy0, goupil_floppies, "525qd", floppy_image_device::default_floppy_formats);
+ FLOPPY_CONNECTOR(config, m_floppy1, goupil_floppies, "525qd", floppy_image_device::default_floppy_formats);
+
+ i8279_device &i8279_kb1(I8279(config, "i8279_kb1", CPU_CLOCK));
+ i8279_kb1.out_sl_callback().set(FUNC(goupil_g1_state::scanlines_kbd1_w)); // scan SL lines
+ i8279_kb1.in_rl_callback().set(FUNC(goupil_g1_state::kbd1_r)); // kbd RL lines
+ i8279_kb1.in_shift_callback().set(FUNC(goupil_g1_state::shift_kb1_r));
+ i8279_kb1.in_ctrl_callback().set(FUNC(goupil_g1_state::ctrl_kb1_r));
+ i8279_kb1.out_irq_callback().set(m_via_keyb, FUNC(via6522_device::write_ca1));
+
+ i8279_device &i8279_kb2(I8279(config, "i8279_kb2", CPU_CLOCK));
+ i8279_kb2.out_sl_callback().set(FUNC(goupil_g1_state::scanlines_kbd2_w)); // scan SL lines
+ i8279_kb2.in_rl_callback().set(FUNC(goupil_g1_state::kbd2_r)); // kbd RL lines
+ i8279_kb2.in_shift_callback().set_constant(1);
+ i8279_kb2.in_ctrl_callback().set_constant(1);
+}
- MCFG_DEVICE_ADD("i8279_kb1", I8279, CPU_CLOCK)
- MCFG_I8279_OUT_SL_CB(WRITE8(*this, goupil_g1_state, scanlines_kbd1_w)) // scan SL lines
- MCFG_I8279_IN_RL_CB(READ8(*this, goupil_g1_state, kbd1_r)) // kbd RL lines
- MCFG_I8279_IN_SHIFT_CB(READ8(*this, goupil_g1_state, shift_kb1_r))
- MCFG_I8279_IN_CTRL_CB(READ8(*this, goupil_g1_state, ctrl_kb1_r))
- MCFG_I8279_OUT_IRQ_CB(WRITELINE("m_via_keyb", via6522_device, write_ca1))
+void goupil_g1_state::goupil_g1(machine_config &config)
+{
+ base(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &goupil_g1_state::mem);
- MCFG_DEVICE_ADD("i8279_kb2", I8279, CPU_CLOCK)
- MCFG_I8279_OUT_SL_CB(WRITE8(*this, goupil_g1_state, scanlines_kbd2_w)) // scan SL lines
- MCFG_I8279_IN_RL_CB(READ8(*this, goupil_g1_state, kbd2_r)) // kbd RL lines
- MCFG_I8279_IN_SHIFT_CB(READ8(*this, goupil_g1_state, shift_kb2_r))
- MCFG_I8279_IN_CTRL_CB(READ8(*this, goupil_g1_state, ctrl_kb2_r))
+ m_screen->set_screen_update("ef9364", FUNC(ef9364_device::screen_update));
+ m_screen->set_size(64*8, 16*(8+4));
+ m_screen->set_visarea(0, 64*8-1, 0, 16*(8+4)-1);
-MACHINE_CONFIG_END
+ PALETTE(config, m_palette, 16);
-MACHINE_CONFIG_START(goupil_g2_state::goupil_g2)
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M6808, CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(goupil_g2_mem)
+ EF9364(config, m_ef9364, VIDEO_CLOCK);
+ m_ef9364->set_palette_tag("palette");
+ m_ef9364->set_nb_of_pages(1);
- /* sound hardware */
- // TODO !
+ m_via_video->writepa_handler().set(FUNC(goupil_g1_state::via_video_pba_w));
+ m_via_video->writepb_handler().set(FUNC(goupil_g1_state::via_video_pbb_w));
+ m_via_video->ca2_handler().set(FUNC(goupil_g1_state::via_video_ca2_w));
+}
- MCFG_DEVICE_ADD ("ef6850", ACIA6850, 0)
+void goupil_g2_state::goupil_g2(machine_config &config)
+{
+ base(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &goupil_g2_state::mem);
- /* screen */
// "visu 24x80" board
+ RAM(config, m_visu24x80_ram);
+ m_visu24x80_ram->set_default_size("2K"); // visu24x80 2K ram
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("2K") // visu24x80 2K ram
-
- MCFG_SCREEN_ADD("screen" ,RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_NO_PALETTE
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
+ m_screen->set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+ m_screen->set_size((80*8), (24*(8+4)));
+ m_screen->set_visarea(0, (80*8)-1, 0, (24*(8+4))-1);
- MCFG_SCREEN_SIZE((80*8), (24*(8+4)))
- MCFG_SCREEN_VISIBLE_AREA(0, (80*8)-1, 0, (24*(8+4))-1)
- MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
+ PALETTE(config, m_palette, 2);
+ m_palette->set_init("palette", FUNC(palette_device::palette_init_monochrome_highlight));
- MCFG_MC6845_ADD("crtc", MC6845, "screen", 14.318181_MHz_XTAL / 8)
- MCFG_MC6845_SHOW_BORDER_AREA(false)
- MCFG_MC6845_CHAR_WIDTH(8)
- MCFG_MC6845_UPDATE_ROW_CB(goupil_g2_state, crtc_update_row)
- MCFG_MC6845_ADDR_CHANGED_CB(goupil_g2_state, crtc_update_addr_changed)
+ mc6845_device &crtc(MC6845(config, "crtc", 14.318181_MHz_XTAL / 8));
+ crtc.set_show_border_area(false);
+ crtc.set_char_width(8);
+ crtc.set_update_row_callback(FUNC(goupil_g2_state::crtc_update_row), this);
+ crtc.set_on_update_addr_change_callback(FUNC(goupil_g2_state::crtc_update_addr_changed), this);
- MCFG_DEVICE_ADD("m_via_video", VIA6522, CPU_CLOCK / 4)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, goupil_g2_state, via_video_pba_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, goupil_g2_state, via_video_pbb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, goupil_g2_state, via_video_ca2_w))
-
- MCFG_DEVICE_ADD("m_via_keyb", VIA6522, CPU_CLOCK / 4)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6808_IRQ_LINE))
-
- MCFG_DEVICE_ADD("m_via_modem", VIA6522, CPU_CLOCK / 4)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M6808_IRQ_LINE))
-
- /* Floppy */
- MCFG_DEVICE_ADD("fd1791", FD1791, 8_MHz_XTAL)
- MCFG_FLOPPY_DRIVE_ADD("fd1791:0", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD("fd1791:1", goupil_floppies, "525qd", floppy_image_device::default_floppy_formats)
-
- MCFG_DEVICE_ADD("i8279_kb1", I8279, CPU_CLOCK)
- MCFG_I8279_OUT_SL_CB(WRITE8(*this, goupil_g2_state, scanlines_kbd1_w)) // scan SL lines
- MCFG_I8279_IN_RL_CB(READ8(*this, goupil_g2_state, kbd1_r)) // kbd RL lines
- MCFG_I8279_IN_SHIFT_CB(READ8(*this, goupil_g2_state, shift_kb1_r))
- MCFG_I8279_IN_CTRL_CB(READ8(*this, goupil_g2_state, ctrl_kb1_r))
- MCFG_I8279_OUT_IRQ_CB(WRITELINE("m_via_keyb", via6522_device, write_ca1))
-
- MCFG_DEVICE_ADD("i8279_kb2", I8279, CPU_CLOCK)
- MCFG_I8279_OUT_SL_CB(WRITE8(*this, goupil_g2_state, scanlines_kbd2_w)) // scan SL lines
- MCFG_I8279_IN_RL_CB(READ8(*this, goupil_g2_state, kbd2_r)) // kbd RL lines
- MCFG_I8279_IN_SHIFT_CB(READ8(*this, goupil_g2_state, shift_kb2_r))
- MCFG_I8279_IN_CTRL_CB(READ8(*this, goupil_g2_state, ctrl_kb2_r))
-
-MACHINE_CONFIG_END
+ m_via_video->writepa_handler().set_nop();
+ m_via_video->writepb_handler().set_nop();
+ m_via_video->ca2_handler().set_nop();
+}
/* ROM definition */
ROM_START( goupilg1 )
diff --git a/src/mame/drivers/gts3.cpp b/src/mame/drivers/gts3.cpp
index 11832e8271c..839b3cec390 100644
--- a/src/mame/drivers/gts3.cpp
+++ b/src/mame/drivers/gts3.cpp
@@ -285,35 +285,34 @@ void gts3_state::init_gts3()
{
}
-MACHINE_CONFIG_START(gts3_state::gts3)
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M65C02, XTAL(4'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(gts3_map)
- MCFG_NVRAM_ADD_0FILL("nvram")
+void gts3_state::gts3(machine_config &config)
+{
+ M65C02(config, m_maincpu, XTAL(4'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &gts3_state::gts3_map);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- /* Video */
config.set_default_layout(layout_gts3);
- /* Sound */
genpin_audio(config);
- MCFG_DEVICE_ADD("u4", VIA6522, XTAL(4'000'000) / 2)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M65C02_IRQ_LINE))
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, gts3_state, u4a_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, gts3_state, u4b_r))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gts3_state, u4b_w))
- //MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, gts3_state, u4ca2_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, gts3_state, nmi_w))
-
- MCFG_DEVICE_ADD("u5", VIA6522, XTAL(4'000'000) / 2)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M65C02_IRQ_LINE))
- //MCFG_VIA6522_READPA_HANDLER(READ8(*this, gts3_state, u5a_r))
- //MCFG_VIA6522_READPB_HANDLER(READ8(*this, gts3_state, u5b_r))
- //MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gts3_state, u5b_w))
- //MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, gts3_state, u5ca2_w))
- //MCFG_VIA6522_CB1_HANDLER(WRITELINE(*this, gts3_state, u5cb1_w))
- //MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, gts3_state, u5cb2_w))
-MACHINE_CONFIG_END
+ VIA6522(config, m_u4, XTAL(4'000'000) / 2);
+ m_u4->irq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
+ m_u4->readpa_handler().set(FUNC(gts3_state::u4a_r));
+ m_u4->readpb_handler().set(FUNC(gts3_state::u4b_r));
+ m_u4->writepb_handler().set(FUNC(gts3_state::u4b_w));
+ //m_u4->ca2_handler().set(FUNC(gts3_state::u4ca2_w));
+ m_u4->cb2_handler().set(FUNC(gts3_state::nmi_w));
+
+ VIA6522(config, m_u5, XTAL(4'000'000) / 2);
+ m_u5->irq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
+ //m_u5->readpa_handler().set(FUNC(gts3_state::u5a_r));
+ //m_u5->readpb_handler().set(FUNC(gts3_state::u5b_r));
+ //m_u5->writepb_handler().set(FUNC(gts3_state::u5b_w));
+ //m_u5->ca2_handler().set(FUNC(gts3_state::u5ca2_w));
+ //m_u5->cb1_handler().set(FUNC(gts3_state::u5cb1_w));
+ //m_u5->cb2_handler().set(FUNC(gts3_state::u5cb2_w));
+}
/*-------------------------------------------------------------------
/ Amazon Hunt III (#684D)
diff --git a/src/mame/drivers/gts3a.cpp b/src/mame/drivers/gts3a.cpp
index 7381d4c723f..1c973f5c28f 100644
--- a/src/mame/drivers/gts3a.cpp
+++ b/src/mame/drivers/gts3a.cpp
@@ -57,7 +57,7 @@ private:
DECLARE_WRITE8_MEMBER(dmd_w);
DECLARE_WRITE_LINE_MEMBER(nmi_w);
MC6845_UPDATE_ROW(crtc_update_row);
- DECLARE_PALETTE_INIT(gts3a);
+ void palette_init(palette_device &palette);
required_device<palette_device> m_palette;
void gts3a_dmd_map(address_map &map);
void gts3a_map(address_map &map);
@@ -313,7 +313,7 @@ WRITE8_MEMBER( gts3a_state::dmd_w )
membank("bank1")->set_entry(data & 0x1f);
}
-PALETTE_INIT_MEMBER( gts3a_state, gts3a )
+void gts3a_state::palette_init(palette_device &palette)
{
palette.set_pen_color(0, rgb_t(0x00, 0x00, 0x00));
palette.set_pen_color(1, rgb_t(0xf7, 0x00, 0x00));
@@ -343,50 +343,53 @@ MC6845_UPDATE_ROW( gts3a_state::crtc_update_row )
}
}
-MACHINE_CONFIG_START(gts3a_state::gts3a)
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M65C02, XTAL(4'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(gts3a_map)
- MCFG_NVRAM_ADD_0FILL("nvram") // 6116LP + DS1210
+void gts3a_state::gts3a(machine_config &config)
+{
+ M65C02(config, m_maincpu, XTAL(4'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &gts3a_state::gts3a_map);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // 6116LP + DS1210
- MCFG_DEVICE_ADD("dmdcpu", M65C02, XTAL(3'579'545) / 2)
- MCFG_DEVICE_PROGRAM_MAP(gts3a_dmd_map)
+ M65C02(config, m_dmdcpu, XTAL(3'579'545) / 2);
+ m_dmdcpu->set_addrmap(AS_PROGRAM, &gts3a_state::gts3a_dmd_map);
/* Video */
- MCFG_SCREEN_ADD("screen", LCD)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
- MCFG_SCREEN_SIZE(128, 32)
- MCFG_SCREEN_VISIBLE_AREA(0, 127, 0, 31)
- MCFG_PALETTE_ADD( "palette", 2 )
- MCFG_PALETTE_INIT_OWNER(gts3a_state, gts3a)
-
- MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL(3'579'545) / 2)
- MCFG_MC6845_SHOW_BORDER_AREA(false)
- MCFG_MC6845_CHAR_WIDTH(8)
- MCFG_MC6845_UPDATE_ROW_CB(gts3a_state, crtc_update_row)
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
+ screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update));
+ screen.set_size(128, 32);
+ screen.set_visarea(0, 127, 0, 31);
+
+ PALETTE(config, m_palette, 2);
+ m_palette->set_init(DEVICE_SELF_OWNER, FUNC(gts3a_state::palette_init));
+
+ mc6845_device &crtc(MC6845(config, "crtc", XTAL(3'579'545) / 2));
+ crtc.set_screen("screen");
+ crtc.set_show_border_area(false);
+ crtc.set_char_width(8);
+ crtc.set_update_row_callback(FUNC(gts3a_state::crtc_update_row), this);
/* Sound */
genpin_audio(config);
- MCFG_DEVICE_ADD("u4", VIA6522, XTAL(4'000'000) / 2)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M65C02_IRQ_LINE))
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, gts3a_state, u4a_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, gts3a_state, u4b_r))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gts3a_state, u4b_w))
- //MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, gts3a_state, u4ca2_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, gts3a_state, nmi_w))
-
- MCFG_DEVICE_ADD("u5", VIA6522, XTAL(4'000'000) / 2)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("maincpu", M65C02_IRQ_LINE))
- //MCFG_VIA6522_READPA_HANDLER(READ8(*this, gts3a_state, u5a_r))
- //MCFG_VIA6522_READPB_HANDLER(READ8(*this, gts3a_state, u5b_r))
- //MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, gts3a_state, u5b_w))
- //MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, gts3a_state, u5ca2_w))
- //MCFG_VIA6522_CB1_HANDLER(WRITELINE(*this, gts3a_state, u5cb1_w))
- //MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, gts3a_state, u5cb2_w))
-MACHINE_CONFIG_END
+ VIA6522(config, m_u4, XTAL(4'000'000) / 2);
+ m_u4->irq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
+ m_u4->readpa_handler().set(FUNC(gts3a_state::u4a_r));
+ m_u4->readpb_handler().set(FUNC(gts3a_state::u4b_r));
+ m_u4->writepb_handler().set(FUNC(gts3a_state::u4b_w));
+ //m_u4->ca2_handler().set(FUNC(gts3a_state::u4ca2_w));
+ m_u4->cb2_handler().set(FUNC(gts3a_state::nmi_w));
+
+ VIA6522(config, m_u5, XTAL(4'000'000) / 2);
+ m_u5->irq_handler().set_inputline(m_maincpu, M65C02_IRQ_LINE);
+ //m_u5->readpa_handler().set(FUNC(gts3a_state::u5a_r));
+ //m_u5->readpb_handler().set(FUNC(gts3a_state::u5b_r));
+ //m_u5->writepb_Handler().set(FUNC(gts3a_state::u5b_w));
+ //m_u5->ca2_Handler().set(FUNC(gts3a_state::u5ca2_w));
+ //m_u5->cb1_Handler().set(FUNC(gts3a_state::u5cb1_w));
+ //m_u5->cb2_Handler().set(FUNC(gts3a_state::u5cb2_w));
+}
/*-------------------------------------------------------------------
/ Barb Wire (#748)
diff --git a/src/mame/drivers/itech32.cpp b/src/mame/drivers/itech32.cpp
index 3a0a971b22a..c4763adf3ca 100644
--- a/src/mame/drivers/itech32.cpp
+++ b/src/mame/drivers/itech32.cpp
@@ -357,10 +357,8 @@ Notes:
#include "cpu/m68000/m68000.h"
#include "cpu/m6809/m6809.h"
#include "cpu/tms32031/tms32031.h"
-#include "machine/6522via.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
-#include "sound/es5506.h"
#include "speaker.h"
@@ -381,42 +379,16 @@ Notes:
*
*************************************/
-inline int itech32_state::determine_irq_state(int vint, int xint, int qint)
-{
- int level = 0;
-
-
- /* determine which level is active */
- if (m_vint_state) level = 1;
- if (m_xint_state) level = 2;
- if (m_qint_state) level = 3;
-
- /* Driver's Edge shifts the interrupts a bit */
- if (m_is_drivedge && level) level += 2;
-
- return level;
-}
-
-
-void itech32_state::itech32_update_interrupts(int vint, int xint, int qint)
+void itech32_state::update_interrupts(int vint, int xint, int qint)
{
/* update the states */
if (vint != -1) m_vint_state = vint;
if (xint != -1) m_xint_state = xint;
if (qint != -1) m_qint_state = qint;
- if (m_is_drivedge)
- {
- m_maincpu->set_input_line(3, m_vint_state ? ASSERT_LINE : CLEAR_LINE);
- m_maincpu->set_input_line(4, m_xint_state ? ASSERT_LINE : CLEAR_LINE);
- m_maincpu->set_input_line(5, m_qint_state ? ASSERT_LINE : CLEAR_LINE);
- }
- else
- {
- m_maincpu->set_input_line(1, m_vint_state ? ASSERT_LINE : CLEAR_LINE);
- m_maincpu->set_input_line(2, m_xint_state ? ASSERT_LINE : CLEAR_LINE);
- m_maincpu->set_input_line(3, m_qint_state ? ASSERT_LINE : CLEAR_LINE);
- }
+ m_maincpu->set_input_line(1 + m_irq_base, m_vint_state ? ASSERT_LINE : CLEAR_LINE);
+ m_maincpu->set_input_line(2 + m_irq_base, m_xint_state ? ASSERT_LINE : CLEAR_LINE);
+ m_maincpu->set_input_line(3 + m_irq_base, m_qint_state ? ASSERT_LINE : CLEAR_LINE);
}
@@ -425,7 +397,7 @@ WRITE_LINE_MEMBER(itech32_state::generate_int1)
if (state)
{
/* signal the NMI */
- itech32_update_interrupts(1, -1, -1);
+ update_interrupts(1, -1, -1);
if (FULL_LOGGING) logerror("------------ VBLANK (%d) --------------\n", m_screen->vpos());
}
}
@@ -433,7 +405,7 @@ WRITE_LINE_MEMBER(itech32_state::generate_int1)
WRITE16_MEMBER(itech32_state::int1_ack_w)
{
- itech32_update_interrupts(0, -1, -1);
+ update_interrupts(0, -1, -1);
}
@@ -447,15 +419,15 @@ WRITE16_MEMBER(itech32_state::int1_ack_w)
void itech32_state::machine_start()
{
membank("soundbank")->configure_entries(0, 256, memregion("soundcpu")->base() + 0x10000, 0x4000);
- m_leds.resolve();
+ m_irq_base = 0;
save_item(NAME(m_vint_state));
save_item(NAME(m_xint_state));
save_item(NAME(m_qint_state));
+ save_item(NAME(m_irq_base));
save_item(NAME(m_sound_data));
save_item(NAME(m_sound_return));
save_item(NAME(m_sound_int_state));
- save_item(NAME(m_tms_spinning));
save_item(NAME(m_special_result));
save_item(NAME(m_p1_effx));
save_item(NAME(m_p1_effy));
@@ -476,8 +448,16 @@ void itech32_state::machine_reset()
m_sound_int_state = 0;
}
+void drivedge_state::machine_start()
+{
+ itech32_state::machine_start();
+
+ m_leds.resolve();
-MACHINE_RESET_MEMBER(itech32_state,drivedge)
+ save_item(NAME(m_tms_spinning));
+}
+
+void drivedge_state::machine_reset()
{
itech32_state::machine_reset();
@@ -485,6 +465,8 @@ MACHINE_RESET_MEMBER(itech32_state,drivedge)
m_dsp2->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
STOP_TMS_SPINNING(machine(), 0);
STOP_TMS_SPINNING(machine(), 1);
+
+ m_irq_base = 2;
}
@@ -609,18 +591,17 @@ READ32_MEMBER(itech32_state::trackball32_4bit_combined_r)
}
-READ32_MEMBER(itech32_state::drivedge_steering_r)
+READ32_MEMBER(drivedge_state::steering_r)
{
- int val = ioport("STEER")->read() * 2 - 0x100;
+ int val = m_steer->read() * 2 - 0x100;
if (val < 0) val = 0x100 | (-val);
return val << 16;
}
-READ32_MEMBER(itech32_state::drivedge_gas_r)
+READ32_MEMBER(drivedge_state::gas_r)
{
- int val = ioport("GAS")->read();
- return val << 16;
+ return m_gas->read() << 16;
}
@@ -731,7 +712,7 @@ READ8_MEMBER(itech32_state::sound_data_buffer_r)
*
*************************************/
-WRITE8_MEMBER(itech32_state::drivedge_portb_out)
+WRITE8_MEMBER(drivedge_state::portb_out)
{
// logerror("PIA port B write = %02x\n", data);
@@ -749,7 +730,7 @@ WRITE8_MEMBER(itech32_state::drivedge_portb_out)
}
-WRITE_LINE_MEMBER(itech32_state::drivedge_turbo_light)
+WRITE_LINE_MEMBER(drivedge_state::turbo_light)
{
m_leds[0] = state ? 1 : 0;
}
@@ -787,14 +768,14 @@ WRITE8_MEMBER(itech32_state::firq_clear_w)
*
*************************************/
-WRITE32_MEMBER(itech32_state::tms_reset_assert_w)
+WRITE32_MEMBER(drivedge_state::tms_reset_assert_w)
{
m_dsp1->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
m_dsp2->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
-WRITE32_MEMBER(itech32_state::tms_reset_clear_w)
+WRITE32_MEMBER(drivedge_state::tms_reset_clear_w)
{
/* kludge to prevent crash on first boot */
if ((m_tms1_ram[0] & 0xff000000) == 0)
@@ -810,7 +791,7 @@ WRITE32_MEMBER(itech32_state::tms_reset_clear_w)
}
-WRITE32_MEMBER(itech32_state::tms1_68k_ram_w)
+WRITE32_MEMBER(drivedge_state::tms1_68k_ram_w)
{
COMBINE_DATA(&m_tms1_ram[offset]);
if (offset == 0) COMBINE_DATA(m_tms1_boot);
@@ -820,7 +801,7 @@ WRITE32_MEMBER(itech32_state::tms1_68k_ram_w)
}
-WRITE32_MEMBER(itech32_state::tms2_68k_ram_w)
+WRITE32_MEMBER(drivedge_state::tms2_68k_ram_w)
{
COMBINE_DATA(&m_tms2_ram[offset]);
if (offset == 0x382 && m_tms_spinning[1]) STOP_TMS_SPINNING(machine(), 1);
@@ -829,28 +810,28 @@ WRITE32_MEMBER(itech32_state::tms2_68k_ram_w)
}
-WRITE32_MEMBER(itech32_state::tms1_trigger_w)
+WRITE32_MEMBER(drivedge_state::tms1_trigger_w)
{
COMBINE_DATA(&m_tms1_ram[offset]);
machine().scheduler().boost_interleave(attotime::from_hz(CPU020_CLOCK/256), attotime::from_usec(20));
}
-WRITE32_MEMBER(itech32_state::tms2_trigger_w)
+WRITE32_MEMBER(drivedge_state::tms2_trigger_w)
{
COMBINE_DATA(&m_tms2_ram[offset]);
machine().scheduler().boost_interleave(attotime::from_hz(CPU020_CLOCK/256), attotime::from_usec(20));
}
-READ32_MEMBER(itech32_state::drivedge_tms1_speedup_r)
+READ32_MEMBER(drivedge_state::tms1_speedup_r)
{
if (m_tms1_ram[0x382] == 0 && m_dsp1->pc() == 0xee) START_TMS_SPINNING(0);
return m_tms1_ram[0x382];
}
-READ32_MEMBER(itech32_state::drivedge_tms2_speedup_r)
+READ32_MEMBER(drivedge_state::tms2_speedup_r)
{
if (m_tms2_ram[0x382] == 0 && m_dsp2->pc() == 0x809808) START_TMS_SPINNING(1);
return m_tms2_ram[0x382];
@@ -883,13 +864,16 @@ void itech32_state::nvram_init(nvram_device &nvram, void *base, size_t length)
int start = (base == m_main_ram) ? 0x80 : 0x00;
for (int i = start; i < length; i++)
((uint8_t *)base)[i] = machine().rand();
+}
+
+void drivedge_state::nvram_init(nvram_device &nvram, void *base, size_t length)
+{
+ itech32_state::nvram_init(nvram, base, length);
// due to accessing uninitialized RAM, we need this hack
- if (m_is_drivedge)
- ((uint32_t *)m_main_ram.target())[0x2ce4/4] = 0x0000001e;
+ ((uint32_t *)m_main_ram.target())[0x2ce4/4] = 0x0000001e;
}
-
/*************************************
*
* Main CPU memory handlers
@@ -977,7 +961,7 @@ WRITE32_MEMBER(itech32_state::test2_w)
}
#endif
-void itech32_state::drivedge_map(address_map &map)
+void drivedge_state::main_map(address_map &map)
{
map(0x000000, 0x03ffff).mirror(0x40000).ram().share("nvram");
#if LOG_DRIVEDGE_UNINIT_RAM
@@ -986,36 +970,36 @@ map(0x000c00, 0x007fff).mirror(0x40000).rw(FUNC(itech32_state::test2_r), FUNC(it
#endif
map(0x080000, 0x080003).portr("80000");
map(0x082000, 0x082003).portr("82000");
- map(0x084000, 0x084003).rw(FUNC(itech32_state::sound_data32_r), FUNC(itech32_state::sound_data32_w));
+ map(0x084000, 0x084003).rw(FUNC(drivedge_state::sound_data32_r), FUNC(drivedge_state::sound_data32_w));
// AM_RANGE(0x086000, 0x08623f) AM_RAM -- networking -- first 0x40 bytes = our data, next 0x40*8 bytes = their data, r/w on IRQ2
- map(0x088000, 0x088003).r(FUNC(itech32_state::drivedge_steering_r));
- map(0x08a000, 0x08a003).r(FUNC(itech32_state::drivedge_gas_r)).nopw();
+ map(0x088000, 0x088003).r(FUNC(drivedge_state::steering_r));
+ map(0x08a000, 0x08a003).r(FUNC(drivedge_state::gas_r)).nopw();
map(0x08c000, 0x08c003).portr("8c000");
map(0x08e000, 0x08e003).portr("8e000").nopw();
- map(0x100000, 0x10000f).w(FUNC(itech32_state::drivedge_zbuf_control_w)).share("drivedge_zctl");
- map(0x180000, 0x180003).w(FUNC(itech32_state::drivedge_color0_w));
+ map(0x100000, 0x10000f).w(FUNC(drivedge_state::zbuf_control_w)).share("zctl");
+ map(0x180000, 0x180003).w(FUNC(drivedge_state::color0_w));
map(0x1a0000, 0x1bffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
map(0x1c0000, 0x1c0003).nopw();
- map(0x1e0000, 0x1e0113).rw(FUNC(itech32_state::itech020_video_r), FUNC(itech32_state::itech020_video_w)).share("video");
- map(0x1e4000, 0x1e4003).w(FUNC(itech32_state::tms_reset_assert_w));
- map(0x1ec000, 0x1ec003).w(FUNC(itech32_state::tms_reset_clear_w));
+ map(0x1e0000, 0x1e0113).rw(FUNC(drivedge_state::itech020_video_r), FUNC(drivedge_state::itech020_video_w)).share("video");
+ map(0x1e4000, 0x1e4003).w(FUNC(drivedge_state::tms_reset_assert_w));
+ map(0x1ec000, 0x1ec003).w(FUNC(drivedge_state::tms_reset_clear_w));
map(0x200000, 0x200003).portr("200000");
- map(0x280000, 0x280fff).ram().w(FUNC(itech32_state::tms1_68k_ram_w)).share("tms1_ram");
- map(0x300000, 0x300fff).ram().w(FUNC(itech32_state::tms2_68k_ram_w)).share("tms2_ram");
+ map(0x280000, 0x280fff).ram().w(FUNC(drivedge_state::tms1_68k_ram_w)).share("tms1_ram");
+ map(0x300000, 0x300fff).ram().w(FUNC(drivedge_state::tms2_68k_ram_w)).share("tms2_ram");
map(0x380000, 0x380003).nopw(); // AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
map(0x600000, 0x607fff).rom().region("user1", 0).share("main_rom");
}
-void itech32_state::drivedge_tms1_map(address_map &map)
+void drivedge_state::tms1_map(address_map &map)
{
map(0x000000, 0x001fff).ram().share("tms1_boot");
- map(0x008000, 0x0083ff).mirror(0x400).ram().w(FUNC(itech32_state::tms1_trigger_w)).share("tms1_ram");
+ map(0x008000, 0x0083ff).mirror(0x400).ram().w(FUNC(drivedge_state::tms1_trigger_w)).share("tms1_ram");
map(0x080000, 0x0bffff).ram();
}
-void itech32_state::drivedge_tms2_map(address_map &map)
+void drivedge_state::tms2_map(address_map &map)
{
- map(0x000000, 0x0003ff).mirror(0x8400).ram().w(FUNC(itech32_state::tms2_trigger_w)).share("tms2_ram");
+ map(0x000000, 0x0003ff).mirror(0x8400).ram().w(FUNC(drivedge_state::tms2_trigger_w)).share("tms2_ram");
map(0x080000, 0x08ffff).ram();
}
@@ -1682,137 +1666,127 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_CONFIG_START(itech32_state::timekill)
-
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, CPU_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(timekill_map)
-
- MCFG_DEVICE_ADD("soundcpu", MC6809, SOUND_CLOCK/2)
- MCFG_DEVICE_PROGRAM_MAP(sound_map)
+void itech32_state::base_devices(machine_config &config)
+{
+ MC6809(config, m_soundcpu, SOUND_CLOCK/2);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &itech32_state::sound_map);
- MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram", itech32_state, nvram_init)
+ nvram_device &nvram(NVRAM(config, "nvram"));
+ nvram.set_custom_handler(FUNC(itech32_state::nvram_init));
- MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH)
+ TICKET_DISPENSER(config, m_ticket, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
- MCFG_WATCHDOG_ADD("watchdog")
+ WATCHDOG_TIMER(config, "watchdog");
- /* video hardware */
- MCFG_PALETTE_ADD("palette", 8192)
- MCFG_PALETTE_FORMAT(GRBX)
+ PALETTE(config, m_palette, 8192);
+ m_palette->set_format(PALETTE_FORMAT_GRBX);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK, 508, 0, 384, 262, 0, 240) // most games configure the screen this way
-// MCFG_SCREEN_RAW_PARAMS(VIDEO_CLOCK, 508, 0, 384, 286, 0, 256) // sftm, wcbowl and shufshot configure it this way
- MCFG_SCREEN_UPDATE_DRIVER(itech32_state, screen_update_itech32)
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, itech32_state, generate_int1))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ m_screen->set_raw(VIDEO_CLOCK, 508, 0, 384, 262, 0, 240); // most games configure the screen this way
+// m_screen->set_raw(VIDEO_CLOCK, 508, 0, 384, 286, 0, 256); // sftm, wcbowl and shufshot configure it this way
+ m_screen->set_screen_update(FUNC(itech32_state::screen_update_itech32));
+ m_screen->set_palette(m_palette);
+ m_screen->screen_vblank().set(FUNC(itech32_state::generate_int1));
- /* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ensoniq", ES5506, SOUND_CLOCK)
- MCFG_ES5506_REGION0("ensoniq.0")
- MCFG_ES5506_REGION1("ensoniq.1")
- MCFG_ES5506_REGION2("ensoniq.2")
- MCFG_ES5506_REGION3("ensoniq.3")
- MCFG_ES5506_CHANNELS(1) /* channels */
- MCFG_SOUND_ROUTE(0, "rspeaker", 0.1) /* swapped stereo */
- MCFG_SOUND_ROUTE(1, "lspeaker", 0.1)
+ ES5506(config, m_ensoniq, SOUND_CLOCK);
+ m_ensoniq->set_region0("ensoniq.0");
+ m_ensoniq->set_region1("ensoniq.1");
+ m_ensoniq->set_region2("ensoniq.2");
+ m_ensoniq->set_region3("ensoniq.3");
+ m_ensoniq->set_channels(1); /* channels */
+ m_ensoniq->add_route(0, "rspeaker", 0.1); /* swapped stereo */
+ m_ensoniq->add_route(1, "lspeaker", 0.1);
+}
- /* via */
- MCFG_DEVICE_ADD("via6522_0", VIA6522, SOUND_CLOCK/8)
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, itech32_state,pia_portb_out))
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE))
-MACHINE_CONFIG_END
+void itech32_state::via(machine_config &config)
+{
+ VIA6522(config, m_via, SOUND_CLOCK/8);
+ m_via->writepb_handler().set(FUNC(itech32_state::pia_portb_out));
+ m_via->irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
+}
+void itech32_state::timekill(machine_config &config)
+{
+ M68000(config, m_maincpu, CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech32_state::timekill_map);
-MACHINE_CONFIG_START(itech32_state::bloodstm)
- timekill(config);
+ base_devices(config);
+ via(config);
+}
- /* basic machine hardware */
+void itech32_state::bloodstm(machine_config &config)
+{
+ M68000(config, m_maincpu, CPU_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech32_state::bloodstm_map);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(bloodstm_map)
+ base_devices(config);
- /* video hardware */
- MCFG_PALETTE_MODIFY("palette")
- MCFG_PALETTE_ENTRIES(32768)
- MCFG_PALETTE_FORMAT(XBGR)
- MCFG_PALETTE_ENDIANNESS(ENDIANNESS_LITTLE)
-MACHINE_CONFIG_END
+ m_palette->set_entries(32768);
+ m_palette->set_format(PALETTE_FORMAT_XBGR);
+ m_palette->set_endianness(ENDIANNESS_LITTLE);
+ via(config);
+}
-MACHINE_CONFIG_START(itech32_state::drivedge)
- timekill(config);
+void drivedge_state::drivedge(machine_config &config)
+{
+ base_devices(config);
/* basic machine hardware */
+ M68EC020(config, m_maincpu, CPU020_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &drivedge_state::main_map);
- MCFG_DEVICE_REPLACE("maincpu", M68EC020, CPU020_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(drivedge_map)
-
- MCFG_DEVICE_ADD("dsp1", TMS32031, TMS_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(drivedge_tms1_map)
+ TMS32031(config, m_dsp1, TMS_CLOCK);
+ m_dsp1->set_addrmap(AS_PROGRAM, &drivedge_state::tms1_map);
- MCFG_DEVICE_ADD("dsp2", TMS32031, TMS_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(drivedge_tms2_map)
+ TMS32031(config, m_dsp2, TMS_CLOCK);
+ m_dsp2->set_addrmap(AS_PROGRAM, &drivedge_state::tms2_map);
- MCFG_PALETTE_MODIFY("palette")
- MCFG_PALETTE_ENTRIES(32768)
- MCFG_PALETTE_FORMAT(XBGR)
+ m_palette->set_entries(32768);
+ m_palette->set_format(PALETTE_FORMAT_XBGR);
- MCFG_DEVICE_MODIFY("via6522_0")
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, itech32_state,drivedge_portb_out))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, itech32_state,drivedge_turbo_light))
+ via(config);
+ m_via->writepb_handler().set(FUNC(drivedge_state::portb_out));
+ m_via->cb2_handler().set(FUNC(drivedge_state::turbo_light));
-// MCFG_DEVICE_ADD("comm", M6803, 8000000/4) -- network CPU
+// M6803(config, "comm", 8000000/4); -- network CPU
- MCFG_MACHINE_RESET_OVERRIDE(itech32_state,drivedge)
- MCFG_QUANTUM_TIME(attotime::from_hz(6000))
+ config.m_minimum_quantum = attotime::from_hz(6000);
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VBLANK_CALLBACK(NOOP) // interrupt not used?
+ m_screen->screen_vblank().set_nop(); // interrupt not used?
SPEAKER(config, "left_back").front_left();
SPEAKER(config, "right_back").front_right();
- MCFG_DEVICE_MODIFY("ensoniq")
- MCFG_ES5506_CHANNELS(2) /* channels */
- MCFG_SOUND_ROUTE(2, "right_back", 0.1) /* swapped stereo */
- MCFG_SOUND_ROUTE(3, "left_back", 0.1)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech32_state::sftm)
- timekill(config);
-
- /* basic machine hardware */
-
- MCFG_DEVICE_REPLACE("maincpu", M68EC020, CPU020_CLOCK)
- MCFG_DEVICE_PROGRAM_MAP(itech020_map)
+ m_ensoniq->set_channels(2);
+ m_ensoniq->add_route(2, "right_back", 0.1); /* swapped stereo */
+ m_ensoniq->add_route(3, "left_back", 0.1);
+}
- MCFG_DEVICE_MODIFY("soundcpu")
- MCFG_DEVICE_PROGRAM_MAP(sound_020_map)
- MCFG_DEVICE_PERIODIC_INT_DRIVER(itech32_state, irq1_line_assert, 4*60)
+void itech32_state::sftm(machine_config &config)
+{
+ base_devices(config);
+ via(config);
- MCFG_PALETTE_MODIFY("palette")
- MCFG_PALETTE_ENTRIES(32768)
- MCFG_PALETTE_FORMAT(XRGB)
+ M68EC020(config, m_maincpu, CPU020_CLOCK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech32_state::itech020_map);
- /* via */
- MCFG_DEVICE_REMOVE("via6522_0")
-MACHINE_CONFIG_END
+ m_soundcpu->set_addrmap(AS_PROGRAM, &itech32_state::sound_020_map);
+ m_soundcpu->set_periodic_int(FUNC(itech32_state::irq1_line_assert), attotime::from_hz(4*60));
+ m_palette->set_entries(32768);
+ m_palette->set_format(PALETTE_FORMAT_XRGB);
+}
-MACHINE_CONFIG_START(itech32_state::tourny)
+void itech32_state::tourny(machine_config &config)
+{
sftm(config);
-
- /* basic machine hardware */
-
- MCFG_DEVICE_ADD(m_timekeeper, M48T02, 0)
-MACHINE_CONFIG_END
+ M48T02(config, m_timekeeper);
+}
@@ -4388,7 +4362,6 @@ void itech32_state::init_timekill()
init_program_rom();
m_vram_height = 512;
m_planes = 2;
- m_is_drivedge = 0;
}
@@ -4397,7 +4370,6 @@ void itech32_state::init_hardyard()
init_program_rom();
m_vram_height = 1024;
m_planes = 1;
- m_is_drivedge = 0;
}
@@ -4406,19 +4378,17 @@ void itech32_state::init_bloodstm()
init_program_rom();
m_vram_height = 1024;
m_planes = 1;
- m_is_drivedge = 0;
}
-void itech32_state::init_drivedge()
+void drivedge_state::driver_init()
{
init_program_rom();
m_vram_height = 1024;
m_planes = 1;
- m_is_drivedge = 1;
- m_dsp1->space(AS_PROGRAM).install_read_handler(0x8382, 0x8382, read32_delegate(FUNC(itech32_state::drivedge_tms1_speedup_r),this));
- m_dsp2->space(AS_PROGRAM).install_read_handler(0x8382, 0x8382, read32_delegate(FUNC(itech32_state::drivedge_tms2_speedup_r),this));
+ m_dsp1->space(AS_PROGRAM).install_read_handler(0x8382, 0x8382, read32_delegate(FUNC(drivedge_state::tms1_speedup_r),this));
+ m_dsp2->space(AS_PROGRAM).install_read_handler(0x8382, 0x8382, read32_delegate(FUNC(drivedge_state::tms2_speedup_r),this));
}
@@ -4468,7 +4438,6 @@ void itech32_state::init_sftm_common(int prot_addr)
init_program_rom();
m_vram_height = 1024;
m_planes = 1;
- m_is_drivedge = 0;
m_itech020_prot_address = prot_addr;
@@ -4499,7 +4468,6 @@ void itech32_state::init_shuffle_bowl_common(int prot_addr)
init_program_rom();
m_vram_height = 1024;
m_planes = 1;
- m_is_drivedge = 0;
m_itech020_prot_address = prot_addr;
@@ -4540,7 +4508,6 @@ void itech32_state::init_gt_common()
init_program_rom();
m_vram_height = 1024;
m_planes = 2;
- m_is_drivedge = 0;
m_itech020_prot_address = 0x112f;
}
@@ -4661,45 +4628,45 @@ Label1 bne.s Label1 ; Infinite loop if result isn't 0x80
*
*************************************/
-GAME( 1992, timekill, 0, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.32)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, timekill132i, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.32I)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, timekill131, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.31)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, timekill121, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.21)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, timekill121a, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.21, alternate ROM board)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, hardyard, 0, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.20)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, hardyard11, hardyard, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.10)", MACHINE_SUPPORTS_SAVE )
-GAME( 1993, hardyard10, hardyard, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.00)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, bloodstm, 0, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.22)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, bloodstm22, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.20)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, bloodstm21, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.10)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, bloodstm11, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v1.10)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, bloodstm10, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v1.04)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, pairsred, 0, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs Redemption (V1.0, 10/25/94)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, pairs, 0, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (V1.2, 09/30/94)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, pairsa, pairs, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (V1, 09/07/94)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, hotmemry, pairs, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Incredible Technologies (Tuning license)", "Hot Memory (V1.2, Germany, 12/28/94)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, hotmemry11, pairs, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Incredible Technologies (Tuning license)", "Hot Memory (V1.1, Germany, 11/30/94)", MACHINE_SUPPORTS_SAVE )
-GAME( 1994, drivedge, 0, drivedge, drivedge, itech32_state, init_drivedge, ROT0, "Strata/Incredible Technologies", "Driver's Edge (v1.6)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1995, wcbowl, 0, sftm, wcbowln, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.66)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
-GAME( 1995, wcbowl165, wcbowl, sftm, wcbowlo, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.65)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
-GAME( 1995, wcbowl161, wcbowl, sftm, wcbowlo, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.61)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
-GAME( 1995, wcbowl16, wcbowl, sftm, wcbowlo, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.6)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
-GAME( 1995, wcbowl15, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.5)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, wcbowl14, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.4)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, wcbowl13, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.3)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, wcbowl13j, wcbowl, bloodstm, wcbowlj, itech32_state, init_wcbowlj, ROT0, "Incredible Technologies", "World Class Bowling (v1.3J, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, wcbowl12, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.2)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, wcbowl11, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.1)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, wcbowl10, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.0)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
-GAME( 1995, sftm, 0, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
-GAME( 1995, sftm111, sftm, sftm, sftm, itech32_state, init_sftm110, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.11)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
-GAME( 1995, sftm110, sftm, sftm, sftm, itech32_state, init_sftm110, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.10)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
-GAME( 1995, sftmj, sftm, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12N, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
-GAME( 1997, shufshot, 0, sftm, shufshot, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.40)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */
-GAME( 1997, shufshot139, shufshot, sftm, shufshot, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.39)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */
-GAME( 1997, shufshot137, shufshot, sftm, shufshto, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.37)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */
-GAME( 1997, wcbowl140, wcbowldx, tourny, wcbowldx, itech32_state, init_wcbowlt, ROT0, "Incredible Technologies", "World Class Bowling Tournament (v1.40)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
-GAME( 1999, wcbowldx, 0, sftm, wcbowldx, itech32_state, init_shufshot, ROT0, "Incredible Technologies", "World Class Bowling Deluxe (v2.00)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-4 */
+GAME( 1992, timekill, 0, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.32)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, timekill132i, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.32I)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, timekill131, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.31)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, timekill121, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.21)", MACHINE_SUPPORTS_SAVE )
+GAME( 1992, timekill121a, timekill, timekill, timekill, itech32_state, init_timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.21, alternate ROM board)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, hardyard, 0, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.20)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, hardyard11, hardyard, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.10)", MACHINE_SUPPORTS_SAVE )
+GAME( 1993, hardyard10, hardyard, bloodstm, hardyard, itech32_state, init_hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.00)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, bloodstm, 0, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.22)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, bloodstm22, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.20)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, bloodstm21, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.10)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, bloodstm11, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v1.10)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, bloodstm10, bloodstm, bloodstm, bloodstm, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v1.04)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, pairsred, 0, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs Redemption (V1.0, 10/25/94)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, pairs, 0, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (V1.2, 09/30/94)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, pairsa, pairs, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (V1, 09/07/94)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, hotmemry, pairs, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Incredible Technologies (Tuning license)", "Hot Memory (V1.2, Germany, 12/28/94)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, hotmemry11, pairs, bloodstm, pairs, itech32_state, init_bloodstm, ROT0, "Incredible Technologies (Tuning license)", "Hot Memory (V1.1, Germany, 11/30/94)", MACHINE_SUPPORTS_SAVE )
+GAME( 1994, drivedge, 0, drivedge, drivedge, drivedge_state, empty_init, ROT0, "Strata/Incredible Technologies", "Driver's Edge (v1.6)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1995, wcbowl, 0, sftm, wcbowln, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.66)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
+GAME( 1995, wcbowl165, wcbowl, sftm, wcbowlo, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.65)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
+GAME( 1995, wcbowl161, wcbowl, sftm, wcbowlo, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.61)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
+GAME( 1995, wcbowl16, wcbowl, sftm, wcbowlo, itech32_state, init_wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.6)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
+GAME( 1995, wcbowl15, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.5)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, wcbowl14, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.4)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, wcbowl13, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.3)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, wcbowl13j, wcbowl, bloodstm, wcbowlj, itech32_state, init_wcbowlj, ROT0, "Incredible Technologies", "World Class Bowling (v1.3J, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, wcbowl12, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.2)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, wcbowl11, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.1)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, wcbowl10, wcbowl, bloodstm, wcbowl, itech32_state, init_wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.0)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-1 */
+GAME( 1995, sftm, 0, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
+GAME( 1995, sftm111, sftm, sftm, sftm, itech32_state, init_sftm110, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.11)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
+GAME( 1995, sftm110, sftm, sftm, sftm, itech32_state, init_sftm110, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.10)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
+GAME( 1995, sftmj, sftm, sftm, sftm, itech32_state, init_sftm, ROT0, "Capcom / Incredible Technologies", "Street Fighter: The Movie (v1.12N, Japan)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSF-1 */
+GAME( 1997, shufshot, 0, sftm, shufshot, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.40)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */
+GAME( 1997, shufshot139, shufshot, sftm, shufshot, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.39)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */
+GAME( 1997, shufshot137, shufshot, sftm, shufshto, itech32_state, init_shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.37)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITSHF-1 */
+GAME( 1997, wcbowl140, wcbowldx, tourny, wcbowldx, itech32_state, init_wcbowlt, ROT0, "Incredible Technologies", "World Class Bowling Tournament (v1.40)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-3 */
+GAME( 1999, wcbowldx, 0, sftm, wcbowldx, itech32_state, init_shufshot, ROT0, "Incredible Technologies", "World Class Bowling Deluxe (v2.00)" , MACHINE_SUPPORTS_SAVE ) /* PIC 16C54 labeled as ITBWL-4 */
/*
The following naming conventions are used:
diff --git a/src/mame/drivers/itech8.cpp b/src/mame/drivers/itech8.cpp
index 7797eea896d..b36a38432ef 100644
--- a/src/mame/drivers/itech8.cpp
+++ b/src/mame/drivers/itech8.cpp
@@ -630,6 +630,13 @@ void itech8_state::machine_start()
save_item(NAME(m_pia_portb_data));
}
+void grmatch_state::machine_start()
+{
+ itech8_state::machine_start();
+
+ m_palette_timer = timer_alloc(TIMER_PALETTE);
+}
+
void itech8_state::machine_reset()
{
device_type main_cpu_type = m_maincpu->type();
@@ -649,6 +656,11 @@ void itech8_state::machine_reset()
}
}
+void grmatch_state::machine_reset()
+{
+ itech8_state::machine_reset();
+ m_palette_timer->adjust(m_screen->time_until_pos(m_screen->vpos()+1));
+}
void itech8_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
@@ -1685,312 +1697,247 @@ WRITE_LINE_MEMBER(itech8_state::generate_tms34061_interrupt)
/************* core pieces ******************/
-MACHINE_CONFIG_START(itech8_state::itech8_core_lo)
-
- /* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", MC6809, CLOCK_8MHz)
- MCFG_DEVICE_PROGRAM_MAP(tmslo_map)
-
- MCFG_NVRAM_ADD_RANDOM_FILL("nvram")
+void itech8_state::itech8_core_devices(machine_config &config)
+{
+ NVRAM(config, "nvram", nvram_device::DEFAULT_RANDOM);
- MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW)
+ TICKET_DISPENSER(config, m_ticket, attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
- /* video hardware */
- MCFG_TLC34076_ADD("tlc34076", TLC34076_6_BIT)
+ TLC34076(config, m_tlc34076, tlc34076_device::TLC34076_6_BIT);
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_SIZE(512, 263)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, itech8_state, generate_nmi))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(512, 263);
+ m_screen->screen_vblank().set(FUNC(itech8_state::generate_nmi));
- MCFG_DEVICE_ADD("tms34061", TMS34061, 0)
- MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */
- MCFG_TMS34061_VRAM_SIZE(itech8_state::VRAM_SIZE)
- MCFG_TMS34061_INTERRUPT_CB(WRITELINE(*this, itech8_state, generate_tms34061_interrupt)) /* interrupt gen callback */
+ TMS34061(config, m_tms34061, 0);
+ m_tms34061->set_rowshift(8); /* VRAM address is (row << rowshift) | col */
+ m_tms34061->set_vram_size(itech8_state::VRAM_SIZE);
+ m_tms34061->int_callback().set(FUNC(itech8_state::generate_tms34061_interrupt)); /* interrupt gen callback */
- /* sound hardware */
SPEAKER(config, "mono").front_center();
- /* via */
- MCFG_DEVICE_ADD("via6522_0", VIA6522, CLOCK_8MHz/4)
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, itech8_state, pia_portb_out))
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE))
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::itech8_core_hi)
- itech8_core_lo(config);
+ via6522_device &via(VIA6522(config, "via6522_0", CLOCK_8MHz/4));
+ via.writepb_handler().set(FUNC(itech8_state::pia_portb_out));
+ via.irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
+}
- /* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(tmshi_map)
-MACHINE_CONFIG_END
+void itech8_state::itech8_core_lo(machine_config &config)
+{
+ MC6809(config, m_maincpu, CLOCK_8MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::tmslo_map);
+ itech8_core_devices(config);
+}
-MACHINE_CONFIG_START(itech8_state::itech8_sound_ym2203)
+void itech8_state::itech8_core_hi(machine_config &config)
+{
+ itech8_core_lo(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::tmshi_map);
+}
+void itech8_state::itech8_sound_ym2203(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("soundcpu", MC6809, CLOCK_8MHz)
- MCFG_DEVICE_PROGRAM_MAP(sound2203_map)
+ MC6809(config, m_soundcpu, CLOCK_8MHz);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &itech8_state::sound2203_map);
/* sound hardware */
- MCFG_DEVICE_ADD("ymsnd", YM2203, CLOCK_8MHz/2)
- MCFG_YM2203_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE))
- MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, itech8_state, ym2203_portb_out))
- MCFG_SOUND_ROUTE(0, "mono", 0.07)
- MCFG_SOUND_ROUTE(1, "mono", 0.07)
- MCFG_SOUND_ROUTE(2, "mono", 0.07)
- MCFG_SOUND_ROUTE(3, "mono", 0.75)
-
- MCFG_DEVICE_ADD("oki", OKIM6295, CLOCK_8MHz/8, okim6295_device::PIN7_HIGH) // was /128, not /132, so unsure so pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::itech8_sound_ym2608b)
+ ym2203_device &ymsnd(YM2203(config, "ymsnd", CLOCK_8MHz/2));
+ ymsnd.irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
+ ymsnd.port_b_write_callback().set(FUNC(itech8_state::ym2203_portb_out));
+ ymsnd.add_route(0, "mono", 0.07);
+ ymsnd.add_route(1, "mono", 0.07);
+ ymsnd.add_route(2, "mono", 0.07);
+ ymsnd.add_route(3, "mono", 0.75);
+
+ okim6295_device &oki(OKIM6295(config, "oki", CLOCK_8MHz/8, okim6295_device::PIN7_HIGH)); // was /128, not /132, so unsure so pin 7 not verified
+ oki.add_route(ALL_OUTPUTS, "mono", 0.75);
+}
+void itech8_state::itech8_sound_ym2608b(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("soundcpu", MC6809, CLOCK_8MHz)
- MCFG_DEVICE_PROGRAM_MAP(sound2608b_map)
+ MC6809(config, m_soundcpu, CLOCK_8MHz);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &itech8_state::sound2608b_map);
/* sound hardware */
- MCFG_DEVICE_ADD("ymsnd", YM2608, CLOCK_8MHz)
- MCFG_YM2608_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE))
- MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, itech8_state, ym2203_portb_out))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::itech8_sound_ym3812)
+ ym2608_device &ymsnd(YM2608(config, "ymsnd", CLOCK_8MHz));
+ ymsnd.irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
+ ymsnd.port_b_write_callback().set(FUNC(itech8_state::ym2203_portb_out));
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 0.75);
+}
+void itech8_state::itech8_sound_ym3812(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("soundcpu", MC6809, CLOCK_8MHz)
- MCFG_DEVICE_PROGRAM_MAP(sound3812_map)
+ MC6809(config, m_soundcpu, CLOCK_8MHz);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &itech8_state::sound3812_map);
- MCFG_DEVICE_ADD("pia", PIA6821, 0)
- MCFG_PIA_READPB_HANDLER(READLINE("ticket", ticket_dispenser_device, line_r))
- MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, itech8_state, pia_porta_out))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, itech8_state, pia_portb_out))
+ pia6821_device &pia(PIA6821(config, "pia", 0));
+ pia.readpb_handler().set("ticket", FUNC(ticket_dispenser_device::line_r));
+ pia.writepa_handler().set(FUNC(itech8_state::pia_porta_out));
+ pia.writepb_handler().set(FUNC(itech8_state::pia_portb_out));
/* sound hardware */
- MCFG_DEVICE_ADD("ymsnd", YM3812, CLOCK_8MHz/2)
- MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+ ym3812_device &ymsnd(YM3812(config, "ymsnd", CLOCK_8MHz/2));
+ ymsnd.irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 0.75);
- MCFG_DEVICE_ADD("oki", OKIM6295, CLOCK_8MHz/8, okim6295_device::PIN7_HIGH) // was /128, not /132, so unsure so pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::itech8_sound_ym3812_external)
+ okim6295_device &oki(OKIM6295(config, "oki", CLOCK_8MHz/8, okim6295_device::PIN7_HIGH)); // was /128, not /132, so unsure so pin 7 not verified
+ oki.add_route(ALL_OUTPUTS, "mono", 0.75);
+}
+void itech8_state::itech8_sound_ym3812_external(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("soundcpu", MC6809, CLOCK_8MHz)
- MCFG_DEVICE_PROGRAM_MAP(sound3812_external_map)
+ MC6809(config, m_soundcpu, CLOCK_8MHz);
+ m_soundcpu->set_addrmap(AS_PROGRAM, &itech8_state::sound3812_external_map);
/* sound hardware */
- MCFG_DEVICE_ADD("ymsnd", YM3812, CLOCK_8MHz/2)
- MCFG_YM3812_IRQ_HANDLER(INPUTLINE("soundcpu", M6809_FIRQ_LINE))
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
+ ym3812_device &ymsnd(YM3812(config, "ymsnd", CLOCK_8MHz/2));
+ ymsnd.irq_handler().set_inputline(m_soundcpu, M6809_FIRQ_LINE);
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 0.75);
- MCFG_DEVICE_ADD("oki", OKIM6295, CLOCK_8MHz/8, okim6295_device::PIN7_HIGH) // was /128, not /132, so unsure so pin 7 not verified
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75)
-MACHINE_CONFIG_END
+ okim6295_device &oki(OKIM6295(config, "oki", CLOCK_8MHz/8, okim6295_device::PIN7_HIGH)); // was /128, not /132, so unsure so pin 7 not verified
+ oki.add_route(ALL_OUTPUTS, "mono", 0.75);
+}
/************* full drivers ******************/
-MACHINE_CONFIG_START(itech8_state::wfortune)
+void itech8_state::wfortune(machine_config &config)
+{
itech8_core_hi(config);
-
- /* basic machine hardware */
itech8_sound_ym2203(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2layer)
-
-
-MACHINE_CONFIG_END
-
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2layer));
+}
-MACHINE_CONFIG_START(itech8_state::grmatch)
+void grmatch_state::grmatch(machine_config &config)
+{
itech8_core_hi(config);
-
- /* basic machine hardware */
itech8_sound_ym2608b(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 399, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_grmatch)
-
- /* palette updater */
- MCFG_TIMER_DRIVER_ADD_SCANLINE("palette_timer", itech8_state, grmatch_palette_update, "screen", 0, 0)
-
-MACHINE_CONFIG_END
-
+ m_screen->set_visarea(0, 399, 0, 239);
+ m_screen->set_screen_update(FUNC(grmatch_state::screen_update));
+}
-MACHINE_CONFIG_START(itech8_state::stratab_hi)
+void itech8_state::stratab_hi(machine_config &config)
+{
itech8_core_hi(config);
-
- /* basic machine hardware */
itech8_sound_ym2203(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2layer)
-
-MACHINE_CONFIG_END
-
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2layer));
+}
-MACHINE_CONFIG_START(itech8_state::stratab_lo)
+void itech8_state::stratab_lo(machine_config &config)
+{
itech8_core_lo(config);
-
- /* basic machine hardware */
itech8_sound_ym2203(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2layer)
-MACHINE_CONFIG_END
-
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2layer));
+}
-MACHINE_CONFIG_START(itech8_state::slikshot_hi)
+void itech8_state::slikshot_hi(machine_config &config)
+{
itech8_core_hi(config);
-
- /* basic machine hardware */
itech8_sound_ym2203(config);
- MCFG_DEVICE_ADD("sub", Z80, CLOCK_8MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(slikz80_mem_map)
- MCFG_DEVICE_IO_MAP(slikz80_io_map)
-
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_slikshot)
- MCFG_VIDEO_START_OVERRIDE(itech8_state,slikshot)
-MACHINE_CONFIG_END
+ Z80(config, m_subcpu, CLOCK_8MHz/2);
+ m_subcpu->set_addrmap(AS_PROGRAM, &itech8_state::slikz80_mem_map);
+ m_subcpu->set_addrmap(AS_IO, &itech8_state::slikz80_io_map);
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_slikshot));
+ MCFG_VIDEO_START_OVERRIDE(itech8_state, slikshot)
+}
-MACHINE_CONFIG_START(itech8_state::slikshot_lo)
+void itech8_state::slikshot_lo(machine_config &config)
+{
itech8_core_lo(config);
-
- /* basic machine hardware */
itech8_sound_ym2203(config);
- MCFG_DEVICE_ADD("sub", Z80, CLOCK_8MHz/2)
- MCFG_DEVICE_PROGRAM_MAP(slikz80_mem_map)
- MCFG_DEVICE_IO_MAP(slikz80_io_map)
-
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_slikshot)
- MCFG_VIDEO_START_OVERRIDE(itech8_state,slikshot)
-MACHINE_CONFIG_END
+ Z80(config, m_subcpu, CLOCK_8MHz/2);
+ m_subcpu->set_addrmap(AS_PROGRAM, &itech8_state::slikz80_mem_map);
+ m_subcpu->set_addrmap(AS_IO, &itech8_state::slikz80_io_map);
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_slikshot));
+ MCFG_VIDEO_START_OVERRIDE(itech8_state, slikshot)
+}
-MACHINE_CONFIG_START(itech8_state::slikshot_lo_noz80)
+void itech8_state::slikshot_lo_noz80(machine_config &config)
+{
itech8_core_lo(config);
-
- /* basic machine hardware */
itech8_sound_ym2203(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2page)
-MACHINE_CONFIG_END
-
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2page));
+}
-MACHINE_CONFIG_START(itech8_state::sstrike)
+void itech8_state::sstrike(machine_config &config)
+{
slikshot_lo(config);
-
- /* basic machine hardware */
MCFG_MACHINE_START_OVERRIDE(itech8_state,sstrike)
+}
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::hstennis_hi)
+void itech8_state::hstennis_hi(machine_config &config)
+{
itech8_core_hi(config);
-
- /* basic machine hardware */
itech8_sound_ym3812(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 399, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2page_large)
-MACHINE_CONFIG_END
-
+ m_screen->set_visarea(0, 399, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2page_large));
+}
-MACHINE_CONFIG_START(itech8_state::hstennis_lo)
+void itech8_state::hstennis_lo(machine_config &config)
+{
itech8_core_lo(config);
-
- /* basic machine hardware */
itech8_sound_ym3812(config);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 399, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2page_large)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::rimrockn)
- itech8_core_hi(config);
+ m_screen->set_visarea(0, 399, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2page_large));
+}
- /* basic machine hardware */
+void itech8_state::rimrockn(machine_config &config)
+{
+ itech8_core_devices(config);
itech8_sound_ym3812_external(config);
- MCFG_DEVICE_REPLACE("maincpu", HD6309, CLOCK_12MHz)
- MCFG_DEVICE_PROGRAM_MAP(tmshi_map)
+ HD6309(config, m_maincpu, CLOCK_12MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::tmshi_map);
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(24, 375, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2page_large)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(itech8_state::ninclown)
- itech8_core_hi(config);
+ m_screen->set_visarea(24, 375, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2page_large));
+}
- /* basic machine hardware */
+void itech8_state::ninclown(machine_config &config)
+{
+ itech8_core_devices(config);
itech8_sound_ym3812_external(config);
- MCFG_DEVICE_REPLACE("maincpu", M68000, CLOCK_12MHz)
- MCFG_DEVICE_PROGRAM_MAP(ninclown_map)
-
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(64, 423, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2page_large)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, itech8_state, ninclown_irq))
-MACHINE_CONFIG_END
+ M68000(config, m_maincpu, CLOCK_12MHz);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::ninclown_map);
+ m_screen->set_visarea(64, 423, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2page_large));
+ m_screen->screen_vblank().set(FUNC(itech8_state::ninclown_irq));
+}
-MACHINE_CONFIG_START(itech8_state::gtg2)
+void itech8_state::gtg2(machine_config &config)
+{
itech8_core_lo(config);
-
- /* basic machine hardware */
itech8_sound_ym3812_external(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &itech8_state::gtg2_map);
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(gtg2_map)
-
- /* video hardware */
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 239)
- MCFG_SCREEN_UPDATE_DRIVER(itech8_state, screen_update_2layer)
-MACHINE_CONFIG_END
+ m_screen->set_visarea(0, 255, 0, 239);
+ m_screen->set_screen_update(FUNC(itech8_state::screen_update_2layer));
+}
@@ -2707,15 +2654,15 @@ ROM_END
*
*************************************/
-void itech8_state::init_grmatch()
+void grmatch_state::driver_init()
{
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0160, 0x0160, write8_delegate(FUNC(itech8_state::grmatch_palette_w),this));
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x0180, 0x0180, write8_delegate(FUNC(itech8_state::grmatch_xscroll_w),this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0x0160, 0x0160, write8_delegate(FUNC(grmatch_state::palette_w),this));
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0x0180, 0x0180, write8_delegate(FUNC(grmatch_state::xscroll_w),this));
m_maincpu->space(AS_PROGRAM).unmap_write(0x01e0, 0x01ff);
- save_item(NAME(m_grmatch_palcontrol));
- save_item(NAME(m_grmatch_xscroll));
- save_item(NAME(m_grmatch_palette));
+ save_item(NAME(m_palcontrol));
+ save_item(NAME(m_xscroll));
+ save_item(NAME(m_palette));
}
@@ -2806,7 +2753,7 @@ GAME( 1989, wfortune, 0, wfortune, wfortune, itech8_state, emp
GAME( 1989, wfortunea, wfortune, wfortune, wfortune, itech8_state, empty_init, ROT0, "GameTek", "Wheel Of Fortune (set 2)", 0 )
/* Grudge Match-style PCB */
-GAME( 1989, grmatch, 0, grmatch, grmatch, itech8_state, init_grmatch, ROT0, "Yankee Game Technology", "Grudge Match (Yankee Game Technology)", 0 )
+GAME( 1989, grmatch, 0, grmatch, grmatch, grmatch_state, empty_init, ROT0, "Yankee Game Technology", "Grudge Match (Yankee Game Technology)", 0 )
/* Strata Bowling-style PCB */
GAME( 1990, stratab, 0, stratab_hi, stratab, itech8_state, empty_init, ROT270, "Strata/Incredible Technologies", "Strata Bowling (V3)", 0 ) // still says V1 in service mode?
diff --git a/src/mame/drivers/jr100.cpp b/src/mame/drivers/jr100.cpp
index cc2be87fcf4..7cb360c5680 100644
--- a/src/mame/drivers/jr100.cpp
+++ b/src/mame/drivers/jr100.cpp
@@ -67,7 +67,7 @@ private:
virtual void machine_reset() override;
virtual void video_start() override;
uint32_t screen_update_jr100(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- TIMER_DEVICE_CALLBACK_MEMBER(sound_tick);
+ TIMER_CALLBACK_MEMBER(sound_tick);
DECLARE_READ8_MEMBER(jr100_via_read_b);
DECLARE_WRITE8_MEMBER(jr100_via_write_a);
DECLARE_WRITE8_MEMBER(jr100_via_write_b);
@@ -92,10 +92,10 @@ private:
required_ioport m_line6;
required_ioport m_line7;
required_ioport m_line8;
- required_device<cpu_device> m_maincpu;
-};
-
+ required_device<m6802_cpu_device> m_maincpu;
+ emu_timer *m_sound_timer;
+};
WRITE8_MEMBER(jr100_state::jr100_via_w)
@@ -212,10 +212,14 @@ INPUT_PORTS_END
void jr100_state::machine_start()
{
+ if (!m_sound_timer)
+ m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jr100_state::sound_tick), this));
}
void jr100_state::machine_reset()
{
+ attotime timer_period = attotime::from_hz(XTAL(14'318'181) / 16);
+ m_sound_timer->adjust(timer_period, 0, timer_period);
}
void jr100_state::video_start()
@@ -303,7 +307,7 @@ WRITE_LINE_MEMBER(jr100_state::jr100_via_write_cb2)
m_cassette->output(state ? -1.0 : +1.0);
}
-TIMER_DEVICE_CALLBACK_MEMBER(jr100_state::sound_tick)
+TIMER_CALLBACK_MEMBER(jr100_state::sound_tick)
{
m_speaker->level_w(m_speaker_data);
m_speaker_data = 0;
@@ -371,45 +375,42 @@ QUICKLOAD_LOAD_MEMBER( jr100_state,jr100)
return image_init_result::PASS;
}
-MACHINE_CONFIG_START(jr100_state::jr100)
-
+void jr100_state::jr100(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu",M6802, XTAL(14'318'181) / 4) // clock devided internaly by 4
- MCFG_DEVICE_PROGRAM_MAP(jr100_mem)
+ M6802(config, m_maincpu, XTAL(14'318'181) / 4); // clock divided internally by 4
+ m_maincpu->set_addrmap(AS_PROGRAM, &jr100_state::jr100_mem);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(256, 192) /* border size not accurate */
- MCFG_SCREEN_VISIBLE_AREA(0, 256 - 1, 0, 192 - 1)
- MCFG_SCREEN_UPDATE_DRIVER(jr100_state, screen_update_jr100)
- MCFG_SCREEN_PALETTE("palette")
-
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_jr100)
- MCFG_PALETTE_ADD_MONOCHROME("palette")
-
- MCFG_DEVICE_ADD("via", VIA6522, XTAL(14'318'181) / 16)
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, jr100_state,jr100_via_read_b))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, jr100_state,jr100_via_write_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, jr100_state,jr100_via_write_b))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, jr100_state, jr100_via_write_cb2))
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(60);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(256, 192); /* border size not accurate */
+ screen.set_visarea(0, 256 - 1, 0, 192 - 1);
+ screen.set_screen_update(FUNC(jr100_state::screen_update_jr100));
+ screen.set_palette("palette");
+
+ GFXDECODE(config, "gfxdecode", "palette", gfx_jr100);
+ PALETTE(config, "palette", 2).set_init("palette", FUNC(palette_device::palette_init_monochrome));
+
+ VIA6522(config, m_via, XTAL(14'318'181) / 16);
+ m_via->readpb_handler().set(FUNC(jr100_state::jr100_via_read_b));
+ m_via->writepa_handler().set(FUNC(jr100_state::jr100_via_write_a));
+ m_via->writepb_handler().set(FUNC(jr100_state::jr100_via_write_b));
+ m_via->cb2_handler().set(FUNC(jr100_state::jr100_via_write_cb2));
SPEAKER(config, "mono").front_center();
WAVE(config, "wave", "cassette").add_route(ALL_OUTPUTS, "mono", 0.25);
- SPEAKER_SOUND(config, "speaker").add_route(ALL_OUTPUTS, "mono", 1.00);
-
- MCFG_DEVICE_ADD("beeper", BEEP, 0)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS,"mono",0.50)
+ SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00);
+ BEEP(config, m_beeper, 0).add_route(ALL_OUTPUTS, "mono", 0.50);
- MCFG_CASSETTE_ADD( "cassette" )
- MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED)
-
- MCFG_TIMER_DRIVER_ADD_PERIODIC("sound_tick", jr100_state, sound_tick, attotime::from_hz(XTAL(14'318'181) / 16))
+ CASSETTE(config, m_cassette, 0);
+ m_cassette->set_default_state((cassette_state)(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED | CASSETTE_MOTOR_ENABLED));
/* quickload */
- MCFG_QUICKLOAD_ADD("quickload", jr100_state, jr100, "prg", 2)
-MACHINE_CONFIG_END
+ quickload_image_device &quickload(QUICKLOAD(config, "quickload", 0));
+ quickload.set_handler(snapquick_load_delegate(&QUICKLOAD_LOAD_NAME(jr100_state, jr100), this), "prg", 2);
+}
/* ROM definition */
diff --git a/src/mame/drivers/jvh.cpp b/src/mame/drivers/jvh.cpp
index 5dcfd10de99..9c7ec1a908c 100644
--- a/src/mame/drivers/jvh.cpp
+++ b/src/mame/drivers/jvh.cpp
@@ -21,8 +21,9 @@ public:
m_maincpu(*this, "maincpu")
{ }
- void jvh2(machine_config &config);
+ void common(machine_config &config);
void jvh(machine_config &config);
+ void jvh2(machine_config &config);
void init_jvh();
@@ -119,27 +120,30 @@ void jvh_state::init_jvh()
{
}
-MACHINE_CONFIG_START(jvh_state::jvh)
+void jvh_state::common(machine_config &config)
+{
// CPU TMS9980A; no line connections
- MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, escape_io)
+ TMS9980A(config, m_maincpu, 1000000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &jvh_state::jvh_map);
- MCFG_DEVICE_ADD("soundcpu", M6802, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(jvh_sub_map)
+ m6802_cpu_device &soundcpu(M6802(config, "soundcpu", XTAL(4'000'000)));
+ soundcpu.set_addrmap(AS_PROGRAM, &jvh_state::jvh_sub_map);
- MCFG_DEVICE_ADD("via", VIA6522, XTAL(4'000'000) / 4) // MC6802 E clock
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("soundcpu", M6802_IRQ_LINE))
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(jvh_state::jvh2)
- // CPU TMS9980At; no line connections
- MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, movmastr_io)
+ via6522_device &via(VIA6522(config, "via", XTAL(4'000'000) / 4)); // MC6802 E clock
+ via.irq_handler().set_inputline("soundcpu", M6802_IRQ_LINE);
+}
- MCFG_DEVICE_ADD("soundcpu", M6802, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(jvh_sub_map)
+void jvh_state::jvh(machine_config &config)
+{
+ common(config);
+ m_maincpu->set_addrmap(AS_IO, &jvh_state::escape_io);
+}
- MCFG_DEVICE_ADD("via", VIA6522, XTAL(4'000'000) / 4)
- MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("soundcpu", M6802_IRQ_LINE))
-MACHINE_CONFIG_END
+void jvh_state::jvh2(machine_config &config)
+{
+ common(config);
+ m_maincpu->set_addrmap(AS_IO, &jvh_state::movmastr_io);
+}
diff --git a/src/mame/drivers/lisa.cpp b/src/mame/drivers/lisa.cpp
index 8130793584c..62e4f28530a 100644
--- a/src/mame/drivers/lisa.cpp
+++ b/src/mame/drivers/lisa.cpp
@@ -12,7 +12,6 @@
#include "emu.h"
#include "includes/lisa.h"
-#include "cpu/m6502/m6504.h"
#include "cpu/cop400/cop400.h"
#include "formats/ap_dsk35.h"
#include "screen.h"
@@ -98,96 +97,95 @@ static const floppy_interface lisa_floppy_interface =
***************************************************************************/
/* Lisa1 and Lisa 2 machine */
-MACHINE_CONFIG_START(lisa_state::lisa)
+void lisa_state::lisa(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, 5093760) /* 20.37504 MHz / 4 */
- MCFG_DEVICE_PROGRAM_MAP(lisa_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER(SCREEN_TAG, lisa_state, lisa_interrupt)
+ M68000(config, m_maincpu, 5093760); /* 20.37504 MHz / 4 */
+ m_maincpu->set_addrmap(AS_PROGRAM, &lisa_state::lisa_map);
+ m_maincpu->set_vblank_int(SCREEN_TAG, FUNC(lisa_state::lisa_interrupt));
- MCFG_DEVICE_ADD(COP421_TAG, COP421, 3900000)
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true )
+ cop421_cpu_device &cop(COP421(config, COP421_TAG, 3900000));
+ cop.set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true);
- MCFG_DEVICE_ADD(KB_COP421_TAG, COP421, 3900000) // ?
- MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true )
+ cop421_cpu_device &kbcop(COP421(config, KB_COP421_TAG, 3900000)); // ?
+ kbcop.set_config(COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, true);
- MCFG_DEVICE_ADD("fdccpu", M6504, 2000000) /* 16.000 MHz / 8 in when DIS asserted, 16.000 MHz / 9 otherwise (?) */
- MCFG_DEVICE_PROGRAM_MAP(lisa_fdc_map)
+ M6504(config, m_fdc_cpu, 2000000); /* 16.000 MHz / 8 in when DIS asserted, 16.000 MHz / 9 otherwise (?) */
+ m_fdc_cpu->set_addrmap(AS_PROGRAM, &lisa_state::lisa_fdc_map);
- MCFG_QUANTUM_TIME(attotime::from_hz(60))
+ config.m_minimum_quantum = attotime::from_hz(60);
- MCFG_DEVICE_ADD("latch", LS259, 0) // U4E
- MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(WRITELINE(*this, lisa_state, diag1_w))
- MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(WRITELINE(*this, lisa_state, diag2_w))
- MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(*this, lisa_state, seg1_w))
- MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(*this, lisa_state, seg2_w))
- MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(*this, lisa_state, setup_w))
- MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(*this, lisa_state, sfmsk_w))
- MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(*this, lisa_state, vtmsk_w))
- MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(*this, lisa_state, hdmsk_w))
+ LS259(config, m_latch, 0); // U4E
- MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
- MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(880, 380)
- MCFG_SCREEN_VISIBLE_AREA(0, 720-1, 0, 364-1)
- MCFG_SCREEN_UPDATE_DRIVER(lisa_state, screen_update_lisa)
- MCFG_SCREEN_PALETTE("palette")
+ m_latch->q_out_cb<0>().set(FUNC(lisa_state::diag1_w));
+ m_latch->q_out_cb<1>().set(FUNC(lisa_state::diag2_w));
+ m_latch->q_out_cb<2>().set(FUNC(lisa_state::seg1_w));
+ m_latch->q_out_cb<3>().set(FUNC(lisa_state::seg2_w));
+ m_latch->q_out_cb<4>().set(FUNC(lisa_state::setup_w));
+ m_latch->q_out_cb<5>().set(FUNC(lisa_state::sfmsk_w));
+ m_latch->q_out_cb<6>().set(FUNC(lisa_state::vtmsk_w));
+ m_latch->q_out_cb<7>().set(FUNC(lisa_state::hdmsk_w));
- MCFG_PALETTE_ADD_MONOCHROME("palette")
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_video_attributes(VIDEO_UPDATE_BEFORE_VBLANK);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ m_screen->set_size(880, 380);
+ m_screen->set_visarea(0, 720-1, 0, 364-1);
+ m_screen->set_screen_update(FUNC(lisa_state::screen_update_lisa));
+ m_screen->set_palette("palette");
+ PALETTE(config, m_palette, 2);
+ m_palette->set_init("palette", FUNC(palette_device::palette_init_monochrome));
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_DEVICE_ADD("speaker", SPEAKER_SOUND)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ SPEAKER_SOUND(config, m_speaker);
+ m_speaker->add_route(ALL_OUTPUTS, "mono", 1.00);
/* nvram */
- MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram", lisa_state, nvram_init)
+ NVRAM(config, m_nvram);
+ m_nvram->set_custom_handler(FUNC(lisa_state::nvram_init));
/* devices */
- MCFG_IWM_ADD("fdc", lisa2_fdc_interface)
- MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(lisa_floppy_interface)
+ IWM(config, m_fdc, &lisa2_fdc_interface);
+ sonydriv_floppy_image_device::legacy_2_drives_add(config, &lisa_floppy_interface);
/* software lists */
- MCFG_SOFTWARE_LIST_ADD("disk_list","lisa")
+ SOFTWARE_LIST(config, "disk_list").set_type("lisa", SOFTWARE_LIST_ORIGINAL_SYSTEM);
/* via */
- MCFG_DEVICE_ADD("via6522_0", VIA6522, 500000)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, lisa_state, COPS_via_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, lisa_state, COPS_via_out_b))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, lisa_state, COPS_via_out_ca2))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, lisa_state, COPS_via_out_cb2))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, lisa_state, COPS_via_irq_func))
-
- MCFG_DEVICE_ADD("via6522_1", VIA6522, 500000)
+ VIA6522(config, m_via0, 500000);
+ m_via0->writepa_handler().set(FUNC(lisa_state::COPS_via_out_a));
+ m_via0->writepb_handler().set(FUNC(lisa_state::COPS_via_out_b));
+ m_via0->ca2_handler().set(FUNC(lisa_state::COPS_via_out_ca2));
+ m_via0->cb2_handler().set(FUNC(lisa_state::COPS_via_out_cb2));
+ m_via0->irq_handler().set(FUNC(lisa_state::COPS_via_irq_func));
- MCFG_DEVICE_ADD("scc", SCC8530, 7833600)
-MACHINE_CONFIG_END
+ VIA6522(config, m_via1, 500000);
+ SCC8530(config, m_scc, 7833600);
+}
-MACHINE_CONFIG_START(lisa_state::lisa210)
+void lisa_state::lisa210(machine_config &config)
+{
lisa(config);
- MCFG_DEVICE_MODIFY( "fdccpu" )
- MCFG_DEVICE_PROGRAM_MAP(lisa210_fdc_map)
+ m_fdc_cpu->set_addrmap(AS_PROGRAM, &lisa_state::lisa210_fdc_map);
/* Lisa 2/10 and MacXL had a slightly different FDC interface */
- MCFG_IWM_MODIFY("fdc", lisa210_fdc_interface)
+ m_fdc->set_config(&lisa210_fdc_interface);
/* via */
- MCFG_DEVICE_MODIFY("via6522_0")
- MCFG_DEVICE_CLOCK(1250000)
- MCFG_DEVICE_MODIFY("via6522_1")
- MCFG_DEVICE_CLOCK(1250000)
-MACHINE_CONFIG_END
-
+ m_via0->set_clock(1250000);
+ m_via1->set_clock(1250000);
+}
-MACHINE_CONFIG_START(lisa_state::macxl)
+void lisa_state::macxl(machine_config &config)
+{
lisa210(config);
- MCFG_SCREEN_MODIFY(SCREEN_TAG)
- MCFG_SCREEN_SIZE( 768/* ???? */, 447/* ???? */)
- MCFG_SCREEN_VISIBLE_AREA(0, 608-1, 0, 431-1)
-MACHINE_CONFIG_END
+ m_screen->set_size( 768/* ???? */, 447/* ???? */);
+ m_screen->set_visarea(0, 608-1, 0, 431-1);
+}
/* 2008-05 FP:
Small note about natural keyboard support: currently,
diff --git a/src/mame/drivers/lwriter.cpp b/src/mame/drivers/lwriter.cpp
index bfc357ae6ca..551c4f8a89e 100644
--- a/src/mame/drivers/lwriter.cpp
+++ b/src/mame/drivers/lwriter.cpp
@@ -355,46 +355,47 @@ WRITE_LINE_MEMBER(lwriter_state::scc_int)
#define CPU_CLK (22.321_MHz_XTAL / 2) // Based on pictures form here: http://picclick.co.uk/Apple-Postscript-LaserWriter-IINT-Printer-640-4105-M6009-Mainboard-282160713108.html#&gid=1&pid=7
#define RXC_CLK ((CPU_CLK.value() - (87 * 16 * 70)) / 3) // Tuned to get 9600 baud according to manual, needs rework based on real hardware
-MACHINE_CONFIG_START(lwriter_state::lwriter)
- MCFG_DEVICE_ADD("maincpu", M68000, CPU_CLK)
- MCFG_DEVICE_PROGRAM_MAP(maincpu_map)
+void lwriter_state::lwriter(machine_config &config)
+{
+ M68000(config, m_maincpu, CPU_CLK);
+ m_maincpu->set_addrmap(AS_PROGRAM, &lwriter_state::maincpu_map);
- MCFG_DEVICE_ADD("scc", SCC8530N, CPU_CLK)
- MCFG_Z80SCC_OFFSETS(RXC_CLK, 0, RXC_CLK, 0)
+ SCC8530N(config, m_scc, CPU_CLK);
+ m_scc->configure_channels(RXC_CLK, 0, RXC_CLK, 0);
/* Port A */
- MCFG_Z80SCC_OUT_TXDA_CB(WRITELINE("rs232a", rs232_port_device, write_txd))
- MCFG_Z80SCC_OUT_DTRA_CB(WRITELINE("rs232a", rs232_port_device, write_dtr))
- MCFG_Z80SCC_OUT_RTSA_CB(WRITELINE("rs232a", rs232_port_device, write_rts))
+ m_scc->out_txda_callback().set("rs232a", FUNC(rs232_port_device::write_txd));
+ m_scc->out_dtra_callback().set("rs232a", FUNC(rs232_port_device::write_dtr));
+ m_scc->out_rtsa_callback().set("rs232a", FUNC(rs232_port_device::write_rts));
/* Port B */
- MCFG_Z80SCC_OUT_TXDB_CB(WRITELINE("rs232b", rs232_port_device, write_txd))
- MCFG_Z80SCC_OUT_DTRB_CB(WRITELINE("rs232b", rs232_port_device, write_dtr))
- MCFG_Z80SCC_OUT_RTSB_CB(WRITELINE("rs232b", rs232_port_device, write_rts))
+ m_scc->out_txdb_callback().set("rs232b", FUNC(rs232_port_device::write_txd));
+ m_scc->out_dtrb_callback().set("rs232b", FUNC(rs232_port_device::write_dtr));
+ m_scc->out_rtsb_callback().set("rs232b", FUNC(rs232_port_device::write_rts));
/* Interrupt */
- MCFG_Z80SCC_OUT_INT_CB(WRITELINE("via", via6522_device, write_ca1))
- //MCFG_Z80SCC_OUT_INT_CB(WRITELINE(*this, lwriter_state, scc_int))
+ m_scc->out_int_callback().set("via", FUNC(via6522_device::write_ca1));
+ //m_scc->out_int_callback().set(FUNC(lwriter_state::scc_int));
- MCFG_DEVICE_ADD("rs232a", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("scc", scc8530_device, rxa_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("scc", scc8530_device, ctsa_w))
+ rs232_port_device &rs232a(RS232_PORT(config, "rs232a", default_rs232_devices, "terminal"));
+ rs232a.rxd_handler().set("scc", FUNC(scc8530_device::rxa_w));
+ rs232a.cts_handler().set("scc", FUNC(scc8530_device::ctsa_w));
- MCFG_DEVICE_ADD("rs232b", RS232_PORT, default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(WRITELINE("scc", scc8530_device, rxb_w))
- MCFG_RS232_CTS_HANDLER(WRITELINE("scc", scc8530_device, ctsb_w))
+ rs232_port_device &rs232b(RS232_PORT(config, "rs232b", default_rs232_devices, "terminal"));
+ rs232b.rxd_handler().set("scc", FUNC(scc8530_device::rxb_w));
+ rs232b.cts_handler().set("scc", FUNC(scc8530_device::ctsb_w));
#if TPI
- MCFG_DEVICE_ADD("tpi", TPI6525, 0)
+ TPI6525(config, "tpi", 0);
#else
- MCFG_DEVICE_ADD("via", VIA6522, CPU_CLK/10) // 68000 E clock presumed
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, lwriter_state, via_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, lwriter_state, via_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, lwriter_state, via_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, lwriter_state, via_pb_w))
- MCFG_VIA6522_CB1_HANDLER(WRITELINE(*this, lwriter_state, via_cb1_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(*this, lwriter_state, via_ca2_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, lwriter_state, via_cb2_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, lwriter_state, via_int_w))
+ VIA6522(config, m_via, CPU_CLK/10); // 68000 E clock presumed
+ m_via->readpa_handler().set(FUNC(lwriter_state::via_pa_r));
+ m_via->readpb_handler().set(FUNC(lwriter_state::via_pb_r));
+ m_via->writepa_handler().set(FUNC(lwriter_state::via_pa_w));
+ m_via->writepb_handler().set(FUNC(lwriter_state::via_pb_w));
+ m_via->cb1_handler().set(FUNC(lwriter_state::via_cb1_w));
+ m_via->ca2_handler().set(FUNC(lwriter_state::via_ca2_w));
+ m_via->cb2_handler().set(FUNC(lwriter_state::via_cb2_w));
+ m_via->irq_handler().set(FUNC(lwriter_state::via_int_w));
#endif
-MACHINE_CONFIG_END
+}
/* SCC init sequence
* :scc B Reg 09 <- c0 - Master Interrupt Control - Device reset
diff --git a/src/mame/drivers/pet.cpp b/src/mame/drivers/pet.cpp
index 2c5c956ad49..d18e656bf24 100644
--- a/src/mame/drivers/pet.cpp
+++ b/src/mame/drivers/pet.cpp
@@ -211,6 +211,7 @@ public:
m_row(*this, "ROW%u", 0),
m_lock(*this, "LOCK"),
m_sync_timer(nullptr),
+ m_sync_period(attotime::zero),
m_key(0),
m_sync(0),
m_graphic(0),
@@ -1640,7 +1641,8 @@ MACHINE_RESET_MEMBER( pet_state, pet )
m_ieee->host_ren_w(0);
- m_sync_timer->adjust(machine().time() + m_sync_period, 0, m_sync_period);
+ if (m_sync_period != attotime::zero)
+ m_sync_timer->adjust(machine().time() + m_sync_period, 0, m_sync_period);
}
@@ -1766,9 +1768,9 @@ void pet_state::base_pet_devices(machine_config &config, const char *default_dri
PET_DATASSETTE_PORT(config, PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n").read_handler().set(M6520_1_TAG, FUNC(pia6821_device::ca1_w));
PET_DATASSETTE_PORT(config, PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, nullptr).read_handler().set(M6522_TAG, FUNC(via6522_device::write_cb1));
- pet_expansion_slot_device &exp(PET_EXPANSION_SLOT(config, m_exp, XTAL(16'000'000)/16, pet_expansion_cards, nullptr));
- exp.dma_read_callback().set(FUNC(pet_state::read));
- exp.dma_write_callback().set(FUNC(pet_state::write));
+ PET_EXPANSION_SLOT(config, m_exp, XTAL(16'000'000)/16, pet_expansion_cards, nullptr);
+ m_exp->dma_read_callback().set(FUNC(pet_state::read));
+ m_exp->dma_write_callback().set(FUNC(pet_state::write));
PET_USER_PORT(config, m_user, pet_user_port_cards, nullptr);
m_user->pb_handler().set(m_via, FUNC(via6522_device::write_ca1));
diff --git a/src/mame/includes/itech32.h b/src/mame/includes/itech32.h
index fc8a4835007..255e64480c0 100644
--- a/src/mame/includes/itech32.h
+++ b/src/mame/includes/itech32.h
@@ -7,9 +7,11 @@
**************************************************************************/
+#include "machine/6522via.h"
#include "machine/nvram.h"
#include "machine/ticket.h"
#include "machine/timekpr.h"
+#include "sound/es5506.h"
#include "emupal.h"
#include "screen.h"
@@ -27,8 +29,8 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_soundcpu(*this, "soundcpu"),
- m_dsp1(*this, "dsp1"),
- m_dsp2(*this, "dsp2"),
+ m_via(*this, "via6522_0"),
+ m_ensoniq(*this, "ensoniq"),
m_screen(*this, "screen"),
m_palette(*this, "palette"),
m_ticket(*this, "ticket"),
@@ -36,17 +38,13 @@ public:
m_main_ram(*this, "main_ram", 0),
m_nvram(*this, "nvram", 0),
m_video(*this, "video", 0),
- m_main_rom(*this, "main_rom", 0),
- m_drivedge_zbuf_control(*this, "drivedge_zctl"),
- m_tms1_boot(*this, "tms1_boot"),
- m_tms1_ram(*this, "tms1_ram"),
- m_tms2_ram(*this, "tms2_ram"),
- m_leds(*this, "led%u", 0U)
+ m_main_rom(*this, "main_rom", 0)
{ }
+ void base_devices(machine_config &config);
+ void via(machine_config &config);
void tourny(machine_config &config);
void sftm(machine_config &config);
- void drivedge(machine_config &config);
void bloodstm(machine_config &config);
void timekill(machine_config &config);
@@ -59,7 +57,6 @@ public:
void init_wcbowln();
void init_gt2kp();
void init_sftm();
- void init_drivedge();
void init_wcbowl();
void init_wcbowlj();
void init_aamat();
@@ -71,11 +68,11 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(special_port_r);
-private:
+protected:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_soundcpu;
- optional_device<cpu_device> m_dsp1;
- optional_device<cpu_device> m_dsp2;
+ required_device<via6522_device> m_via;
+ required_device<es5506_device> m_ensoniq;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_device<ticket_dispenser_device> m_ticket;
@@ -85,23 +82,18 @@ private:
optional_shared_ptr<uint16_t> m_nvram;
optional_shared_ptr<uint16_t> m_video;
optional_shared_ptr<uint16_t> m_main_rom;
- optional_shared_ptr<uint32_t> m_drivedge_zbuf_control;
- optional_shared_ptr<uint32_t> m_tms1_boot;
- optional_shared_ptr<uint32_t> m_tms1_ram;
- optional_shared_ptr<uint32_t> m_tms2_ram;
- output_finder<4> m_leds;
- void nvram_init(nvram_device &nvram, void *base, size_t length);
+ virtual void nvram_init(nvram_device &nvram, void *base, size_t length);
std::unique_ptr<uint16_t[]> m_videoram;
uint8_t m_vint_state;
uint8_t m_xint_state;
uint8_t m_qint_state;
+ uint8_t m_irq_base;
uint8_t m_sound_data;
uint8_t m_sound_return;
uint8_t m_sound_int_state;
offs_t m_itech020_prot_address;
- uint8_t m_tms_spinning[2];
int m_special_result;
int m_p1_effx;
int m_p1_effy;
@@ -126,7 +118,6 @@ private:
uint16_t *m_videoplane[2];
// configuration at init time
- int m_is_drivedge;
uint8_t m_planes;
uint16_t m_vram_height;
uint32_t m_vram_mask;
@@ -143,8 +134,6 @@ private:
DECLARE_READ32_MEMBER(trackball32_4bit_p1_r);
DECLARE_READ32_MEMBER(trackball32_4bit_p2_r);
DECLARE_READ32_MEMBER(trackball32_4bit_combined_r);
- DECLARE_READ32_MEMBER(drivedge_steering_r);
- DECLARE_READ32_MEMBER(drivedge_gas_r);
DECLARE_READ16_MEMBER(wcbowl_prot_result_r);
DECLARE_READ32_MEMBER(itech020_prot_result_r);
DECLARE_READ32_MEMBER(gt2kp_prot_result_r);
@@ -157,14 +146,6 @@ private:
DECLARE_WRITE8_MEMBER(sound_return_w);
DECLARE_READ8_MEMBER(sound_data_buffer_r);
DECLARE_WRITE8_MEMBER(firq_clear_w);
- DECLARE_WRITE32_MEMBER(tms_reset_assert_w);
- DECLARE_WRITE32_MEMBER(tms_reset_clear_w);
- DECLARE_WRITE32_MEMBER(tms1_68k_ram_w);
- DECLARE_WRITE32_MEMBER(tms2_68k_ram_w);
- DECLARE_WRITE32_MEMBER(tms1_trigger_w);
- DECLARE_WRITE32_MEMBER(tms2_trigger_w);
- DECLARE_READ32_MEMBER(drivedge_tms1_speedup_r);
- DECLARE_READ32_MEMBER(drivedge_tms2_speedup_r);
DECLARE_WRITE32_MEMBER(int1_ack32_w);
DECLARE_WRITE16_MEMBER(timekill_colora_w);
DECLARE_WRITE16_MEMBER(timekill_colorbc_w);
@@ -172,7 +153,6 @@ private:
DECLARE_WRITE16_MEMBER(bloodstm_color1_w);
DECLARE_WRITE16_MEMBER(bloodstm_color2_w);
DECLARE_WRITE16_MEMBER(bloodstm_plane_w);
- DECLARE_WRITE32_MEMBER(drivedge_color0_w);
DECLARE_WRITE32_MEMBER(itech020_color1_w);
DECLARE_WRITE32_MEMBER(itech020_color2_w);
DECLARE_WRITE32_MEMBER(itech020_plane_w);
@@ -182,16 +162,12 @@ private:
DECLARE_WRITE16_MEMBER(bloodstm_video_w);
DECLARE_READ16_MEMBER(bloodstm_video_r);
DECLARE_WRITE32_MEMBER(itech020_video_w);
- DECLARE_WRITE32_MEMBER(drivedge_zbuf_control_w);
DECLARE_READ32_MEMBER(itech020_video_r);
- DECLARE_WRITE8_MEMBER(drivedge_portb_out);
- DECLARE_WRITE_LINE_MEMBER(drivedge_turbo_light);
DECLARE_WRITE8_MEMBER(pia_portb_out);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
- DECLARE_MACHINE_RESET(drivedge);
void init_program_rom();
void init_sftm_common(int prot_addr);
void init_shuffle_bowl_common(int prot_addr);
@@ -205,24 +181,87 @@ private:
inline offs_t compute_safe_address(int x, int y);
inline void disable_clipping();
inline void enable_clipping();
- void logblit(const char *tag);
+ virtual void logblit(const char *tag);
void update_interrupts(int fast);
void draw_raw(uint16_t *base, uint16_t color);
- void draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t color);
+ virtual void command_blit_raw();
+ virtual void command_shift_reg();
inline void draw_rle_fast(uint16_t *base, uint16_t color);
inline void draw_rle_fast_xflip(uint16_t *base, uint16_t color);
inline void draw_rle_slow(uint16_t *base, uint16_t color);
void draw_rle(uint16_t *base, uint16_t color);
- void shiftreg_clear(uint16_t *base, uint16_t *zbase);
+ virtual void shiftreg_clear(uint16_t *base, uint16_t *zbase);
void handle_video_command();
- inline int determine_irq_state(int vint, int xint, int qint);
- void itech32_update_interrupts(int vint, int xint, int qint);
+ void update_interrupts(int vint, int xint, int qint);
void bloodstm_map(address_map &map);
- void drivedge_map(address_map &map);
- void drivedge_tms1_map(address_map &map);
- void drivedge_tms2_map(address_map &map);
void itech020_map(address_map &map);
void sound_020_map(address_map &map);
void sound_map(address_map &map);
void timekill_map(address_map &map);
};
+
+class drivedge_state : public itech32_state
+{
+public:
+ drivedge_state(const machine_config &mconfig, device_type type, const char *tag)
+ : itech32_state(mconfig, type, tag),
+ m_dsp1(*this, "dsp1"),
+ m_dsp2(*this, "dsp2"),
+ m_zbuf_control(*this, "zctl"),
+ m_tms1_boot(*this, "tms1_boot"),
+ m_tms1_ram(*this, "tms1_ram"),
+ m_tms2_ram(*this, "tms2_ram"),
+ m_leds(*this, "led%u", 0U),
+ m_steer(*this, "STEER"),
+ m_gas(*this, "GAS")
+ { }
+
+ void drivedge(machine_config &config);
+
+ virtual void driver_init() override;
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_READ32_MEMBER(steering_r);
+ DECLARE_READ32_MEMBER(gas_r);
+
+ DECLARE_READ32_MEMBER(tms1_speedup_r);
+ DECLARE_READ32_MEMBER(tms2_speedup_r);
+ DECLARE_WRITE32_MEMBER(tms_reset_assert_w);
+ DECLARE_WRITE32_MEMBER(tms_reset_clear_w);
+ DECLARE_WRITE32_MEMBER(tms1_68k_ram_w);
+ DECLARE_WRITE32_MEMBER(tms2_68k_ram_w);
+ DECLARE_WRITE32_MEMBER(tms1_trigger_w);
+ DECLARE_WRITE32_MEMBER(tms2_trigger_w);
+
+ DECLARE_WRITE32_MEMBER(color0_w);
+ DECLARE_WRITE32_MEMBER(zbuf_control_w);
+
+ DECLARE_WRITE8_MEMBER(portb_out);
+ DECLARE_WRITE_LINE_MEMBER(turbo_light);
+
+ void main_map(address_map &map);
+ void tms1_map(address_map &map);
+ void tms2_map(address_map &map);
+ virtual void nvram_init(nvram_device &nvram, void *base, size_t length) override;
+
+ virtual void logblit(const char *tag) override;
+ virtual void shiftreg_clear(uint16_t *base, uint16_t *zbase) override;
+ virtual void command_blit_raw() override;
+ virtual void command_shift_reg() override;
+ void draw_raw(uint16_t *base, uint16_t *zbase, uint16_t color);
+
+ required_device<cpu_device> m_dsp1;
+ required_device<cpu_device> m_dsp2;
+ required_shared_ptr<uint32_t> m_zbuf_control;
+ required_shared_ptr<uint32_t> m_tms1_boot;
+ required_shared_ptr<uint32_t> m_tms1_ram;
+ required_shared_ptr<uint32_t> m_tms2_ram;
+ output_finder<4> m_leds;
+ required_ioport m_steer;
+ required_ioport m_gas;
+
+ uint8_t m_tms_spinning[2];
+};
diff --git a/src/mame/includes/itech8.h b/src/mame/includes/itech8.h
index 7e98f201e3d..d031b64ecc2 100644
--- a/src/mame/includes/itech8.h
+++ b/src/mame/includes/itech8.h
@@ -31,7 +31,6 @@ public:
m_fakey(*this, "FAKEY"),
m_visarea(0, 0, 0, 0) { }
- void grmatch(machine_config &config);
void rimrockn(machine_config &config);
void gtg2(machine_config &config);
void slikshot_lo(machine_config &config);
@@ -46,7 +45,6 @@ public:
void hstennis_hi(machine_config &config);
void init_rimrockn();
- void init_grmatch();
void init_peggle();
void init_slikshot();
void init_neckneck();
@@ -57,7 +55,7 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(special_r);
DECLARE_CUSTOM_INPUT_MEMBER(gtg_mux);
-private:
+protected:
static constexpr uint32_t YBUFFER_COUNT = 15;
static constexpr uint32_t VRAM_SIZE = 0x40000;
static constexpr uint32_t VRAM_MASK = VRAM_SIZE - 1;
@@ -68,7 +66,8 @@ private:
TIMER_BEHIND_BEAM_UPDATE,
TIMER_DELAYED_SOUND_DATA,
TIMER_BLITTER_DONE,
- TIMER_DELAYED_Z80_CONTROL
+ TIMER_DELAYED_Z80_CONTROL,
+ TIMER_BASE_LAST = TIMER_DELAYED_Z80_CONTROL
};
required_device<cpu_device> m_maincpu;
@@ -116,9 +115,6 @@ private:
uint8_t m_fetch_rle_literal;
uint8_t *m_grom_base;
uint32_t m_grom_size;
- uint8_t m_grmatch_palcontrol;
- uint8_t m_grmatch_xscroll;
- rgb_t m_grmatch_palette[2][16];
emu_timer *m_irq_off_timer;
emu_timer *m_behind_beam_update_timer;
emu_timer *m_delayed_sound_data_timer;
@@ -141,8 +137,6 @@ private:
DECLARE_WRITE8_MEMBER(blitter_w);
DECLARE_WRITE8_MEMBER(tms34061_w);
DECLARE_READ8_MEMBER(tms34061_r);
- DECLARE_WRITE8_MEMBER(grmatch_palette_w);
- DECLARE_WRITE8_MEMBER(grmatch_xscroll_w);
DECLARE_WRITE8_MEMBER(pia_porta_out);
DECLARE_WRITE8_MEMBER(ym2203_portb_out);
@@ -153,7 +147,6 @@ private:
DECLARE_MACHINE_START(sstrike);
uint32_t screen_update_2layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_grmatch(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_slikshot(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_2page(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_2page_large(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -164,7 +157,6 @@ private:
TIMER_CALLBACK_MEMBER(behind_the_beam_update);
TIMER_CALLBACK_MEMBER(delayed_sound_data_w);
TIMER_CALLBACK_MEMBER(blitter_done);
- TIMER_DEVICE_CALLBACK_MEMBER(grmatch_palette_update);
inline uint8_t fetch_next_raw();
inline void consume_raw(int count);
@@ -205,6 +197,7 @@ private:
void itech8_sound_ym2608b(machine_config &config);
void itech8_sound_ym3812(machine_config &config);
void itech8_sound_ym3812_external(machine_config &config);
+ void itech8_core_devices(machine_config &config);
void itech8_core_lo(machine_config &config);
void itech8_core_hi(machine_config &config);
void gtg2_map(address_map &map);
@@ -220,3 +213,40 @@ private:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
};
+
+class grmatch_state : public itech8_state
+{
+public:
+ grmatch_state(const machine_config &mconfig, device_type type, const char *tag)
+ : itech8_state(mconfig, type, tag),
+ m_palette_timer(nullptr)
+ {
+ }
+
+ void grmatch(machine_config &config);
+
+ void driver_init() override;
+
+protected:
+ void machine_start() override;
+ void machine_reset() override;
+
+ enum
+ {
+ TIMER_PALETTE = TIMER_BASE_LAST+1,
+ };
+
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+ DECLARE_WRITE8_MEMBER(palette_w);
+ DECLARE_WRITE8_MEMBER(xscroll_w);
+
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ void palette_update();
+
+ emu_timer *m_palette_timer;
+ uint8_t m_palcontrol;
+ uint8_t m_xscroll;
+ rgb_t m_palette[2][16];
+};
diff --git a/src/mame/includes/lisa.h b/src/mame/includes/lisa.h
index 6a0b736e537..330b764f6a1 100644
--- a/src/mame/includes/lisa.h
+++ b/src/mame/includes/lisa.h
@@ -11,6 +11,7 @@
#ifndef MAME_INCLUDES_LISA_H
#define MAME_INCLUDES_LISA_H
+#include "cpu/m6502/m6504.h"
#include "cpu/m68000/m68000.h"
#include "machine/74259.h"
#include "machine/6522via.h"
@@ -114,6 +115,7 @@ public:
m_speaker(*this, "speaker"),
m_nvram(*this, "nvram"),
m_latch(*this, "latch"),
+ m_fdc_cpu(*this,"fdccpu"),
m_fdc_rom(*this,"fdc_rom"),
m_fdc_ram(*this,"fdc_ram"),
m_io_line0(*this, "LINE0"),
@@ -147,6 +149,7 @@ private:
required_device<speaker_sound_device> m_speaker;
required_device<nvram_device> m_nvram;
required_device<ls259_device> m_latch;
+ required_device<m6504_device> m_fdc_cpu;
required_shared_ptr<uint8_t> m_fdc_rom;
required_shared_ptr<uint8_t> m_fdc_ram;
diff --git a/src/mame/video/gameplan.cpp b/src/mame/video/gameplan.cpp
index d1d4496d06f..4a32b30d685 100644
--- a/src/mame/video/gameplan.cpp
+++ b/src/mame/video/gameplan.cpp
@@ -315,26 +315,25 @@ VIDEO_RESET_MEMBER(gameplan_state,gameplan)
*
*************************************/
-MACHINE_CONFIG_START(gameplan_state::gameplan_video)
+void gameplan_state::gameplan_video(machine_config &config)
+{
MCFG_VIDEO_START_OVERRIDE(gameplan_state,gameplan)
MCFG_VIDEO_RESET_OVERRIDE(gameplan_state,gameplan)
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(GAMEPLAN_PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(gameplan_state, screen_update_gameplan)
-MACHINE_CONFIG_END
-
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(GAMEPLAN_PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
+ m_screen->set_screen_update(FUNC(gameplan_state::screen_update_gameplan));
+}
-MACHINE_CONFIG_START(gameplan_state::leprechn_video)
+void gameplan_state::leprechn_video(machine_config &config)
+{
MCFG_VIDEO_START_OVERRIDE(gameplan_state,leprechn)
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(gameplan_state, screen_update_leprechn)
-MACHINE_CONFIG_END
-
+ m_screen->set_screen_update(FUNC(gameplan_state::screen_update_leprechn));
+}
-MACHINE_CONFIG_START(gameplan_state::trvquest_video)
+void gameplan_state::trvquest_video(machine_config &config)
+{
gameplan_video(config);
MCFG_VIDEO_START_OVERRIDE(gameplan_state,trvquest)
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_UPDATE_DRIVER(gameplan_state, screen_update_gameplan)
-MACHINE_CONFIG_END
+ m_screen->set_screen_update(FUNC(gameplan_state::screen_update_gameplan));
+}
diff --git a/src/mame/video/itech32.cpp b/src/mame/video/itech32.cpp
index 2f75302d132..8a43b4baf28 100644
--- a/src/mame/video/itech32.cpp
+++ b/src/mame/video/itech32.cpp
@@ -271,7 +271,7 @@ WRITE16_MEMBER(itech32_state::bloodstm_plane_w)
}
-WRITE32_MEMBER(itech32_state::drivedge_color0_w)
+WRITE32_MEMBER(drivedge_state::color0_w)
{
if (ACCESSING_BITS_16_23)
m_color_latch[0] = ((data >> 16) & 0x7f) << 8;
@@ -330,11 +330,12 @@ WRITE16_MEMBER(itech32_state::bloodstm_paletteram_w)
*
*************************************/
-void itech32_state::logblit(const char *tag)
+void drivedge_state::logblit(const char *tag)
{
if (!machine().input().code_pressed(KEYCODE_L))
return;
- if (m_is_drivedge && VIDEO_TRANSFER_FLAGS == 0x5490)
+
+ if (VIDEO_TRANSFER_FLAGS == 0x5490)
{
/* polygon drawing */
logerror("%s: e=%d%d f=%04x s=(%03x-%03x,%03x) w=%03x h=%03x b=%02x%04x c=%02x%02x ss=%04x,%04x ds=%04x,%04x ls=%04x%04x rs=%04x%04x u80=%04x", tag,
@@ -347,9 +348,20 @@ void itech32_state::logblit(const char *tag)
VIDEO_DST_XSTEP, VIDEO_DST_YSTEP,
VIDEO_LEFTSTEPHI, VIDEO_LEFTSTEPLO, VIDEO_RIGHTSTEPHI, VIDEO_RIGHTSTEPLO,
VIDEO_STARTSTEP);
+ logerror(" v0=%08x v1=%08x v2=%08x v3=%08x\n", m_zbuf_control[0], m_zbuf_control[1], m_zbuf_control[2], m_zbuf_control[3]);
+ }
+ else
+ {
+ itech32_state::logblit(tag);
}
+}
- else if (m_video[0x16/2] == 0x100 && m_video[0x18/2] == 0x100 &&
+void itech32_state::logblit(const char *tag)
+{
+ if (!machine().input().code_pressed(KEYCODE_L))
+ return;
+
+ if (m_video[0x16/2] == 0x100 && m_video[0x18/2] == 0x100 &&
m_video[0x1a/2] == 0x000 && m_video[0x1c/2] == 0x100 &&
m_video[0x1e/2] == 0x000 && m_video[0x20/2] == 0x000)
{
@@ -375,7 +387,6 @@ void itech32_state::logblit(const char *tag)
m_video[0x16/2], m_video[0x18/2], m_video[0x1a/2],
m_video[0x1c/2], m_video[0x1e/2], m_video[0x20/2]);
}
- if (m_is_drivedge) logerror(" v0=%08x v1=%08x v2=%08x v3=%08x", m_drivedge_zbuf_control[0], m_drivedge_zbuf_control[1], m_drivedge_zbuf_control[2], m_drivedge_zbuf_control[3]);
logerror("\n");
}
@@ -396,7 +407,7 @@ void itech32_state::update_interrupts(int fast)
if (VIDEO_INTSTATE & VIDEO_INTENABLE & VIDEOINT_BLITTER)
blitter_state = 1;
- itech32_update_interrupts(-1, blitter_state, scanline_state);
+ update_interrupts(-1, blitter_state, scanline_state);
}
@@ -529,7 +540,7 @@ void itech32_state::draw_raw(uint16_t *base, uint16_t color)
}
-void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t color)
+void drivedge_state::draw_raw(uint16_t *base, uint16_t *zbase, uint16_t color)
{
uint8_t *src = &m_grom_base[(m_grom_bank | ((VIDEO_TRANSFER_ADDRHI & 0xff) << 16) | VIDEO_TRANSFER_ADDRLO) % m_grom_size];
int transparent_pen = (VIDEO_TRANSFER_FLAGS & XFERFLAG_TRANSPARENT) ? 0xff : -1;
@@ -541,8 +552,8 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
int startx = ((VIDEO_TRANSFER_X & 0xfff) << 8) + 0x80;
int xdststep = 0x100;
int ydststep = VIDEO_DST_YSTEP;
- int32_t z0 = m_drivedge_zbuf_control[2] & 0x7ff00;
- int32_t zmatch = (m_drivedge_zbuf_control[2] & 0x1f) << 11;
+ int32_t z0 = m_zbuf_control[2] & 0x7ff00;
+ int32_t zmatch = (m_zbuf_control[2] & 0x1f) << 11;
int32_t srcdelta = 0;
int x, y;
@@ -586,14 +597,14 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
{
/* skip left pixels */
for (x = 0; x < width && sx < m_scaled_clip_rect.min_x; x += xsrcstep, sx += xdststep)
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
/* compute the address */
dstoffs = compute_safe_address(sx >> 8, sy >> 8) - (sx >> 8);
zbufoffs = compute_safe_address(sx >> 8, sy >> 8) - (sx >> 8);
/* render middle pixels */
- if (m_drivedge_zbuf_control[3] & 0x8000)
+ if (m_zbuf_control[3] & 0x8000)
{
for ( ; x < width && sx < m_scaled_clip_rect.max_x; x += xsrcstep, sx += xdststep)
{
@@ -603,17 +614,17 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[(dstoffs + (sx >> 8)) & m_vram_mask] = pixel | color;
zbase[(zbufoffs + (sx >> 8)) & m_vram_mask] = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
- else if (m_drivedge_zbuf_control[3] & 0x4000)
+ else if (m_zbuf_control[3] & 0x4000)
{
for ( ; x < width && sx < m_scaled_clip_rect.max_x; x += xsrcstep, sx += xdststep)
{
int pixel = rowsrc[x >> 8];
if (pixel != transparent_pen && zmatch == (zbase[(zbufoffs + (sx >> 8)) & m_vram_mask] & (0x1f << 11)))
base[(dstoffs + (sx >> 8)) & m_vram_mask] = pixel | color;
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
else
@@ -626,7 +637,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[(dstoffs + (sx >> 8)) & m_vram_mask] = pixel | color;
zbase[(zbufoffs + (sx >> 8)) & m_vram_mask] = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
}
@@ -634,14 +645,14 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
{
/* skip right pixels */
for (x = 0; x < width && sx >= m_scaled_clip_rect.max_x; x += xsrcstep, sx += xdststep)
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
/* compute the address */
dstoffs = compute_safe_address(sx >> 8, sy >> 8) - (sx >> 8);
zbufoffs = compute_safe_address(sx >> 8, sy >> 8) - (sx >> 8);
/* render middle pixels */
- if (m_drivedge_zbuf_control[3] & 0x8000)
+ if (m_zbuf_control[3] & 0x8000)
{
for ( ; x < width && sx >= m_scaled_clip_rect.min_x; x += xsrcstep, sx += xdststep)
{
@@ -651,17 +662,17 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[(dstoffs + (sx >> 8)) & m_vram_mask] = pixel | color;
zbase[(zbufoffs + (sx >> 8)) & m_vram_mask] = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
- else if (m_drivedge_zbuf_control[3] & 0x4000)
+ else if (m_zbuf_control[3] & 0x4000)
{
for ( ; x < width && sx >= m_scaled_clip_rect.min_x; x += xsrcstep, sx += xdststep)
{
int pixel = rowsrc[x >> 8];
if (pixel != transparent_pen && zmatch == (zbase[(zbufoffs + (sx >> 8)) & m_vram_mask] & (0x1f << 11)))
base[(dstoffs + (sx >> 8)) & m_vram_mask] = pixel | color;
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
else
@@ -674,7 +685,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[(dstoffs + (sx >> 8)) & m_vram_mask] = pixel | color;
zbase[(zbufoffs + (sx >> 8)) & m_vram_mask] = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
}
@@ -690,7 +701,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
/* render all pixels */
sx = startx;
- if (m_drivedge_zbuf_control[3] & 0x8000)
+ if (m_zbuf_control[3] & 0x8000)
{
for (x = 0; x < width && sx < m_scaled_clip_rect.max_x; x += xsrcstep, sx += xdststep, ty += ystep)
if (m_scaled_clip_rect.contains(sx, ty))
@@ -701,10 +712,10 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[compute_safe_address(sx >> 8, ty >> 8)] = pixel | color;
zbase[compute_safe_address(sx >> 8, ty >> 8)] = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
- else if (m_drivedge_zbuf_control[3] & 0x4000)
+ else if (m_zbuf_control[3] & 0x4000)
{
for (x = 0; x < width && sx < m_scaled_clip_rect.max_x; x += xsrcstep, sx += xdststep, ty += ystep)
if (m_scaled_clip_rect.contains(sx, ty))
@@ -716,7 +727,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[compute_safe_address(sx >> 8, ty >> 8)] = pixel | color;
*zbuf = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
else
@@ -731,7 +742,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
base[compute_safe_address(sx >> 8, ty >> 8)] = pixel | color;
*zbuf = (z >> 8) | zmatch;
}
- z += (int32_t)m_drivedge_zbuf_control[0];
+ z += (int32_t)m_zbuf_control[0];
}
}
}
@@ -749,7 +760,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
m_scaled_clip_rect.max_x += (int32_t)((VIDEO_RIGHTSTEPHI << 16) | VIDEO_RIGHTSTEPLO);
srcdelta += (int16_t)VIDEO_STARTSTEP;
}
- z0 += (int32_t)m_drivedge_zbuf_control[1];
+ z0 += (int32_t)m_zbuf_control[1];
}
/* restore cliprects */
@@ -762,7 +773,7 @@ void itech32_state::draw_raw_drivedge(uint16_t *base, uint16_t *zbase, uint16_t
VIDEO_TRANSFER_Y = (VIDEO_TRANSFER_Y & ~0xfff) | ((VIDEO_TRANSFER_Y + (y >> 8)) & 0xfff);
VIDEO_TRANSFER_ADDRLO += srcdelta >> 8;
- m_drivedge_zbuf_control[2] = (m_drivedge_zbuf_control[2] & ~0x7ff00) | (z0 & 0x7ff00);
+ m_zbuf_control[2] = (m_zbuf_control[2] & ~0x7ff00) | (z0 & 0x7ff00);
}
@@ -1081,24 +1092,41 @@ void itech32_state::draw_rle(uint16_t *base, uint16_t color)
void itech32_state::shiftreg_clear(uint16_t *base, uint16_t *zbase)
{
+ const int ydir = (VIDEO_TRANSFER_FLAGS & XFERFLAG_YFLIP) ? -1 : 1;
+ const int height = ADJUSTED_HEIGHT(VIDEO_TRANSFER_HEIGHT);
+ const int sx = VIDEO_TRANSFER_X & 0xfff;
+ int sy = VIDEO_TRANSFER_Y & 0xfff;
+
+ /* first line is the source */
+ uint16_t *src = &base[compute_safe_address(sx, sy)];
+ sy += ydir;
+
+ /* loop over height */
+ for (int y = 1; y < height; y++)
+ {
+ memcpy(&base[compute_safe_address(sx, sy)], src, 512*2);
+ sy += ydir;
+ }
+}
+
+void drivedge_state::shiftreg_clear(uint16_t *base, uint16_t *zbase)
+{
int ydir = (VIDEO_TRANSFER_FLAGS & XFERFLAG_YFLIP) ? -1 : 1;
int height = ADJUSTED_HEIGHT(VIDEO_TRANSFER_HEIGHT);
int sx = VIDEO_TRANSFER_X & 0xfff;
int sy = VIDEO_TRANSFER_Y & 0xfff;
- uint16_t *src;
- int y;
/* first line is the source */
- src = &base[compute_safe_address(sx, sy)];
+ uint16_t *src = &base[compute_safe_address(sx, sy)];
sy += ydir;
/* loop over height */
- for (y = 1; y < height; y++)
+ for (int y = 1; y < height; y++)
{
memcpy(&base[compute_safe_address(sx, sy)], src, 512*2);
if (zbase)
{
- uint16_t zval = ((m_drivedge_zbuf_control[2] >> 8) & 0x7ff) | ((m_drivedge_zbuf_control[2] & 0x1f) << 11);
+ uint16_t zval = ((m_zbuf_control[2] >> 8) & 0x7ff) | ((m_zbuf_control[2] & 0x1f) << 11);
uint16_t *dst = &zbase[compute_safe_address(sx, sy)];
int x;
for (x = 0; x < 512; x++)
@@ -1123,20 +1151,7 @@ void itech32_state::handle_video_command()
{
/* command 1: blit raw data */
case 1:
- g_profiler.start(PROFILER_USER1);
- if (BLIT_LOGGING) logblit("Blit Raw");
-
- if (m_is_drivedge)
- {
- if (m_enable_latch[0]) draw_raw_drivedge(m_videoplane[0], m_videoplane[1], m_color_latch[0]);
- }
- else
- {
- if (m_enable_latch[0]) draw_raw(m_videoplane[0], m_color_latch[0]);
- if (m_enable_latch[1]) draw_raw(m_videoplane[1], m_color_latch[1]);
- }
-
- g_profiler.stop();
+ command_blit_raw();
break;
/* command 2: blit RLE-compressed data */
@@ -1169,20 +1184,7 @@ void itech32_state::handle_video_command()
/* command 6: perform shift register copy */
case 6:
- g_profiler.start(PROFILER_USER3);
- if (BLIT_LOGGING) logblit("ShiftReg");
-
- if (m_is_drivedge)
- {
- if (m_enable_latch[0]) shiftreg_clear(m_videoplane[0], m_videoplane[1]);
- }
- else
- {
- if (m_enable_latch[0]) shiftreg_clear(m_videoplane[0], nullptr);
- if (m_enable_latch[1]) shiftreg_clear(m_videoplane[1], nullptr);
- }
-
- g_profiler.stop();
+ command_shift_reg();
break;
default:
@@ -1195,6 +1197,47 @@ void itech32_state::handle_video_command()
update_interrupts(1);
}
+void itech32_state::command_blit_raw()
+{
+ g_profiler.start(PROFILER_USER1);
+ if (BLIT_LOGGING) logblit("Blit Raw");
+
+ if (m_enable_latch[0]) draw_raw(m_videoplane[0], m_color_latch[0]);
+ if (m_enable_latch[1]) draw_raw(m_videoplane[1], m_color_latch[1]);
+
+ g_profiler.stop();
+}
+
+void drivedge_state::command_blit_raw()
+{
+ g_profiler.start(PROFILER_USER1);
+ if (BLIT_LOGGING) logblit("Blit Raw");
+
+ if (m_enable_latch[0]) draw_raw(m_videoplane[0], m_videoplane[1], m_color_latch[0]);
+
+ g_profiler.stop();
+}
+
+void itech32_state::command_shift_reg()
+{
+ g_profiler.start(PROFILER_USER3);
+ if (BLIT_LOGGING) logblit("ShiftReg");
+
+ if (m_enable_latch[0]) shiftreg_clear(m_videoplane[0], nullptr);
+ if (m_enable_latch[1]) shiftreg_clear(m_videoplane[1], nullptr);
+
+ g_profiler.stop();
+}
+
+void drivedge_state::command_shift_reg()
+{
+ g_profiler.start(PROFILER_USER3);
+ if (BLIT_LOGGING) logblit("ShiftReg");
+
+ if (m_enable_latch[0]) shiftreg_clear(m_videoplane[0], m_videoplane[1]);
+
+ g_profiler.stop();
+}
/*************************************
@@ -1349,9 +1392,9 @@ WRITE32_MEMBER(itech32_state::itech020_video_w)
}
-WRITE32_MEMBER(itech32_state::drivedge_zbuf_control_w)
+WRITE32_MEMBER(drivedge_state::zbuf_control_w)
{
- COMBINE_DATA(&m_drivedge_zbuf_control[offset]);
+ COMBINE_DATA(&m_zbuf_control[offset]);
}
diff --git a/src/mame/video/itech8.cpp b/src/mame/video/itech8.cpp
index 35b7e347ae1..90d27ccbc54 100644
--- a/src/mame/video/itech8.cpp
+++ b/src/mame/video/itech8.cpp
@@ -528,43 +528,57 @@ READ8_MEMBER(itech8_state::tms34061_r)
*
*************************************/
-WRITE8_MEMBER(itech8_state::grmatch_palette_w)
+WRITE8_MEMBER(grmatch_state::palette_w)
{
/* set the palette control; examined in the scanline callback */
- m_grmatch_palcontrol = data;
+ m_palcontrol = data;
}
-WRITE8_MEMBER(itech8_state::grmatch_xscroll_w)
+WRITE8_MEMBER(grmatch_state::xscroll_w)
{
/* update the X scroll value */
//m_screen->update_now();
m_screen->update_partial(m_screen->vpos());
- m_grmatch_xscroll = data;
+ m_xscroll = data;
}
-TIMER_DEVICE_CALLBACK_MEMBER(itech8_state::grmatch_palette_update)
+void grmatch_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_PALETTE:
+ palette_update();
+ break;
+ default:
+ itech8_state::device_timer(timer, id, param, ptr);
+ break;
+ }
+}
+
+void grmatch_state::palette_update()
{
/* if the high bit is set, we are supposed to latch the palette values */
- if (m_grmatch_palcontrol & 0x80)
+ if (m_palcontrol & 0x80)
{
/* the TMS34070s latch at the start of the frame, based on the first few bytes */
- uint32_t page_offset = (m_tms34061->m_display.dispstart & 0x0ffff) | m_grmatch_xscroll;
- int page, x;
+ uint32_t page_offset = (m_tms34061->m_display.dispstart & 0x0ffff) | m_xscroll;
/* iterate over both pages */
- for (page = 0; page < 2; page++)
+ for (int page = 0; page < 2; page++)
{
const uint8_t *base = &m_tms34061->m_display.vram[(page * 0x20000 + page_offset) & VRAM_MASK];
- for (x = 0; x < 16; x++)
+ for (int x = 0; x < 16; x++)
{
uint8_t data0 = base[x * 2 + 0];
uint8_t data1 = base[x * 2 + 1];
- m_grmatch_palette[page][x] = rgb_t(pal4bit(data0 >> 0), pal4bit(data1 >> 4), pal4bit(data1 >> 0));
+ m_palette[page][x] = rgb_t(pal4bit(data0 >> 0), pal4bit(data1 >> 4), pal4bit(data1 >> 0));
}
}
}
+
+ m_palette_timer->adjust(m_screen->time_until_pos(m_screen->vpos()+1));
}
@@ -611,11 +625,8 @@ uint32_t itech8_state::screen_update_2layer(screen_device &screen, bitmap_rgb32
}
-uint32_t itech8_state::screen_update_grmatch(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t grmatch_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- uint32_t page_offset;
- int x, y;
-
/* first get the current display state */
m_tms34061->get_display_state();
@@ -631,27 +642,27 @@ uint32_t itech8_state::screen_update_grmatch(screen_device &screen, bitmap_rgb32
/* bottom layer @ 0x20000 is 4bpp, colors come from TMS34070, enabled via palette control */
/* 4bpp pixels are packed 2 to a byte */
/* xscroll is set via a separate register */
- page_offset = (m_tms34061->m_display.dispstart & 0x0ffff) | m_grmatch_xscroll;
- for (y = cliprect.min_y; y <= cliprect.max_y; y++)
+ uint32_t page_offset = (m_tms34061->m_display.dispstart & 0x0ffff) | m_xscroll;
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
uint8_t *base0 = &m_tms34061->m_display.vram[0x00000 + ((page_offset + y * 256) & 0xffff)];
uint8_t *base2 = &m_tms34061->m_display.vram[0x20000 + ((page_offset + y * 256) & 0xffff)];
uint32_t *dest = &bitmap.pix32(y);
- for (x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)
+ for (int x = cliprect.min_x & ~1; x <= cliprect.max_x; x += 2)
{
uint8_t pix0 = base0[x / 2];
uint8_t pix2 = base2[x / 2];
if ((pix0 & 0xf0) != 0)
- dest[x] = m_grmatch_palette[0][pix0 >> 4];
+ dest[x] = m_palette[0][pix0 >> 4];
else
- dest[x] = m_grmatch_palette[1][pix2 >> 4];
+ dest[x] = m_palette[1][pix2 >> 4];
if ((pix0 & 0x0f) != 0)
- dest[x + 1] = m_grmatch_palette[0][pix0 & 0x0f];
+ dest[x + 1] = m_palette[0][pix0 & 0x0f];
else
- dest[x + 1] = m_grmatch_palette[1][pix2 & 0x0f];
+ dest[x + 1] = m_palette[1][pix2 & 0x0f];
}
}
return 0;