pccard: Add support for 8-bit reads/writes

This commit is contained in:
Dirk Best 2023-03-10 17:12:51 +01:00
parent 2eac265eac
commit 3a11560726
2 changed files with 60 additions and 0 deletions

View File

@ -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);
}
}

View File

@ -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;