Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
4e31837
sinclair/tsconf.cpp: Added TR-DOS with virutal drives
holub Jan 9, 2025
664f031
tidy
holub Jan 10, 2025
3cf2ac8
Merge branch 'master' of https://github.com/mamedev/mame into tsconf
holub Jan 10, 2025
d30eccf
update save
holub Jan 10, 2025
325644f
fix bank0 write condition
holub Jan 11, 2025
0f23106
io view
holub Jan 19, 2025
68d1d9f
bus/spectrum/zxbus.cpp: Refactored shadow IO handeling
holub Jan 20, 2025
efaf248
bus/spectrum/zxbus.cpp more rafactoring
holub Jan 21, 2025
28a719e
:(
holub Jan 22, 2025
47d0ec3
Merge branch 'tsconf' into bus-vtrd
holub Feb 16, 2025
5bd6146
Merge branch 'zxbus-refactoring' into bus-vtrd
holub Feb 16, 2025
8321d0e
end state for #13253 + #13202
holub Feb 16, 2025
51ccb48
Merge branch 'master' of https://github.com/mamedev/mame into bus-vtrd
holub Mar 9, 2025
5d23002
Merge remote-tracking branch 'mame/master' into bus-vtrd
holub Apr 26, 2025
1ae9558
Merge remote-tracking branch 'mame/master' into bus-vtrd
holub Apr 29, 2025
b9938cd
fix duplicate after merge
holub Apr 29, 2025
2e6e76f
fix select shadow on reset
holub May 24, 2025
f7d4382
Merge branch 'master' of https://github.com/mamedev/mame into bus-vtrd
holub Jun 14, 2025
3a9a6a5
Merge branch 'master' into bus-vtrd
holub Jun 17, 2025
cf9b0e3
Merge branch 'master' of https://github.com/mamedev/mame into bus-vtrd
holub Jun 20, 2025
dbd40bf
Merge branch 'master' of https://github.com/mamedev/mame into bus-vtrd
holub Jul 4, 2025
84a8fcc
Merge remote-tracking branch 'mame/master' into bus-vtrd
holub Jul 26, 2025
4ee5791
refactored to remap()
holub Jul 26, 2025
8bd9dc4
Merge remote-tracking branch 'mame/master' into bus-vtrd
holub Aug 2, 2025
5a6c8f5
Merge branch 'master' into bus-vtrd
holub Aug 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions scripts/src/bus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1941,6 +1941,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 @@ -99,6 +99,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 @@ -160,6 +161,7 @@ void pc_isa8_cards(device_slot_interface &device)
device.option_add("3xtwin", ISA8_3XTWIN);
device.option_add("opus108pm", ISA8_OPUS108PM);
device.option_add("ibm_speech", ISA8_IBM_SPEECH);
device.option_add("zxbus_adapter", ISA8_ZXBUS);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of sheer curiosity: is there a x86 realm software option for this bridge adapter or it's confined to Spectrum family?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It just for zx family - actually only for Sprinter

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can plug it to x86 but I doubt anybody did that :)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

-5348315597827591462_121
-5323520322131055593_121

}

void pc_isa16_cards(device_slot_interface &device)
Expand Down
37 changes: 37 additions & 0 deletions src/devices/bus/isa/zxbus_adapter.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// 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::remap(int space_id, offs_t start, offs_t end)
{
if (space_id == AS_IO)
{
m_isa->space(isa8_device::AS_ISA_IO).install_view(0x0000, 0xffff, m_isa_io_view);
}
}

void zxbus_adapter_device::device_start()
{
set_isa_device();
remap(AS_IO, 0, 0xffff);

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);
}
28 changes: 28 additions & 0 deletions src/devices/bus/isa/zxbus_adapter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// 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/bus.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;
virtual void remap(int space_id, offs_t start, offs_t end) 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
19 changes: 9 additions & 10 deletions src/devices/bus/spectrum/zxbus/bus.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/bus.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
7 changes: 3 additions & 4 deletions src/devices/bus/spectrum/zxbus/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/zxbus/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 @@ -437,7 +437,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 @@ -465,8 +465,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/zxbus/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
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