summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/cbmiec
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/cbmiec')
-rw-r--r--src/devices/bus/cbmiec/c1526.cpp2
-rw-r--r--src/devices/bus/cbmiec/c1526.h24
-rw-r--r--src/devices/bus/cbmiec/c1541.cpp371
-rw-r--r--src/devices/bus/cbmiec/c1541.h273
-rw-r--r--src/devices/bus/cbmiec/c1571.cpp64
-rw-r--r--src/devices/bus/cbmiec/c1571.h72
-rw-r--r--src/devices/bus/cbmiec/c1581.cpp28
-rw-r--r--src/devices/bus/cbmiec/c1581.h30
-rw-r--r--src/devices/bus/cbmiec/c64_nl10.cpp24
-rw-r--r--src/devices/bus/cbmiec/c64_nl10.h12
-rw-r--r--src/devices/bus/cbmiec/cbmiec.cpp53
-rw-r--r--src/devices/bus/cbmiec/cbmiec.h51
-rw-r--r--src/devices/bus/cbmiec/cmdhd.cpp6
-rw-r--r--src/devices/bus/cbmiec/cmdhd.h20
-rw-r--r--src/devices/bus/cbmiec/diag264_lb_iec.h2
-rw-r--r--src/devices/bus/cbmiec/fd2000.cpp22
-rw-r--r--src/devices/bus/cbmiec/fd2000.h39
-rw-r--r--src/devices/bus/cbmiec/interpod.cpp44
-rw-r--r--src/devices/bus/cbmiec/interpod.h22
-rw-r--r--src/devices/bus/cbmiec/mps1200.cpp317
-rw-r--r--src/devices/bus/cbmiec/mps1200.h70
-rw-r--r--src/devices/bus/cbmiec/serialbox.cpp28
-rw-r--r--src/devices/bus/cbmiec/serialbox.h32
-rw-r--r--src/devices/bus/cbmiec/vic1515.h14
-rw-r--r--src/devices/bus/cbmiec/vic1520.cpp129
-rw-r--r--src/devices/bus/cbmiec/vic1520.h24
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 &centronics(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;
};