summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/cbmiec/c1541.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/cbmiec/c1541.cpp')
-rw-r--r--src/devices/bus/cbmiec/c1541.cpp63
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));