Skip to content

Commit 54ed274

Browse files
committed
isa8 zxbus card
1 parent 4d4d9b2 commit 54ed274

File tree

5 files changed

+70
-19
lines changed

5 files changed

+70
-19
lines changed

scripts/src/bus.lua

+2
Original file line numberDiff line numberDiff line change
@@ -1896,6 +1896,8 @@ if (BUSES["ISA"]~=null) then
18961896
MAME_DIR .. "src/devices/bus/isa/xsu_cards.h",
18971897
MAME_DIR .. "src/devices/bus/isa/xtide.cpp",
18981898
MAME_DIR .. "src/devices/bus/isa/xtide.h",
1899+
MAME_DIR .. "src/devices/bus/isa/zxbus_adapter.cpp",
1900+
MAME_DIR .. "src/devices/bus/isa/zxbus_adapter.h",
18991901
}
19001902
end
19011903

src/devices/bus/isa/isa_cards.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
#include "finalchs.h"
9191
#include "hpblp.h"
9292
#include "opus100pm.h"
93+
#include "zxbus_adapter.h"
9394

9495

9596
void pc_isa8_cards(device_slot_interface &device)
@@ -148,6 +149,7 @@ void pc_isa8_cards(device_slot_interface &device)
148149
device.option_add("acb2072", ACB2072);
149150
device.option_add("3xtwin", ISA8_3XTWIN);
150151
device.option_add("opus108pm", ISA8_OPUS108PM);
152+
device.option_add("zxbus_adapter", ISA8_ZXBUS);
151153
}
152154

153155
void pc_isa16_cards(device_slot_interface &device)

src/devices/bus/isa/zxbus_adapter.cpp

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:Andrei I. Holub
3+
#include "emu.h"
4+
#include "zxbus_adapter.h"
5+
6+
DEFINE_DEVICE_TYPE(ISA8_ZXBUS, zxbus_adapter_device, "zxbus_adapter", "ISA8 to ZXBUS Adapter")
7+
8+
zxbus_adapter_device::zxbus_adapter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
9+
: device_t(mconfig, ISA8_ZXBUS, tag, owner, clock)
10+
, device_isa8_card_interface(mconfig, *this)
11+
, m_isa_io_view(*this, "isa_io_view")
12+
, m_zxbus(*this, "zxbus")
13+
{
14+
}
15+
16+
void zxbus_adapter_device::map_io(address_map &map)
17+
{
18+
map.unmap_value_high();
19+
map(0x0000, 0xffff).view(m_isa_io_view);
20+
m_zxbus->set_io_space(m_isa_io_view[0], m_isa_io_view[0]);
21+
m_isa_io_view.select(0);
22+
}
23+
24+
void zxbus_adapter_device::device_start()
25+
{
26+
set_isa_device();
27+
m_isa->install_device(0x0000, 0xffff, *this, &zxbus_adapter_device::map_io);
28+
}
29+
30+
void zxbus_adapter_device::device_add_mconfig(machine_config &config)
31+
{
32+
ZXBUS(config, m_zxbus, 0);
33+
ZXBUS_SLOT(config, "slot", 0, m_zxbus, zxbus_cards, nullptr);
34+
}

src/devices/bus/isa/zxbus_adapter.h

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:Andrei I. Holub
3+
#ifndef MAME_BUS_ISA_ZXBUS_H
4+
#define MAME_BUS_ISA_ZXBUS_H
5+
6+
#include "isa.h"
7+
8+
#include "bus/spectrum/zxbus.h"
9+
10+
class zxbus_adapter_device: public device_t, public device_isa8_card_interface
11+
{
12+
public:
13+
zxbus_adapter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
14+
15+
protected:
16+
virtual void device_start() override ATTR_COLD;
17+
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
18+
19+
void map_io(address_map &map) ATTR_COLD;
20+
21+
private:
22+
memory_view m_isa_io_view;
23+
required_device<zxbus_device> m_zxbus;
24+
25+
};
26+
27+
DECLARE_DEVICE_TYPE(ISA8_ZXBUS, zxbus_adapter_device)
28+
29+
#endif // MAME_BUS_ISA_ZXBUS_H

src/mame/sinclair/sprinter.cpp

