diff options
Diffstat (limited to 'src/devices/bus/cbmiec/c1541.cpp')
-rw-r--r-- | src/devices/bus/cbmiec/c1541.cpp | 63 |
1 files changed, 34 insertions, 29 deletions
diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp index 0bedd729b0e..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" + //************************************************************************** @@ -634,7 +637,7 @@ const tiny_rom_entry *msd_sd2_device::device_rom_region() const // read - //------------------------------------------------- -READ8_MEMBER( c1541_prologic_dos_classic_device::read ) +uint8_t c1541_prologic_dos_classic_device::read() { return 0; } @@ -644,7 +647,7 @@ READ8_MEMBER( c1541_prologic_dos_classic_device::read ) // write - //------------------------------------------------- -WRITE8_MEMBER( c1541_prologic_dos_classic_device::write ) +void c1541_prologic_dos_classic_device::write(uint8_t data) { } @@ -709,20 +712,20 @@ void c1541_prologic_dos_classic_device::c1541pdc_mem(address_map &map) } -WRITE_LINE_MEMBER( c1541_device_base::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_device_base::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_device_base::via0_pa_w ) +void c1541_device_base::via0_pa_w(uint8_t data) { if (m_other != nullptr) { @@ -730,7 +733,7 @@ WRITE8_MEMBER( c1541_device_base::via0_pa_w ) } } -READ8_MEMBER( c1541_device_base::via0_pb_r ) +uint8_t c1541_device_base::via0_pb_r() { /* @@ -764,7 +767,7 @@ READ8_MEMBER( c1541_device_base::via0_pb_r ) return data; } -WRITE8_MEMBER( c1541_device_base::via0_pb_w ) +void c1541_device_base::via0_pb_w(uint8_t data) { /* @@ -791,7 +794,7 @@ WRITE8_MEMBER( c1541_device_base::via0_pb_w ) m_bus->clk_w(this, !BIT(data, 3)); } -WRITE_LINE_MEMBER( c1541_device_base::via0_ca2_w ) +void c1541_device_base::via0_ca2_w(int state) { if (m_other != nullptr) { @@ -799,7 +802,7 @@ WRITE_LINE_MEMBER( c1541_device_base::via0_ca2_w ) } } -READ8_MEMBER( c1541c_device::via0_pa_r ) +uint8_t c1541c_device::via0_pa_r() { /* @@ -820,14 +823,14 @@ READ8_MEMBER( c1541c_device::via0_pa_r ) } -WRITE_LINE_MEMBER( c1541_device_base::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_device_base::via1_pb_r ) +uint8_t c1541_device_base::via1_pb_r() { /* @@ -855,7 +858,7 @@ READ8_MEMBER( c1541_device_base::via1_pb_r ) return data; } -WRITE8_MEMBER( c1541_device_base::via1_pb_w ) +void c1541_device_base::via1_pb_w(uint8_t data) { /* @@ -890,12 +893,12 @@ WRITE8_MEMBER( c1541_device_base::via1_pb_w ) // C64H156_INTERFACE( ga_intf ) //------------------------------------------------- -WRITE_LINE_MEMBER( c1541_device_base::atn_w ) +void c1541_device_base::atn_w(int state) { set_iec_data(); } -WRITE_LINE_MEMBER( c1541_device_base::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_device_base::byte_w ) // FLOPPY_FORMATS( floppy_formats ) //------------------------------------------------- -FLOPPY_FORMATS_MEMBER( c1541_device_base::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_device::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_device::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_device::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_device::pia_pa_w ) */ } -READ8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_r ) +uint8_t c1541_prologic_dos_classic_device::pia_pb_r() { return m_parallel_data; } -WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_w ) +void c1541_prologic_dos_classic_device::pia_pb_w(uint8_t data) { m_parallel_data = data; @@ -962,9 +967,8 @@ 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_device_base::c1541_mem); - //config.set_perfect_quantum(m_maincpu); FIXME: not safe in a slot device - add barriers - VIA6522(config, m_via0, XTAL(16'000'000)/16); + 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)); @@ -972,7 +976,7 @@ void c1541_device_base::device_add_mconfig(machine_config &config) m_via0->cb2_handler().set(FUNC(c1541_device_base::via0_ca2_w)); m_via0->irq_handler().set(FUNC(c1541_device_base::via0_irq_w)); - VIA6522(config, m_via1, XTAL(16'000'000)/16); + 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_device_base::via1_pb_r)); m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w)); @@ -990,6 +994,7 @@ void c1541_device_base::device_add_mconfig(machine_config &config) connector.set_default_option("525ssqd"); connector.set_fixed(true); connector.set_formats(c1541_device_base::floppy_formats); + connector.enable_sound(true); } @@ -1019,7 +1024,7 @@ void c1541_prologic_dos_classic_device::device_add_mconfig(machine_config &confi m_maincpu->set_addrmap(AS_PROGRAM, &c1541_prologic_dos_classic_device::c1541pdc_mem); - PIA6821(config, m_pia, 0); + 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)); |