Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

endstate: zxbus + vtrd #13372

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
2 changes: 2 additions & 0 deletions scripts/src/bus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1896,6 +1896,8 @@ if (BUSES["ISA"]~=null) then
MAME_DIR .. "src/devices/bus/isa/xsu_cards.h",
MAME_DIR .. "src/devices/bus/isa/xtide.cpp",
MAME_DIR .. "src/devices/bus/isa/xtide.h",
MAME_DIR .. "src/devices/bus/isa/zxbus_adapter.cpp",
MAME_DIR .. "src/devices/bus/isa/zxbus_adapter.h",
}
end

Expand Down
2 changes: 2 additions & 0 deletions src/devices/bus/isa/isa_cards.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
#include "finalchs.h"
#include "hpblp.h"
#include "opus100pm.h"
#include "zxbus_adapter.h"


void pc_isa8_cards(device_slot_interface &device)
Expand Down Expand Up @@ -156,6 +157,7 @@ void pc_isa8_cards(device_slot_interface &device)
device.option_add("acb2072", ACB2072);
device.option_add("3xtwin", ISA8_3XTWIN);
device.option_add("opus108pm", ISA8_OPUS108PM);
device.option_add("zxbus_adapter", ISA8_ZXBUS);
}

void pc_isa16_cards(device_slot_interface &device)
Expand Down
28 changes: 28 additions & 0 deletions src/devices/bus/isa/zxbus_adapter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// license:BSD-3-Clause
// copyright-holders:Andrei I. Holub
#include "emu.h"
#include "zxbus_adapter.h"

DEFINE_DEVICE_TYPE(ISA8_ZXBUS, zxbus_adapter_device, "zxbus_adapter", "ISA8 to ZXBUS Adapter")

zxbus_adapter_device::zxbus_adapter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, ISA8_ZXBUS, tag, owner, clock)
, device_isa8_card_interface(mconfig, *this)
, m_isa_io_view(*this, "isa_io_view")
, m_zxbus(*this, "zxbus")
{
}

void zxbus_adapter_device::device_start()
{
set_isa_device();
m_isa->space(isa8_device::AS_ISA_IO).install_view(0x0000, 0xffff, m_isa_io_view);
m_zxbus->set_io_space(m_isa_io_view[0], m_isa_io_view[0]);
m_isa_io_view.select(0);
}

void zxbus_adapter_device::device_add_mconfig(machine_config &config)
{
ZXBUS(config, m_zxbus, 0);
ZXBUS_SLOT(config, "card", 0, m_zxbus, zxbus_cards, nullptr);
}
27 changes: 27 additions & 0 deletions src/devices/bus/isa/zxbus_adapter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// license:BSD-3-Clause
// copyright-holders:Andrei I. Holub
#ifndef MAME_BUS_ISA_ZXBUS_ADAPTER_H
#define MAME_BUS_ISA_ZXBUS_ADAPTER_H

#include "isa.h"

#include "bus/spectrum/zxbus.h"

class zxbus_adapter_device: public device_t, public device_isa8_card_interface
{
public:
zxbus_adapter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

protected:
virtual void device_start() override ATTR_COLD;
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

private:
memory_view m_isa_io_view;
required_device<zxbus_device> m_zxbus;

};

DECLARE_DEVICE_TYPE(ISA8_ZXBUS, zxbus_adapter_device)

#endif // MAME_BUS_ISA_ZXBUS_ADAPTER_H
7 changes: 3 additions & 4 deletions src/devices/bus/spectrum/nemoide.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ class nemoide_device : public device_t, public device_zxbus_card_interface
, m_ata(*this, "ata")
{ }

virtual void io_map(address_map &map) override ATTR_COLD;

protected:
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
virtual void device_start() override ATTR_COLD;

private:
void map_io(address_map &map) ATTR_COLD;

u8 ata_r(offs_t offset);
void ata_w(offs_t offset, u8 data);
Expand All @@ -51,7 +52,7 @@ void nemoide_device::ata_w(offs_t offset, u8 data)
m_ata->cs0_w((offset >> 5) & 7, ata_data);
}

