diff options
Diffstat (limited to 'src/devices/bus/cbmiec/c1541.cpp')
-rw-r--r-- | src/devices/bus/cbmiec/c1541.cpp | 371 |
1 files changed, 188 insertions, 183 deletions
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); } |