simplified read_port + make sure portc is 6 bits wide (meyc8088.c expects d6,7 to be set on read)

This commit is contained in:
Michaël Banaan Ananas 2012-04-30 19:37:30 +00:00
parent a91bbaade8
commit 8c8b37b75a

View File

@ -159,36 +159,19 @@ inline UINT8 i8155_device::read_port(int port)
{ {
UINT8 data = 0; UINT8 data = 0;
switch (port) switch (get_port_mode(port))
{ {
case PORT_A: case PORT_MODE_INPUT:
case PORT_B: data = m_in_port_func[port](0);
switch (get_port_mode(port))
{
case PORT_MODE_INPUT:
data = m_in_port_func[port](0);
break;
case PORT_MODE_OUTPUT:
data = m_output[port];
break;
}
break; break;
case PORT_C: case PORT_MODE_OUTPUT:
switch (get_port_mode(PORT_C)) data = m_output[port];
{ break;
case PORT_MODE_INPUT:
data = m_in_port_func[port](0) & 0x3f;
break;
case PORT_MODE_OUTPUT: default:
data = m_output[port] & 0x3f; // strobed mode not implemented yet
break; logerror("8155 '%s' Unsupported Port C mode!\n", tag());
default:
logerror("8155 '%s' Unsupported Port C mode!\n", tag());
}
break; break;
} }
@ -404,7 +387,7 @@ READ8_MEMBER( i8155_device::io_r )
break; break;
case REGISTER_PORT_C: case REGISTER_PORT_C:
data = read_port(PORT_C); data = read_port(PORT_C) | 0xc0;
break; break;
case REGISTER_TIMER_LOW: case REGISTER_TIMER_LOW:
@ -501,7 +484,7 @@ void i8155_device::register_w(int offset, UINT8 data)
break; break;
case REGISTER_PORT_C: case REGISTER_PORT_C:
write_port(PORT_C, data); write_port(PORT_C, data & 0x3f);
break; break;
case REGISTER_TIMER_LOW: case REGISTER_TIMER_LOW: