diff --git a/src/devices/bus/oricext/jasmin.cpp b/src/devices/bus/oricext/jasmin.cpp index a50ab9d742d..84144a010c1 100644 --- a/src/devices/bus/oricext/jasmin.cpp +++ b/src/devices/bus/oricext/jasmin.cpp @@ -31,10 +31,21 @@ INPUT_PORTS_START( jasmin ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Boot") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHANGED_MEMBER(DEVICE_SELF, oric_jasmin_device, boot_pressed, 0) INPUT_PORTS_END -void oric_jasmin_device::map(address_map &map) +void oric_jasmin_device::map_io(address_space_installer &space) { - map(0x3f4, 0x3f7).rw("fdc", FUNC(wd1770_device::read), FUNC(wd1770_device::write)); - map(0x3f8, 0x3ff).w(m_fdlatch, FUNC(ls259_device::write_d0)); + space.install_read_handler(0x3f4, 0x3f7, read8sm_delegate(m_fdc, FUNC(wd1770_device::read))); + space.install_write_handler(0x3f4, 0x3f7, write8sm_delegate(m_fdc, FUNC(wd1770_device::write))); + + space.install_write_handler(0x3f8, 0x3ff, write8sm_delegate(m_fdlatch, FUNC(ls259_device::write_d0))); +} + +void oric_jasmin_device::map_rom() +{ + (*view)[2].unmap_write(0xf800, 0xffff); + (*view)[2].install_rom(0xf800, 0xffff, m_jasmin_rom); + + (*view)[3].unmap_readwrite(0xc000, 0xffff); + (*view)[3].install_rom(0xf800, 0xffff, m_jasmin_rom); } oric_jasmin_device::oric_jasmin_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : @@ -54,7 +65,6 @@ oric_jasmin_device::~oric_jasmin_device() void oric_jasmin_device::device_start() { - cpu->space(AS_PROGRAM).install_device(0x0000, 0xffff, *this, &oric_jasmin_device::map); } const tiny_rom_entry *oric_jasmin_device::device_rom_region() const @@ -91,37 +101,15 @@ ioport_constructor oric_jasmin_device::device_input_ports() const void oric_jasmin_device::remap() { if(m_fdlatch->q3_r()) { - if(m_fdlatch->q2_r()) { - bank_c000_r->set_base(ram+0xc000); - bank_e000_r->set_base(ram+0xe000); - bank_f800_r->set_base(m_jasmin_rom.target()); - bank_c000_w->set_base(ram+0xc000); - bank_e000_w->set_base(ram+0xe000); - bank_f800_w->set_base(junk_write); - } else { - bank_c000_r->set_base(junk_read); - bank_e000_r->set_base(junk_read); - bank_f800_r->set_base(m_jasmin_rom.target()); - bank_c000_w->set_base(junk_write); - bank_e000_w->set_base(junk_write); - bank_f800_w->set_base(junk_write); - } + if(m_fdlatch->q2_r()) + view->select(3); + else + view->select(2); } else { - if(m_fdlatch->q2_r()) { - bank_c000_r->set_base(ram+0xc000); - bank_e000_r->set_base(ram+0xe000); - bank_f800_r->set_base(ram+0xf800); - bank_c000_w->set_base(ram+0xc000); - bank_e000_w->set_base(ram+0xe000); - bank_f800_w->set_base(ram+0xf800); - } else { - bank_c000_r->set_base(rom+0x0000); - bank_e000_r->set_base(rom+0x2000); - bank_f800_r->set_base(rom+0x3800); - bank_c000_w->set_base(junk_write); - bank_e000_w->set_base(junk_write); - bank_f800_w->set_base(junk_write); - } + if(m_fdlatch->q2_r()) + view->select(1); + else + view->select(0); } } @@ -129,7 +117,8 @@ INPUT_CHANGED_MEMBER(oric_jasmin_device::boot_pressed) { if(newval) { m_fdlatch->write_bit(3, 1); - cpu->reset(); + reset_w(1); + reset_w(0); } } diff --git a/src/devices/bus/oricext/jasmin.h b/src/devices/bus/oricext/jasmin.h index 17baba8aaad..ec727c19769 100644 --- a/src/devices/bus/oricext/jasmin.h +++ b/src/devices/bus/oricext/jasmin.h @@ -26,6 +26,9 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; + virtual void map_io(address_space_installer &space) override; + virtual void map_rom() override; + private: void remap(); @@ -34,8 +37,6 @@ private: DECLARE_WRITE_LINE_MEMBER(rom_access_w); DECLARE_WRITE_LINE_MEMBER(select_w); - void map(address_map &map); - static void floppy_formats(format_registration &fr); required_device m_fdc; diff --git a/src/devices/bus/oricext/microdisc.cpp b/src/devices/bus/oricext/microdisc.cpp index 31ef1a7941d..e6ff1e158ea 100644 --- a/src/devices/bus/oricext/microdisc.cpp +++ b/src/devices/bus/oricext/microdisc.cpp @@ -22,17 +22,28 @@ static void microdisc_floppies(device_slot_interface &device) device.option_add("3dsdd", FLOPPY_3_DSDD); } -void oric_microdisc_device::map(address_map &map) +void oric_microdisc_device::map_io(address_space_installer &space) { - map(0x310, 0x313).rw("fdc", FUNC(fd1793_device::read), FUNC(fd1793_device::write)); - map(0x314, 0x314).rw(FUNC(oric_microdisc_device::port_314_r), FUNC(oric_microdisc_device::port_314_w)); - map(0x318, 0x318).r(FUNC(oric_microdisc_device::port_318_r)); + space.install_read_handler(0x310, 0x313, read8sm_delegate(fdc, FUNC(fd1793_device::read))); + space.install_write_handler(0x310, 0x313, write8sm_delegate(fdc, FUNC(fd1793_device::write))); + + space.install_read_handler(0x314, 0x314, read8smo_delegate(*this, FUNC(oric_microdisc_device::port_314_r))); + space.install_write_handler(0x314, 0x314, write8smo_delegate(*this, FUNC(oric_microdisc_device::port_314_w))); + + space.install_read_handler(0x318, 0x318, read8smo_delegate(*this, FUNC(oric_microdisc_device::port_318_r))); +} + +void oric_microdisc_device::map_rom() +{ + (*view)[2].unmap_write(0xe000, 0xffff); + (*view)[2].install_rom(0xe000, 0xffff, microdisc_rom); } oric_microdisc_device::oric_microdisc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, ORIC_MICRODISC, tag, owner, clock), device_oricext_interface(mconfig, *this), - fdc(*this, "fdc"), microdisc_rom(nullptr), + fdc(*this, "fdc"), + microdisc_rom(*this, "microdisc"), floppies(*this, "fdc:%u", 0U), port_314(0), intrq_state(false), drq_state(false), hld_state(false) { @@ -44,22 +55,15 @@ oric_microdisc_device::~oric_microdisc_device() void oric_microdisc_device::device_start() { - microdisc_rom = device().machine().root_device().memregion(this->subtag("microdisc").c_str())->base(); - cpu->space(AS_PROGRAM).install_device(0x0000, 0xffff, *this, &oric_microdisc_device::map); - intrq_state = drq_state = hld_state = false; } void oric_microdisc_device::device_reset() { port_314 = 0x00; + view->select(2); irq_w(false); - remap(); fdc->set_floppy(floppies[0]->get_device()); - - // The bootstrap checksums part of the high ram and if the sum is - // 0 it goes wrong. - ram[0xe000] = 0x42; } const tiny_rom_entry *oric_microdisc_device::device_rom_region() const @@ -81,36 +85,16 @@ void oric_microdisc_device::device_add_mconfig(machine_config &config) FLOPPY_CONNECTOR(config, "fdc:3", microdisc_floppies, nullptr, oric_microdisc_device::floppy_formats); } -void oric_microdisc_device::remap() -{ - if(port_314 & P_ROMDIS) { - bank_c000_r->set_base(rom+0x0000); - bank_e000_r->set_base(rom+0x2000); - bank_f800_r->set_base(rom+0x3800); - bank_c000_w->set_base(junk_write); - bank_e000_w->set_base(junk_write); - bank_f800_w->set_base(junk_write); - } else { - bank_c000_r->set_base(ram+0xc000); - bank_c000_w->set_base(ram+0xc000); - if(port_314 & P_EPROM) { - bank_e000_r->set_base(ram+0xe000); - bank_f800_r->set_base(ram+0xf800); - bank_e000_w->set_base(ram+0xe000); - bank_f800_w->set_base(ram+0xf800); - } else { - bank_e000_r->set_base(microdisc_rom+0x0000); - bank_f800_r->set_base(microdisc_rom+0x1800); - bank_e000_w->set_base(junk_write); - bank_f800_w->set_base(junk_write); - } - } -} - void oric_microdisc_device::port_314_w(uint8_t data) { port_314 = data; - remap(); + if(port_314 & P_ROMDIS) + view->select(0); + else if(port_314 & P_EPROM) + view->select(1); + else + view->select(2); + floppy_image_device *floppy = floppies[(port_314 >> 5) & 3]->get_device(); fdc->set_floppy(floppy); fdc->dden_w(port_314 & P_DDEN); @@ -144,7 +128,6 @@ WRITE_LINE_MEMBER(oric_microdisc_device::fdc_drq_w) WRITE_LINE_MEMBER(oric_microdisc_device::fdc_hld_w) { - logerror("hld %d\n", state); hld_state = state; floppy_image_device *floppy = floppies[(port_314 >> 5) & 3]->get_device(); if(floppy) diff --git a/src/devices/bus/oricext/microdisc.h b/src/devices/bus/oricext/microdisc.h index 312a9b69954..032b905da12 100644 --- a/src/devices/bus/oricext/microdisc.h +++ b/src/devices/bus/oricext/microdisc.h @@ -26,21 +26,22 @@ protected: P_EPROM = 0x80 }; - required_device fdc; - - uint8_t *microdisc_rom; - required_device_array floppies; - uint8_t port_314; - bool intrq_state, drq_state, hld_state; - virtual void device_start() override; virtual void device_reset() override; const tiny_rom_entry *device_rom_region() const override; virtual void device_add_mconfig(machine_config &config) override; - void remap(); + virtual void map_io(address_space_installer &space) override; + virtual void map_rom() override; private: + required_device fdc; + required_region_ptr microdisc_rom; + required_device_array floppies; + + uint8_t port_314; + bool intrq_state, drq_state, hld_state; + DECLARE_WRITE_LINE_MEMBER(fdc_irq_w); DECLARE_WRITE_LINE_MEMBER(fdc_drq_w); DECLARE_WRITE_LINE_MEMBER(fdc_hld_w); @@ -49,8 +50,6 @@ private: uint8_t port_314_r(); uint8_t port_318_r(); - void map(address_map &map); - static void floppy_formats(format_registration &fr); }; diff --git a/src/devices/bus/oricext/oricext.cpp b/src/devices/bus/oricext/oricext.cpp index c678edc0ef6..6cb58f814bb 100644 --- a/src/devices/bus/oricext/oricext.cpp +++ b/src/devices/bus/oricext/oricext.cpp @@ -11,7 +11,7 @@ oricext_connector::oricext_connector(const machine_config &mconfig, const char * device_t(mconfig, ORICEXT_CONNECTOR, tag, owner, clock), device_single_card_slot_interface(mconfig, *this), irq_handler(*this), - cpu(*this, finder_base::DUMMY_TAG) + reset_handler(*this) { } @@ -22,6 +22,7 @@ oricext_connector::~oricext_connector() void oricext_connector::device_start() { irq_handler.resolve_safe(); + reset_handler.resolve_safe(); } void oricext_connector::irq_w(int state) @@ -29,36 +30,42 @@ void oricext_connector::irq_w(int state) irq_handler(state); } +void oricext_connector::reset_w(int state) +{ + reset_handler(state); +} + +void oricext_connector::set_view(memory_view &_view) +{ + auto card = get_card_device(); + if(card) + card->set_view(_view); +} + +void oricext_connector::map_io(address_space_installer &space) +{ + auto card = get_card_device(); + if(card) + card->map_io(space); +} + +void oricext_connector::map_rom() +{ + auto card = get_card_device(); + if(card) + card->map_rom(); +} + device_oricext_interface::device_oricext_interface(const machine_config &mconfig, device_t &device) : device_interface(device, "oricext"), - cpu(nullptr), - connector(nullptr), - bank_c000_r(nullptr), - bank_e000_r(nullptr), - bank_f800_r(nullptr), - bank_c000_w(nullptr), - bank_e000_w(nullptr), - bank_f800_w(nullptr), - rom(nullptr), - ram(nullptr) + view(nullptr), + connector(nullptr) { } void device_oricext_interface::interface_pre_start() { connector = downcast(device().owner()); - cpu = connector->cpu.target(); - bank_c000_r = device().membank(":bank_c000_r"); - bank_e000_r = device().membank(":bank_e000_r"); - bank_f800_r = device().membank(":bank_f800_r"); - bank_c000_w = device().membank(":bank_c000_w"); - bank_e000_w = device().membank(":bank_e000_w"); - bank_f800_w = device().membank(":bank_f800_w"); - rom = (uint8_t *)cpu->memregion(DEVICE_SELF)->base(); - ram = (uint8_t *)device().memshare(":ram")->ptr(); - - memset(junk_read, 0xff, sizeof(junk_read)); - memset(junk_write, 0x00, sizeof(junk_write)); } WRITE_LINE_MEMBER(device_oricext_interface::irq_w) @@ -66,6 +73,16 @@ WRITE_LINE_MEMBER(device_oricext_interface::irq_w) connector->irq_w(state); } +WRITE_LINE_MEMBER(device_oricext_interface::reset_w) +{ + connector->reset_w(state); +} + +void device_oricext_interface::set_view(memory_view &_view) +{ + view = &_view; +} + void oricext_intf(device_slot_interface &device) { device.option_add("jasmin", ORIC_JASMIN); diff --git a/src/devices/bus/oricext/oricext.h b/src/devices/bus/oricext/oricext.h index 2d017f1e376..2ec7c34b1c1 100644 --- a/src/devices/bus/oricext/oricext.h +++ b/src/devices/bus/oricext/oricext.h @@ -20,46 +20,53 @@ class oricext_connector: public device_t, public device_single_card_slot_interfa friend class device_oricext_interface; public: - template - oricext_connector(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt, U &&cputag) + template + oricext_connector(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt) : oricext_connector(mconfig, tag, owner, (uint32_t)0) { option_reset(); opts(*this); set_default_option(dflt); set_fixed(false); - set_cputag(std::forward(cputag)); } oricext_connector(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual ~oricext_connector(); - template void set_cputag(T &&tag) { cpu.set_tag(std::forward(tag)); } auto irq_callback() { return irq_handler.bind(); } + auto reset_callback() { return reset_handler.bind(); } + void irq_w(int state); + void reset_w(int state); + + void set_view(memory_view &view); + void map_io(address_space_installer &space); + void map_rom(); protected: virtual void device_start() override; devcb_write_line irq_handler; - required_device cpu; + devcb_write_line reset_handler; }; class device_oricext_interface : public device_interface { public: DECLARE_WRITE_LINE_MEMBER(irq_w); + DECLARE_WRITE_LINE_MEMBER(reset_w); + void set_view(memory_view &view); + virtual void map_io(address_space_installer &space) = 0; + virtual void map_rom() = 0; + protected: device_oricext_interface(const machine_config &mconfig, device_t &device); virtual void interface_pre_start() override; - m6502_device *cpu; + memory_view *view; oricext_connector *connector; - memory_bank *bank_c000_r, *bank_e000_r, *bank_f800_r, *bank_c000_w, *bank_e000_w, *bank_f800_w; - uint8_t *rom, *ram; - uint8_t junk_read[8192], junk_write[8192]; }; DECLARE_DEVICE_TYPE(ORICEXT_CONNECTOR, oricext_connector) diff --git a/src/mame/tangerine/oric.cpp b/src/mame/tangerine/oric.cpp index e6e86624559..49a2c1dce4a 100644 --- a/src/mame/tangerine/oric.cpp +++ b/src/mame/tangerine/oric.cpp @@ -71,14 +71,10 @@ public: , m_via(*this, "via6522") , m_ram(*this, "ram") , m_rom(*this, "maincpu") - , m_bank_c000_r(*this, "bank_c000_r") - , m_bank_e000_r(*this, "bank_e000_r") - , m_bank_f800_r(*this, "bank_f800_r") - , m_bank_c000_w(*this, "bank_c000_w") - , m_bank_e000_w(*this, "bank_e000_w") - , m_bank_f800_w(*this, "bank_f800_w") + , m_c000_view(*this, "c000") , m_config(*this, "CONFIG") , m_kbd_row(*this, "ROW%u", 0U) + , m_ext(*this, "ext") , m_tape_timer(nullptr) { } @@ -98,9 +94,11 @@ public: uint32_t screen_update_oric(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(vblank_w); - void oric(machine_config &config, bool add_ext = true); + void oric_common(machine_config &config); + void oric(machine_config &config); void prav8d(machine_config &config); void oric_mem(address_map &map); + protected: required_device m_maincpu; required_device m_palette; @@ -111,14 +109,10 @@ protected: required_device m_via; required_shared_ptr m_ram; optional_memory_region m_rom; - required_memory_bank m_bank_c000_r; - optional_memory_bank m_bank_e000_r; - optional_memory_bank m_bank_f800_r; - required_memory_bank m_bank_c000_w; - optional_memory_bank m_bank_e000_w; - optional_memory_bank m_bank_f800_w; + memory_view m_c000_view; required_ioport m_config; required_ioport_array<8> m_kbd_row; + optional_device m_ext; emu_timer *m_tape_timer; @@ -188,14 +182,13 @@ protected: required_ioport m_joy2; required_device_array m_floppies; + uint8_t m_port_314; uint8_t m_via2_a, m_via2_b; bool m_via2_ca2, m_via2_cb2, m_via2_irq; bool m_acia_irq; bool m_fdc_irq, m_fdc_drq, m_fdc_hld; - uint8_t m_junk_read[0x4000], m_junk_write[0x4000]; - virtual void update_irq() override; void remap(); void port_314_w(u8 data); @@ -206,11 +199,13 @@ protected: /* Ram is 64K, with 16K hidden by the rom. The 300-3ff is also hidden by the i/o */ void oric_state::oric_mem(address_map &map) { - map(0x0000, 0xffff).ram().share("ram"); + map(0x0000, 0xffff).ram().share(m_ram); map(0x0300, 0x030f).m(m_via, FUNC(via6522_device::map)).mirror(0xf0); - map(0xc000, 0xdfff).bankr("bank_c000_r").bankw("bank_c000_w"); - map(0xe000, 0xf7ff).bankr("bank_e000_r").bankw("bank_e000_w"); - map(0xf800, 0xffff).bankr("bank_f800_r").bankw("bank_f800_w"); + map(0xc000, 0xffff).view(m_c000_view); + m_c000_view[0](0xc000, 0xffff).rom().region(m_rom, 0); + m_c000_view[0](0xc000, 0xffff).unmapw(); + m_c000_view[1]; // Ram range, ensure it exists + m_c000_view[2]; // FDC rom range, ensure it exists } /* @@ -225,7 +220,24 @@ void telestrat_state::telestrat_mem(address_map &map) map(0x0318, 0x0318).r(FUNC(telestrat_state::port_318_r)); map(0x031c, 0x031f).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)); map(0x0320, 0x032f).m(m_via2, FUNC(via6522_device::map)); - map(0xc000, 0xffff).bankr("bank_c000_r").bankw("bank_c000_w"); + + // Theorically, these are cartridges. There's no real point to + // making them configurable, when only 4 existed and there are 7 + // slots. + + map(0xc000, 0xffff).view(m_c000_view); + m_c000_view[0]; // Ram range, ensure it exists + m_c000_view[1](0xc000, 0xffff).unmaprw(); // Nothing in that slot + m_c000_view[2](0xc000, 0xffff).unmaprw(); // Nothing in that slot + m_c000_view[3](0xc000, 0xffff).unmaprw(); // Nothing in that slot + m_c000_view[4](0xc000, 0xffff).rom().region(m_telmatic, 0); + m_c000_view[4](0xc000, 0xffff).unmapw(); + m_c000_view[5](0xc000, 0xffff).rom().region(m_teleass, 0); + m_c000_view[5](0xc000, 0xffff).unmapw(); + m_c000_view[6](0xc000, 0xffff).rom().region(m_hyperbas, 0); + m_c000_view[6](0xc000, 0xffff).unmapw(); + m_c000_view[7](0xc000, 0xffff).rom().region(m_telmon24, 0); + m_c000_view[7](0xc000, 0xffff).unmapw(); } uint32_t oric_state::screen_update_oric(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) @@ -406,7 +418,7 @@ void oric_state::machine_start_common() m_via_irq = false; m_ext_irq = false; - if (!m_tape_timer) + if(!m_tape_timer) m_tape_timer = timer_alloc(FUNC(oric_state::update_tape), this); save_item(NAME(m_blink_counter)); @@ -423,13 +435,17 @@ void oric_state::machine_start_common() void oric_state::machine_start() { machine_start_common(); - m_bank_c000_r->set_base(m_rom->base()); - m_bank_e000_r->set_base(m_rom->base() + 0x2000); - m_bank_f800_r->set_base(m_rom->base() + 0x3800); + + m_c000_view.select(0); + m_ext->set_view(m_c000_view); + m_ext->map_io(m_maincpu->space(AS_PROGRAM)); + m_ext->map_rom(); } void oric_state::machine_reset() { + m_ram[0xe000] = 0x42; // Microdisc needs a non-fully-zero high ram + m_tape_timer->adjust(attotime::from_hz(4800), 0, attotime::from_hz(4800)); } @@ -439,9 +455,6 @@ void telestrat_state::machine_start() m_fdc_irq = m_fdc_drq = m_fdc_hld = false; m_acia_irq = false; - memset(m_junk_read, 0x00, sizeof(m_junk_read)); - memset(m_junk_write, 0x00, sizeof(m_junk_write)); - save_item(NAME(m_port_314)); save_item(NAME(m_via2_a)); save_item(NAME(m_via2_b)); @@ -459,7 +472,7 @@ void telestrat_state::machine_reset() m_tape_timer->adjust(attotime::from_hz(4800), 0, attotime::from_hz(4800)); m_port_314 = 0x00; m_via2_a = 0xff; - remap(); + m_c000_view.select(7); } void telestrat_state::update_irq() @@ -475,7 +488,7 @@ void telestrat_state::update_irq() void telestrat_state::via2_a_w(uint8_t data) { m_via2_a = data; - remap(); + m_c000_view.select(data & 7); } void telestrat_state::via2_b_w(uint8_t data) @@ -552,43 +565,6 @@ WRITE_LINE_MEMBER(telestrat_state::fdc_hld_w) m_fdc_hld = state; } -void telestrat_state::remap() -{ - // Theorically, these are cartridges. There's no real point to - // making them configurable, when only 4 existed and there are 7 - // slots. - - switch(m_via2_a & 7) { - case 0: - m_bank_c000_r->set_base(m_ram+0xc000); - m_bank_c000_w->set_base(m_ram+0xc000); - break; - case 1: - case 2: - case 3: - m_bank_c000_r->set_base(m_junk_read); - m_bank_c000_w->set_base(m_junk_write); - break; - case 4: - m_bank_c000_r->set_base(m_telmatic->base()); - m_bank_c000_w->set_base(m_junk_write); - break; - case 5: - m_bank_c000_r->set_base(m_teleass->base()); - m_bank_c000_w->set_base(m_junk_write); - break; - case 6: - m_bank_c000_r->set_base(m_hyperbas->base()); - m_bank_c000_w->set_base(m_junk_write); - break; - case 7: - m_bank_c000_r->set_base(m_telmon24->base()); - m_bank_c000_w->set_base(m_junk_write); - break; - } -} - - static INPUT_PORTS_START(oric) PORT_START("ROW0") @@ -806,7 +782,7 @@ static INPUT_PORTS_START(telstrat) INPUT_PORTS_END -void oric_state::oric(machine_config &config, bool add_ext) // this variable not used +void oric_state::oric_common(machine_config &config) { /* basic machine hardware */ M6502(config, m_maincpu, 12_MHz_XTAL / 12); @@ -853,14 +829,21 @@ void oric_state::oric(machine_config &config, bool add_ext) // this variable not m_via->ca2_handler().set(FUNC(oric_state::via_ca2_w)); m_via->cb2_handler().set(FUNC(oric_state::via_cb2_w)); m_via->irq_handler().set(FUNC(oric_state::via_irq_w)); +} + +void oric_state::oric(machine_config &config) +{ + oric_common(config); /* extension port */ - ORICEXT_CONNECTOR(config, "ext", oricext_intf, nullptr, "maincpu").irq_callback().set(FUNC(oric_state::ext_irq_w)); + ORICEXT_CONNECTOR(config, m_ext, oricext_intf, nullptr); + m_ext->irq_callback().set(FUNC(oric_state::ext_irq_w)); + m_ext->reset_callback().set_inputline(m_maincpu, INPUT_LINE_RESET); } void oric_state::prav8d(machine_config &config) { - oric(config, true); + oric(config); } void telestrat_state::floppy_formats(format_registration &fr) @@ -876,7 +859,7 @@ static void telestrat_floppies(device_slot_interface &device) void telestrat_state::telstrat(machine_config &config) { - oric(config, false); + oric(config); m_maincpu->set_addrmap(AS_PROGRAM, &telestrat_state::telestrat_mem); /* acia */