summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/xavix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6502/xavix.cpp')
-rw-r--r--src/devices/cpu/m6502/xavix.cpp89
1 files changed, 67 insertions, 22 deletions
diff --git a/src/devices/cpu/m6502/xavix.cpp b/src/devices/cpu/m6502/xavix.cpp
index 266976e4d40..8ae59f2e0d4 100644
--- a/src/devices/cpu/m6502/xavix.cpp
+++ b/src/devices/cpu/m6502/xavix.cpp
@@ -32,22 +32,29 @@ DEFINE_DEVICE_TYPE(XAVIX, xavix_device, "xavix", "XaviX (SSD 97 / SSD 98)")
xavix_device::xavix_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
m6502_device(mconfig, XAVIX, tag, owner, clock),
- XPC(0)
+ XPC(0),
+ m_special_data_config("specialdata", ENDIANNESS_LITTLE, 8, 24)
{
program_config.m_addr_width = 24;
program_config.m_logaddr_width = 24;
sprogram_config.m_addr_width = 24;
sprogram_config.m_logaddr_width = 24;
+ m_special_data_config.m_addr_width = 24;
+ m_special_data_config.m_logaddr_width = 24;
+
}
xavix_device::xavix_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
m6502_device(mconfig, type, tag, owner, clock),
- XPC(0)
+ XPC(0),
+ m_special_data_config("specialdata", ENDIANNESS_LITTLE, 8, 24)
{
program_config.m_addr_width = 24;
program_config.m_logaddr_width = 24;
sprogram_config.m_addr_width = 24;
sprogram_config.m_logaddr_width = 24;
+ m_special_data_config.m_addr_width = 24;
+ m_special_data_config.m_logaddr_width = 24;
}
@@ -74,6 +81,11 @@ void xavix_device::device_start()
m_vector_callback.bind_relative_to(*owner());
init();
+
+ m_special_data_space = &space(4);
+
+ state_add(XAVIX_DATABANK, "DATBNK", m_databank).callimport().formatstr("%2s");;
+ state_add(XAVIX_CODEBANK, "CODBNK", m_codebank).callimport().formatstr("%2s");
}
void xavix_device::device_reset()
@@ -83,6 +95,11 @@ void xavix_device::device_reset()
m6502_device::device_reset();
}
+uint8_t xavix_device::read_special(uint16_t adr)
+{
+ return m_special_data_space->read_byte(adr | (m_databank<<16));
+}
+
xavix_device::mi_xavix_normal::mi_xavix_normal(xavix_device *_base)
{
base = _base;
@@ -101,21 +118,11 @@ uint8_t xavix_device::mi_xavix_normal::read(uint16_t adr)
uint8_t xavix_device::mi_xavix_normal::read_sync(uint16_t adr)
{
- if (adr == 0xfe)
- return base->m_codebank;
- else if (adr == 0xff)
- return base->m_databank;
-
return scache->read_byte(base->adr_with_codebank(adr));
}
uint8_t xavix_device::mi_xavix_normal::read_arg(uint16_t adr)
{
- if (adr == 0xfe)
- return base->m_codebank;
- else if (adr == 0xff)
- return base->m_databank;
-
return cache->read_byte(base->adr_with_codebank(adr));
}
@@ -141,21 +148,11 @@ xavix_device::mi_xavix_nd::mi_xavix_nd(xavix_device *_base) : mi_xavix_normal(_b
uint8_t xavix_device::mi_xavix_nd::read_sync(uint16_t adr)
{
- if (adr == 0xfe)
- return base->m_codebank;
- else if (adr == 0xff)
- return base->m_databank;
-
return sprogram->read_byte(base->adr_with_codebank(adr));
}
uint8_t xavix_device::mi_xavix_nd::read_arg(uint16_t adr)
{
- if (adr == 0xfe)
- return base->m_codebank;
- else if (adr == 0xff)
- return base->m_databank;
-
return program->read_byte(base->adr_with_codebank(adr));
}
@@ -183,4 +180,52 @@ inline uint8_t xavix_device::get_databank()
return m_databank;
}
+device_memory_interface::space_config_vector xavix_device::memory_space_config() const
+{
+ if(has_configured_map(AS_OPCODES))
+ return space_config_vector {
+ std::make_pair(AS_PROGRAM, &program_config),
+ std::make_pair(AS_OPCODES, &sprogram_config),
+ std::make_pair(4, &m_special_data_config)
+ };
+ else
+ return space_config_vector {
+ std::make_pair(AS_PROGRAM, &program_config),
+ std::make_pair(4, &m_special_data_config)
+ };
+}
+
+
+
+void xavix_device::state_import(const device_state_entry &entry)
+{
+ m6502_device::state_import(entry);
+
+ switch(entry.index())
+ {
+ case XAVIX_DATABANK:
+ break;
+ case XAVIX_CODEBANK:
+ break;
+ }
+}
+
+void xavix_device::state_string_export(const device_state_entry &entry, std::string &str) const
+{
+ m6502_device::state_string_export(entry, str);
+
+ switch(entry.index())
+ {
+ case XAVIX_DATABANK:
+ str = string_format("%02x", m_databank);
+ break;
+ case XAVIX_CODEBANK:
+ str = string_format("%02x", m_codebank);
+ break;
+ }
+}
+
+
+
+
#include "cpu/m6502/xavix.hxx"