summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/plus4/c1551.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/plus4/c1551.cpp')
-rw-r--r--src/devices/bus/plus4/c1551.cpp35
1 files changed, 18 insertions, 17 deletions
diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp
index 333dea55fb0..999faed9108 100644
--- a/src/devices/bus/plus4/c1551.cpp
+++ b/src/devices/bus/plus4/c1551.cpp
@@ -9,6 +9,9 @@
#include "emu.h"
#include "c1551.h"
+#include "formats/d64_dsk.h"
+#include "formats/g64_dsk.h"
+
//**************************************************************************
@@ -16,8 +19,6 @@
//**************************************************************************
#define M6510T_TAG "u2"
-#define M6523_0_TAG "u3"
-#define M6523_1_TAG "ci_u2"
#define C64H156_TAG "u6"
#define PLA_TAG "u1"
@@ -325,10 +326,11 @@ void c1551_device::c1551_mem(address_map &map)
// FLOPPY_FORMATS( floppy_formats )
//-------------------------------------------------
-FLOPPY_FORMATS_MEMBER( c1551_device::floppy_formats )
- FLOPPY_D64_FORMAT,
- FLOPPY_G64_FORMAT
-FLOPPY_FORMATS_END
+void c1551_device::floppy_formats(format_registration &fr)
+{
+ fr.add(FLOPPY_D64_FORMAT);
+ fr.add(FLOPPY_G64_FORMAT);
+}
//-------------------------------------------------
@@ -341,15 +343,14 @@ void c1551_device::device_add_mconfig(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &c1551_device::c1551_mem);
m_maincpu->read_callback().set(FUNC(c1551_device::port_r));
m_maincpu->write_callback().set(FUNC(c1551_device::port_w));
- config.m_perfect_cpu_quantum = subtag(M6510T_TAG);
PLS100(config, m_pla);
TPI6525(config, m_tpi0, 0);
m_tpi0->in_pa_cb().set(FUNC(c1551_device::tcbm_data_r));
m_tpi0->out_pa_cb().set(FUNC(c1551_device::tcbm_data_w));
- m_tpi0->in_pb_cb().set(C64H156_TAG, FUNC(c64h156_device::yb_r));
- m_tpi0->out_pb_cb().set(C64H156_TAG, FUNC(c64h156_device::yb_w));
+ m_tpi0->in_pb_cb().set(m_ga, FUNC(c64h156_device::yb_r));
+ m_tpi0->out_pb_cb().set(m_ga, FUNC(c64h156_device::yb_w));
m_tpi0->in_pc_cb().set(FUNC(c1551_device::tpi0_pc_r));
m_tpi0->out_pc_cb().set(FUNC(c1551_device::tpi0_pc_w));
@@ -361,7 +362,7 @@ void c1551_device::device_add_mconfig(machine_config &config)
m_tpi1->out_pc_cb().set(FUNC(c1551_device::tpi1_pc_w));
C64H156(config, m_ga, XTAL(16'000'000));
- m_ga->byte_callback().set(C64H156_TAG, FUNC(c64h156_device::atni_w));
+ m_ga->byte_callback().set(m_ga, FUNC(c64h156_device::atni_w));
floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0));
connector.option_add("525ssqd", FLOPPY_525_SSQD);
@@ -369,7 +370,7 @@ void c1551_device::device_add_mconfig(machine_config &config)
connector.set_fixed(true);
connector.set_formats(c1551_device::floppy_formats);
- PLUS4_EXPANSION_SLOT(config, m_exp, 0);
+ PLUS4_EXPANSION_SLOT(config, m_exp, DERIVED_CLOCK(1, 1));
m_exp->irq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::irq_w));
m_exp->cd_rd_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_r));
m_exp->cd_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_w));
@@ -413,12 +414,12 @@ c1551_device::c1551_device(const machine_config &mconfig, const char *tag, devic
: device_t(mconfig, C1551, tag, owner, clock)
, device_plus4_expansion_card_interface(mconfig, *this)
, m_maincpu(*this, M6510T_TAG)
- , m_tpi0(*this, M6523_0_TAG)
- , m_tpi1(*this, M6523_1_TAG)
+ , m_tpi0(*this, "u3")
+ , m_tpi1(*this, "ci_u2")
, m_ga(*this, C64H156_TAG)
, m_pla(*this, PLA_TAG)
, m_floppy(*this, C64H156_TAG":0:525ssqd")
- , m_exp(*this, PLUS4_EXPANSION_SLOT_TAG)
+ , m_exp(*this, "exp")
, m_jp1(*this, "JP1")
, m_leds(*this, "led%u", 0U)
, m_tcbm_data(0xff)
@@ -440,7 +441,7 @@ void c1551_device::device_start()
m_leds.resolve();
// allocate timers
- m_irq_timer = timer_alloc();
+ m_irq_timer = timer_alloc(FUNC(c1551_device::irq_timer_tick), this);
m_irq_timer->adjust(attotime::zero, CLEAR_LINE);
// install image callbacks
@@ -476,10 +477,10 @@ void c1551_device::device_reset()
//-------------------------------------------------
-// device_timer - handler timer events
+// irq_timer_tick - update IRQ line state
//-------------------------------------------------
-void c1551_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(c1551_device::irq_timer_tick)
{
m_maincpu->set_input_line(M6502_IRQ_LINE, param);