// license:BSD-3-Clause
// copyright-holders:David Haywood
// UIO seems to be a different IO module to the vt1682_io.cpp one, 8-bit ports instead of 4-bit
#include "emu.h"
#include "machine/vt1682_uio.h"
#define LOG_UIO (1U << 1)
#define LOG_ALL ( LOG_UIO )
#define VERBOSE (0)
#include "logmacro.h"
DEFINE_DEVICE_TYPE(VT_VT1682_UIO, vrt_vt1682_uio_device, "vt1682uio", "VRT VT1682 UIO")
vrt_vt1682_uio_device::vrt_vt1682_uio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VT_VT1682_UIO, tag, owner, clock),
m_porta_out(*this),
m_porta_in(*this),
m_portb_out(*this),
m_portb_in(*this)
{
}
uint8_t vrt_vt1682_uio_device::inteact_2129_uio_a_data_r()
{
// TODO, use direction register etc.
uint8_t dat = m_porta_in();
//logerror("%s: bankswitch inteact_2129_uio_a_data_r %02x\n", machine().describe_context(), m_2129_uio_a_data);
return dat;
}
void vrt_vt1682_uio_device::inteact_2129_uio_a_data_w(uint8_t data)
{
// TODO, use direction register etc.
LOGMASKED(LOG_UIO, "%s: inteact_2129_uio_a_data_w %02x\n", machine().describe_context(), data);
m_2129_uio_a_data = data;
m_porta_out(m_2129_uio_a_data);
}
uint8_t vrt_vt1682_uio_device::inteact_212a_uio_a_direction_r()
{
return m_212a_uio_a_direction;
}
void vrt_vt1682_uio_device::inteact_212a_uio_a_direction_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_212a_uio_a_direction_w %02x\n", machine().describe_context(), data);
m_212a_uio_a_direction = data;
}
uint8_t vrt_vt1682_uio_device::inteact_212b_uio_a_attribute_r()
{
return m_212b_uio_a_attribute;
}
void vrt_vt1682_uio_device::inteact_212b_uio_a_attribute_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_212b_uio_a_attribute_w %02x\n", machine().describe_context(), data);
m_212b_uio_a_attribute = data;
}
uint8_t vrt_vt1682_uio_device::inteact_2149_uio_b_data_r()
{
// TODO, use direction register etc.
uint8_t dat = m_portb_in();
//logerror("%s: bankswitch inteact_2149_uio_b_data_r %02x\n", machine().describe_context(), m_2149_uio_b_data);
return dat;
}
void vrt_vt1682_uio_device::inteact_2149_uio_b_data_w(uint8_t data)
{
// TODO, use direction register etc.
LOGMASKED(LOG_UIO, "%s: inteact_2149_uio_b_data_w %02x\n", machine().describe_context(), data);
m_2149_uio_b_data = data;
m_portb_out(m_2149_uio_b_data);
}
uint8_t vrt_vt1682_uio_device::inteact_214a_uio_b_direction_r()
{
return m_214a_uio_b_direction;
}
void vrt_vt1682_uio_device::inteact_214a_uio_b_direction_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_214a_uio_b_direction_w %02x\n", machine().describe_context(), data);
m_214a_uio_b_direction = data;
}
uint8_t vrt_vt1682_uio_device::inteact_214b_uio_b_attribute_r()
{
return m_214b_uio_b_attribute;
}
void vrt_vt1682_uio_device::inteact_214b_uio_b_attribute_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_214b_uio_b_attribute_w %02x\n", machine().describe_context(), data);
m_214b_uio_b_attribute = data;
}
void vrt_vt1682_uio_device::device_start()
{
m_porta_out.resolve_safe();
m_porta_in.resolve_safe(0);
m_portb_out.resolve_safe();
m_portb_in.resolve_safe(0);
save_item(NAME(m_2129_uio_a_data));
save_item(NAME(m_212a_uio_a_direction));
save_item(NAME(m_212b_uio_a_attribute));
save_item(NAME(m_2149_uio_b_data));
save_item(NAME(m_214a_uio_b_direction));
save_item(NAME(m_214b_uio_b_attribute));
}
void vrt_vt1682_uio_device::device_reset()
{
m_2129_uio_a_data = 0;
m_212a_uio_a_direction = 0;
m_212b_uio_a_attribute = 0;
m_2149_uio_b_data = 0;
m_214a_uio_b_direction = 0;
m_214b_uio_b_attribute = 0;
}