diff options
Diffstat (limited to 'src/devices/cpu/m6502/xavix.cpp')
-rw-r--r-- | src/devices/cpu/m6502/xavix.cpp | 89 |
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" |