mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
m5074x: Add port pullup configuration
This commit is contained in:
parent
9ea37cb4d1
commit
fc77338e37
@ -57,6 +57,7 @@ m5074x_device::m5074x_device(const machine_config &mconfig, device_type type, co
|
||||
m_tmrxlatch(0),
|
||||
m_last_all_ints(0)
|
||||
{
|
||||
std::fill(std::begin(m_pullups), std::end(m_pullups), 0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -315,7 +316,7 @@ uint8_t m5074x_device::ports_r(offs_t offset)
|
||||
return m_ddrs[3];
|
||||
|
||||
case 0xa:
|
||||
return read_port(4);
|
||||
return read_port(4) & 0x0f;
|
||||
|
||||
case 0xb:
|
||||
return m_ddrs[4];
|
||||
@ -329,53 +330,53 @@ void m5074x_device::ports_w(offs_t offset, uint8_t data)
|
||||
switch (offset)
|
||||
{
|
||||
case 0: // p0
|
||||
send_port(0, data & m_ddrs[0]);
|
||||
send_port(0, (data & m_ddrs[0]) | (m_pullups[0] & ~m_ddrs[0]));
|
||||
m_ports[0] = data;
|
||||
break;
|
||||
|
||||
case 1: // p0 ddr
|
||||
send_port(0, m_ports[0] & data);
|
||||
send_port(0, (m_ports[0] & data) | (m_pullups[0] & ~data));
|
||||
m_ddrs[0] = data;
|
||||
break;
|
||||
|
||||
case 2: // p1
|
||||
send_port(1, data & m_ddrs[1]);
|
||||
send_port(1, (data & m_ddrs[1]) | (m_pullups[1] & ~m_ddrs[1]));
|
||||
m_ports[1] = data;
|
||||
break;
|
||||
|
||||
case 3: // p1 ddr
|
||||
send_port(1, m_ports[1] & data);
|
||||
send_port(1, (m_ports[1] & data) | (m_pullups[1] & ~data));
|
||||
m_ddrs[1] = data;
|
||||
break;
|
||||
|
||||
case 4: // p2
|
||||
send_port(2, data & m_ddrs[2]);
|
||||
send_port(2, (data & m_ddrs[2]) | (m_pullups[2] & ~m_ddrs[2]));
|
||||
m_ports[2] = data;
|
||||
break;
|
||||
|
||||
case 5: // p2 ddr
|
||||
send_port(2, m_ports[2] & data);
|
||||
send_port(2, (m_ports[2] & data) | (m_pullups[2] & ~data));
|
||||
m_ddrs[2] = data;
|
||||
break;
|
||||
|
||||
case 8: // p3
|
||||
send_port(3, data & m_ddrs[3]);
|
||||
send_port(3, (data & m_ddrs[3]) | (m_pullups[3] & ~m_ddrs[3]));
|
||||
m_ports[3] = data;
|
||||
break;
|
||||
|
||||
case 9: // p3 ddr
|
||||
send_port(3, m_ports[3] & data);
|
||||
send_port(3, (m_ports[3] & data) | (m_pullups[3] & ~data));
|
||||
m_ddrs[3] = data;
|
||||
break;
|
||||
|
||||
case 0xa: // p4
|
||||
send_port(4, data & m_ddrs[4]);
|
||||
m_ports[4] = data;
|
||||
case 0xa: // p4 (4-bit open drain)
|
||||
send_port(4, (data & m_ddrs[4] & 0x0f) | (m_pullups[4] & ~m_ddrs[4]));
|
||||
m_ports[4] = data & 0x0f;
|
||||
break;
|
||||
|
||||
case 0xb: // p4 ddr
|
||||
send_port(4, m_ports[4] & data);
|
||||
m_ddrs[4] = data;
|
||||
send_port(4, (m_ports[4] & data & 0x0f) | (m_pullups[4] & ~data));
|
||||
m_ddrs[4] = data & 0x0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -496,7 +497,7 @@ void m50753_device::m50753_map(address_map &map)
|
||||
map(0x00e0, 0x00eb).rw(FUNC(m50753_device::ports_r), FUNC(m50753_device::ports_w));
|
||||
map(0x00ee, 0x00ee).r(FUNC(m50753_device::in_r));
|
||||
map(0x00ef, 0x00ef).r(FUNC(m50753_device::ad_r));
|
||||
map(0x00f2, 0x00f2).w(FUNC(m50753_device::ad_start_w));
|
||||
map(0x00f2, 0x00f2).nopr().w(FUNC(m50753_device::ad_start_w));
|
||||
map(0x00f3, 0x00f3).rw(FUNC(m50753_device::ad_control_r), FUNC(m50753_device::ad_control_w));
|
||||
map(0x00f5, 0x00f5).rw(FUNC(m50753_device::pwm_control_r), FUNC(m50753_device::pwm_control_w));
|
||||
map(0x00f9, 0x00ff).rw(FUNC(m50753_device::tmrirq_r), FUNC(m50753_device::tmrirq_w));
|
||||
|
@ -40,6 +40,7 @@ public:
|
||||
|
||||
template <std::size_t Bit> auto read_p() { return m_read_p[Bit].bind(); }
|
||||
template <std::size_t Bit> auto write_p() { return m_write_p[Bit].bind(); }
|
||||
template <std::size_t Bit> void set_pullups(u8 mask) { m_pullups[Bit] = mask; }
|
||||
|
||||
uint8_t ports_r(offs_t offset);
|
||||
void ports_w(offs_t offset, uint8_t data);
|
||||
@ -72,7 +73,7 @@ protected:
|
||||
devcb_read8::array<5> m_read_p;
|
||||
devcb_write8::array<5> m_write_p;
|
||||
|
||||
uint8_t m_ports[5], m_ddrs[5];
|
||||
uint8_t m_ports[5], m_ddrs[5], m_pullups[5];
|
||||
uint8_t m_intctrl, m_tmrctrl;
|
||||
uint8_t m_tmr12pre, m_tmr1, m_tmr2, m_tmrxpre, m_tmrx;
|
||||
uint8_t m_tmr1latch, m_tmr2latch, m_tmrxlatch;
|
||||
|
Loading…
Reference in New Issue
Block a user