void nemoide_device::map_io(address_map &map)
void nemoide_device::io_map(address_map &map)
{
map(0x0011, 0x0011).mirror(0xff00).lrw8(NAME([this]() { return m_ata_data_latch; })
, NAME([this](offs_t offset, u8 data) { m_ata_data_latch = data; }));
Expand All @@ -74,8 +75,6 @@ void nemoide_device::device_add_mconfig(machine_config &config)
void nemoide_device::device_start()
{
save_item(NAME(m_ata_data_latch));

m_zxbus->install_device(0x0000, 0xffff, *this, &nemoide_device::map_io);
}

} // anonymous namespace
Expand Down
8 changes: 3 additions & 5 deletions src/devices/bus/spectrum/neogs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,15 @@ class neogs_device : public device_t, public device_zxbus_card_interface
, m_neogs_led(*this, "neogs_led")
{ }

virtual void io_map(address_map &map) override ATTR_COLD;

protected:
// device_t implementation
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;
virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

void neogsmap(address_map &map) ATTR_COLD;

INTERRUPT_GEN_MEMBER(irq0_line_assert);

void map_memory(address_map &map) ATTR_COLD;
Expand Down Expand Up @@ -438,7 +438,7 @@ const tiny_rom_entry *neogs_device::device_rom_region() const
return ROM_NAME( neogs );
}

void neogs_device::neogsmap(address_map &map)
void neogs_device::io_map(address_map &map)
{
map(0x00bb, 0x00bb).mirror(0xff00).rw(FUNC(neogs_device::neogs_status_r), FUNC(neogs_device::neogs_command_w));
map(0x00b3, 0x00b3).mirror(0xff00).rw(FUNC(neogs_device::neogs_data_r), FUNC(neogs_device::neogs_data_w));
Expand Down Expand Up @@ -466,8 +466,6 @@ void neogs_device::device_start()
}
});

m_zxbus->install_device(0x0000, 0xffff, *this, &neogs_device::neogsmap);

m_neogs_led.resolve();

save_item(NAME(m_data_in));
Expand Down
8 changes: 2 additions & 6 deletions src/devices/bus/spectrum/smuc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,14 @@ class smuc_device : public device_t, public device_zxbus_card_interface
, m_ata(*this, "ata")
{ }

virtual void map_shadow_io(address_map &map) override ATTR_COLD;
virtual void shadow_io_map(address_map &map) override ATTR_COLD;

protected:
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;

private:
void map_io(address_map &map) ATTR_COLD {}

void port_ffba_w(offs_t offset, u8 data);
u8 ata_r(offs_t offset);
void ata_w(offs_t offset, u8 data);
Expand Down Expand Up @@ -83,7 +81,7 @@ void smuc_device::ata_w(offs_t offset, u8 data)
m_ata->cs0_w(ata_offset, ata_data);
}

void smuc_device::map_shadow_io(address_map &map)
void smuc_device::shadow_io_map(address_map &map)
{
map(0x18a2, 0x18a2).mirror(0x4718) // 5fba | 0x011xxx101xx010 | Version: 2
.lr8(NAME([]() { return 0x40; }));
Expand Down Expand Up @@ -125,8 +123,6 @@ void smuc_device::device_start()
save_item(NAME(m_port_7fba_data));
save_item(NAME(m_port_ffba_data));
save_item(NAME(m_ide_hi));

m_zxbus->install_device(0x0000, 0xffff, *this, &smuc_device::map_io);
}

void smuc_device::device_reset()
Expand Down
19 changes: 9 additions & 10 deletions src/devices/bus/spectrum/zxbus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ zxbus_device::zxbus_device(const machine_config &mconfig, const char *tag, devic

zxbus_device::zxbus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, m_iospace(*this, finder_base::DUMMY_TAG, -1)
, m_shadow_io_view(nullptr)
, m_io(nullptr)
, m_shadow_io(nullptr)
{
}

Expand All @@ -52,10 +52,14 @@ void zxbus_device::device_start()
void zxbus_device::add_slot(zxbus_slot_device &slot)
{
m_slot_list.push_front(&slot);
if (m_shadow_io_view)

device_zxbus_card_interface *card = slot.get_card_device();
if (card)
{
device_zxbus_card_interface *dev = slot.get_card_device();
(*m_shadow_io_view).install_device(0x0000, 0xffff, *dev, &device_zxbus_card_interface::map_shadow_io);
if (m_io)
m_io->install_device(0x0000, 0xffff, *card, &device_zxbus_card_interface::io_map);
if (m_shadow_io)
m_shadow_io->install_device(0x0000, 0xffff, *card, &device_zxbus_card_interface::shadow_io_map);
}
}

Expand All @@ -65,11 +69,6 @@ device_zxbus_card_interface::device_zxbus_card_interface(const machine_config &m
{
}

void zxbus_device::install_shadow_io(memory_view::memory_view_entry &io_view)
{
m_shadow_io_view = &io_view;
}

void device_zxbus_card_interface::interface_pre_start()
{
if (!m_zxbus)
Expand Down
14 changes: 7 additions & 7 deletions src/devices/bus/spectrum/zxbus.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,23 +85,22 @@ class zxbus_device : public device_t
public:
zxbus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);

template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); }
template<typename T> void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(class address_map &map), u64 unitmask = ~u64(0))
void set_io_space(address_space_installer &io, address_space_installer &shadow_io)
{
m_iospace->install_device(addrstart, addrend, device, map, unitmask);
m_io = &io;
m_shadow_io = &shadow_io;
}

