summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/econet/e01.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/econet/e01.cpp')
-rw-r--r--src/devices/bus/econet/e01.cpp120
1 files changed, 44 insertions, 76 deletions
diff --git a/src/devices/bus/econet/e01.cpp b/src/devices/bus/econet/e01.cpp
index 4a58753628e..0e2d723d4a2 100644
--- a/src/devices/bus/econet/e01.cpp
+++ b/src/devices/bus/econet/e01.cpp
@@ -30,7 +30,7 @@
2 x TMM27256D-20 white labelled EPROMs, TMSE01 MOS on left and E01 FS on the right
IC20 WD2793-APL-02 floppy disc controller
2 x NEC D41464C-12 64k x 4bit NMOS RAM ICs giving 64K memory
- IC21 Rockwell RC6522AP VIA behind to the right
+ IC21 Rockwell R65C22AP or CMD G65SC22P-2 VIA behind to the right
*/
@@ -53,8 +53,11 @@
#include "emu.h"
#include "e01.h"
+
#include "bus/scsi/scsihd.h"
-#include "softlist.h"
+#include "softlist_dev.h"
+
+#include "formats/afs_dsk.h"
//**************************************************************************
@@ -133,7 +136,7 @@ const tiny_rom_entry *econet_e01_device::device_rom_region() const
// MC146818_INTERFACE( rtc_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER(econet_e01_device::rtc_irq_w)
+void econet_e01_device::rtc_irq_w(int state)
{
m_rtc_irq = state;
@@ -145,49 +148,50 @@ WRITE_LINE_MEMBER(econet_e01_device::rtc_irq_w)
// mc6854_interface adlc_intf
//-------------------------------------------------
-WRITE_LINE_MEMBER( econet_e01_device::adlc_irq_w )
+void econet_e01_device::adlc_irq_w(int state)
{
m_adlc_irq = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( econet_e01_device::econet_data_w )
+void econet_e01_device::econet_data_w(int state)
{
m_econet->data_w(this, state);
}
-WRITE_LINE_MEMBER(econet_e01_device::via_irq_w)
+void econet_e01_device::via_irq_w(int state)
{
m_via_irq = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( econet_e01_device::clk_en_w )
+void econet_e01_device::clk_en_w(int state)
{
m_clk_en = state;
}
-FLOPPY_FORMATS_MEMBER( econet_e01_device::floppy_formats_afs )
- FLOPPY_AFS_FORMAT
-FLOPPY_FORMATS_END0
+void econet_e01_device::floppy_formats_afs(format_registration &fr)
+{
+ fr.add(FLOPPY_AFS_FORMAT);
+}
-WRITE_LINE_MEMBER( econet_e01_device::fdc_irq_w )
+void econet_e01_device::fdc_irq_w(int state)
{
m_fdc_irq = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( econet_e01_device::fdc_drq_w )
+void econet_e01_device::fdc_drq_w(int state)
{
m_fdc_drq = state;
update_interrupts();
}
-WRITE_LINE_MEMBER( econet_e01_device::scsi_bsy_w )
+void econet_e01_device::scsi_bsy_w(int state)
{
m_scsi_ctrl_in->write_bit1(state);
@@ -197,7 +201,7 @@ WRITE_LINE_MEMBER( econet_e01_device::scsi_bsy_w )
}
}
-WRITE_LINE_MEMBER( econet_e01_device::scsi_req_w )
+void econet_e01_device::scsi_req_w(int state)
{
m_scsi_ctrl_in->write_bit5(state);
@@ -218,8 +222,8 @@ WRITE_LINE_MEMBER( econet_e01_device::scsi_req_w )
void econet_e01_device::e01_mem(address_map &map)
{
map(0x0000, 0xffff).rw(FUNC(econet_e01_device::read), FUNC(econet_e01_device::write));
- map(0xfc00, 0xfc00).mirror(0x00c3).rw(FUNC(econet_e01_device::rtc_address_r), FUNC(econet_e01_device::rtc_address_w));
- map(0xfc04, 0xfc04).mirror(0x00c3).rw(FUNC(econet_e01_device::rtc_data_r), FUNC(econet_e01_device::rtc_data_w));
+ map(0xfc00, 0xfc00).mirror(0x00c3).w(m_rtc, FUNC(mc146818_device::address_w));
+ map(0xfc04, 0xfc04).mirror(0x00c3).rw(m_rtc, FUNC(mc146818_device::data_r), FUNC(mc146818_device::data_w));
map(0xfc08, 0xfc08).mirror(0x00c0).r(FUNC(econet_e01_device::ram_select_r)).w(FUNC(econet_e01_device::floppy_w));
map(0xfc0c, 0xfc0f).mirror(0x00c0).rw(WD2793_TAG, FUNC(wd2793_device::read), FUNC(wd2793_device::write));
map(0xfc10, 0xfc1f).mirror(0x00c0).m(R6522_TAG, FUNC(via6522_device::map));
@@ -248,7 +252,7 @@ void econet_e01_device::device_add_mconfig(machine_config &config)
m_rtc->irq().set(FUNC(econet_e01_device::rtc_irq_w));
// devices
- via6522_device &via(VIA6522(config, R6522_TAG, 8_MHz_XTAL / 4));
+ via6522_device &via(R65C22(config, R6522_TAG, 8_MHz_XTAL / 4));
via.writepa_handler().set("cent_data_out", FUNC(output_latch_device::write));
via.irq_handler().set(FUNC(econet_e01_device::via_irq_w));
@@ -425,7 +429,7 @@ void econet_e01_device::device_start()
m_led.resolve();
// allocate timers
- m_clk_timer = timer_alloc();
+ m_clk_timer = timer_alloc(FUNC(econet_e01_device::clk_tick), this);
// register for state saving
save_item(NAME(m_adlc_ie));
@@ -450,10 +454,10 @@ void econet_e01_device::device_reset()
//-------------------------------------------------
-// device_timer - handler timer events
+// clk_tick - update our clock output
//-------------------------------------------------
-void econet_e01_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(econet_e01_device::clk_tick)
{
if (m_clk_en)
{
@@ -467,7 +471,7 @@ void econet_e01_device::device_timer(emu_timer &timer, device_timer_id id, int p
// read -
//-------------------------------------------------
-READ8_MEMBER( econet_e01_device::read )
+uint8_t econet_e01_device::read(offs_t offset)
{
uint8_t data;
@@ -488,7 +492,7 @@ READ8_MEMBER( econet_e01_device::read )
// write -
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::write )
+void econet_e01_device::write(offs_t offset, uint8_t data)
{
m_ram->pointer()[offset] = data;
}
@@ -498,9 +502,10 @@ WRITE8_MEMBER( econet_e01_device::write )
// eprom_r - ROM/RAM select read
//-------------------------------------------------
-READ8_MEMBER( econet_e01_device::ram_select_r )
+uint8_t econet_e01_device::ram_select_r()
{
- m_ram_en = true;
+ if (!machine().side_effects_disabled())
+ m_ram_en = true;
return 0;
}
@@ -510,7 +515,7 @@ READ8_MEMBER( econet_e01_device::ram_select_r )
// floppy_w - floppy control write
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::floppy_w )
+void econet_e01_device::floppy_w(uint8_t data)
{
/*
@@ -558,9 +563,10 @@ WRITE8_MEMBER( econet_e01_device::floppy_w )
// network_irq_disable_r -
//-------------------------------------------------
-READ8_MEMBER( econet_e01_device::network_irq_disable_r )
+uint8_t econet_e01_device::network_irq_disable_r()
{
- network_irq_enable(0);
+ if (!machine().side_effects_disabled())
+ network_irq_enable(0);
return 0;
}
@@ -570,7 +576,7 @@ READ8_MEMBER( econet_e01_device::network_irq_disable_r )
// network_irq_disable_w -
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::network_irq_disable_w )
+void econet_e01_device::network_irq_disable_w(uint8_t data)
{
network_irq_enable(0);
}
@@ -580,9 +586,10 @@ WRITE8_MEMBER( econet_e01_device::network_irq_disable_w )
// network_irq_enable_r -
//-------------------------------------------------
-READ8_MEMBER( econet_e01_device::network_irq_enable_r )
+uint8_t econet_e01_device::network_irq_enable_r()
{
- network_irq_enable(1);
+ if (!machine().side_effects_disabled())
+ network_irq_enable(1);
return 0;
}
@@ -592,7 +599,7 @@ READ8_MEMBER( econet_e01_device::network_irq_enable_r )
// network_irq_enable_w -
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::network_irq_enable_w )
+void econet_e01_device::network_irq_enable_w(uint8_t data)
{
network_irq_enable(1);
}
@@ -602,11 +609,12 @@ WRITE8_MEMBER( econet_e01_device::network_irq_enable_w )
// hdc_data_r -
//-------------------------------------------------
-READ8_MEMBER( econet_e01_device::hdc_data_r )
+uint8_t econet_e01_device::hdc_data_r()
{
uint8_t data = m_scsi_data_in->read();
- m_scsibus->write_ack(1);
+ if (!machine().side_effects_disabled())
+ m_scsibus->write_ack(1);
return data;
}
@@ -616,7 +624,7 @@ READ8_MEMBER( econet_e01_device::hdc_data_r )
// hdc_data_w -
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::hdc_data_w )
+void econet_e01_device::hdc_data_w(uint8_t data)
{
m_scsi_data_out->write(data);
@@ -628,7 +636,7 @@ WRITE8_MEMBER( econet_e01_device::hdc_data_w )
// hdc_select_w -
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::hdc_select_w )
+void econet_e01_device::hdc_select_w(uint8_t data)
{
m_scsibus->write_sel(1);
}
@@ -638,53 +646,13 @@ WRITE8_MEMBER( econet_e01_device::hdc_select_w )
// hdc_irq_enable_w -
//-------------------------------------------------
-WRITE8_MEMBER( econet_e01_device::hdc_irq_enable_w )
+void econet_e01_device::hdc_irq_enable_w(uint8_t data)
{
hdc_irq_enable(BIT(data, 0));
}
//-------------------------------------------------
-// rtc_address_r -
-//-------------------------------------------------
-
-READ8_MEMBER( econet_e01_device::rtc_address_r )
-{
- return m_rtc->read(0);
-}
-
-
-//-------------------------------------------------
-// rtc_address_w -
-//-------------------------------------------------
-
-WRITE8_MEMBER( econet_e01_device::rtc_address_w )
-{
- m_rtc->write(0, data);
-}
-
-
-//-------------------------------------------------
-// rtc_data_r -
-//-------------------------------------------------
-
-READ8_MEMBER( econet_e01_device::rtc_data_r )
-{
- return m_rtc->read(1);
-}
-
-
-//-------------------------------------------------
-// rtc_data_w -
-//-------------------------------------------------
-
-WRITE8_MEMBER( econet_e01_device::rtc_data_w )
-{
- m_rtc->write(1, data);
-}
-
-
-//-------------------------------------------------
// econet_clk_w -
//-------------------------------------------------