+3-19
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ Sprinter Sp2000 (Peters Plus Ltd)
4646
#include "bus/pc_kbd/pc_kbdc.h"
4747
#include "bus/rs232/hlemouse.h"
4848
#include "bus/rs232/rs232.h"
49-
#include "bus/spectrum/zxbus.h"
5049
#include "cpu/z80/z84c015.h"
5150
#include "machine/ds128x.h"
5251
#include "sound/ay8910.h"
@@ -79,8 +78,7 @@ class sprinter_state : public spectrum_128_state
7978
sprinter_state(const machine_config &mconfig, device_type type, const char *tag)
8079
: spectrum_128_state(mconfig, type, tag)
8180
, m_maincpu(*this, "maincpu")
82-
, m_isa(*this, "isa%u", 0U)
83-
, m_isa_io_view(*this, "isa_io_view")
81+
, m_isa(*this, "isa8%u", 1U)
8482
, m_rtc(*this, "rtc")
8583
, m_ata(*this, "ata%u", 1U)
8684
, m_beta(*this, BETA_DISK_TAG)
@@ -114,7 +112,6 @@ class sprinter_state : public spectrum_128_state
114112
void map_io(address_map &map) ATTR_COLD;
115113
void map_mem(address_map &map) ATTR_COLD;
116114
void map_fetch(address_map &map) ATTR_COLD;
117-
void map_isa_io(address_map &map) ATTR_COLD;
118115
u8 m1_r(offs_t offset);
119116
void cio_dtrb_w(int state);
120117
u8 joy_ctrl_r(int num);
@@ -141,7 +138,6 @@ class sprinter_state : public spectrum_128_state
141138

142139
required_device<z84c015_device> m_maincpu;
143140
required_device_array<isa8_device, 2> m_isa;
144-
memory_view m_isa_io_view;
145141

146142
private:
147143
enum accel_state : u8
@@ -1399,19 +1395,8 @@ void sprinter_state::init_taps()
13991395
});
14001396
}
14011397

1402-
void sprinter_state::map_isa_io(address_map &map)
1403-
{
1404-
map.unmap_value_high();
1405-
map(0x0000, 0xffff).view(m_isa_io_view);
1406-
subdevice<zxbus_device>("zxbus")->set_io_space(m_isa_io_view[0], m_isa_io_view[0]);
1407-
m_isa_io_view.select(0);
1408-
}
1409-
14101398
void sprinter_state::machine_start()
14111399
{
1412-
address_space &m_isa_io = m_isa[0]->space(isa8_device::AS_ISA_IO);
1413-
m_isa_io.install_device(0x0000, 0xffff, *this, &sprinter_state::map_isa_io);
1414-
14151400
m_isa[0]->space(isa8_device::AS_ISA_IO).unmap_value_high();
14161401
m_isa[1]->space(isa8_device::AS_ISA_IO).unmap_value_high();
14171402

@@ -1907,12 +1892,11 @@ void sprinter_state::sprinter(machine_config &config)
19071892

19081893
ISA8(config, m_isa[0], X_SP / 5);
19091894
m_isa[0]->set_custom_spaces();
1910-
zxbus_device &zxbus(ZXBUS(config, "zxbus", 0));
1911-
ZXBUS_SLOT(config, "zxbus2isa", 0, zxbus, zxbus_cards, nullptr);
1895+
ISA8_SLOT(config, "isa1", 0, m_isa[0], pc_isa8_cards, "zxbus_adapter", false);
19121896

19131897
ISA8(config, m_isa[1], X_SP / 5);
19141898
m_isa[1]->set_custom_spaces();
1915-
ISA8_SLOT(config, "isa8", 0, m_isa[1], pc_isa8_cards, nullptr, false);
1899+
ISA8_SLOT(config, "isa2", 0, m_isa[1], pc_isa8_cards, nullptr, false);
19161900

19171901
m_screen->set_raw(X_SP / 3, SPRINT_WIDTH, SPRINT_HEIGHT, { 0, SPRINT_XVIS - 1, 0, SPRINT_YVIS - 1 });
19181902
m_screen->set_screen_update(FUNC(sprinter_state::screen_update));

0 commit comments

Comments
 (0)