Files
vt1200/harness/mame/vt1200_board.cpp
T

46 lines
968 B
C++

#include "vt1200_board.h"
bool vt1200_board::is_switch_port(uint32_t addr) const
{
// The monitor-selection switch lives in bits 4-6 of winner 3's +0xD0
// register (harness offset 0x0d).
return addr == (VT1200_WIN3 + VT1200_OFF_SWITCH);
}
uint16_t vt1200_board::read(uint32_t addr)
{
auto ov = m_override.find(addr);
if (ov != m_override.end())
return ov->second;
uint16_t value = m_default;
auto st = m_store.find(addr);
if (st != m_store.end())
value = st->second;
if (is_switch_port(addr))
return (uint16_t)((value & 0xff8f) | (m_switch_bits & 0x0070));
if (m_handshake && (addr & 0xffff) == VT1200_OFF_STATUS)
{
if (m_busy_left > 0)
value |= 0x0001;
else
value &= ~0x0001;
}
return value;
}
void vt1200_board::write(uint32_t addr, uint16_t data)
{
m_store[addr] = data;
if (m_handshake && (addr & 0xffff) == VT1200_OFF_CMD)
m_busy_left = m_busy_ticks;
}
void vt1200_board::tick()
{
if (m_busy_left > 0)
m_busy_left--;
}