diff options
Diffstat (limited to 'src/devices/bus/cbmiec')
26 files changed, 1109 insertions, 664 deletions
diff --git a/src/devices/bus/cbmiec/c1526.cpp b/src/devices/bus/cbmiec/c1526.cpp index 7123782d42c..45e4540e236 100644 --- a/src/devices/bus/cbmiec/c1526.cpp +++ b/src/devices/bus/cbmiec/c1526.cpp @@ -23,7 +23,7 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(C1526, c1526_device, "c1526", "Commodore 1526/MPS802 Printer") +DEFINE_DEVICE_TYPE(C1526, c1526_device, "c1526", "Commodore 1526/MPS-802 Dot Matrix Printer") DEFINE_DEVICE_TYPE(C4023, c4023_device, "c4023", "Commodore 4023 Printer") diff --git a/src/devices/bus/cbmiec/c1526.h b/src/devices/bus/cbmiec/c1526.h index d5042f283f1..52b7f906a47 100644 --- a/src/devices/bus/cbmiec/c1526.h +++ b/src/devices/bus/cbmiec/c1526.h @@ -6,8 +6,8 @@ **********************************************************************/ -#ifndef MAME_BUS_CBMIEC_C1626_H -#define MAME_BUS_CBMIEC_C1626_H +#ifndef MAME_BUS_CBMIEC_C1526_H +#define MAME_BUS_CBMIEC_C1526_H #pragma once @@ -30,9 +30,9 @@ protected: c1526_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - void c1526_mem(address_map &map); + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + void c1526_mem(address_map &map) ATTR_COLD; }; @@ -46,9 +46,9 @@ public: protected: // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; - virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_atn(int state) override; @@ -67,9 +67,9 @@ public: protected: // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; - virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; // device_ieee488_interface overrides virtual void ieee488_atn(int state) override; @@ -82,4 +82,4 @@ DECLARE_DEVICE_TYPE(C1526, c1526_device) DECLARE_DEVICE_TYPE(C4023, c4023_device) -#endif // MAME_BUS_CBMIEC_C1626_H +#endif // MAME_BUS_CBMIEC_C1526_H diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp index 925014ac803..961fe5c76db 100644 --- a/src/devices/bus/cbmiec/c1541.cpp +++ b/src/devices/bus/cbmiec/c1541.cpp @@ -10,8 +10,6 @@ TODO: - - c1540 fails to load the directory intermittently - - hardware extensions - Dolphin-DOS 2.0 - Dolphin-DOS 3.0 @@ -138,8 +136,13 @@ #include "emu.h" #include "c1541.h" + #include "bus/centronics/ctronics.h" +#include "formats/d64_dsk.h" +#include "formats/g64_dsk.h" +#include "formats/fs_cbmdos.h" + //************************************************************************** @@ -161,25 +164,25 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(C1540, c1540_t, "c1540", "Commodore 1540 Disk Drive") -DEFINE_DEVICE_TYPE(C1541, c1541_t, "c1541", "Commodore 1541 Disk Drive") -DEFINE_DEVICE_TYPE(C1541C, c1541c_t, "c1541c", "Commodore 1541C Disk Drive") -DEFINE_DEVICE_TYPE(C1541II, c1541ii_t, "c1541ii", "Commodore 1541-II Disk Drive") -DEFINE_DEVICE_TYPE(SX1541, sx1541_t, "sx1541", "SX1541 Disk Drive") -DEFINE_DEVICE_TYPE(FSD1, fsd1_t, "fsd1", "FSD-1 Disk Drive") -DEFINE_DEVICE_TYPE(FSD2, fsd2_t, "fsd2", "FSD-2 Disk Drive") -DEFINE_DEVICE_TYPE(CSD1, csd1_t, "csd1", "CSD-1 Disk Drive") -DEFINE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_t, "c1541dd", "Commodore 1541 Dolphin-DOS 2.0 Disk Drive") -DEFINE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_t, "c1541pd", "Commodore 1541 Professional-DOS v1 Disk Drive") -DEFINE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_t, "c1541pdc", "Commodore 1541 ProLogic-DOS Classic Disk Drive") -DEFINE_DEVICE_TYPE(INDUS_GT, indus_gt_t, "indusgt", "Indus GT Disk Drive") -DEFINE_DEVICE_TYPE(TECHNICA, technica_t, "technica", "Westfalia Technica Disk Drive") -DEFINE_DEVICE_TYPE(BLUE_CHIP, blue_chip_t, "bluechip", "Amtech Blue Chip Disk Drive") -DEFINE_DEVICE_TYPE(COMMANDER_C2, commander_c2_t, "cmdrc2", "Commander C-II Disk Drive") -DEFINE_DEVICE_TYPE(ENHANCER_2000, enhancer_2000_t, "enh2000", "Enhancer 2000 Disk Drive") -DEFINE_DEVICE_TYPE(FD148, fd148_t, "fd148", "Rapid Access FD-148 Disk Drive") -DEFINE_DEVICE_TYPE(MSD_SD1, msd_sd1_t, "msdsd1", "MSD SD-1 Disk Drive") -DEFINE_DEVICE_TYPE(MSD_SD2, msd_sd2_t, "msdsd2", "MSD SD-2 Disk Drive") +DEFINE_DEVICE_TYPE(C1540, c1540_device, "c1540", "Commodore 1540 Disk Drive") +DEFINE_DEVICE_TYPE(C1541, c1541_device, "c1541", "Commodore 1541 Disk Drive") +DEFINE_DEVICE_TYPE(C1541C, c1541c_device, "c1541c", "Commodore 1541C Disk Drive") +DEFINE_DEVICE_TYPE(C1541II, c1541ii_device, "c1541ii", "Commodore 1541-II Disk Drive") +DEFINE_DEVICE_TYPE(SX1541, sx1541_device, "sx1541", "SX1541 Disk Drive") +DEFINE_DEVICE_TYPE(FSD1, fsd1_device, "fsd1", "FSD-1 Disk Drive") +DEFINE_DEVICE_TYPE(FSD2, fsd2_device, "fsd2", "FSD-2 Disk Drive") +DEFINE_DEVICE_TYPE(CSD1, csd1_device, "csd1", "CSD-1 Disk Drive") +DEFINE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_device, "c1541dd", "Commodore 1541 Dolphin-DOS 2.0 Disk Drive") +DEFINE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_device, "c1541pd", "Commodore 1541 Professional-DOS v1 Disk Drive") +DEFINE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_device, "c1541pdc", "Commodore 1541 ProLogic-DOS Classic Disk Drive") +DEFINE_DEVICE_TYPE(INDUS_GT, indus_gt_device, "indusgt", "Indus GT Disk Drive") +DEFINE_DEVICE_TYPE(TECHNICA, technica_device, "technica", "Westfalia Technica Disk Drive") +DEFINE_DEVICE_TYPE(BLUE_CHIP, blue_chip_device, "bluechip", "Amtech Blue Chip Disk Drive") +DEFINE_DEVICE_TYPE(COMMANDER_C2, commander_c2_device, "cmdrc2", "Commander C-II Disk Drive") +DEFINE_DEVICE_TYPE(ENHANCER_2000, enhancer_2000_device, "enh2000", "Enhancer 2000 Disk Drive") +DEFINE_DEVICE_TYPE(FD148, fd148_device, "fd148", "Rapid Access FD-148 Disk Drive") +DEFINE_DEVICE_TYPE(MSD_SD1, msd_sd1_device, "msdsd1", "MSD SD-1 Disk Drive") +DEFINE_DEVICE_TYPE(MSD_SD2, msd_sd2_device, "msdsd2", "MSD SD-2 Disk Drive") //------------------------------------------------- @@ -197,7 +200,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1540_t::device_rom_region() const +const tiny_rom_entry *c1540_device::device_rom_region() const { return ROM_NAME( c1540 ); } @@ -241,7 +244,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_t::device_rom_region() const +const tiny_rom_entry *c1541_device::device_rom_region() const { return ROM_NAME( c1541 ); } @@ -265,7 +268,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541c_t::device_rom_region() const +const tiny_rom_entry *c1541c_device::device_rom_region() const { return ROM_NAME( c1541c ); } @@ -291,7 +294,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541ii_t::device_rom_region() const +const tiny_rom_entry *c1541ii_device::device_rom_region() const { return ROM_NAME( c1541ii ); } @@ -319,7 +322,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *sx1541_t::device_rom_region() const +const tiny_rom_entry *sx1541_device::device_rom_region() const { return ROM_NAME( sx1541 ); } @@ -339,7 +342,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *fsd1_t::device_rom_region() const +const tiny_rom_entry *fsd1_device::device_rom_region() const { return ROM_NAME( fsd1 ); } @@ -367,7 +370,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *fsd2_t::device_rom_region() const +const tiny_rom_entry *fsd2_device::device_rom_region() const { return ROM_NAME( fsd2 ); } @@ -388,7 +391,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *csd1_t::device_rom_region() const +const tiny_rom_entry *csd1_device::device_rom_region() const { return ROM_NAME( csd1 ); } @@ -408,7 +411,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_dolphin_dos_t::device_rom_region() const +const tiny_rom_entry *c1541_dolphin_dos_device::device_rom_region() const { return ROM_NAME( c1541dd ); } @@ -429,7 +432,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_professional_dos_v1_t::device_rom_region() const +const tiny_rom_entry *c1541_professional_dos_v1_device::device_rom_region() const { return ROM_NAME( c1541pd ); } @@ -454,7 +457,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *c1541_prologic_dos_classic_t::device_rom_region() const +const tiny_rom_entry *c1541_prologic_dos_classic_device::device_rom_region() const { return ROM_NAME( c1541pdc ); } @@ -478,7 +481,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *indus_gt_t::device_rom_region() const +const tiny_rom_entry *indus_gt_device::device_rom_region() const { return ROM_NAME( indusgt ); } @@ -498,7 +501,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *technica_t::device_rom_region() const +const tiny_rom_entry *technica_device::device_rom_region() const { return ROM_NAME( technica ); } @@ -521,7 +524,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *blue_chip_t::device_rom_region() const +const tiny_rom_entry *blue_chip_device::device_rom_region() const { return ROM_NAME( bluechip ); } @@ -542,7 +545,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *commander_c2_t::device_rom_region() const +const tiny_rom_entry *commander_c2_device::device_rom_region() const { return ROM_NAME( cmdrc2 ); } @@ -562,7 +565,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *enhancer_2000_t::device_rom_region() const +const tiny_rom_entry *enhancer_2000_device::device_rom_region() const { return ROM_NAME( enh2000 ); } @@ -582,7 +585,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *fd148_t::device_rom_region() const +const tiny_rom_entry *fd148_device::device_rom_region() const { return ROM_NAME( fd148 ); } @@ -603,7 +606,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *msd_sd1_t::device_rom_region() const +const tiny_rom_entry *msd_sd1_device::device_rom_region() const { return ROM_NAME( msdsd1 ); } @@ -624,7 +627,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *msd_sd2_t::device_rom_region() const +const tiny_rom_entry *msd_sd2_device::device_rom_region() const { return ROM_NAME( msdsd2 ); } @@ -634,7 +637,7 @@ const tiny_rom_entry *msd_sd2_t::device_rom_region() const // read - //------------------------------------------------- -READ8_MEMBER( c1541_prologic_dos_classic_t::read ) +uint8_t c1541_prologic_dos_classic_device::read() { return 0; } @@ -644,7 +647,7 @@ READ8_MEMBER( c1541_prologic_dos_classic_t::read ) // write - //------------------------------------------------- -WRITE8_MEMBER( c1541_prologic_dos_classic_t::write ) +void c1541_prologic_dos_classic_device::write(uint8_t data) { } @@ -653,7 +656,7 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_t::write ) // ADDRESS_MAP( c1541_mem ) //------------------------------------------------- -void c1541_base_t::c1541_mem(address_map &map) +void c1541_device_base::c1541_mem(address_map &map) { map(0x0000, 0x07ff).mirror(0x6000).ram(); map(0x1800, 0x180f).mirror(0x63f0).m(M6522_0_TAG, FUNC(via6522_device::map)); @@ -666,7 +669,7 @@ void c1541_base_t::c1541_mem(address_map &map) // ADDRESS_MAP( c1541dd_mem ) //------------------------------------------------- -void c1541_base_t::c1541dd_mem(address_map &map) +void c1541_device_base::c1541dd_mem(address_map &map) { map(0x0000, 0x07ff).mirror(0x6000).ram(); map(0x1800, 0x180f).mirror(0x63f0).m(M6522_0_TAG, FUNC(via6522_device::map)); @@ -680,7 +683,7 @@ void c1541_base_t::c1541dd_mem(address_map &map) // ADDRESS_MAP( c1541pd_mem ) //------------------------------------------------- -void c1541_base_t::c1541pd_mem(address_map &map) +void c1541_device_base::c1541pd_mem(address_map &map) { map(0x0000, 0x07ff).mirror(0x6000).ram(); map(0x1800, 0x180f).mirror(0x63f0).m(M6522_0_TAG, FUNC(via6522_device::map)); @@ -695,34 +698,34 @@ void c1541_base_t::c1541pd_mem(address_map &map) // ADDRESS_MAP( c1541pdc_mem ) //------------------------------------------------- -void c1541_prologic_dos_classic_t::c1541pdc_mem(address_map &map) +void c1541_prologic_dos_classic_device::c1541pdc_mem(address_map &map) { - map(0x0000, 0xffff).rw(FUNC(c1541_prologic_dos_classic_t::read), FUNC(c1541_prologic_dos_classic_t::write)); -/* AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x6000) AM_RAM AM_SHARE("share1") - AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write) - AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x63f0) AM_DEVREADWRITE(M6522_1_TAG, via6522_device, read, write) - AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("share1") - AM_RANGE(0x8800, 0x9fff) AM_RAM - AM_RANGE(0xa000, 0xb7ff) AM_ROM AM_REGION(M6502_TAG, 0x0000) - AM_RANGE(0xb800, 0xb80f) AM_READWRITE(pia_r, pia_w) - AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0x2000)*/ + map(0x0000, 0xffff).rw(FUNC(c1541_prologic_dos_classic_device::read), FUNC(c1541_prologic_dos_classic_device::write)); +/* map(0x0000, 0x07ff).mirror(0x6000).ram().share("share1"); + map(0x1800, 0x180f).mirror(0x63f0).rw(M6522_0_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write)); + map(0x1c00, 0x1c0f).mirror(0x63f0).rw(M6522_1_TAG, FUNC(via6522_device::read), FUNC(via6522_device::write)); + map(0x8000, 0x87ff).ram().share("share1"); + map(0x8800, 0x9fff).ram(); + map(0xa000, 0xb7ff).rom().region(M6502_TAG, 0x0000); + map(0xb800, 0xb80f).rw(FUNC(c1541_prologic_dos_classic_device::pia_r), FUNC(c1541_prologic_dos_classic_device::pia_w)); + map(0xf000, 0xffff).rom().region(M6502_TAG, 0x2000);*/ } -WRITE_LINE_MEMBER( c1541_base_t::via0_irq_w ) +void c1541_device_base::via0_irq_w(int state) { m_via0_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER( c1541_base_t::via0_pa_r ) +uint8_t c1541_device_base::via0_pa_r() { // dummy read to acknowledge ATN IN interrupt return m_parallel_data; } -WRITE8_MEMBER( c1541_base_t::via0_pa_w ) +void c1541_device_base::via0_pa_w(uint8_t data) { if (m_other != nullptr) { @@ -730,7 +733,7 @@ WRITE8_MEMBER( c1541_base_t::via0_pa_w ) } } -READ8_MEMBER( c1541_base_t::via0_pb_r ) +uint8_t c1541_device_base::via0_pb_r() { /* @@ -747,7 +750,7 @@ READ8_MEMBER( c1541_base_t::via0_pb_r ) */ - uint8_t data; + u8 data; // data in data = !m_bus->data_r() && !m_ga->atn_r(); @@ -764,7 +767,7 @@ READ8_MEMBER( c1541_base_t::via0_pb_r ) return data; } -WRITE8_MEMBER( c1541_base_t::via0_pb_w ) +void c1541_device_base::via0_pb_w(uint8_t data) { /* @@ -791,7 +794,7 @@ WRITE8_MEMBER( c1541_base_t::via0_pb_w ) m_bus->clk_w(this, !BIT(data, 3)); } -WRITE_LINE_MEMBER( c1541_base_t::via0_ca2_w ) +void c1541_device_base::via0_ca2_w(int state) { if (m_other != nullptr) { @@ -799,7 +802,7 @@ WRITE_LINE_MEMBER( c1541_base_t::via0_ca2_w ) } } -READ8_MEMBER( c1541c_t::via0_pa_r ) +uint8_t c1541c_device::via0_pa_r() { /* @@ -820,14 +823,14 @@ READ8_MEMBER( c1541c_t::via0_pa_r ) } -WRITE_LINE_MEMBER( c1541_base_t::via1_irq_w ) +void c1541_device_base::via1_irq_w(int state) { m_via1_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER( c1541_base_t::via1_pb_r ) +uint8_t c1541_device_base::via1_pb_r() { /* @@ -844,7 +847,7 @@ READ8_MEMBER( c1541_base_t::via1_pb_r ) */ - uint8_t data = 0; + u8 data = 0; // write protect sense data |= !m_floppy->wpt_r() << 4; @@ -855,7 +858,7 @@ READ8_MEMBER( c1541_base_t::via1_pb_r ) return data; } -WRITE8_MEMBER( c1541_base_t::via1_pb_w ) +void c1541_device_base::via1_pb_w(uint8_t data) { /* @@ -890,12 +893,12 @@ WRITE8_MEMBER( c1541_base_t::via1_pb_w ) // C64H156_INTERFACE( ga_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c1541_base_t::atn_w ) +void c1541_device_base::atn_w(int state) { set_iec_data(); } -WRITE_LINE_MEMBER( c1541_base_t::byte_w ) +void c1541_device_base::byte_w(int state) { m_maincpu->set_input_line(M6502_SET_OVERFLOW, state); @@ -907,23 +910,25 @@ WRITE_LINE_MEMBER( c1541_base_t::byte_w ) // FLOPPY_FORMATS( floppy_formats ) //------------------------------------------------- -FLOPPY_FORMATS_MEMBER( c1541_base_t::floppy_formats ) - FLOPPY_D64_FORMAT, - FLOPPY_G64_FORMAT -FLOPPY_FORMATS_END +void c1541_device_base::floppy_formats(format_registration &fr) +{ + fr.add(FLOPPY_D64_FORMAT); + fr.add(FLOPPY_G64_FORMAT); + fr.add(fs::CBMDOS); +} -READ8_MEMBER( c1541_prologic_dos_classic_t::pia_r ) +uint8_t c1541_prologic_dos_classic_device::pia_r(offs_t offset) { return m_pia->read((offset >> 2) & 0x03); } -WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_w ) +void c1541_prologic_dos_classic_device::pia_w(offs_t offset, uint8_t data) { m_pia->write((offset >> 2) & 0x03, data); } -WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_pa_w ) +void c1541_prologic_dos_classic_device::pia_pa_w(uint8_t data) { /* @@ -941,12 +946,12 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_pa_w ) */ } -READ8_MEMBER( c1541_prologic_dos_classic_t::pia_pb_r ) +uint8_t c1541_prologic_dos_classic_device::pia_pb_r() { return m_parallel_data; } -WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_pb_w ) +void c1541_prologic_dos_classic_device::pia_pb_w(uint8_t data) { m_parallel_data = data; @@ -958,71 +963,71 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_t::pia_pb_w ) // device_add_mconfig - add device configuration //------------------------------------------------- -void c1541_base_t::device_add_mconfig(machine_config &config) +void c1541_device_base::device_add_mconfig(machine_config &config) { M6502(config, m_maincpu, XTAL(16'000'000)/16); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_base_t::c1541_mem); - config.m_perfect_cpu_quantum = subtag(M6502_TAG); - - VIA6522(config, m_via0, XTAL(16'000'000)/16); - m_via0->readpa_handler().set(FUNC(c1541_base_t::via0_pa_r)); - m_via0->readpb_handler().set(FUNC(c1541_base_t::via0_pb_r)); - m_via0->writepa_handler().set(FUNC(c1541_base_t::via0_pa_w)); - m_via0->writepb_handler().set(FUNC(c1541_base_t::via0_pb_w)); - m_via0->cb2_handler().set(FUNC(c1541_base_t::via0_ca2_w)); - m_via0->irq_handler().set(FUNC(c1541_base_t::via0_irq_w)); - - VIA6522(config, m_via1, XTAL(16'000'000)/16); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_device_base::c1541_mem); + + MOS6522(config, m_via0, XTAL(16'000'000)/16); + m_via0->readpa_handler().set(FUNC(c1541_device_base::via0_pa_r)); + m_via0->readpb_handler().set(FUNC(c1541_device_base::via0_pb_r)); + m_via0->writepa_handler().set(FUNC(c1541_device_base::via0_pa_w)); + m_via0->writepb_handler().set(FUNC(c1541_device_base::via0_pb_w)); + m_via0->cb2_handler().set(FUNC(c1541_device_base::via0_ca2_w)); + m_via0->irq_handler().set(FUNC(c1541_device_base::via0_irq_w)); + + MOS6522(config, m_via1, XTAL(16'000'000)/16); m_via1->readpa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_r)); - m_via1->readpb_handler().set(FUNC(c1541_base_t::via1_pb_r)); + m_via1->readpb_handler().set(FUNC(c1541_device_base::via1_pb_r)); m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w)); - m_via1->writepb_handler().set(FUNC(c1541_base_t::via1_pb_w)); + m_via1->writepb_handler().set(FUNC(c1541_device_base::via1_pb_w)); m_via1->ca2_handler().set(C64H156_TAG, FUNC(c64h156_device::soe_w)); m_via1->cb2_handler().set(C64H156_TAG, FUNC(c64h156_device::oe_w)); - m_via1->irq_handler().set(FUNC(c1541_base_t::via1_irq_w)); + m_via1->irq_handler().set(FUNC(c1541_device_base::via1_irq_w)); C64H156(config, m_ga, XTAL(16'000'000)); - m_ga->atn_callback().set(FUNC(c1541_base_t::atn_w)); - m_ga->byte_callback().set(FUNC(c1541_base_t::byte_w)); + m_ga->atn_callback().set(FUNC(c1541_device_base::atn_w)); + m_ga->byte_callback().set(FUNC(c1541_device_base::byte_w)); floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0)); connector.option_add("525ssqd", ALPS_3255190X); connector.set_default_option("525ssqd"); connector.set_fixed(true); - connector.set_formats(c1541_base_t::floppy_formats); + connector.set_formats(c1541_device_base::floppy_formats); + connector.enable_sound(true); } -void c1541c_t::device_add_mconfig(machine_config &config) +void c1541c_device::device_add_mconfig(machine_config &config) { - c1541_base_t::device_add_mconfig(config); + c1541_device_base::device_add_mconfig(config); } -void c1541_dolphin_dos_t::device_add_mconfig(machine_config &config) +void c1541_dolphin_dos_device::device_add_mconfig(machine_config &config) { - c1541_base_t::device_add_mconfig(config); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_dolphin_dos_t::c1541dd_mem); + c1541_device_base::device_add_mconfig(config); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_dolphin_dos_device::c1541dd_mem); } -void c1541_professional_dos_v1_t::device_add_mconfig(machine_config &config) +void c1541_professional_dos_v1_device::device_add_mconfig(machine_config &config) { - c1541_base_t::device_add_mconfig(config); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_professional_dos_v1_t::c1541pd_mem); + c1541_device_base::device_add_mconfig(config); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_professional_dos_v1_device::c1541pd_mem); } -void c1541_prologic_dos_classic_t::device_add_mconfig(machine_config &config) +void c1541_prologic_dos_classic_device::device_add_mconfig(machine_config &config) { - c1541_base_t::device_add_mconfig(config); + c1541_device_base::device_add_mconfig(config); - m_maincpu->set_addrmap(AS_PROGRAM, &c1541_prologic_dos_classic_t::c1541pdc_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &c1541_prologic_dos_classic_device::c1541pdc_mem); - PIA6821(config, m_pia, 0); - m_pia->readpb_handler().set(FUNC(c1541_prologic_dos_classic_t::pia_pb_r)); - m_pia->writepa_handler().set(FUNC(c1541_prologic_dos_classic_t::pia_pa_w)); - m_pia->writepb_handler().set(FUNC(c1541_prologic_dos_classic_t::pia_pb_w)); + PIA6821(config, m_pia); + m_pia->readpb_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pb_r)); + m_pia->writepa_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pa_w)); + m_pia->writepb_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pb_w)); m_pia->ca2_handler().set(CENTRONICS_TAG, FUNC(centronics_device::write_strobe)); centronics_device ¢ronics(CENTRONICS(config, CENTRONICS_TAG, centronics_devices, "printer")); @@ -1051,7 +1056,7 @@ INPUT_PORTS_END // input_ports - device-specific input ports //------------------------------------------------- -ioport_constructor c1541_base_t::device_input_ports() const +ioport_constructor c1541_device_base::device_input_ports() const { return INPUT_PORTS_NAME( c1541 ); } @@ -1066,7 +1071,7 @@ ioport_constructor c1541_base_t::device_input_ports() const // set_iec_data - //------------------------------------------------- -inline void c1541_base_t::set_iec_data() +inline void c1541_device_base::set_iec_data() { int data = !m_data_out && !m_ga->atn_r(); @@ -1080,10 +1085,10 @@ inline void c1541_base_t::set_iec_data() //************************************************************************** //------------------------------------------------- -// c1541_base_t - constructor +// c1541_device_base - constructor //------------------------------------------------- -c1541_base_t::c1541_base_t(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : +c1541_device_base::c1541_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, type, tag, owner, clock), device_cbm_iec_interface(mconfig, *this), device_c64_floppy_parallel_interface(mconfig, *this), @@ -1102,91 +1107,91 @@ c1541_base_t::c1541_base_t(const machine_config &mconfig, device_type type, cons //------------------------------------------------- -// c1540_t - constructor +// c1540_device - constructor //------------------------------------------------- -c1540_t::c1540_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1540, tag, owner, clock) { } +c1540_device::c1540_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1540, tag, owner, clock) { } //------------------------------------------------- -// c1541_t - constructor +// c1541_device - constructor //------------------------------------------------- -c1541_t::c1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1541, tag, owner, clock) { } +c1541_device::c1541_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1541, tag, owner, clock) { } //------------------------------------------------- -// c1541c_t - constructor +// c1541c_device - constructor //------------------------------------------------- -c1541c_t::c1541c_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1541C, tag, owner, clock) { } +c1541c_device::c1541c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1541C, tag, owner, clock) { } //------------------------------------------------- -// c1541ii_t - constructor +// c1541ii_device - constructor //------------------------------------------------- -c1541ii_t::c1541ii_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1541II, tag, owner, clock) { } +c1541ii_device::c1541ii_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1541II, tag, owner, clock) { } //------------------------------------------------- -// sx1541_t - constructor +// sx1541_device - constructor //------------------------------------------------- -sx1541_t::sx1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, SX1541, tag, owner, clock) { } +sx1541_device::sx1541_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, SX1541, tag, owner, clock) { } //------------------------------------------------- -// fsd1_t - constructor +// fsd1_device - constructor //------------------------------------------------- -fsd1_t::fsd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, FSD1, tag, owner, clock) { } +fsd1_device::fsd1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, FSD1, tag, owner, clock) { } //------------------------------------------------- -// fsd2_t - constructor +// fsd2_device - constructor //------------------------------------------------- -fsd2_t::fsd2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, FSD2, tag, owner, clock) { } +fsd2_device::fsd2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, FSD2, tag, owner, clock) { } //------------------------------------------------- -// csd1_t - constructor +// csd1_device - constructor //------------------------------------------------- -csd1_t::csd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, CSD1, tag, owner, clock) { } +csd1_device::csd1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, CSD1, tag, owner, clock) { } //------------------------------------------------- -// c1541_dolphin_dos_t - constructor +// c1541_dolphin_dos_device - constructor //------------------------------------------------- -c1541_dolphin_dos_t::c1541_dolphin_dos_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1541_DOLPHIN_DOS, tag, owner, clock) { } +c1541_dolphin_dos_device::c1541_dolphin_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1541_DOLPHIN_DOS, tag, owner, clock) { } //------------------------------------------------- -// c1541_professional_dos_v1_t - constructor +// c1541_professional_dos_v1_device - constructor //------------------------------------------------- -c1541_professional_dos_v1_t::c1541_professional_dos_v1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1541_PROFESSIONAL_DOS_V1, tag, owner, clock) { } +c1541_professional_dos_v1_device::c1541_professional_dos_v1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1541_PROFESSIONAL_DOS_V1, tag, owner, clock) { } //------------------------------------------------- -// c1541_prologic_dos_classic_t - constructor +// c1541_prologic_dos_classic_device - constructor //------------------------------------------------- -c1541_prologic_dos_classic_t::c1541_prologic_dos_classic_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, C1541_PROLOGIC_DOS_CLASSIC, tag, owner, clock), +c1541_prologic_dos_classic_device::c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, C1541_PROLOGIC_DOS_CLASSIC, tag, owner, clock), m_pia(*this, MC6821_TAG), m_cent_data_out(*this, "cent_data_out"), m_mmu_rom(*this, "mmu") @@ -1195,74 +1200,74 @@ c1541_prologic_dos_classic_t::c1541_prologic_dos_classic_t(const machine_config //------------------------------------------------- -// indus_gt_t - constructor +// indus_gt_device - constructor //------------------------------------------------- -indus_gt_t::indus_gt_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, INDUS_GT, tag, owner, clock) { } +indus_gt_device::indus_gt_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, INDUS_GT, tag, owner, clock) { } //------------------------------------------------- -// technica_t - constructor +// technica_device - constructor //------------------------------------------------- -technica_t::technica_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, TECHNICA, tag, owner, clock) { } +technica_device::technica_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, TECHNICA, tag, owner, clock) { } //------------------------------------------------- -// blue_chip_t - constructor +// blue_chip_device - constructor //------------------------------------------------- -blue_chip_t::blue_chip_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, BLUE_CHIP, tag, owner, clock) { } +blue_chip_device::blue_chip_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, BLUE_CHIP, tag, owner, clock) { } //------------------------------------------------- -// commander_c2_t - constructor +// commander_c2_device - constructor //------------------------------------------------- -commander_c2_t::commander_c2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, COMMANDER_C2, tag, owner, clock) { } +commander_c2_device::commander_c2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, COMMANDER_C2, tag, owner, clock) { } //------------------------------------------------- -// enhancer_2000_t - constructor +// enhancer_2000_device - constructor //------------------------------------------------- -enhancer_2000_t::enhancer_2000_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, ENHANCER_2000, tag, owner, clock) { } +enhancer_2000_device::enhancer_2000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, ENHANCER_2000, tag, owner, clock) { } //------------------------------------------------- -// fd148_t - constructor +// fd148_device - constructor //------------------------------------------------- -fd148_t::fd148_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, FD148, tag, owner, clock) { } +fd148_device::fd148_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, FD148, tag, owner, clock) { } //------------------------------------------------- -// msd_sd1_t - constructor +// msd_sd1_device - constructor //------------------------------------------------- -msd_sd1_t::msd_sd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, MSD_SD1, tag, owner, clock) { } +msd_sd1_device::msd_sd1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, MSD_SD1, tag, owner, clock) { } //------------------------------------------------- -// msd_sd2_t - constructor +// msd_sd2_device - constructor //------------------------------------------------- -msd_sd2_t::msd_sd2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : c1541_base_t(mconfig, MSD_SD2, tag, owner, clock) { } +msd_sd2_device::msd_sd2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : c1541_device_base(mconfig, MSD_SD2, tag, owner, clock) { } //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- -void c1541_base_t::device_start() +void c1541_device_base::device_start() { m_leds.resolve(); @@ -1275,16 +1280,16 @@ void c1541_base_t::device_start() save_item(NAME(m_via1_irq)); } -void fsd2_t::device_start() +void fsd2_device::device_start() { - c1541_base_t::device_start(); + c1541_device_base::device_start(); // decrypt ROM - uint8_t *rom = memregion(M6502_TAG)->base(); + u8 *rom = memregion(M6502_TAG)->base(); for (offs_t offset = 0; offset < 0x4000; offset++) { - uint8_t data = bitswap<8>(rom[offset], 7, 6, 5, 3, 4, 2, 1, 0); + const u8 data = bitswap<8>(rom[offset], 7, 6, 5, 3, 4, 2, 1, 0); rom[offset] = data; } @@ -1295,7 +1300,7 @@ void fsd2_t::device_start() // device_reset - device-specific reset //------------------------------------------------- -void c1541_base_t::device_reset() +void c1541_device_base::device_reset() { m_maincpu->reset(); @@ -1312,7 +1317,7 @@ void c1541_base_t::device_reset() // iec_atn_w - //------------------------------------------------- -void c1541_base_t::cbm_iec_atn(int state) +void c1541_device_base::cbm_iec_atn(int state) { m_via0->write_ca1(!state); m_ga->atni_w(!state); @@ -1325,7 +1330,7 @@ void c1541_base_t::cbm_iec_atn(int state) // iec_reset_w - //------------------------------------------------- -void c1541_base_t::cbm_iec_reset(int state) +void c1541_device_base::cbm_iec_reset(int state) { if (!state) { @@ -1338,7 +1343,7 @@ void c1541_base_t::cbm_iec_reset(int state) // parallel_data_w - //------------------------------------------------- -void c1541_base_t::parallel_data_w(uint8_t data) +void c1541_device_base::parallel_data_w(u8 data) { m_parallel_data = data; } @@ -1348,7 +1353,7 @@ void c1541_base_t::parallel_data_w(uint8_t data) // parallel_strobe_w - //------------------------------------------------- -void c1541_base_t::parallel_strobe_w(int state) +void c1541_device_base::parallel_strobe_w(int state) { m_via0->write_cb1(state); } diff --git a/src/devices/bus/cbmiec/c1541.h b/src/devices/bus/cbmiec/c1541.h index 0382b62278e..216fd71debf 100644 --- a/src/devices/bus/cbmiec/c1541.h +++ b/src/devices/bus/cbmiec/c1541.h @@ -22,48 +22,40 @@ //************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define C1541_TAG "c1541" - - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** -// ======================> c1541_base_t +// ======================> c1541_device_base -class c1541_base_t : public device_t, +class c1541_device_base : public device_t, public device_cbm_iec_interface, public device_c64_floppy_parallel_interface { protected: // construction/destruction - c1541_base_t(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + c1541_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; // device_cbm_iec_interface overrides virtual void cbm_iec_atn(int state) override; virtual void cbm_iec_reset(int state) override; // device_c64_floppy_parallel_interface overrides - virtual void parallel_data_w(uint8_t data) override; + virtual void parallel_data_w(u8 data) override; virtual void parallel_strobe_w(int state) override; required_device<floppy_image_device> m_floppy; - void c1541_mem(address_map &map); - void c1541dd_mem(address_map &map); - void c1541pd_mem(address_map &map); + void c1541_mem(address_map &map) ATTR_COLD; + void c1541dd_mem(address_map &map) ATTR_COLD; + void c1541pd_mem(address_map &map) ATTR_COLD; required_device<m6502_device> m_maincpu; @@ -76,19 +68,19 @@ private: inline void set_iec_data(); - DECLARE_WRITE_LINE_MEMBER( via0_irq_w ); - virtual DECLARE_READ8_MEMBER( via0_pa_r ); - DECLARE_WRITE8_MEMBER( via0_pa_w ); - DECLARE_READ8_MEMBER( via0_pb_r ); - DECLARE_WRITE8_MEMBER( via0_pb_w ); - DECLARE_WRITE_LINE_MEMBER( via0_ca2_w ); - DECLARE_WRITE_LINE_MEMBER( via1_irq_w ); - DECLARE_READ8_MEMBER( via1_pb_r ); - DECLARE_WRITE8_MEMBER( via1_pb_w ); - DECLARE_WRITE_LINE_MEMBER( atn_w ); - DECLARE_WRITE_LINE_MEMBER( byte_w ); + void via0_irq_w(int state); + virtual uint8_t via0_pa_r(); + void via0_pa_w(uint8_t data); + uint8_t via0_pb_r(); + void via0_pb_w(uint8_t data); + void via0_ca2_w(int state); + void via1_irq_w(int state); + uint8_t via1_pb_r(); + void via1_pb_w(uint8_t data); + void atn_w(int state); + void byte_w(int state); - DECLARE_FLOPPY_FORMATS( floppy_formats ); + static void floppy_formats(format_registration &fr); required_device<via6522_device> m_via0; required_device<via6522_device> m_via1; @@ -105,318 +97,317 @@ private: }; -// ======================> c1540_t +// ======================> c1540_device -class c1540_t : public c1541_base_t +class c1540_device : public c1541_device_base { public: // construction/destruction - c1540_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1540_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> c1541_t +// ======================> c1541_device -class c1541_t : public c1541_base_t +class c1541_device : public c1541_device_base { public: // construction/destruction - c1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> c1541c_t +// ======================> c1541c_device -class c1541c_t : public c1541_base_t +class c1541c_device : public c1541_device_base { public: // construction/destruction - c1541c_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - // not really public - virtual DECLARE_READ8_MEMBER( via0_pa_r ) override; + virtual uint8_t via0_pa_r() override; }; -// ======================> c1541ii_t +// ======================> c1541ii_device -class c1541ii_t : public c1541_base_t +class c1541ii_device : public c1541_device_base { public: // construction/destruction - c1541ii_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541ii_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> sx1541_t +// ======================> sx1541_device -class sx1541_t : public c1541_base_t +class sx1541_device : public c1541_device_base { public: // construction/destruction - sx1541_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + sx1541_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> fsd1_t +// ======================> fsd1_device -class fsd1_t : public c1541_base_t +class fsd1_device : public c1541_device_base { public: // construction/destruction - fsd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + fsd1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> fsd2_t +// ======================> fsd2_device -class fsd2_t : public c1541_base_t +class fsd2_device : public c1541_device_base { public: // construction/destruction - fsd2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + fsd2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; }; -// ======================> csd1_t +// ======================> csd1_device -class csd1_t : public c1541_base_t +class csd1_device : public c1541_device_base { public: // construction/destruction - csd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + csd1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> c1541_dolphin_dos_t +// ======================> c1541_dolphin_dos_device -class c1541_dolphin_dos_t : public c1541_base_t +class c1541_dolphin_dos_device : public c1541_device_base { public: // construction/destruction - c1541_dolphin_dos_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_dolphin_dos_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; }; -// ======================> c1541_professional_dos_v1_t +// ======================> c1541_professional_dos_v1_device -class c1541_professional_dos_v1_t : public c1541_base_t +class c1541_professional_dos_v1_device : public c1541_device_base { public: // construction/destruction - c1541_professional_dos_v1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_professional_dos_v1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; }; -// ======================> c1541_prologic_dos_classic_t +// ======================> c1541_prologic_dos_classic_device -class c1541_prologic_dos_classic_t : public c1541_base_t +class c1541_prologic_dos_classic_device : public c1541_device_base { public: // construction/destruction - c1541_prologic_dos_classic_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + c1541_prologic_dos_classic_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: required_device<pia6821_device> m_pia; required_device<output_latch_device> m_cent_data_out; required_memory_region m_mmu_rom; - DECLARE_READ8_MEMBER( pia_r ); - DECLARE_WRITE8_MEMBER( pia_w ); - DECLARE_WRITE8_MEMBER( pia_pa_w ); - DECLARE_READ8_MEMBER( pia_pb_r ); - DECLARE_WRITE8_MEMBER( pia_pb_w ); - DECLARE_READ8_MEMBER( read ); - DECLARE_WRITE8_MEMBER( write ); + uint8_t pia_r(offs_t offset); + void pia_w(offs_t offset, uint8_t data); + void pia_pa_w(uint8_t data); + uint8_t pia_pb_r(); + void pia_pb_w(uint8_t data); + uint8_t read(); + void write(uint8_t data); - void c1541pdc_mem(address_map &map); + void c1541pdc_mem(address_map &map) ATTR_COLD; }; -// ======================> indus_gt_t +// ======================> indus_gt_device -class indus_gt_t : public c1541_base_t +class indus_gt_device : public c1541_device_base { public: // construction/destruction - indus_gt_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + indus_gt_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> technica_t +// ======================> technica_device -class technica_t : public c1541_base_t +class technica_device : public c1541_device_base { public: // construction/destruction - technica_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + technica_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> blue_chip_t +// ======================> blue_chip_device -class blue_chip_t : public c1541_base_t +class blue_chip_device : public c1541_device_base { public: // construction/destruction - blue_chip_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + blue_chip_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> commander_c2_t +// ======================> commander_c2_device -class commander_c2_t : public c1541_base_t +class commander_c2_device : public c1541_device_base { public: // construction/destruction - commander_c2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + commander_c2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> enhancer_2000_t +// ======================> enhancer_2000_device -class enhancer_2000_t : public c1541_base_t +class enhancer_2000_device : public c1541_device_base { public: // construction/destruction - enhancer_2000_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + enhancer_2000_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> fd148_t +// ======================> fd148_device -class fd148_t : public c1541_base_t +class fd148_device : public c1541_device_base { public: // construction/destruction - fd148_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + fd148_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> msd_sd1_t +// ======================> msd_sd1_device -class msd_sd1_t : public c1541_base_t +class msd_sd1_device : public c1541_device_base { public: // construction/destruction - msd_sd1_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + msd_sd1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; -// ======================> msd_sd2_t +// ======================> msd_sd2_device -class msd_sd2_t : public c1541_base_t +class msd_sd2_device : public c1541_device_base { public: // construction/destruction - msd_sd2_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + msd_sd2_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; // device type definition -DECLARE_DEVICE_TYPE(C1540, c1540_t) -DECLARE_DEVICE_TYPE(C1541, c1541_t) -DECLARE_DEVICE_TYPE(C1541C, c1541c_t) -DECLARE_DEVICE_TYPE(C1541II, c1541ii_t) -DECLARE_DEVICE_TYPE(SX1541, sx1541_t) -DECLARE_DEVICE_TYPE(FSD1, fsd1_t) -DECLARE_DEVICE_TYPE(FSD2, fsd2_t) -DECLARE_DEVICE_TYPE(CSD1, csd1_t) -DECLARE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_t) -DECLARE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_t) -DECLARE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_t) -DECLARE_DEVICE_TYPE(INDUS_GT, indus_gt_t) -DECLARE_DEVICE_TYPE(TECHNICA, technica_t) -DECLARE_DEVICE_TYPE(BLUE_CHIP, blue_chip_t) -DECLARE_DEVICE_TYPE(COMMANDER_C2, commander_c2_t) -DECLARE_DEVICE_TYPE(ENHANCER_2000, enhancer_2000_t) -DECLARE_DEVICE_TYPE(FD148, fd148_t) -DECLARE_DEVICE_TYPE(MSD_SD1, msd_sd1_t) -DECLARE_DEVICE_TYPE(MSD_SD2, msd_sd2_t) +DECLARE_DEVICE_TYPE(C1540, c1540_device) +DECLARE_DEVICE_TYPE(C1541, c1541_device) +DECLARE_DEVICE_TYPE(C1541C, c1541c_device) +DECLARE_DEVICE_TYPE(C1541II, c1541ii_device) +DECLARE_DEVICE_TYPE(SX1541, sx1541_device) +DECLARE_DEVICE_TYPE(FSD1, fsd1_device) +DECLARE_DEVICE_TYPE(FSD2, fsd2_device) +DECLARE_DEVICE_TYPE(CSD1, csd1_device) +DECLARE_DEVICE_TYPE(C1541_DOLPHIN_DOS, c1541_dolphin_dos_device) +DECLARE_DEVICE_TYPE(C1541_PROFESSIONAL_DOS_V1, c1541_professional_dos_v1_device) +DECLARE_DEVICE_TYPE(C1541_PROLOGIC_DOS_CLASSIC, c1541_prologic_dos_classic_device) +DECLARE_DEVICE_TYPE(INDUS_GT, indus_gt_device) +DECLARE_DEVICE_TYPE(TECHNICA, technica_device) +DECLARE_DEVICE_TYPE(BLUE_CHIP, blue_chip_device) +DECLARE_DEVICE_TYPE(COMMANDER_C2, commander_c2_device) +DECLARE_DEVICE_TYPE(ENHANCER_2000, enhancer_2000_device) +DECLARE_DEVICE_TYPE(FD148, fd148_device) +DECLARE_DEVICE_TYPE(MSD_SD1, msd_sd1_device) +DECLARE_DEVICE_TYPE(MSD_SD2, msd_sd2_device) #endif // MAME_BUS_CBMIEC_C1541_H diff --git a/src/devices/bus/cbmiec/c1571.cpp b/src/devices/bus/cbmiec/c1571.cpp index 0b4112ffd3e..19ff695828b 100644 --- a/src/devices/bus/cbmiec/c1571.cpp +++ b/src/devices/bus/cbmiec/c1571.cpp @@ -22,6 +22,9 @@ #include "emu.h" #include "c1571.h" +#include "formats/d64_dsk.h" +#include "formats/g64_dsk.h" +#include "formats/d71_dsk.h" //************************************************************************** @@ -172,14 +175,14 @@ void mini_chief_device::mini_chief_mem(address_map &map) } -WRITE_LINE_MEMBER( c1571_device::via0_irq_w ) +void c1571_device::via0_irq_w(int state) { m_via0_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER( c1571_device::via0_pa_r ) +uint8_t c1571_device::via0_pa_r() { /* @@ -207,7 +210,7 @@ READ8_MEMBER( c1571_device::via0_pa_r ) return data; } -WRITE8_MEMBER( c1571_device::via0_pa_w ) +void c1571_device::via0_pa_w(uint8_t data) { /* @@ -252,7 +255,7 @@ WRITE8_MEMBER( c1571_device::via0_pa_w ) update_iec(); } -WRITE8_MEMBER( c1571cr_device::via0_pa_w ) +void c1571cr_device::via0_pa_w(uint8_t data) { /* @@ -289,7 +292,7 @@ WRITE8_MEMBER( c1571cr_device::via0_pa_w ) } } -READ8_MEMBER( c1571_device::via0_pb_r ) +uint8_t c1571_device::via0_pb_r() { /* @@ -323,7 +326,7 @@ READ8_MEMBER( c1571_device::via0_pb_r ) return data; } -WRITE8_MEMBER( c1571_device::via0_pb_w ) +void c1571_device::via0_pb_w(uint8_t data) { /* @@ -352,7 +355,7 @@ WRITE8_MEMBER( c1571_device::via0_pb_w ) update_iec(); } -WRITE8_MEMBER( c1571cr_device::via0_pb_w ) +void c1571cr_device::via0_pb_w(uint8_t data) { /* @@ -382,7 +385,7 @@ WRITE8_MEMBER( c1571cr_device::via0_pb_w ) } -READ8_MEMBER( c1571_device::via1_r ) +uint8_t c1571_device::via1_r(offs_t offset) { uint8_t data = m_via1->read(offset); @@ -392,7 +395,7 @@ READ8_MEMBER( c1571_device::via1_r ) return data; } -WRITE8_MEMBER( c1571_device::via1_w ) +void c1571_device::via1_w(offs_t offset, uint8_t data) { m_via1->write(offset, data); @@ -400,14 +403,14 @@ WRITE8_MEMBER( c1571_device::via1_w ) m_ga->ted_w(1); } -WRITE_LINE_MEMBER( c1571_device::via1_irq_w ) +void c1571_device::via1_irq_w(int state) { m_via1_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE); } -READ8_MEMBER( c1571_device::via1_pb_r ) +uint8_t c1571_device::via1_pb_r() { /* @@ -435,7 +438,7 @@ READ8_MEMBER( c1571_device::via1_pb_r ) return data; } -WRITE8_MEMBER( c1571_device::via1_pb_w ) +void c1571_device::via1_pb_w(uint8_t data) { /* @@ -470,14 +473,14 @@ WRITE8_MEMBER( c1571_device::via1_pb_w ) // MOS6526_INTERFACE( cia_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c1571_device::cia_irq_w ) +void c1571_device::cia_irq_w(int state) { m_cia_irq = state; m_maincpu->set_input_line(INPUT_LINE_IRQ0, (m_via0_irq || m_via1_irq || m_cia_irq) ? ASSERT_LINE : CLEAR_LINE); } -WRITE_LINE_MEMBER( c1571_device::cia_pc_w ) +void c1571_device::cia_pc_w(int state) { if (m_other != nullptr) { @@ -485,26 +488,26 @@ WRITE_LINE_MEMBER( c1571_device::cia_pc_w ) } } -WRITE_LINE_MEMBER( c1571_device::cia_cnt_w ) +void c1571_device::cia_cnt_w(int state) { m_cnt_out = state; update_iec(); } -WRITE_LINE_MEMBER( c1571_device::cia_sp_w ) +void c1571_device::cia_sp_w(int state) { m_sp_out = state; update_iec(); } -READ8_MEMBER( c1571_device::cia_pb_r ) +uint8_t c1571_device::cia_pb_r() { return m_parallel_data; } -WRITE8_MEMBER( c1571_device::cia_pb_w ) +void c1571_device::cia_pb_w(uint8_t data) { if (m_other != nullptr) { @@ -517,19 +520,19 @@ WRITE8_MEMBER( c1571_device::cia_pb_w ) // MOS6526_INTERFACE( mini_chief_cia_intf ) //------------------------------------------------- -READ8_MEMBER( mini_chief_device::cia_pa_r ) +uint8_t mini_chief_device::cia_pa_r() { // TODO read from ISA bus @ 0x320 | A2 A1 A0 return 0; } -WRITE8_MEMBER( mini_chief_device::cia_pa_w ) +void mini_chief_device::cia_pa_w(uint8_t data) { // TODO write to ISA bus @ 0x320 | A2 A1 A0 } -WRITE8_MEMBER( mini_chief_device::cia_pb_w ) +void mini_chief_device::cia_pb_w(uint8_t data) { /* @@ -552,7 +555,7 @@ WRITE8_MEMBER( mini_chief_device::cia_pb_w ) // C64H156_INTERFACE( ga_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c1571_device::byte_w ) +void c1571_device::byte_w(int state) { m_via1->write_ca1(state); @@ -574,11 +577,12 @@ void c1571_device::wpt_callback(floppy_image_device *floppy, int state) // FLOPPY_FORMATS( floppy_formats ) //------------------------------------------------- -FLOPPY_FORMATS_MEMBER( c1571_device::floppy_formats ) - FLOPPY_D64_FORMAT, - FLOPPY_G64_FORMAT, - FLOPPY_D71_FORMAT -FLOPPY_FORMATS_END +void c1571_device::floppy_formats(format_registration &fr) +{ + fr.add(FLOPPY_D64_FORMAT); + fr.add(FLOPPY_G64_FORMAT); + fr.add(FLOPPY_D71_FORMAT); +} //------------------------------------------------- @@ -598,16 +602,15 @@ void c1571_device::add_base_mconfig(machine_config &config) { M6502(config, m_maincpu, 16_MHz_XTAL / 16); m_maincpu->set_addrmap(AS_PROGRAM, &c1571_device::c1571_mem); - config.m_perfect_cpu_quantum = subtag(M6502_TAG); - VIA6522(config, m_via0, 16_MHz_XTAL / 16); + MOS6522(config, m_via0, 16_MHz_XTAL / 16); m_via0->readpa_handler().set(FUNC(c1571_device::via0_pa_r)); m_via0->readpb_handler().set(FUNC(c1571_device::via0_pb_r)); m_via0->writepa_handler().set(FUNC(c1571_device::via0_pa_w)); m_via0->writepb_handler().set(FUNC(c1571_device::via0_pb_w)); m_via0->irq_handler().set(FUNC(c1571_device::via0_irq_w)); - VIA6522(config, m_via1, 16_MHz_XTAL / 16); + MOS6522(config, m_via1, 16_MHz_XTAL / 16); m_via1->readpa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_r)); m_via1->readpb_handler().set(FUNC(c1571_device::via1_pb_r)); m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w)); @@ -626,6 +629,7 @@ void c1571_device::add_base_mconfig(machine_config &config) connector.set_default_option("525qd"); connector.set_fixed(true); connector.set_formats(c1571_device::floppy_formats); + connector.enable_sound(true); } void c1571_device::add_cia_mconfig(machine_config &config) diff --git a/src/devices/bus/cbmiec/c1571.h b/src/devices/bus/cbmiec/c1571.h index 467c959963e..d7067ab060a 100644 --- a/src/devices/bus/cbmiec/c1571.h +++ b/src/devices/bus/cbmiec/c1571.h @@ -43,43 +43,43 @@ public: // construction/destruction c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_WRITE_LINE_MEMBER( via0_irq_w ); - DECLARE_READ8_MEMBER( via0_pa_r ); - DECLARE_WRITE8_MEMBER( via0_pa_w ); - DECLARE_READ8_MEMBER( via0_pb_r ); - DECLARE_WRITE8_MEMBER( via0_pb_w ); + void via0_irq_w(int state); + uint8_t via0_pa_r(); + void via0_pa_w(uint8_t data); + uint8_t via0_pb_r(); + void via0_pb_w(uint8_t data); - DECLARE_READ8_MEMBER( via1_r ); - DECLARE_WRITE8_MEMBER( via1_w ); - DECLARE_WRITE_LINE_MEMBER( via1_irq_w ); - DECLARE_READ8_MEMBER( via1_pb_r ); - DECLARE_WRITE8_MEMBER( via1_pb_w ); + uint8_t via1_r(offs_t offset); + void via1_w(offs_t offset, uint8_t data); + void via1_irq_w(int state); + uint8_t via1_pb_r(); + void via1_pb_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER( cia_irq_w ); - DECLARE_WRITE_LINE_MEMBER( cia_pc_w ); - DECLARE_WRITE_LINE_MEMBER( cia_cnt_w ); - DECLARE_WRITE_LINE_MEMBER( cia_sp_w ); - DECLARE_READ8_MEMBER( cia_pb_r ); - DECLARE_WRITE8_MEMBER( cia_pb_w ); + void cia_irq_w(int state); + void cia_pc_w(int state); + void cia_cnt_w(int state); + void cia_sp_w(int state); + uint8_t cia_pb_r(); + void cia_pb_w(uint8_t data); - DECLARE_WRITE_LINE_MEMBER( byte_w ); + void byte_w(int state); - DECLARE_FLOPPY_FORMATS( floppy_formats ); + static void floppy_formats(format_registration &fr); void wpt_callback(floppy_image_device *floppy, int state); - void c1571_mem(address_map &map); + void c1571_mem(address_map &map) ATTR_COLD; protected: c1571_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; // device_cbm_iec_interface overrides virtual void cbm_iec_srq(int state) override; @@ -138,8 +138,8 @@ public: protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; }; @@ -153,12 +153,12 @@ public: protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - DECLARE_WRITE8_MEMBER( via0_pa_w ); - DECLARE_WRITE8_MEMBER( via0_pb_w ); + void via0_pa_w(uint8_t data); + void via0_pb_w(uint8_t data); }; @@ -172,15 +172,15 @@ public: protected: // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - DECLARE_READ8_MEMBER( cia_pa_r ); - DECLARE_WRITE8_MEMBER( cia_pa_w ); - DECLARE_WRITE8_MEMBER( cia_pb_w ); + uint8_t cia_pa_r(); + void cia_pa_w(uint8_t data); + void cia_pb_w(uint8_t data); - void mini_chief_mem(address_map &map); + void mini_chief_mem(address_map &map) ATTR_COLD; }; diff --git a/src/devices/bus/cbmiec/c1581.cpp b/src/devices/bus/cbmiec/c1581.cpp index f589cb2f427..21c70937eb3 100644 --- a/src/devices/bus/cbmiec/c1581.cpp +++ b/src/devices/bus/cbmiec/c1581.cpp @@ -17,6 +17,9 @@ #include "emu.h" #include "c1581.h" +#include "cpu/m6502/m6502.h" +#include "formats/d81_dsk.h" + //************************************************************************** @@ -33,8 +36,8 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(C1563, c1563_device, "c1563", "Commodore 1563 3.5 Disk Drive") -DEFINE_DEVICE_TYPE(C1581, c1581_device, "c1581", "Commodore 1581 3.5 Disk Drive") +DEFINE_DEVICE_TYPE(C1563, c1563_device, "c1563", "Commodore 1563 3.5\" Disk Drive") +DEFINE_DEVICE_TYPE(C1581, c1581_device, "c1581", "Commodore 1581 3.5\" Disk Drive") //------------------------------------------------- @@ -102,21 +105,21 @@ void c1581_device::c1581_mem(address_map &map) // MOS8520_INTERFACE( cia_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c1581_device::cnt_w ) +void c1581_device::cnt_w(int state) { m_cnt_out = state; update_iec(); } -WRITE_LINE_MEMBER( c1581_device::sp_w ) +void c1581_device::sp_w(int state) { m_sp_out = state; update_iec(); } -READ8_MEMBER( c1581_device::cia_pa_r ) +uint8_t c1581_device::cia_pa_r() { /* @@ -147,7 +150,7 @@ READ8_MEMBER( c1581_device::cia_pa_r ) return data; } -WRITE8_MEMBER( c1581_device::cia_pa_w ) +void c1581_device::cia_pa_w(uint8_t data) { /* @@ -177,7 +180,7 @@ WRITE8_MEMBER( c1581_device::cia_pa_w ) m_leds[LED_ACT] = BIT(data, 6); } -READ8_MEMBER( c1581_device::cia_pb_r ) +uint8_t c1581_device::cia_pb_r() { /* @@ -211,7 +214,7 @@ READ8_MEMBER( c1581_device::cia_pb_r ) return data; } -WRITE8_MEMBER( c1581_device::cia_pb_w ) +void c1581_device::cia_pb_w(uint8_t data) { /* @@ -258,9 +261,10 @@ static void c1581_floppies(device_slot_interface &device) // FLOPPY_FORMATS( c1581_device::floppy_formats ) //------------------------------------------------- -FLOPPY_FORMATS_MEMBER( c1581_device::floppy_formats ) - FLOPPY_D81_FORMAT -FLOPPY_FORMATS_END +void c1581_device::floppy_formats(format_registration &fr) +{ + fr.add(FLOPPY_D81_FORMAT); +} //------------------------------------------------- @@ -282,7 +286,7 @@ void c1581_device::device_add_mconfig(machine_config &config) m_cia->pb_wr_callback().set(FUNC(c1581_device::cia_pb_w)); WD1772(config, m_fdc, 16_MHz_XTAL / 2); - FLOPPY_CONNECTOR(config, WD1772_TAG":0", c1581_floppies, "35dd", c1581_device::floppy_formats, true); + FLOPPY_CONNECTOR(config, WD1772_TAG":0", c1581_floppies, "35dd", c1581_device::floppy_formats, true).enable_sound(true); } diff --git a/src/devices/bus/cbmiec/c1581.h b/src/devices/bus/cbmiec/c1581.h index 811375dbdaa..0bd747a4f12 100644 --- a/src/devices/bus/cbmiec/c1581.h +++ b/src/devices/bus/cbmiec/c1581.h @@ -12,8 +12,6 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m6502.h" -#include "formats/d81_dsk.h" #include "imagedev/floppy.h" #include "machine/mos6526.h" #include "machine/wd_fdc.h" @@ -44,13 +42,13 @@ protected: c1581_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; // device_cbm_iec_interface overrides virtual void cbm_iec_srq(int state) override; @@ -67,16 +65,16 @@ private: void update_iec(); - DECLARE_WRITE_LINE_MEMBER( cnt_w ); - DECLARE_WRITE_LINE_MEMBER( sp_w ); - DECLARE_READ8_MEMBER( cia_pa_r ); - DECLARE_WRITE8_MEMBER( cia_pa_w ); - DECLARE_READ8_MEMBER( cia_pb_r ); - DECLARE_WRITE8_MEMBER( cia_pb_w ); + void cnt_w(int state); + void sp_w(int state); + uint8_t cia_pa_r(); + void cia_pa_w(uint8_t data); + uint8_t cia_pb_r(); + void cia_pb_w(uint8_t data); - void c1581_mem(address_map &map); + void c1581_mem(address_map &map) ATTR_COLD; - DECLARE_FLOPPY_FORMATS( floppy_formats ); + static void floppy_formats(format_registration &fr); required_device<cpu_device> m_maincpu; required_device<mos6526_device> m_cia; @@ -102,7 +100,7 @@ public: c1563_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; }; diff --git a/src/devices/bus/cbmiec/c64_nl10.cpp b/src/devices/bus/cbmiec/c64_nl10.cpp index d4ed3467016..6def72ed1ec 100644 --- a/src/devices/bus/cbmiec/c64_nl10.cpp +++ b/src/devices/bus/cbmiec/c64_nl10.cpp @@ -9,6 +9,8 @@ #include "emu.h" #include "c64_nl10.h" +#include "cpu/m6800/m6801.h" + //************************************************************************** @@ -55,6 +57,28 @@ c64_nl10_interface_device::c64_nl10_interface_device(const machine_config &mconf //------------------------------------------------- +// mem_map - CPU memory map +//------------------------------------------------- + +void c64_nl10_interface_device::mem_map(address_map &map) +{ + map(0x6000, 0x7fff).ram(); + map(0x8000, 0xffff).rom().region("rom", 0); +} + + +//------------------------------------------------- +// device_add_mconfig - machine configuration +//------------------------------------------------- + +void c64_nl10_interface_device::device_add_mconfig(machine_config &config) +{ + hd6303y_cpu_device &bufcpu(HD6303Y(config, "bufcpu", 8'000'000)); + bufcpu.set_addrmap(AS_PROGRAM, &c64_nl10_interface_device::mem_map); +} + + +//------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- diff --git a/src/devices/bus/cbmiec/c64_nl10.h b/src/devices/bus/cbmiec/c64_nl10.h index 68f9f135c91..d183288421f 100644 --- a/src/devices/bus/cbmiec/c64_nl10.h +++ b/src/devices/bus/cbmiec/c64_nl10.h @@ -27,18 +27,20 @@ public: // construction/destruction c64_nl10_interface_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_atn(int state) override; void cbm_iec_data(int state) override; void cbm_iec_reset(int state) override; + +private: + void mem_map(address_map &map) ATTR_COLD; }; diff --git a/src/devices/bus/cbmiec/cbmiec.cpp b/src/devices/bus/cbmiec/cbmiec.cpp index c9a04f863e2..43faf6e17a3 100644 --- a/src/devices/bus/cbmiec/cbmiec.cpp +++ b/src/devices/bus/cbmiec/cbmiec.cpp @@ -222,8 +222,8 @@ DEFINE_DEVICE_TYPE(CBM_IEC_SLOT, cbm_iec_slot_device, "cbm_iec_slot", "CBM IEC s // device_cbm_iec_interface - constructor //------------------------------------------------- -device_cbm_iec_interface::device_cbm_iec_interface(const machine_config &mconfig, device_t &device) - : device_slot_card_interface(mconfig, device), m_next(nullptr), m_bus(nullptr), m_slot(nullptr) +device_cbm_iec_interface::device_cbm_iec_interface(const machine_config &mconfig, device_t &device) : + device_interface(device, "cbmiec"), m_next(nullptr), m_bus(nullptr), m_slot(nullptr) { } @@ -247,8 +247,8 @@ device_cbm_iec_interface::~device_cbm_iec_interface() //------------------------------------------------- cbm_iec_slot_device::cbm_iec_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, CBM_IEC_SLOT, tag, owner, clock), - device_slot_interface(mconfig, *this), m_address(0) + device_t(mconfig, CBM_IEC_SLOT, tag, owner, clock), + device_slot_interface(mconfig, *this), m_address(0) { } @@ -273,14 +273,6 @@ void cbm_iec_slot_device::device_start() if (dev) bus->add_device(this, get_card_device()); } -void cbm_iec_slot_device::add_slot(machine_config &config, const char *_tag, int _address, const char *_def_slot) -{ - cbm_iec_slot_device &slot(CBM_IEC_SLOT(config, _tag, 0)); - cbm_iec_devices(slot); - slot.set_default_option(_def_slot); - slot.set_address(_address); -} - //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -289,13 +281,13 @@ void cbm_iec_slot_device::add_slot(machine_config &config, const char *_tag, int // cbm_iec_device - constructor //------------------------------------------------- -cbm_iec_device::cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, CBM_IEC, tag, owner, clock), - m_write_srq(*this), - m_write_atn(*this), - m_write_clk(*this), - m_write_data(*this), - m_write_reset(*this) +cbm_iec_device::cbm_iec_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, CBM_IEC, tag, owner, clock), + m_write_srq(*this), + m_write_atn(*this), + m_write_clk(*this), + m_write_data(*this), + m_write_reset(*this) { for (auto & elem : m_line) { @@ -310,12 +302,6 @@ cbm_iec_device::cbm_iec_device(const machine_config &mconfig, const char *tag, d void cbm_iec_device::device_start() { - // resolve callbacks - m_write_srq.resolve_safe(); - m_write_atn.resolve_safe(); - m_write_clk.resolve_safe(); - m_write_data.resolve_safe(); - m_write_reset.resolve_safe(); } @@ -346,7 +332,7 @@ void cbm_iec_device::device_stop() void cbm_iec_device::add_device(cbm_iec_slot_device *slot, device_t *target) { - auto entry = global_alloc(daisy_entry(target)); + auto entry = new daisy_entry(target); entry->m_interface->m_slot = slot; entry->m_interface->m_bus = this; @@ -359,10 +345,10 @@ void cbm_iec_device::add_device(cbm_iec_slot_device *slot, device_t *target) // daisy_entry - constructor //------------------------------------------------- -cbm_iec_device::daisy_entry::daisy_entry(device_t *device) - : m_next(nullptr), - m_device(device), - m_interface(nullptr) +cbm_iec_device::daisy_entry::daisy_entry(device_t *device) : + m_next(nullptr), + m_device(device), + m_interface(nullptr) { for (auto & elem : m_line) { @@ -502,6 +488,7 @@ int cbm_iec_device::get_signal(int signal) #include "vic1515.h" #include "vic1520.h" #include "c1526.h" +#include "mps1200.h" void cbm_iec_devices(device_slot_interface &device) { @@ -522,9 +509,9 @@ void cbm_iec_devices(device_slot_interface &device) device.option_add("cmdhd", CMD_HD); device.option_add("fd2000", FD2000); device.option_add("fd4000", FD4000); - device.option_add("interpod", INTERPOD); + device.option_add("interpod", CBM_INTERPOD); device.option_add("minichief", MINI_CHIEF); - device.option_add("serialbox", SERIAL_BOX); + device.option_add("serialbox", CBM_SERIAL_BOX); device.option_add("diag264", DIAG264_SERIAL_LOOPBACK); device.option_add("nl10", C64_NL10_INTERFACE); device.option_add("vic1515", VIC1515); @@ -537,4 +524,6 @@ void cbm_iec_devices(device_slot_interface &device) device.option_add("fd148", FD148); device.option_add("msdsd1", MSD_SD1); device.option_add("msdsd2", MSD_SD2); + device.option_add("mps1200", MPS1200); + device.option_add("mps1250", MPS1250); } diff --git a/src/devices/bus/cbmiec/cbmiec.h b/src/devices/bus/cbmiec/cbmiec.h index ceb03d44948..fafea819abb 100644 --- a/src/devices/bus/cbmiec/cbmiec.h +++ b/src/devices/bus/cbmiec/cbmiec.h @@ -21,6 +21,9 @@ #define CBM_IEC_TAG "iec_bus" +DECLARE_DEVICE_TYPE(CBM_IEC, cbm_iec_device) +DECLARE_DEVICE_TYPE(CBM_IEC_SLOT, cbm_iec_slot_device) + void cbm_iec_devices(device_slot_interface &device); //************************************************************************** @@ -47,18 +50,18 @@ public: void add_device(cbm_iec_slot_device *slot, device_t *target); // reads for both host and peripherals - DECLARE_READ_LINE_MEMBER( srq_r ) { return get_signal(SRQ); } - DECLARE_READ_LINE_MEMBER( atn_r ) { return get_signal(ATN); } - DECLARE_READ_LINE_MEMBER( clk_r ) { return get_signal(CLK); } - DECLARE_READ_LINE_MEMBER( data_r ) { return get_signal(DATA); } - DECLARE_READ_LINE_MEMBER( reset_r ) { return get_signal(RESET); } + int srq_r() { return get_signal(SRQ); } + int atn_r() { return get_signal(ATN); } + int clk_r() { return get_signal(CLK); } + int data_r() { return get_signal(DATA); } + int reset_r() { return get_signal(RESET); } // writes for host (driver_device) - DECLARE_WRITE_LINE_MEMBER( host_srq_w ) { set_signal(this, SRQ, state); } - DECLARE_WRITE_LINE_MEMBER( host_atn_w ) { set_signal(this, ATN, state); } - DECLARE_WRITE_LINE_MEMBER( host_clk_w ) { set_signal(this, CLK, state); } - DECLARE_WRITE_LINE_MEMBER( host_data_w ) { set_signal(this, DATA, state); } - DECLARE_WRITE_LINE_MEMBER( host_reset_w ) { set_signal(this, RESET, state); } + void host_srq_w(int state) { set_signal(this, SRQ, state); } + void host_atn_w(int state) { set_signal(this, ATN, state); } + void host_clk_w(int state) { set_signal(this, CLK, state); } + void host_data_w(int state) { set_signal(this, DATA, state); } + void host_reset_w(int state) { set_signal(this, RESET, state); } // writes for peripherals (device_t) void srq_w(device_t *device, int state) { set_signal(device, SRQ, state); } @@ -79,9 +82,9 @@ protected: }; // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_stop() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + virtual void device_stop() override ATTR_COLD; class daisy_entry { @@ -111,8 +114,6 @@ private: int m_line[SIGNAL_COUNT]; }; -DECLARE_DEVICE_TYPE(CBM_IEC, cbm_iec_device) - // ======================> cbm_iec_slot_device @@ -122,24 +123,24 @@ class cbm_iec_slot_device : public device_t, public: // construction/destruction template <typename T> - cbm_iec_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt) + cbm_iec_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, int address, T &&opts, char const *dflt) : cbm_iec_slot_device(mconfig, tag, owner, (uint32_t)0) { option_reset(); opts(*this); set_default_option(dflt); set_fixed(false); + set_address(address); } cbm_iec_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - static void add_slot(machine_config &config, const char *_tag, int _address, const char *_def_slot); template <typename T> static void add(machine_config &config, T &&_bus_tag, const char *_default_drive) { - add_slot(config, "iec4", 4, nullptr); - add_slot(config, "iec8", 8, _default_drive); - add_slot(config, "iec9", 9, nullptr); - add_slot(config, "iec10", 10, nullptr); - add_slot(config, "iec11", 11, nullptr); + CBM_IEC_SLOT(config, "iec4", 4, cbm_iec_devices, nullptr); + CBM_IEC_SLOT(config, "iec8", 8, cbm_iec_devices, _default_drive); + CBM_IEC_SLOT(config, "iec9", 9, cbm_iec_devices, nullptr); + CBM_IEC_SLOT(config, "iec10", 10, cbm_iec_devices, nullptr); + CBM_IEC_SLOT(config, "iec11", 11, cbm_iec_devices, nullptr); CBM_IEC(config, std::forward<T>(_bus_tag), 0); } @@ -148,7 +149,7 @@ public: int get_address() { return m_address; } // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; protected: int m_address; @@ -157,7 +158,7 @@ protected: // ======================> device_cbm_iec_interface -class device_cbm_iec_interface : public device_slot_card_interface +class device_cbm_iec_interface : public device_interface { friend class cbm_iec_device; @@ -182,6 +183,4 @@ protected: cbm_iec_slot_device *m_slot; }; -DECLARE_DEVICE_TYPE(CBM_IEC_SLOT, cbm_iec_slot_device) - #endif // MAME_BUS_CBMIEC_CBMIEC_H diff --git a/src/devices/bus/cbmiec/cmdhd.cpp b/src/devices/bus/cbmiec/cmdhd.cpp index 91d92bddc2a..104b0eb456e 100644 --- a/src/devices/bus/cbmiec/cmdhd.cpp +++ b/src/devices/bus/cbmiec/cmdhd.cpp @@ -78,8 +78,8 @@ void cmd_hd_device::device_add_mconfig(machine_config &config) M6502(config, m_maincpu, 2000000); m_maincpu->set_addrmap(AS_PROGRAM, &cmd_hd_device::mem_map); - VIA6522(config, M6522_1_TAG, 2000000); - VIA6522(config, M6522_2_TAG, 2000000); + MOS6522(config, M6522_1_TAG, 2000000); + MOS6522(config, M6522_2_TAG, 2000000); I8255A(config, I8255A_TAG, 0); RTC72421(config, RTC72421A_TAG, XTAL(32'768)); @@ -168,7 +168,7 @@ void cmd_hd_device::cbm_iec_reset(int state) // led_w - //------------------------------------------------- -WRITE8_MEMBER( cmd_hd_device::led_w ) +void cmd_hd_device::led_w(uint8_t data) { /* diff --git a/src/devices/bus/cbmiec/cmdhd.h b/src/devices/bus/cbmiec/cmdhd.h index 2cdeada48df..bf4493d92e0 100644 --- a/src/devices/bus/cbmiec/cmdhd.h +++ b/src/devices/bus/cbmiec/cmdhd.h @@ -21,14 +21,6 @@ //************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define CMD_HD_TAG "cmdhd" - - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -42,12 +34,12 @@ public: protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_srq(int state) override; @@ -59,9 +51,9 @@ private: required_device<m6502_device> m_maincpu; required_device<scsi_port_device> m_scsibus; - DECLARE_WRITE8_MEMBER( led_w ); + void led_w(uint8_t data); - void mem_map(address_map &map); + void mem_map(address_map &map) ATTR_COLD; }; diff --git a/src/devices/bus/cbmiec/diag264_lb_iec.h b/src/devices/bus/cbmiec/diag264_lb_iec.h index 6611fee413d..8d32d19d106 100644 --- a/src/devices/bus/cbmiec/diag264_lb_iec.h +++ b/src/devices/bus/cbmiec/diag264_lb_iec.h @@ -30,7 +30,7 @@ public: protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; // device_cbm_iec_interface overrides virtual void cbm_iec_atn(int state) override; diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp index c4d1bd311c1..91b3cc9ae44 100644 --- a/src/devices/bus/cbmiec/fd2000.cpp +++ b/src/devices/bus/cbmiec/fd2000.cpp @@ -20,6 +20,8 @@ #include "emu.h" #include "fd2000.h" +#include "formats/d81_dsk.h" + //************************************************************************** @@ -113,7 +115,7 @@ void fd4000_device::fd4000_mem(address_map &map) } -READ8_MEMBER( fd2000_device::via_pa_r ) +uint8_t fd2000_device::via_pa_r() { /* @@ -133,7 +135,7 @@ READ8_MEMBER( fd2000_device::via_pa_r ) return 0; } -WRITE8_MEMBER( fd2000_device::via_pa_w ) +void fd2000_device::via_pa_w(uint8_t data) { /* @@ -151,7 +153,7 @@ WRITE8_MEMBER( fd2000_device::via_pa_w ) */ } -READ8_MEMBER( fd2000_device::via_pb_r ) +uint8_t fd2000_device::via_pb_r() { /* @@ -176,7 +178,7 @@ READ8_MEMBER( fd2000_device::via_pb_r ) return data; } -WRITE8_MEMBER( fd2000_device::via_pb_w ) +void fd2000_device::via_pb_w(uint8_t data) { /* @@ -204,10 +206,10 @@ static void fd4000_floppies(device_slot_interface &device) device.option_add("35ed", FLOPPY_35_ED); // TEAC FD-235J } /* -FLOPPY_FORMATS_MEMBER( fd2000_device::floppy_formats ) +void fd2000_device::floppy_formats(format_registration &fr) FLOPPY_D81_FORMAT FLOPPY_D2M_FORMAT -FLOPPY_FORMATS_END +} */ @@ -217,9 +219,9 @@ FLOPPY_FORMATS_END void fd2000_device::add_common_devices(machine_config &config) { - M65C02(config, m_maincpu, 24_MHz_XTAL / 12); + W65C02(config, m_maincpu, 24_MHz_XTAL / 12); - via6522_device &via(VIA6522(config, G65SC22P2_TAG, 24_MHz_XTAL / 12)); + via6522_device &via(R65C22(config, G65SC22P2_TAG, 24_MHz_XTAL / 12)); via.readpa_handler().set(FUNC(fd2000_device::via_pa_r)); via.readpb_handler().set(FUNC(fd2000_device::via_pb_r)); via.writepa_handler().set(FUNC(fd2000_device::via_pa_w)); @@ -231,7 +233,7 @@ void fd2000_device::device_add_mconfig(machine_config &config) add_common_devices(config); m_maincpu->set_addrmap(AS_PROGRAM, &fd2000_device::fd2000_mem); DP8473(config, m_fdc, 24_MHz_XTAL); - FLOPPY_CONNECTOR(config, DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_floppy_formats, true);//fd2000_device::floppy_formats); + FLOPPY_CONNECTOR(config, DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_mfm_floppy_formats, true);//fd2000_device::floppy_formats); } void fd4000_device::device_add_mconfig(machine_config &config) @@ -239,7 +241,7 @@ void fd4000_device::device_add_mconfig(machine_config &config) add_common_devices(config); m_maincpu->set_addrmap(AS_PROGRAM, &fd4000_device::fd4000_mem); PC8477A(config, m_fdc, 24_MHz_XTAL); - FLOPPY_CONNECTOR(config, PC8477AV1_TAG":0", fd4000_floppies, "35ed", floppy_image_device::default_floppy_formats, true);//fd2000_device::floppy_formats); + FLOPPY_CONNECTOR(config, PC8477AV1_TAG":0", fd4000_floppies, "35ed", floppy_image_device::default_mfm_floppy_formats, true);//fd2000_device::floppy_formats); } diff --git a/src/devices/bus/cbmiec/fd2000.h b/src/devices/bus/cbmiec/fd2000.h index f116f5f8cfb..d632e77c11f 100644 --- a/src/devices/bus/cbmiec/fd2000.h +++ b/src/devices/bus/cbmiec/fd2000.h @@ -12,8 +12,7 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m65c02.h" -#include "formats/d81_dsk.h" +#include "cpu/m6502/w65c02.h" #include "imagedev/floppy.h" #include "machine/6522via.h" #include "machine/upd765.h" @@ -21,14 +20,6 @@ //************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define FD2000_TAG "fd2000" - - - -//************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -41,23 +32,23 @@ public: // construction/destruction fd2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - DECLARE_READ8_MEMBER( via_pa_r ); - DECLARE_WRITE8_MEMBER( via_pa_w ); - DECLARE_READ8_MEMBER( via_pb_r ); - DECLARE_WRITE8_MEMBER( via_pb_w ); + uint8_t via_pa_r(); + void via_pa_w(uint8_t data); + uint8_t via_pb_r(); + void via_pb_w(uint8_t data); - //DECLARE_FLOPPY_FORMATS( floppy_formats ); + //static void floppy_formats(format_registration &fr); protected: fd2000_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_srq(int state) override; @@ -67,12 +58,12 @@ protected: void add_common_devices(machine_config &config); - required_device<m65c02_device> m_maincpu; + required_device<w65c02_device> m_maincpu; required_device<upd765_family_device> m_fdc; required_device<floppy_connector> m_floppy0; private: - void fd2000_mem(address_map &map); + void fd2000_mem(address_map &map) ATTR_COLD; }; @@ -85,11 +76,11 @@ public: fd4000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: - void fd4000_mem(address_map &map); + void fd4000_mem(address_map &map) ATTR_COLD; }; diff --git a/src/devices/bus/cbmiec/interpod.cpp b/src/devices/bus/cbmiec/interpod.cpp index aa70ca015cc..b256f42de19 100644 --- a/src/devices/bus/cbmiec/interpod.cpp +++ b/src/devices/bus/cbmiec/interpod.cpp @@ -67,17 +67,13 @@ Notes: //************************************************************************** #define R6502_TAG "u1" -#define R6532_TAG "u3" -#define R6522_TAG "u4" -#define MC6850_TAG "u5" -#define RS232_TAG "rs232" //************************************************************************** // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(INTERPOD, interpod_t, "interpod", "Interpod") +DEFINE_DEVICE_TYPE(CBM_INTERPOD, cbm_interpod_device, "cbm_interpod", "Oxford Computer Systems Interpod") @@ -103,7 +99,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *interpod_t::device_rom_region() const +const tiny_rom_entry *cbm_interpod_device::device_rom_region() const { return ROM_NAME( interpod ); } @@ -113,13 +109,13 @@ const tiny_rom_entry *interpod_t::device_rom_region() const // ADDRESS_MAP( interpod_mem ) //------------------------------------------------- -void interpod_t::interpod_mem(address_map &map) +void cbm_interpod_device::interpod_mem(address_map &map) { - map(0x0000, 0x007f).mirror(0x3b80).m(R6532_TAG, FUNC(mos6532_new_device::ram_map)); - map(0x0400, 0x041f).mirror(0x3be0).m(R6532_TAG, FUNC(mos6532_new_device::io_map)); - map(0x2000, 0x2001).mirror(0x9ffe).rw(MC6850_TAG, FUNC(acia6850_device::read), FUNC(acia6850_device::write)); + map(0x0000, 0x007f).mirror(0x3b80).m(m_riot, FUNC(mos6532_device::ram_map)); + map(0x0400, 0x041f).mirror(0x3be0).m(m_riot, FUNC(mos6532_device::io_map)); + map(0x2000, 0x2001).mirror(0x9ffe).rw(m_acia, FUNC(acia6850_device::read), FUNC(acia6850_device::write)); map(0x4000, 0x47ff).mirror(0xb800).rom().region(R6502_TAG, 0); - map(0x8000, 0x800f).mirror(0x5ff0).m(R6522_TAG, FUNC(via6522_device::map)); + map(0x8000, 0x800f).mirror(0x5ff0).m(m_via, FUNC(via6522_device::map)); } @@ -127,14 +123,14 @@ void interpod_t::interpod_mem(address_map &map) // device_add_mconfig - add device configuration //------------------------------------------------- -void interpod_t::device_add_mconfig(machine_config &config) +void cbm_interpod_device::device_add_mconfig(machine_config &config) { M6502(config, m_maincpu, 1000000); - m_maincpu->set_addrmap(AS_PROGRAM, &interpod_t::interpod_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &cbm_interpod_device::interpod_mem); - VIA6522(config, m_via, 1000000); + MOS6522(config, m_via, 1000000); - MOS6532_NEW(config, m_riot, 1000000); + MOS6532(config, m_riot, 1000000); ACIA6850(config, m_acia, 0); @@ -150,18 +146,18 @@ void interpod_t::device_add_mconfig(machine_config &config) //************************************************************************** //------------------------------------------------- -// interpod_t - constructor +// cbm_interpod_device - constructor //------------------------------------------------- -interpod_t::interpod_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, INTERPOD, tag, owner, clock), +cbm_interpod_device::cbm_interpod_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, CBM_INTERPOD, tag, owner, clock), device_cbm_iec_interface(mconfig, *this), m_maincpu(*this, R6502_TAG), - m_via(*this, R6522_TAG), - m_riot(*this, R6532_TAG), - m_acia(*this, MC6850_TAG), + m_via(*this, "u4"), + m_riot(*this, "u3"), + m_acia(*this, "u5"), m_ieee(*this, IEEE488_TAG), - m_rs232(*this, RS232_TAG) + m_rs232(*this, "rs232") { } @@ -170,7 +166,7 @@ interpod_t::interpod_t(const machine_config &mconfig, const char *tag, device_t // device_start - device-specific startup //------------------------------------------------- -void interpod_t::device_start() +void cbm_interpod_device::device_start() { } @@ -179,6 +175,6 @@ void interpod_t::device_start() // device_reset - device-specific reset //------------------------------------------------- -void interpod_t::device_reset() +void cbm_interpod_device::device_reset() { } diff --git a/src/devices/bus/cbmiec/interpod.h b/src/devices/bus/cbmiec/interpod.h index 60f0d728bf9..66d47dea6fd 100644 --- a/src/devices/bus/cbmiec/interpod.h +++ b/src/devices/bus/cbmiec/interpod.h @@ -16,7 +16,7 @@ #include "bus/ieee488/ieee488.h" #include "cpu/m6502/m6502.h" #include "machine/6522via.h" -#include "machine/mos6530n.h" +#include "machine/mos6530.h" #include "machine/6850acia.h" @@ -25,38 +25,38 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> interpod_t +// ======================> cbm_interpod_device -class interpod_t : public device_t, +class cbm_interpod_device : public device_t, public device_cbm_iec_interface { public: // construction/destruction - interpod_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + cbm_interpod_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; private: required_device<cpu_device> m_maincpu; required_device<via6522_device> m_via; - required_device<mos6532_new_device> m_riot; + required_device<mos6532_device> m_riot; required_device<acia6850_device> m_acia; required_device<ieee488_device> m_ieee; required_device<rs232_port_device> m_rs232; - void interpod_mem(address_map &map); + void interpod_mem(address_map &map) ATTR_COLD; }; // device type definition -DECLARE_DEVICE_TYPE(INTERPOD, interpod_t) +DECLARE_DEVICE_TYPE(CBM_INTERPOD, cbm_interpod_device) #endif // MAME_BUS_CBMIEC_INTERPOD_H diff --git a/src/devices/bus/cbmiec/mps1200.cpp b/src/devices/bus/cbmiec/mps1200.cpp new file mode 100644 index 00000000000..6ceac358d2e --- /dev/null +++ b/src/devices/bus/cbmiec/mps1200.cpp @@ -0,0 +1,317 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + Commodore MPS-1200 & MPS-1250 printers (skeleton) + + The MPS-1200's CPU board was originally designed for a standard + Centronics parallel interface (Y8300). However, an alternate + "Basic Interface Pack" board (Y8306) instead supported the IEC bus + using some extra LSTTL glue logic to convert serial data input to + the parallel format read by the CPU. The later MPS-1250 board + (Y8307) had hardware to support both serial and parallel + interfaces, but only used one at a time. + +**********************************************************************/ + +#include "emu.h" +#include "mps1200.h" + +#include "cpu/m6502/m50734.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +// device type definitions +DEFINE_DEVICE_TYPE(MPS1200, mps1200_device, "mps1200", "Commodore MPS-1200 Dot Matrix Printer") +DEFINE_DEVICE_TYPE(MPS1250, mps1250_device, "mps1250", "Commodore MPS-1250 Dot Matrix Printer") + + +//------------------------------------------------- +// mps1200_device - constructor +//------------------------------------------------- + +mps1200_device::mps1200_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, type, tag, owner, clock) + , device_cbm_iec_interface(mconfig, *this) + , m_mpscpu(*this, "mpscpu") +{ +} + +mps1200_device::mps1200_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : mps1200_device(mconfig, MPS1200, tag, owner, clock) +{ +} + + +//------------------------------------------------- +// mps1250_device - constructor +//------------------------------------------------- + +mps1250_device::mps1250_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : mps1200_device(mconfig, MPS1250, tag, owner, clock) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mps1200_device::device_start() +{ +} + + +//------------------------------------------------- +// cbm_iec_atn - ATN line handler +//------------------------------------------------- + +void mps1200_device::cbm_iec_atn(int state) +{ + // TODO +} + + +//------------------------------------------------- +// cbm_iec_data - serial data line handler +//------------------------------------------------- + +void mps1200_device::cbm_iec_data(int state) +{ + // TODO +} + + +//------------------------------------------------- +// cbm_iec_reset - reset line handler +//------------------------------------------------- + +void mps1200_device::cbm_iec_reset(int state) +{ + // TODO +} + + +//------------------------------------------------- +// mem_map - address map for main memory space +//------------------------------------------------- + +void mps1200_device::mem_map(address_map &map) +{ + map(0x0000, 0x1fff).mirror(0x6000).ram().share("ram"); // M5M5165P-12 + map(0x8000, 0xffff).rom().region("firmware", 0x8000); +} + + +//------------------------------------------------- +// data_map - address map for data memory space +//------------------------------------------------- + +void mps1200_device::data_map(address_map &map) +{ + map(0x0000, 0x1fff).mirror(0x6000).ram().share("ram"); + map(0x8000, 0xffff).rom().region("firmware", 0); +} + + +//------------------------------------------------- +// device_add_mconfig - device-specific config +//------------------------------------------------- + +void mps1200_device::device_add_mconfig(machine_config &config) +{ + M50734(config, m_mpscpu, 8_MHz_XTAL); + m_mpscpu->set_addrmap(AS_PROGRAM, &mps1200_device::mem_map); + m_mpscpu->set_addrmap(AS_DATA, &mps1200_device::data_map); +} + + +//************************************************************************** +// INPUT PORTS +//************************************************************************** + +static INPUT_PORTS_START(mps1200) + PORT_START("SW") + PORT_DIPNAME(0x0080, 0x0080, "Device Number" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING(0x0080, "4" ) + PORT_DIPSETTING(0x0000, "5" ) + PORT_DIPNAME(0x0040, 0x0040, "ASCII Translation" ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING(0x0040, "PET ASCII" ) + PORT_DIPSETTING(0x0000, "ASCII" ) // access to full ascii character set + PORT_DIPNAME(0x0020, 0x0020, "Control Code Mode" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING(0x0020, "Commodore" ) + PORT_DIPSETTING(0x0000, "Epson FX" ) // access to escape control codes when using Epson printer driver (software-specific use) + PORT_DIPNAME(0x0010, 0x0010, "Print Quality" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING(0x0010, "Draft" ) + PORT_DIPSETTING(0x0000, "NLQ" ) + PORT_DIPNAME(0x0008, 0x0008, "Page Length" ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING(0x0008, "11 inch" ) + PORT_DIPSETTING(0x0000, "12 inch" ) + PORT_DIPNAME(0x0004, 0x0000, "Paper End Detect" ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING(0x0004, "Enabled" ) // when enabled printer stops printing 2 inches before end of page and beeps to change paper + PORT_DIPSETTING(0x0000, "Disabled" ) // so generally leave this disabled (ON) to allow printing closer to the end of a page + PORT_DIPNAME(0x0002, 0x0002, "Automatic Line Feed" ) PORT_DIPLOCATION("SW1:7") // only does something if sw1:3 is on, otherwise ignored + PORT_DIPSETTING(0x0002, "Disabled" ) + PORT_DIPSETTING(0x0000, "Enabled" ) + PORT_DIPNAME(0x0001, 0x0001, "Character Spacing" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING(0x0001, "Pica / 10 cpi" ) // 10 characters per inch (standard character spacing) + PORT_DIPSETTING(0x0000, "Compressed / 17 cpi") // 17 characters per inch + + PORT_DIPNAME(0xe000, 0xe000, "International Character Set" ) PORT_DIPLOCATION("SW2:1,2,3") + PORT_DIPSETTING(0xe000, "US/UK/Netherlands" ) // off off off US/UK/Netherlands (default all off) + PORT_DIPSETTING(0xc000, "Switzerland" ) // on on off Switzerland + PORT_DIPSETTING(0xa000, "Italy" ) // on off on Italy + PORT_DIPSETTING(0x8000, DEF_STR(Unused)) // on off off Unused + PORT_DIPSETTING(0x6000, "France/Belgium" ) // off on on France/Belgium + PORT_DIPSETTING(0x4000, "Sweden/Finland" ) // off on off Sweden/Finland + PORT_DIPSETTING(0x2000, "Denmark/Norway" ) // off off on Denmark/Norway + PORT_DIPSETTING(0x0000, "Spain" ) // on on on Spain + PORT_DIPNAME(0x1000, 0x1000, DEF_STR(Unused)) PORT_DIPLOCATION("SW2:4") + PORT_DIPSETTING(0x1000, DEF_STR(Off)) + PORT_DIPSETTING(0x0000, DEF_STR(On)) + PORT_BIT(0x0f00, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + +static INPUT_PORTS_START(mps1250) // all DIP switches correct as per manual + PORT_START("SW") // all off = acts like Commodore VIC-1525 or MPS-803 + PORT_DIPNAME(0x0080, 0x0080, "Interface" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING(0x0080, "Commodore Serial IEC" ) // use with VIC20/C64/C128 + PORT_DIPSETTING(0x0000, "Parallel" ) // use with PC or Amiga + +// when sw1:1 is off (IEC mode) these settings apply.... + PORT_DIPNAME(0x0040, 0x0040, "ASCII Translation" ) PORT_DIPLOCATION("SW1:2") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) + PORT_DIPSETTING(0x0040, "PET ASCII" ) + PORT_DIPSETTING(0x0000, "ASCII" ) // access to full ascii character set + PORT_DIPNAME(0x0020, 0x0020, "Control Code Mode" ) PORT_DIPLOCATION("SW1:3") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) + PORT_DIPSETTING(0x0020, "Commodore" ) + PORT_DIPSETTING(0x0000, "Epson FX" ) // access to escape control codes when using Epson printer driver (software-specific use) + PORT_DIPNAME(0x0010, 0x0010, "Print Quality" ) PORT_DIPLOCATION("SW1:4") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) + PORT_DIPSETTING(0x0010, "Draft" ) + PORT_DIPSETTING(0x0000, "NLQ" ) + PORT_DIPNAME(0x0008, 0x0008, "Device Number" ) PORT_DIPLOCATION("SW1:5") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) + PORT_DIPSETTING(0x0008, "4" ) + PORT_DIPSETTING(0x0000, "5" ) + PORT_DIPNAME(0x0004, 0x0000, "Paper End Detect" ) PORT_DIPLOCATION("SW1:6") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) + PORT_DIPSETTING(0x0004, "Enabled" ) // when enabled printer stops printing 2 inches before end of page and beeps to change paper + PORT_DIPSETTING(0x0000, "Disabled" ) // so generally leave this disabled (ON) to allow printing closer to the end of a page + PORT_DIPNAME(0x0002, 0x0002, "Automatic Line Feed" ) PORT_DIPLOCATION("SW1:7") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) // only does something if sw1:3 is on, otherwise ignored + PORT_DIPSETTING(0x0002, "Disabled" ) + PORT_DIPSETTING(0x0000, "Enabled" ) // adds a line feed to each carriage return received + PORT_DIPNAME(0x0001, 0x0001, "Character Spacing" ) PORT_DIPLOCATION("SW1:8") PORT_CONDITION("SW", 0x80, EQUALS, 0x80) + PORT_DIPSETTING(0x0001, "Pica / 10 cpi" ) // 10 characters per inch (standard character spacing) + PORT_DIPSETTING(0x0000, "Compressed / 17 cpi") // 17 characters per inch + +// when sw1:1 is on (parallel mode) these settings apply.... + PORT_DIPNAME(0x0040, 0x0040, "Automatic Line Feed" ) PORT_DIPLOCATION("SW1:2") PORT_CONDITION("SW", 0x80, EQUALS, 0x00) + PORT_DIPSETTING(0x0040, "Disabled" ) + PORT_DIPSETTING(0x0000, "Enabled" ) // adds a line feed (LF) to each carriage return received + PORT_DIPNAME(0x0030, 0x0030, "Printer Configuration" ) PORT_DIPLOCATION("SW1:3,4") PORT_CONDITION("SW", 0x80, EQUALS, 0x00) + PORT_DIPSETTING(0x0030, "Epson #1" ) // off off (best for use with Amiga or PC and Epson printer driver) + PORT_DIPSETTING(0x0020, "Epson #2" ) // on off (gives access to full list of international character sets) + PORT_DIPSETTING(0x0010, "Epson #3" ) // off on (gives access to partial list of international character sets and other options) + PORT_DIPSETTING(0x0000, "IBM Graphics Printer" ) // on on (for use with IBM-compatible PC) + +// when Epson #1 is selected these settings apply.... + PORT_DIPNAME(0x0008, 0x0008, "ASCII Codes 128-159" ) PORT_DIPLOCATION("SW1:5") PORT_CONDITION("SW", 0xb0, EQUALS, 0x30) + PORT_DIPSETTING(0x0008, "High-bit Control Codes" ) // standard characters + PORT_DIPSETTING(0x0000, "Line and Block Graphics" ) // graphics characters + PORT_DIPNAME(0x0004, 0x0004, "Zero" ) PORT_DIPLOCATION("SW1:6") PORT_CONDITION("SW", 0xb0, EQUALS, 0x30) + PORT_DIPSETTING(0x0004, "Not Slashed" ) + PORT_DIPSETTING(0x0000, "Slashed" ) + PORT_DIPNAME(0x0002, 0x0002, "Print Quality" ) PORT_DIPLOCATION("SW1:7") PORT_CONDITION("SW", 0xb0, EQUALS, 0x30) // only active if sw1:3 is on + PORT_DIPSETTING(0x0002, "Draft" ) + PORT_DIPSETTING(0x0000, "NLQ" ) + PORT_DIPNAME(0x0001, 0x0001, "Character Spacing" ) PORT_DIPLOCATION("SW1:8") PORT_CONDITION("SW", 0xb0, EQUALS, 0x30) + PORT_DIPSETTING(0x0001, "Pica / 10 cpi" ) // 10 characters per inch (standard character spacing) + PORT_DIPSETTING(0x0000, "Compressed / 17 cpi") // 17 characters per inch + +// when Epson #2 is selected these settings apply.... + PORT_DIPNAME(0x000e, 0x000e, "International Character Set" ) PORT_DIPLOCATION("SW1:5,6,7") PORT_CONDITION("SW", 0xb0, EQUALS, 0x20) + PORT_DIPSETTING(0x000e, "USA" ) // off off off USA + PORT_DIPSETTING(0x000c, "England" ) // on on off England + PORT_DIPSETTING(0x000a, "Sweden" ) // on off on Sweden + PORT_DIPSETTING(0x0008, "France" ) // on off off Unused + PORT_DIPSETTING(0x0006, "Italy" ) // off on on Italy + PORT_DIPSETTING(0x0004, "Germany" ) // off on off Germany + PORT_DIPSETTING(0x0002, "Denmark" ) // off off on Denmark + PORT_DIPSETTING(0x0000, "Spain" ) // on on on Spain + PORT_DIPNAME(0x0001, 0x0001, "Page Length" ) PORT_DIPLOCATION("SW1:8") PORT_CONDITION("SW", 0xb0, EQUALS, 0x20) + PORT_DIPSETTING(0x0001, "11 inch" ) + PORT_DIPSETTING(0x0000, "12 inch" ) + +// when Epson #3 is selected these settings apply.... + PORT_DIPNAME(0x0008, 0x0008, "ASCII Codes 128-159" ) PORT_DIPLOCATION("SW1:5") PORT_CONDITION("SW", 0xb0, EQUALS, 0x10) + PORT_DIPSETTING(0x0008, "High-bit Control Codes" ) // standard characters + PORT_DIPSETTING(0x0000, "Line and Block Graphics" ) // graphics characters + PORT_DIPNAME(0x0006, 0x0006, "International Character Set" ) PORT_DIPLOCATION("SW1:6,7") PORT_CONDITION("SW", 0xb0, EQUALS, 0x10) + PORT_DIPSETTING(0x0006, "USA" ) // off off USA + PORT_DIPSETTING(0x0004, "France" ) // on off France + PORT_DIPSETTING(0x0002, "Germany" ) // off on Germany + PORT_DIPSETTING(0x0000, "England" ) // on on England + PORT_DIPNAME(0x0001, 0x0001, "Character Spacing" ) PORT_DIPLOCATION("SW1:8") PORT_CONDITION("SW", 0xb0, EQUALS, 0x10) + PORT_DIPSETTING(0x0001, "Pica / 10 cpi" ) // 10 characters per inch (standard character spacing) + PORT_DIPSETTING(0x0000, "Compressed / 17 cpi") // 17 characters per inch + +// when IBM Graphics Printer #1 is selected these settings apply.... + PORT_DIPNAME(0x0008, 0x0008, "ASCII Codes 128-159" ) PORT_DIPLOCATION("SW1:5") PORT_CONDITION("SW", 0xb0, EQUALS, 0x00) + PORT_DIPSETTING(0x0008, "High-bit Control Codes" ) // IBM-graphics set 1 + PORT_DIPSETTING(0x0000, "Accented Characters" ) // IBM-graphics set 2 + PORT_DIPNAME(0x0004, 0x0004, "Line Spacing" ) PORT_DIPLOCATION("SW1:6") PORT_CONDITION("SW", 0xb0, EQUALS, 0x00) + PORT_DIPSETTING(0x0004, "1/6 inch" ) + PORT_DIPSETTING(0x0000, "1/8 inch" ) + PORT_DIPNAME(0x0002, 0x0002, "Auto Carriage Return" ) PORT_DIPLOCATION("SW1:7") PORT_CONDITION("SW", 0xb0, EQUALS, 0x00) + PORT_DIPSETTING(0x0002, "Enabled" ) // carriage return (CR) is inserted when printer receives a line feed + PORT_DIPSETTING(0x0000, "Disabled" ) + PORT_DIPNAME(0x0001, 0x0001, "Buffer-Full Printing" ) PORT_DIPLOCATION("SW1:8") PORT_CONDITION("SW", 0xb0, EQUALS, 0x00) + PORT_DIPSETTING(0x0001, "Enabled" ) // Determines how the printer acts when receiving more characters than will fit on one line without a + PORT_DIPSETTING(0x0000, "Disabled" ) // carriage return received. 'Enabled' will insert a line feed at the right hard margin and 'disabled' + // will return the carriage to the left margin and the remaining characters will overwrite the line. + PORT_BIT(0x0f00, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + + +//------------------------------------------------- +// device_input_ports - device-specific ports +//------------------------------------------------- + +ioport_constructor mps1200_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(mps1200); +} + +ioport_constructor mps1250_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(mps1250); +} + + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** + +ROM_START(mps1200) + ROM_REGION(0x10000, "firmware", 0) + ROM_LOAD("mps1200-k405-0202.bin", 0x00000, 0x10000, CRC(87aa884a) SHA1(0ceb753c17599bc69458cfbb1cb3e81c2b60d107)) // "VER 1.01" "JUL-24-86" "Y8306 COMMODORE B.I.P." +ROM_END + +ROM_START(mps1250) + ROM_REGION(0x10000, "firmware", 0) + ROM_LOAD("mps1250_k111_0201.bin", 0x00000, 0x10000, CRC(f2de9b69) SHA1(bb7357e83497b333e3f95548d94970003b2dfa9d)) // "VER 1.34" "MAR-03-87" "Y8307 COMMODORE DUAL B.I.P." +ROM_END + +//------------------------------------------------- +// device_rom_region - device-specific ROM region +//------------------------------------------------- + +const tiny_rom_entry *mps1200_device::device_rom_region() const +{ + return ROM_NAME(mps1200); +} + +const tiny_rom_entry *mps1250_device::device_rom_region() const +{ + return ROM_NAME(mps1250); +} diff --git a/src/devices/bus/cbmiec/mps1200.h b/src/devices/bus/cbmiec/mps1200.h new file mode 100644 index 00000000000..b9f017724e1 --- /dev/null +++ b/src/devices/bus/cbmiec/mps1200.h @@ -0,0 +1,70 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + Commodore MPS-1200 & MPS-1250 printers + +**********************************************************************/ + +#ifndef MAME_BUS_CBMIEC_MPS1200_H +#define MAME_BUS_CBMIEC_MPS1200_H + +#pragma once + +#include "cbmiec.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> mps1200_device + +class mps1200_device : public device_t, public device_cbm_iec_interface +{ +public: + // device type constructor + mps1200_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + static constexpr feature_type unemulated_features() { return feature::PRINTER; } + +protected: + mps1200_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); + + // device-level overrides + virtual void device_start() override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + + // device_cbm_iec_interface overrides + void cbm_iec_atn(int state) override; + void cbm_iec_data(int state) override; + void cbm_iec_reset(int state) override; + +private: + void mem_map(address_map &map) ATTR_COLD; + void data_map(address_map &map) ATTR_COLD; + + required_device<cpu_device> m_mpscpu; +}; + +// ======================> mps1250_device + +class mps1250_device : public mps1200_device +{ +public: + // device type constructor + mps1250_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + virtual ioport_constructor device_input_ports() const override ATTR_COLD; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; +}; + + +// device type declarations +DECLARE_DEVICE_TYPE(MPS1200, mps1200_device) +DECLARE_DEVICE_TYPE(MPS1250, mps1250_device) + +#endif // MAME_BUS_CBMIEC_MPS1200_H diff --git a/src/devices/bus/cbmiec/serialbox.cpp b/src/devices/bus/cbmiec/serialbox.cpp index ab8326528d0..950cf46b964 100644 --- a/src/devices/bus/cbmiec/serialbox.cpp +++ b/src/devices/bus/cbmiec/serialbox.cpp @@ -32,7 +32,7 @@ enum // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(SERIAL_BOX, serial_box_device, "serbox", "Serial Box") +DEFINE_DEVICE_TYPE(CBM_SERIAL_BOX, cbm_serial_box_device, "cbm_serbox", "Serial Box") //------------------------------------------------- @@ -49,7 +49,7 @@ ROM_END // rom_region - device-specific ROM region //------------------------------------------------- -const tiny_rom_entry *serial_box_device::device_rom_region() const +const tiny_rom_entry *cbm_serial_box_device::device_rom_region() const { return ROM_NAME( serial_box ); } @@ -59,7 +59,7 @@ const tiny_rom_entry *serial_box_device::device_rom_region() const // ADDRESS_MAP( serial_box_mem ) //------------------------------------------------- -void serial_box_device::serial_box_mem(address_map &map) +void cbm_serial_box_device::serial_box_mem(address_map &map) { map(0xf000, 0xffff).rom().region(M6502_TAG, 0); } @@ -69,10 +69,10 @@ void serial_box_device::serial_box_mem(address_map &map) // device_add_mconfig - add device configuration //------------------------------------------------- -void serial_box_device::device_add_mconfig(machine_config &config) +void cbm_serial_box_device::device_add_mconfig(machine_config &config) { - M65C02(config, m_maincpu, XTAL(4'000'000)/4); - m_maincpu->set_addrmap(AS_PROGRAM, &serial_box_device::serial_box_mem); + W65C02(config, m_maincpu, XTAL(4'000'000)/4); + m_maincpu->set_addrmap(AS_PROGRAM, &cbm_serial_box_device::serial_box_mem); } @@ -82,11 +82,11 @@ void serial_box_device::device_add_mconfig(machine_config &config) //************************************************************************** //------------------------------------------------- -// serial_box_device - constructor +// cbm_serial_box_device - constructor //------------------------------------------------- -serial_box_device::serial_box_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, SERIAL_BOX, tag, owner, clock), +cbm_serial_box_device::cbm_serial_box_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, CBM_SERIAL_BOX, tag, owner, clock), device_cbm_iec_interface(mconfig, *this), m_maincpu(*this, M6502_TAG) { @@ -97,7 +97,7 @@ serial_box_device::serial_box_device(const machine_config &mconfig, const char * // device_start - device-specific startup //------------------------------------------------- -void serial_box_device::device_start() +void cbm_serial_box_device::device_start() { } @@ -106,7 +106,7 @@ void serial_box_device::device_start() // device_reset - device-specific reset //------------------------------------------------- -void serial_box_device::device_reset() +void cbm_serial_box_device::device_reset() { } @@ -115,7 +115,7 @@ void serial_box_device::device_reset() // cbm_iec_atn - //------------------------------------------------- -void serial_box_device::cbm_iec_atn(int state) +void cbm_serial_box_device::cbm_iec_atn(int state) { } @@ -124,7 +124,7 @@ void serial_box_device::cbm_iec_atn(int state) // cbm_iec_data - //------------------------------------------------- -void serial_box_device::cbm_iec_data(int state) +void cbm_serial_box_device::cbm_iec_data(int state) { } @@ -133,7 +133,7 @@ void serial_box_device::cbm_iec_data(int state) // cbm_iec_reset - //------------------------------------------------- -void serial_box_device::cbm_iec_reset(int state) +void cbm_serial_box_device::cbm_iec_reset(int state) { if (!state) { diff --git a/src/devices/bus/cbmiec/serialbox.h b/src/devices/bus/cbmiec/serialbox.h index 396f9a85927..268013ffb45 100644 --- a/src/devices/bus/cbmiec/serialbox.h +++ b/src/devices/bus/cbmiec/serialbox.h @@ -11,16 +11,8 @@ #pragma once -#include "cpu/m6502/m65c02.h" -#include "bus/cbmiec/cbmiec.h" - - - -//************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define SERIAL_BOX_TAG "serialbox" +#include "cbmiec.h" +#include "cpu/m6502/w65c02.h" @@ -28,22 +20,22 @@ // TYPE DEFINITIONS //************************************************************************** -// ======================> serial_box_device +// ======================> cbm_serial_box_device -class serial_box_device : public device_t, public device_cbm_iec_interface +class cbm_serial_box_device : public device_t, public device_cbm_iec_interface { public: // construction/destruction - serial_box_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + cbm_serial_box_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_atn(int state) override; @@ -51,14 +43,14 @@ protected: void cbm_iec_reset(int state) override; private: - required_device<m65c02_device> m_maincpu; + required_device<w65c02_device> m_maincpu; - void serial_box_mem(address_map &map); + void serial_box_mem(address_map &map) ATTR_COLD; }; // device type definition -DECLARE_DEVICE_TYPE(SERIAL_BOX, serial_box_device) +DECLARE_DEVICE_TYPE(CBM_SERIAL_BOX, cbm_serial_box_device) #endif // MAME_BUS_CBMIEC_SERIALBOX_H diff --git a/src/devices/bus/cbmiec/vic1515.h b/src/devices/bus/cbmiec/vic1515.h index 1b84636e6d3..80c555d6936 100644 --- a/src/devices/bus/cbmiec/vic1515.h +++ b/src/devices/bus/cbmiec/vic1515.h @@ -30,13 +30,13 @@ public: protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_atn(int state) override; @@ -44,8 +44,8 @@ protected: void cbm_iec_reset(int state) override; private: - void vic1515_io(address_map &map); - void vic1515_mem(address_map &map); + void vic1515_io(address_map &map) ATTR_COLD; + void vic1515_mem(address_map &map) ATTR_COLD; }; diff --git a/src/devices/bus/cbmiec/vic1520.cpp b/src/devices/bus/cbmiec/vic1520.cpp index 8e535c230e6..c77175fb83b 100644 --- a/src/devices/bus/cbmiec/vic1520.cpp +++ b/src/devices/bus/cbmiec/vic1520.cpp @@ -41,14 +41,6 @@ PD7 Y MOTOR COM D //************************************************************************** -// MACROS / CONSTANTS -//************************************************************************** - -#define M6500_1_TAG "u1" - - - -//************************************************************************** // DEVICE DEFINITIONS //************************************************************************** @@ -60,7 +52,7 @@ DEFINE_DEVICE_TYPE(VIC1520, vic1520_device, "vic1520", "VIC-1520 Color Printer P //------------------------------------------------- ROM_START( vic1520 ) - ROM_REGION( 0x800, M6500_1_TAG, 0 ) + ROM_REGION( 0x800, "mcu", 0 ) ROM_SYSTEM_BIOS( 0, "r01", "325340-01" ) ROMX_LOAD( "325340-01.u1", 0x000, 0x800, CRC(3757da6f) SHA1(8ab43603f74b0f269bbe890d1939a9ae31307eb1), ROM_BIOS(0) ) ROM_SYSTEM_BIOS( 1, "r03", "325340-03" ) @@ -79,25 +71,17 @@ const tiny_rom_entry *vic1520_device::device_rom_region() const //------------------------------------------------- -// ADDRESS_MAP( vic1520_mem ) -//------------------------------------------------- - -void vic1520_device::vic1520_mem(address_map &map) -{ - map.global_mask(0xfff); - map(0x000, 0x03f).ram(); - map(0x800, 0xfff).rom().region(M6500_1_TAG, 0); -} - - -//------------------------------------------------- // device_add_mconfig - add device configuration //------------------------------------------------- void vic1520_device::device_add_mconfig(machine_config &config) { - m6502_device &cpu(M6502(config, M6500_1_TAG, XTAL(2'000'000))); // M6500/1 - cpu.set_addrmap(AS_PROGRAM, &vic1520_device::vic1520_mem); + M6500_1(config, m_mcu, 2_MHz_XTAL); // MPS 6500/1 + m_mcu->pa_out_cb().set(FUNC(vic1520_device::port_w)); + m_mcu->pb_in_cb().set(FUNC(vic1520_device::select_r)); + m_mcu->pb_out_cb().set(FUNC(vic1520_device::led_w)); + m_mcu->pc_out_cb().set(FUNC(vic1520_device::pen_w)); + m_mcu->pd_out_cb().set(FUNC(vic1520_device::motor_w)); } @@ -128,9 +112,11 @@ ioport_constructor vic1520_device::device_input_ports() const // vic1520_device - constructor //------------------------------------------------- -vic1520_device::vic1520_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, VIC1520, tag, owner, clock), - device_cbm_iec_interface(mconfig, *this) +vic1520_device::vic1520_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, VIC1520, tag, owner, clock) + , device_cbm_iec_interface(mconfig, *this) + , m_mcu(*this, "mcu") + , m_pa_data(0xff) { } @@ -141,24 +127,45 @@ vic1520_device::vic1520_device(const machine_config &mconfig, const char *tag, d void vic1520_device::device_start() { + save_item(NAME(m_pa_data)); } //------------------------------------------------- -// device_reset - device-specific reset +// cbm_iec_atn - //------------------------------------------------- -void vic1520_device::device_reset() +void vic1520_device::cbm_iec_atn(int state) { + if (state && BIT(m_pa_data, 0)) + { + m_pa_data &= 0xfe; + m_mcu->pa_w(m_pa_data); + } + else if (!state && !BIT(m_pa_data, 0)) + { + m_pa_data |= 0x01; + m_mcu->pa_w(m_pa_data); + } } //------------------------------------------------- -// cbm_iec_atn - +// cbm_iec_clk - //------------------------------------------------- -void vic1520_device::cbm_iec_atn(int state) +void vic1520_device::cbm_iec_clk(int state) { + if (state && BIT(m_pa_data, 1)) + { + m_pa_data &= 0xfd; + m_mcu->pa_w(m_pa_data); + } + else if (!state && !BIT(m_pa_data, 1)) + { + m_pa_data |= 0x02; + m_mcu->pa_w(m_pa_data); + } } @@ -168,6 +175,16 @@ void vic1520_device::cbm_iec_atn(int state) void vic1520_device::cbm_iec_data(int state) { + if (state && BIT(m_pa_data, 7)) + { + m_pa_data &= 0x7f; + m_mcu->pa_w(m_pa_data); + } + else if (!state && !BIT(m_pa_data, 7)) + { + m_pa_data |= 0x80; + m_mcu->pa_w(m_pa_data); + } } @@ -177,8 +194,52 @@ void vic1520_device::cbm_iec_data(int state) void vic1520_device::cbm_iec_reset(int state) { - if (!state) - { - device_reset(); - } + m_mcu->set_input_line(INPUT_LINE_RESET, state ? CLEAR_LINE : ASSERT_LINE); +} + + +//------------------------------------------------- +// port_w - issue response on data line +//------------------------------------------------- + +void vic1520_device::port_w(u8 data) +{ + m_bus->data_w(this, !BIT(data, 6) && (data & 0x21) != 0x01); +} + + +//------------------------------------------------- +// select_r - +//------------------------------------------------- + +u8 vic1520_device::select_r() +{ + return 0xff; +} + + +//------------------------------------------------- +// led_w - +//------------------------------------------------- + +void vic1520_device::led_w(u8 data) +{ +} + + +//------------------------------------------------- +// pen_w - +//------------------------------------------------- + +void vic1520_device::pen_w(u8 data) +{ +} + + +//------------------------------------------------- +// motor_w - +//------------------------------------------------- + +void vic1520_device::motor_w(u8 data) +{ } diff --git a/src/devices/bus/cbmiec/vic1520.h b/src/devices/bus/cbmiec/vic1520.h index 2ba2520d7c5..d379f512e38 100644 --- a/src/devices/bus/cbmiec/vic1520.h +++ b/src/devices/bus/cbmiec/vic1520.h @@ -12,7 +12,7 @@ #pragma once #include "cbmiec.h" -#include "cpu/m6502/m6502.h" +#include "cpu/m6502/m6500_1.h" @@ -26,25 +26,33 @@ class vic1520_device : public device_t, public device_cbm_iec_interface { public: // construction/destruction - vic1520_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + vic1520_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; + virtual void device_start() override ATTR_COLD; // optional information overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual ioport_constructor device_input_ports() const override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual ioport_constructor device_input_ports() const override ATTR_COLD; // device_cbm_iec_interface overrides void cbm_iec_atn(int state) override; + void cbm_iec_clk(int state) override; void cbm_iec_data(int state) override; void cbm_iec_reset(int state) override; private: - void vic1520_mem(address_map &map); + void port_w(u8 data); + u8 select_r(); + void led_w(u8 data); + void pen_w(u8 data); + void motor_w(u8 data); + + required_device<m6500_1_device> m_mcu; + + u8 m_pa_data; }; |