From 3a115607268bd444c2ce12f5edef53002bddee98 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Fri, 10 Mar 2023 17:12:51 +0100 Subject: pccard: Add support for 8-bit reads/writes --- src/devices/machine/pccard.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++ src/devices/machine/pccard.h | 8 +++++++ 2 files changed, 60 insertions(+) diff --git a/src/devices/machine/pccard.cpp b/src/devices/machine/pccard.cpp index ff87767dc2d..021979a68d6 100644 --- a/src/devices/machine/pccard.cpp +++ b/src/devices/machine/pccard.cpp @@ -90,3 +90,55 @@ void pccard_slot_device::write_reg(offs_t offset, uint16_t data, uint16_t mem_ma if (m_pccard) m_pccard->write_reg(offset, data, mem_mask); } + +uint8_t pccard_slot_device::read_memory_byte(offs_t offset) +{ + uint8_t data = 0xff; + + if (m_pccard) + { + if (BIT(offset, 0)) + data = m_pccard->read_memory(offset / 2, 0xff00) >> 8; + else + data = m_pccard->read_memory(offset / 2, 0x00ff) >> 0; + } + + return data; +} + +uint8_t pccard_slot_device::read_reg_byte(offs_t offset) +{ + uint8_t data = 0xff; + + if (m_pccard) + { + if (BIT(offset, 0)) + data = m_pccard->read_reg(offset / 2, 0xff00) >> 8; + else + data = m_pccard->read_reg(offset / 2, 0x00ff) >> 0; + } + + return data; +} + +void pccard_slot_device::write_memory_byte(offs_t offset, uint8_t data) +{ + if (m_pccard) + { + if (BIT(offset, 0)) + m_pccard->write_memory(offset / 2, data << 8, 0xff00); + else + m_pccard->write_memory(offset / 2, data << 0, 0x00ff); + } +} + +void pccard_slot_device::write_reg_byte(offs_t offset, uint8_t data) +{ + if (m_pccard) + { + if (BIT(offset, 0)) + m_pccard->write_reg(offset / 2, data << 8, 0xff00); + else + m_pccard->write_reg(offset / 2, data << 0, 0x00ff); + } +} diff --git a/src/devices/machine/pccard.h b/src/devices/machine/pccard.h index 7f5b5621da1..3b94db0a720 100644 --- a/src/devices/machine/pccard.h +++ b/src/devices/machine/pccard.h @@ -51,16 +51,24 @@ public: DECLARE_WRITE_LINE_MEMBER( battery_voltage_2_w ) { m_battery_voltage_2_cb(state); } DECLARE_WRITE_LINE_MEMBER( write_protect_w ) { m_write_protect_cb(state); } + // 16-bit access uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0); uint16_t read_reg(offs_t offset, uint16_t mem_mask = ~0); void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void write_reg(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + // 16-bit access, even/odd swapped uint16_t read_memory_swap(offs_t offset, uint16_t mem_mask = 0xffff) { return swapendian_int16(read_memory(offset, swapendian_int16(mem_mask))); } uint16_t read_reg_swap(offs_t offset, uint16_t mem_mask = 0xffff) { return swapendian_int16(read_reg(offset, swapendian_int16(mem_mask))); } void write_memory_swap(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff) { write_memory(offset, swapendian_int16(data), swapendian_int16(mem_mask)); } void write_reg_swap(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff) { write_reg(offset, swapendian_int16(data), swapendian_int16(mem_mask)); } + // 8-bit access + uint8_t read_memory_byte(offs_t offset); + uint8_t read_reg_byte(offs_t offset); + void write_memory_byte(offs_t offset, uint8_t data); + void write_reg_byte(offs_t offset, uint8_t data); + protected: virtual void device_start() override; -- cgit v1.2.3