bus/rc2014 code review fixes (#9768)
* Unmap I/O space on bus reset and install I/O on card reset. * Cleaned up code.
This commit is contained in:
parent
e9ff2dd85a
commit
6d595718f5
@ -2090,32 +2090,32 @@ if (BUSES["RC2014"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/rc2014/rc2014.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/rc2014.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/modules.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/modules.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/z80cpu.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/z80cpu.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/cf.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/cf.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/clock.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/clock.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/fdc.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/fdc.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/ide.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/ide.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/micro.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/micro.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/modules.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/modules.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/ram.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/ram.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/rom.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/rom.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/romram.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/romram.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/serial.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/serial.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/cf.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/cf.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/rtc.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/rtc.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/serial.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/serial.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/sound.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/sound.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/ide.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/ide.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/fdc.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/fdc.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/micro.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/micro.h",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/z80cpu.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rc2014/z80cpu.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -26,6 +26,7 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( tx_w ) { m_bus->tx_w(state); }
|
||||
@ -44,6 +45,10 @@ compact_flash_device::compact_flash_device(const machine_config &mconfig, const
|
||||
}
|
||||
|
||||
void compact_flash_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void compact_flash_device::device_reset()
|
||||
{
|
||||
// A15-A8 and A7 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x10, 0x17, 0, 0xff80, 0, read8sm_delegate(*this, FUNC(compact_flash_device::ide_cs0_r)), write8sm_delegate(*this, FUNC(compact_flash_device::ide_cs0_w)));
|
||||
|
@ -8,10 +8,11 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "fdc.h"
|
||||
|
||||
#include "machine/upd765.h"
|
||||
#include "imagedev/floppy.h"
|
||||
#include "formats/imd_dsk.h"
|
||||
#include "formats/pc_dsk.h"
|
||||
#include "machine/upd765.h"
|
||||
|
||||
namespace {
|
||||
|
||||
@ -160,7 +161,7 @@ protected:
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// DACK confirmation is same as pulsing TC
|
||||
uint8_t dack_r() { m_fdc->tc_w(true); m_fdc->tc_w(false); return 0xff;}
|
||||
uint8_t dack_r(address_space &space, offs_t) { m_fdc->tc_w(true); m_fdc->tc_w(false); return space.unmap(); }
|
||||
private:
|
||||
required_ioport m_addr;
|
||||
required_ioport_array<2> m_jp;
|
||||
@ -191,7 +192,8 @@ void rc2014_wd37c65_device::device_reset()
|
||||
|
||||
// A15-A8 and A0 and A1 not connected
|
||||
m_bus->installer(AS_IO)->install_write_handler(base+0x08, base+0x08, 0, 0xff06, 0, write8smo_delegate(m_fdc, FUNC(wd37c65c_device::ccr_w)));
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(base+0x18, base+0x18, 0, 0xff06, 0, read8smo_delegate(*this, FUNC(rc2014_wd37c65_device::dack_r)), write8smo_delegate(m_fdc, FUNC(wd37c65c_device::dor_w)));
|
||||
m_bus->installer(AS_IO)->install_write_handler(base+0x18, base+0x18, 0, 0xff06, 0, write8smo_delegate(m_fdc, FUNC(wd37c65c_device::dor_w)));
|
||||
m_bus->installer(AS_IO)->install_read_handler(base+0x18, base+0x18, 0, 0xff06, 0, read8m_delegate(*this, FUNC(rc2014_wd37c65_device::dack_r)));
|
||||
// TODO: Use jumpers
|
||||
}
|
||||
|
||||
|
@ -78,14 +78,14 @@ void rc2014_micro::device_start()
|
||||
std::fill_n(m_ram.get(), 0x8000, 0xff);
|
||||
save_pointer(NAME(m_ram), 0x8000);
|
||||
m_bus->installer(AS_PROGRAM)->install_ram(0x8000, 0xffff, m_ram.get());
|
||||
|
||||
// Setup ACIA
|
||||
// A15-A8 and A5-A1 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x81, 0, 0xff3e, 0, read8sm_delegate(*m_acia, FUNC(acia6850_device::read)), write8sm_delegate(*m_acia, FUNC(acia6850_device::write)));
|
||||
}
|
||||
|
||||
void rc2014_micro::device_reset()
|
||||
{
|
||||
// Setup ACIA
|
||||
// A15-A8 and A5-A1 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x81, 0, 0xff3e, 0, read8sm_delegate(*m_acia, FUNC(acia6850_device::read)), write8sm_delegate(*m_acia, FUNC(acia6850_device::write)));
|
||||
|
||||
// Setup ROM
|
||||
if (m_rom_present->read())
|
||||
m_bus->installer(AS_PROGRAM)->install_rom(0x0000, 0x1fff, 0x0000, m_rom->base() + (m_rom_selector->read() & 7) * 0x2000);
|
||||
@ -189,22 +189,23 @@ protected:
|
||||
|
||||
uint8_t ide_cs0_r(offs_t offset) { return m_ata->cs0_r(offset); }
|
||||
void ide_cs0_w(offs_t offset, uint8_t data) { m_ata->cs0_w(offset, data); }
|
||||
void reset_bank_w(offs_t, uint8_t) { m_bank = 0; update_banks(); }
|
||||
void toggle_bank_w(offs_t, uint8_t) { m_bank = m_bank ? 0 : 1; update_banks(); }
|
||||
void ram_w(offs_t offset, uint8_t data) { m_ram[offset] = data; }
|
||||
void reset_bank_w(offs_t, uint8_t) { m_view_num = 0; update_banks(); }
|
||||
void toggle_bank_w(offs_t, uint8_t) { m_view_num = m_view_num ? 0 : 1; update_banks(); }
|
||||
|
||||
private:
|
||||
void update_banks();
|
||||
void update_banks() { m_view.select(m_view_num); }
|
||||
|
||||
// base-class members
|
||||
uint8_t m_bank;
|
||||
uint8_t m_selected_bank;
|
||||
uint8_t m_view_num;
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
|
||||
required_device<ata_interface_device> m_ata;
|
||||
required_device<rc2014_bus_device> m_rc2014_bus;
|
||||
required_memory_region m_rom;
|
||||
required_ioport m_jp1;
|
||||
memory_view m_view;
|
||||
memory_bank_creator m_rombank;
|
||||
memory_bank_creator m_rambank;
|
||||
};
|
||||
|
||||
rc2014_mini_cpm::rc2014_mini_cpm(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
@ -214,6 +215,9 @@ rc2014_mini_cpm::rc2014_mini_cpm(const machine_config &mconfig, const char *tag,
|
||||
, m_rc2014_bus(*this, ":bus")
|
||||
, m_rom(*this, "rom")
|
||||
, m_jp1(*this, "JP1-JP2")
|
||||
, m_view(*this, "view")
|
||||
, m_rombank(*this, "bank")
|
||||
, m_rambank(*this, "ram")
|
||||
{
|
||||
}
|
||||
|
||||
@ -223,34 +227,37 @@ void rc2014_mini_cpm::device_start()
|
||||
m_ram = std::make_unique<u8[]>(0x8000);
|
||||
std::fill_n(m_ram.get(), 0x8000, 0xff);
|
||||
save_pointer(NAME(m_ram), 0x8000);
|
||||
save_item(NAME(m_bank));
|
||||
save_item(NAME(m_view_num));
|
||||
|
||||
// Install RAM/ROM
|
||||
m_bus->installer(AS_PROGRAM)->install_view(0x0000, 0x7fff, m_view);
|
||||
m_view[0].install_read_bank(0x0000, 0x3fff, m_rombank);
|
||||
m_view[0].install_write_bank(0x0000, 0x3fff, m_rambank);
|
||||
m_view[1].install_readwrite_bank(0x0000, 0x7fff, m_rambank);
|
||||
|
||||
// Setup banks
|
||||
m_rombank->configure_entry(0, m_rom->base() + 0x0000);
|
||||
m_rombank->configure_entry(1, m_rom->base() + 0x4000);
|
||||
m_rombank->configure_entry(2, m_rom->base() + 0x8000);
|
||||
m_rombank->configure_entry(3, m_rom->base() + 0xc000);
|
||||
|
||||
m_rambank->configure_entry(0, m_ram.get());
|
||||
}
|
||||
|
||||
void rc2014_mini_cpm::device_reset()
|
||||
{
|
||||
// A15-A8, A7 and A2-A0 not connected, A6 must be 0
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x30, 0x30, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(rc2014_mini_cpm::reset_bank_w)));
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x38, 0x38, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(rc2014_mini_cpm::toggle_bank_w)));
|
||||
// A15-A8 and A7 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x10, 0x17, 0, 0xff80, 0, read8sm_delegate(*this, FUNC(rc2014_mini_cpm::ide_cs0_r)), write8sm_delegate(*this, FUNC(rc2014_mini_cpm::ide_cs0_w)));
|
||||
}
|
||||
|
||||
void rc2014_mini_cpm::device_reset()
|
||||
{
|
||||
m_bank = 0;
|
||||
m_selected_bank = m_jp1->read();
|
||||
// Set default banks
|
||||
m_view_num = 0;
|
||||
m_rombank->set_entry(m_jp1->read());
|
||||
update_banks();
|
||||
}
|
||||
|
||||
void rc2014_mini_cpm::update_banks()
|
||||
{
|
||||
if (m_bank == 0)
|
||||
{
|
||||
m_bus->installer(AS_PROGRAM)->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(rc2014_mini_cpm::ram_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_rom(0x0000, 0x3fff, 0x0000, m_rom->base() + (m_selected_bank * 0x4000));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_bus->installer(AS_PROGRAM)->install_ram(0x0000, 0x7fff, m_ram.get());
|
||||
}
|
||||
}
|
||||
void rc2014_mini_cpm::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
ATA_INTERFACE(config, m_ata).options(ata_devices, "hdd", nullptr, true);
|
||||
|
@ -9,18 +9,18 @@
|
||||
#include "emu.h"
|
||||
#include "bus/rc2014/rc2014.h"
|
||||
|
||||
#include "bus/rc2014/z80cpu.h"
|
||||
#include "bus/rc2014/cf.h"
|
||||
#include "bus/rc2014/clock.h"
|
||||
#include "bus/rc2014/fdc.h"
|
||||
#include "bus/rc2014/ide.h"
|
||||
#include "bus/rc2014/micro.h"
|
||||
#include "bus/rc2014/ram.h"
|
||||
#include "bus/rc2014/rom.h"
|
||||
#include "bus/rc2014/romram.h"
|
||||
#include "bus/rc2014/serial.h"
|
||||
#include "bus/rc2014/cf.h"
|
||||
#include "bus/rc2014/rtc.h"
|
||||
#include "bus/rc2014/serial.h"
|
||||
#include "bus/rc2014/sound.h"
|
||||
#include "bus/rc2014/ide.h"
|
||||
#include "bus/rc2014/fdc.h"
|
||||
#include "bus/rc2014/micro.h"
|
||||
#include "bus/rc2014/z80cpu.h"
|
||||
|
||||
void rc2014_bus_modules(device_slot_interface &device)
|
||||
{
|
||||
|
@ -69,7 +69,6 @@ protected:
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( page_w ) { m_bank = state; update_banks(); }
|
||||
void ram_w(offs_t offset, uint8_t data) { m_ram[offset] = data; }
|
||||
|
||||
virtual void update_banks() = 0;
|
||||
|
||||
@ -105,7 +104,7 @@ void ram_64k_base::device_reset()
|
||||
|
||||
static INPUT_PORTS_START( ram_64k_jumpers )
|
||||
PORT_START("START_ADDR")
|
||||
PORT_CONFNAME( 0x4, 0x0, "Start address" )
|
||||
PORT_CONFNAME( 0x7, 0x0, "Start address" )
|
||||
PORT_CONFSETTING( 0x0, "0x0000" )
|
||||
PORT_CONFSETTING( 0x1, "0x1000" )
|
||||
PORT_CONFSETTING( 0x2, "0x2000" )
|
||||
@ -165,7 +164,7 @@ void ram_64k_device::update_banks()
|
||||
if (m_paged->read() == 0) return; // If not paged skip
|
||||
|
||||
if (m_bank == 0)
|
||||
m_bus->installer(AS_PROGRAM)->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(ram_64k_device::ram_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_writeonly(0x0000, 0x7fff, m_ram.get());
|
||||
else
|
||||
m_bus->installer(AS_PROGRAM)->install_ram(0x0000, 0x7fff, m_ram.get());
|
||||
}
|
||||
@ -201,7 +200,7 @@ void ram_64k_device_40pin::device_reset()
|
||||
if (m_paged->read())
|
||||
{
|
||||
m_bus->installer(AS_PROGRAM)->install_ram(0x8000, 0xffff, m_ram.get() + 0x8000);
|
||||
m_bus->installer(AS_PROGRAM)->install_write_handler(0x0000, 0x7fff, write8sm_delegate(*this, FUNC(ram_64k_device_40pin::ram_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_writeonly(0x0000, 0x7fff, m_ram.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -57,6 +57,11 @@ void rc2014_bus_device::device_start()
|
||||
m_user4.resolve_safe();
|
||||
}
|
||||
|
||||
void rc2014_bus_device::device_reset()
|
||||
{
|
||||
installer(AS_IO)->unmap_readwrite(0, (1 << installer(AS_IO)->space_config().addr_width()) - 1);
|
||||
}
|
||||
|
||||
void rc2014_bus_device::set_bus_clock(u32 clock)
|
||||
{
|
||||
set_clock(clock);
|
||||
|
@ -106,6 +106,7 @@ protected:
|
||||
rc2014_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
address_space_installer *m_installer[4];
|
||||
|
@ -148,10 +148,6 @@ pagable_rom_device::pagable_rom_device(const machine_config &mconfig, const char
|
||||
void pagable_rom_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_bank));
|
||||
|
||||
// A15-A8, A7 and A2-A0 not connected, A6 must be 0
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x30, 0x30, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::reset_bank_w)));
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x38, 0x38, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::toggle_bank_w)));
|
||||
}
|
||||
|
||||
void pagable_rom_device::device_reset()
|
||||
@ -170,6 +166,10 @@ void pagable_rom_device::device_reset()
|
||||
m_start_offset &= page_mask[m_page_size_conf->read()];
|
||||
m_end_addr = page_size[m_page_size_conf->read()] - 1;
|
||||
reset_bank_w(0,0);
|
||||
|
||||
// A15-A8, A7 and A2-A0 not connected, A6 must be 0
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x30, 0x30, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::reset_bank_w)));
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x38, 0x38, 0, 0xff87, 0, write8sm_delegate(*this, FUNC(pagable_rom_device::toggle_bank_w)));
|
||||
}
|
||||
|
||||
void pagable_rom_device::update_banks()
|
||||
|
@ -33,18 +33,9 @@ protected:
|
||||
void page_w(offs_t offset, uint8_t data) { m_page_reg[offset & 3] = data & 0x3f; }
|
||||
void page_en_w(offs_t, uint8_t data) { m_page_en = data & 1; }
|
||||
|
||||
void mem0_w(offs_t offset, uint8_t data) { mem_w(offset, data, 0); }
|
||||
void mem1_w(offs_t offset, uint8_t data) { mem_w(offset, data, 1); }
|
||||
void mem2_w(offs_t offset, uint8_t data) { mem_w(offset, data, 2); }
|
||||
void mem3_w(offs_t offset, uint8_t data) { mem_w(offset, data, 3); }
|
||||
|
||||
uint8_t mem0_r(offs_t offset) { return mem_r(offset, 0); }
|
||||
uint8_t mem1_r(offs_t offset) { return mem_r(offset, 1); }
|
||||
uint8_t mem2_r(offs_t offset) { return mem_r(offset, 2); }
|
||||
uint8_t mem3_r(offs_t offset) { return mem_r(offset, 3); }
|
||||
private:
|
||||
void mem_w(offs_t offset, uint8_t data, uint8_t bank);
|
||||
uint8_t mem_r(offs_t offset, uint8_t bank);
|
||||
template<uint8_t Bank> void mem_w(offs_t offset, uint8_t data);
|
||||
template<uint8_t Bank> uint8_t mem_r(offs_t offset);
|
||||
|
||||
uint8_t m_page_reg[4];
|
||||
uint8_t m_page_en;
|
||||
@ -70,15 +61,10 @@ void rom_ram_512k_device::device_start()
|
||||
save_item(NAME(m_page_en));
|
||||
save_item(NAME(m_page_reg));
|
||||
|
||||
// A15-A8 and A3 not connected
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x70, 0x73, 0, 0xff08, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_w)));
|
||||
// A15-A8, A3, A1 and A0 not connected
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x74, 0x74, 0, 0xff0b, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_en_w)));
|
||||
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x0000, 0x3fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem0_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem0_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x4000, 0x7fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem1_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem1_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x8000, 0xbfff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem2_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem2_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0xc000, 0xffff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem3_r)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem3_w)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x0000, 0x3fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<0>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<0>)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x4000, 0x7fff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<1>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<1>)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0x8000, 0xbfff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<2>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<2>)));
|
||||
m_bus->installer(AS_PROGRAM)->install_readwrite_handler(0xc000, 0xffff, 0, 0, 0, read8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_r<3>)), write8sm_delegate(*this, FUNC(rom_ram_512k_device::mem_w<3>)));
|
||||
}
|
||||
|
||||
void rom_ram_512k_device::device_reset()
|
||||
@ -88,6 +74,11 @@ void rom_ram_512k_device::device_reset()
|
||||
m_page_reg[1] = 0;
|
||||
m_page_reg[2] = 0;
|
||||
m_page_reg[3] = 0;
|
||||
|
||||
// A15-A8 and A3 not connected
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x70, 0x73, 0, 0xff08, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_w)));
|
||||
// A15-A8, A3, A1 and A0 not connected
|
||||
m_bus->installer(AS_IO)->install_write_handler(0x74, 0x74, 0, 0xff0b, 0, write8sm_delegate(*this, FUNC(rom_ram_512k_device::page_en_w)));
|
||||
}
|
||||
|
||||
void rom_ram_512k_device::device_add_mconfig(machine_config &config)
|
||||
@ -95,33 +86,35 @@ void rom_ram_512k_device::device_add_mconfig(machine_config &config)
|
||||
SST_39SF040(config, m_flash);
|
||||
}
|
||||
|
||||
void rom_ram_512k_device::mem_w(offs_t offset, uint8_t data, uint8_t bank)
|
||||
template<uint8_t Bank>
|
||||
void rom_ram_512k_device::mem_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (m_page_en)
|
||||
{
|
||||
if (m_page_reg[bank] & 0x20) {
|
||||
m_ram[offset + ((m_page_reg[bank] & 0x1f) << 14)] = data;
|
||||
if (m_page_reg[Bank] & 0x20) {
|
||||
m_ram[offset + ((m_page_reg[Bank] & 0x1f) << 14)] = data;
|
||||
} else {
|
||||
m_flash->write(offset + (m_page_reg[bank] << 14), data);
|
||||
m_flash->write(offset + (m_page_reg[Bank] << 14), data);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_flash->write(offset + (bank << 14), data);
|
||||
m_flash->write(offset + (Bank << 14), data);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t rom_ram_512k_device::mem_r(offs_t offset, uint8_t bank)
|
||||
template<uint8_t Bank>
|
||||
uint8_t rom_ram_512k_device::mem_r(offs_t offset)
|
||||
{
|
||||
if (m_page_en)
|
||||
{
|
||||
if ((offset>>14 == 0) && (m_page_reg[bank] & 0x20)) {
|
||||
return m_ram[offset + ((m_page_reg[bank] & 0x1f) << 14)];
|
||||
if ((offset>>14 == 0) && (m_page_reg[Bank] & 0x20)) {
|
||||
return m_ram[offset + ((m_page_reg[Bank] & 0x1f) << 14)];
|
||||
} else {
|
||||
return m_flash->read(offset + (m_page_reg[bank] << 14));
|
||||
return m_flash->read(offset + (m_page_reg[Bank] << 14));
|
||||
}
|
||||
}
|
||||
return m_flash->read(offset + (bank << 14));
|
||||
return m_flash->read(offset + (Bank << 14));
|
||||
}
|
||||
|
||||
ROM_START(rc2014_rom_ram_512k)
|
||||
|
@ -28,6 +28,7 @@ public:
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
@ -45,6 +46,10 @@ serial_io_device::serial_io_device(const machine_config &mconfig, const char *ta
|
||||
}
|
||||
|
||||
void serial_io_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void serial_io_device::device_reset()
|
||||
{
|
||||
// A15-A8 and A5-A1 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x81, 0, 0xff3e, 0, read8sm_delegate(*m_acia, FUNC(acia6850_device::read)), write8sm_delegate(*m_acia, FUNC(acia6850_device::write)));
|
||||
@ -175,7 +180,7 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_resolve_objects() override;
|
||||
|
||||
// base-class overrides
|
||||
@ -190,8 +195,9 @@ dual_serial_device::dual_serial_device(const machine_config &mconfig, const char
|
||||
{
|
||||
}
|
||||
|
||||
void dual_serial_device::device_start()
|
||||
void dual_serial_device::device_reset()
|
||||
{
|
||||
dual_serial_base::device_reset();
|
||||
// A15-A8 and A2 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x80, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::ca_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::ca_w)));
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x81, 0x81, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::da_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::da_w)));
|
||||
@ -224,7 +230,7 @@ public:
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual void device_resolve_objects() override;
|
||||
|
||||
// base-class overrides
|
||||
@ -239,8 +245,9 @@ dual_serial_device_40pin::dual_serial_device_40pin(const machine_config &mconfig
|
||||
{
|
||||
}
|
||||
|
||||
void dual_serial_device_40pin::device_start()
|
||||
void dual_serial_device_40pin::device_reset()
|
||||
{
|
||||
dual_serial_base::device_reset();
|
||||
// A15-A8 and A2 not connected
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x80, 0x80, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::ca_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::ca_w)));
|
||||
m_bus->installer(AS_IO)->install_readwrite_handler(0x81, 0x81, 0, 0xff04, 0, read8smo_delegate(*m_sio, FUNC(z80sio_device::da_r)), write8smo_delegate(*m_sio, FUNC(z80sio_device::da_w)));
|
||||
|
Loading…
Reference in New Issue
Block a user