summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine
diff options
context:
space:
mode:
author Luca Elia <lucaelia@mamedev.org>2015-08-16 18:22:58 +0200
committer Luca Elia <lucaelia@mamedev.org>2015-08-16 18:22:58 +0200
commitea986c8c9f0d34173cb0a410c945d8f43eafc6f0 (patch)
tree5dfa25f288ade05a1777a818343a9285a6eb4fec /src/emu/machine
parentc129b3703a7f02334704c65336383acaa8868bb7 (diff)
tmp68301.c: fix masking of parallel data register
Diffstat (limited to 'src/emu/machine')
-rw-r--r--src/emu/machine/tmp68301.c11
-rw-r--r--src/emu/machine/tmp68301.h1
2 files changed, 9 insertions, 3 deletions
diff --git a/src/emu/machine/tmp68301.c b/src/emu/machine/tmp68301.c
index 26a4d2fea70..955a10c463b 100644
--- a/src/emu/machine/tmp68301.c
+++ b/src/emu/machine/tmp68301.c
@@ -82,17 +82,20 @@ READ16_MEMBER(tmp68301_device::pdir_r)
WRITE16_MEMBER(tmp68301_device::pdir_w)
{
- m_pdir = data;
+ COMBINE_DATA(&m_pdir);
}
READ16_MEMBER(tmp68301_device::pdr_r)
{
- return m_in_parallel_cb(0) & ~m_pdir;
+ return (m_in_parallel_cb(0) & ~m_pdir) | (m_pdr & m_pdir);
}
WRITE16_MEMBER(tmp68301_device::pdr_w)
{
- m_out_parallel_cb(0, data & m_pdir, mem_mask);
+ UINT16 old = m_pdr;
+ COMBINE_DATA(&m_pdr);
+ m_pdr = (old & ~m_pdir) | (m_pdr & m_pdir);
+ m_out_parallel_cb(0, m_pdr, mem_mask);
}
@@ -105,6 +108,7 @@ tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag,
m_iisr(0),
m_scr(0),
m_pdir(0),
+ m_pdr(0),
m_space_config("regs", ENDIANNESS_LITTLE, 16, 10, 0, NULL, *ADDRESS_MAP_NAME(tmp68301_regs))
{
memset(m_regs, 0, sizeof(m_regs));
@@ -133,6 +137,7 @@ void tmp68301_device::device_start()
save_item(NAME(m_iisr));
save_item(NAME(m_scr));
save_item(NAME(m_pdir));
+ save_item(NAME(m_pdr));
}
//-------------------------------------------------
diff --git a/src/emu/machine/tmp68301.h b/src/emu/machine/tmp68301.h
index d7a49a434b7..b96296d31f2 100644
--- a/src/emu/machine/tmp68301.h
+++ b/src/emu/machine/tmp68301.h
@@ -78,6 +78,7 @@ private:
UINT16 m_iisr;
UINT16 m_scr;
UINT16 m_pdir;
+ UINT16 m_pdr;
inline UINT16 read_word(offs_t address);
inline void write_word(offs_t address, UINT16 data);