void add_slot(zxbus_slot_device &slot);
void install_shadow_io(memory_view::memory_view_entry &io_view);

protected:
zxbus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);

virtual void device_start() override ATTR_COLD;

private:
required_address_space m_iospace;
memory_view::memory_view_entry *m_shadow_io_view;
address_space_installer *m_io;
address_space_installer *m_shadow_io;

std::forward_list<zxbus_slot_device *> m_slot_list;
};
Expand All @@ -114,7 +113,8 @@ class device_zxbus_card_interface : public device_interface
friend class zxbus_slot_device;

public:
virtual void map_shadow_io(address_map &map) ATTR_COLD {}
virtual void io_map(address_map &map) ATTR_COLD {}
virtual void shadow_io_map(address_map &map) ATTR_COLD {}

protected:
device_zxbus_card_interface(const machine_config &mconfig, device_t &device);
Expand Down
37 changes: 21 additions & 16 deletions src/mame/sinclair/beta_m.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,26 @@
#include "formats/trd_dsk.h"


namespace {

void floppy_formats(format_registration &fr)
{
fr.add_mfm_containers();
fr.add_pc_formats();
fr.add(FLOPPY_TRD_FORMAT);
}

void beta_disk_floppies(device_slot_interface &device)
{
device.option_add("525hd", FLOPPY_525_HD);
device.option_add("525qd", FLOPPY_525_QD);
device.option_add("35hd", FLOPPY_35_HD);
device.option_add("35dd", FLOPPY_35_DD);
}

} // anonymous namespace


/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
Expand Down Expand Up @@ -205,21 +225,6 @@ void beta_disk_device::motors_control()
}
}

void beta_disk_device::floppy_formats(format_registration &fr)
{
fr.add_mfm_containers();
fr.add_pc_formats();
fr.add(FLOPPY_TRD_FORMAT);
}

static void beta_disk_floppies(device_slot_interface &device)
{
device.option_add("525hd", FLOPPY_525_HD);
device.option_add("525qd", FLOPPY_525_QD);
device.option_add("35hd", FLOPPY_35_HD);
device.option_add("35dd", FLOPPY_35_DD);
}


ROM_START( beta_disk )
ROM_REGION( 0x60000, "beta", 0 )
Expand Down Expand Up @@ -312,7 +317,7 @@ void beta_disk_device::device_add_mconfig(machine_config &config)
KR1818VG93(config, m_wd179x, 8_MHz_XTAL / 8);
m_wd179x->hld_wr_callback().set(FUNC(beta_disk_device::fdc_hld_w));
for (auto &floppy : m_floppy)
FLOPPY_CONNECTOR(config, floppy, beta_disk_floppies, "525qd", beta_disk_device::floppy_formats).enable_sound(true);
FLOPPY_CONNECTOR(config, floppy, beta_disk_floppies, "525qd", floppy_formats).enable_sound(true);
}

//-------------------------------------------------
Expand Down
2 changes: 0 additions & 2 deletions src/mame/sinclair/beta_m.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,6 @@ class beta_disk_device : public device_t
void motors_control();
u8 m_control;
bool m_motor_active;

static void floppy_formats(format_registration &fr);
};

DECLARE_DEVICE_TYPE(BETA_DISK, beta_disk_device)
Expand Down
Loading
Loading