From c8342d71185707847804b266e73679cdb6508daf Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Tue, 7 Aug 2018 18:20:15 +0200 Subject: -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 --- src/devices/cpu/cop400/cop400.h | 7 + src/devices/machine/i8279.h | 7 + src/devices/machine/nvram.h | 8 + src/devices/machine/watchdog.h | 7 +- src/devices/machine/z80scc.h | 15 ++ src/devices/sound/2608intf.h | 1 + src/devices/sound/es5503.h | 2 + src/devices/video/tlc34076.h | 6 + src/devices/video/tms34061.h | 1 + src/mame/drivers/cops.cpp | 85 ++++----- src/mame/drivers/enmirage.cpp | 50 ++--- src/mame/drivers/gameplan.cpp | 82 ++++---- src/mame/drivers/goupil.cpp | 357 ++++++++++++++++------------------- src/mame/drivers/gts3.cpp | 47 +++-- src/mame/drivers/gts3a.cpp | 81 ++++---- src/mame/drivers/itech32.cpp | 395 ++++++++++++++++++--------------------- src/mame/drivers/itech8.cpp | 403 +++++++++++++++++----------------------- src/mame/drivers/jr100.cpp | 71 +++---- src/mame/drivers/jvh.cpp | 38 ++-- src/mame/drivers/lisa.cpp | 120 ++++++------ src/mame/drivers/lwriter.cpp | 61 +++--- src/mame/drivers/pet.cpp | 10 +- src/mame/includes/itech32.h | 127 ++++++++----- src/mame/includes/itech8.h | 52 ++++-- src/mame/includes/lisa.h | 3 + src/mame/video/gameplan.cpp | 29 ++- src/mame/video/itech32.cpp | 169 ++++++++++------- src/mame/video/itech8.cpp | 55 +++--- 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 devcb_base &set_write_sk_callback(Object &&cb) { return m_write_sk.set_callback(std::forward(cb)); } template devcb_base &set_read_cko_callback(Object &&cb) { return m_read_cko.set_callback(std::forward(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 devcb_base &set_in_rl_callback(Object &&cb) { return m_in_rl_cb.set_callback(std::forward(cb)); } template devcb_base &set_in_shift_callback(Object &&cb) { return m_in_shift_cb.set_callback(std::forward(cb)); } template devcb_base &set_in_ctrl_callback(Object &&cb) { return m_in_ctrl_cb.set_callback(std::forward(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(cb); } + template 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(nullptr))); + } + template 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(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 devcb_base &set_out_rxdrq_callback(Object &&cb) { return m_out_rxdrq_cb[N].set_callback(std::forward(cb)); } template devcb_base &set_out_txdrq_callback(Object &&cb) { return m_out_txdrq_cb[N].set_callback(std::forward(cb)); } template devcb_base &set_out_int_callback(Object &&cb) { return m_out_int_cb.set_callback(std::forward(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 devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward(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 devcb_base &set_irqf(Object &&cb) { return m_irq_func.set_callback(std::forward(cb)); } template devcb_base &set_adcf(Object &&cb) { return m_adc_func.set_callback(std::forward(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 devcb_base &set_interrupt_callback(Object &&cb) { return m_interrupt_cb.set_callback(std::forward(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 m_maincpu; required_device m_acia; - optional_device m_ef9364; - required_device m_maincpu; required_device m_via_video; required_device m_via_keyb; required_device m_via_modem; + required_device m_palette; + required_device m_screen; required_device m_fdc; required_device m_floppy0; required_device 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 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 m_palette; +private: + void mem(address_map &map); + required_device m_visu24x80_ram; required_region_ptr 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, >s3_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 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, >s3a_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, >s3a_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 m_maincpu; -}; - + required_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 m_maincpu; required_device m_soundcpu; - optional_device m_dsp1; - optional_device m_dsp2; + required_device m_via; + required_device m_ensoniq; required_device m_screen; required_device m_palette; required_device m_ticket; @@ -85,23 +82,18 @@ private: optional_shared_ptr m_nvram; optional_shared_ptr m_video; optional_shared_ptr m_main_rom; - optional_shared_ptr m_drivedge_zbuf_control; - optional_shared_ptr m_tms1_boot; - optional_shared_ptr m_tms1_ram; - optional_shared_ptr 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 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 m_dsp1; + required_device m_dsp2; + required_shared_ptr m_zbuf_control; + required_shared_ptr m_tms1_boot; + required_shared_ptr m_tms1_ram; + required_shared_ptr 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 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 m_speaker; required_device m_nvram; required_device m_latch; + required_device m_fdc_cpu; required_shared_ptr m_fdc_rom; required_shared_ptr 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); } @@ -1080,25 +1091,42 @@ 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; -- cgit v1.2.3