mirror of
https://github.com/holub/mame
synced 2025-04-18 22:49:58 +03:00
parent
5bd61461a7
commit
8321d0e1c9
@ -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
|
||||
|
||||
|
@ -90,6 +90,7 @@
|
||||
#include "finalchs.h"
|
||||
#include "hpblp.h"
|
||||
#include "opus100pm.h"
|
||||
#include "zxbus_adapter.h"
|
||||
|
||||
|
||||
void pc_isa8_cards(device_slot_interface &device)
|
||||
@ -148,6 +149,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)
|
||||
|
28
src/devices/bus/isa/zxbus_adapter.cpp
Normal file
28
src/devices/bus/isa/zxbus_adapter.cpp
Normal file
@ -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
src/devices/bus/isa/zxbus_adapter.h
Normal file
27
src/devices/bus/isa/zxbus_adapter.h
Normal file
@ -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
|
@ -69,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)
|
||||
|
@ -92,7 +92,6 @@ public:
|
||||
}
|
||||
|
||||
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);
|
||||
|
@ -334,6 +334,7 @@ void scorpion_state::scorpion_mem(address_map &map)
|
||||
void scorpion_state::scorpion_io(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
|
||||
map(0x0021, 0x0021).mirror(0x3fdc) // 1FFD | 00xxxxxxxx1xxx01
|
||||
.w(FUNC(scorpion_state::port_1ffd_w));
|
||||
map(0x4021, 0x4021).mirror(0x3fdc) // 7FFD | 01xxxxxxxx1xxx01
|
||||
|
@ -46,7 +46,6 @@ TODO:
|
||||
#include "bus/pc_kbd/pc_kbdc.h"
|
||||
#include "bus/rs232/hlemouse.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "bus/spectrum/zxbus.h"
|
||||
#include "cpu/z80/z84c015.h"
|
||||
#include "machine/ds128x.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -79,8 +78,7 @@ public:
|
||||
sprinter_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: spectrum_128_state(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_isa(*this, "isa%u", 0U)
|
||||
, m_isa_io_view(*this, "isa_io_view")
|
||||
, m_isa(*this, "isa8%u", 0U)
|
||||
, m_rtc(*this, "rtc")
|
||||
, m_ata(*this, "ata%u", 1U)
|
||||
, m_beta(*this, BETA_DISK_TAG)
|
||||
@ -114,7 +112,6 @@ protected:
|
||||
void map_io(address_map &map) ATTR_COLD;
|
||||
void map_mem(address_map &map) ATTR_COLD;
|
||||
void map_fetch(address_map &map) ATTR_COLD;
|
||||
void map_isa_io(address_map &map) ATTR_COLD;
|
||||
u8 m1_r(offs_t offset);
|
||||
void cio_dtrb_w(int state);
|
||||
u8 joy_ctrl_r(int num);
|
||||
@ -141,7 +138,6 @@ protected:
|
||||
|
||||
required_device<z84c015_device> m_maincpu;
|
||||
required_device_array<isa8_device, 2> m_isa;
|
||||
memory_view m_isa_io_view;
|
||||
|
||||
private:
|
||||
enum accel_state : u8
|
||||
@ -1399,19 +1395,8 @@ void sprinter_state::init_taps()
|
||||
});
|
||||
}
|
||||
|
||||
void sprinter_state::map_isa_io(address_map &map)
|
||||
{
|
||||
map.unmap_value_high();
|
||||
map(0x0000, 0xffff).view(m_isa_io_view);
|
||||
subdevice<zxbus_device>("zxbus")->set_io_space(m_isa_io_view[0], m_isa_io_view[0]);
|
||||
m_isa_io_view.select(0);
|
||||
}
|
||||
|
||||
void sprinter_state::machine_start()
|
||||
{
|
||||
address_space &m_isa_io = m_isa[0]->space(isa8_device::AS_ISA_IO);
|
||||
m_isa_io.install_device(0x0000, 0xffff, *this, &sprinter_state::map_isa_io);
|
||||
|
||||
m_isa[0]->space(isa8_device::AS_ISA_IO).unmap_value_high();
|
||||
m_isa[1]->space(isa8_device::AS_ISA_IO).unmap_value_high();
|
||||
|
||||
@ -1907,12 +1892,11 @@ void sprinter_state::sprinter(machine_config &config)
|
||||
|
||||
ISA8(config, m_isa[0], X_SP / 5);
|
||||
m_isa[0]->set_custom_spaces();
|
||||
zxbus_device &zxbus(ZXBUS(config, "zxbus", 0));
|
||||
ZXBUS_SLOT(config, "zxbus2isa", 0, zxbus, zxbus_cards, nullptr);
|
||||
ISA8_SLOT(config, "isa0", 0, m_isa[0], pc_isa8_cards, "zxbus_adapter", false);
|
||||
|
||||
ISA8(config, m_isa[1], X_SP / 5);
|
||||
m_isa[1]->set_custom_spaces();
|
||||
ISA8_SLOT(config, "isa8", 0, m_isa[1], pc_isa8_cards, nullptr, false);
|
||||
ISA8_SLOT(config, "isa1", 0, m_isa[1], pc_isa8_cards, nullptr, false);
|
||||
|
||||
m_screen->set_raw(X_SP / 3, SPRINT_WIDTH, SPRINT_HEIGHT, { 0, SPRINT_XVIS - 1, 0, SPRINT_YVIS - 1 });
|
||||
m_screen->set_screen_update(FUNC(sprinter_state::screen_update));
|
||||
|
@ -97,9 +97,12 @@ void tsconf_state::tsconf_io(address_map &map)
|
||||
map(0xc0fd, 0xc0fd).mirror(0x3f00).lr8(NAME([this]() { return m_ay[m_ay_selected]->data_r(); }))
|
||||
.w(FUNC(tsconf_state::tsconf_ay_address_w));
|
||||
|
||||
// IO: Shadow
|
||||
map(0x0000, 0xffff).view(m_io_shadow_view);
|
||||
m_io_shadow_view[0](0x0000, 0xffff).m(m_beta, FUNC(tsconf_beta_device::tsconf_beta_io));
|
||||
m_io_shadow_view[0]; // !Shadow
|
||||
|
||||
// IO: Shadow
|
||||
m_io_shadow_view[1](0x0000, 0xffff).m(m_beta, FUNC(tsconf_beta_device::tsconf_beta_io));
|
||||
subdevice<zxbus_device>("zxbus")->set_io_space(m_io_shadow_view[0], m_io_shadow_view[1]);
|
||||
}
|
||||
|
||||
void tsconf_state::tsconf_switch(address_map &map)
|
||||
|
@ -73,11 +73,7 @@ void tsconf_state::tsconf_update_bank0()
|
||||
|
||||
void tsconf_state::update_io(int dos)
|
||||
{
|
||||
if (dos)
|
||||
m_io_shadow_view.select(0);
|
||||
else
|
||||
m_io_shadow_view.disable();
|
||||
|
||||
m_io_shadow_view.select(dos ? 1 : 0);
|
||||
tsconf_update_bank0();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user