summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-10-29 11:26:51 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-10-29 11:27:34 -0400
commitbf80796b1555aa2e4e66f01b52a54a08aca0522c (patch)
treedb87290ab18b2e30512f3e23a313b3a60661f12f /src/devices
parent282a8d49a9a820eb5c6f0ba1678b2b0f3c25e409 (diff)
m5074x.cpp: Protect interrupt request bits against being set by writes
- m740: A few more timing corrections
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/cpu/m6502/m5074x.cpp32
-rw-r--r--src/devices/cpu/m6502/om740.lst12
2 files changed, 18 insertions, 26 deletions
diff --git a/src/devices/cpu/m6502/m5074x.cpp b/src/devices/cpu/m6502/m5074x.cpp
index 8b0c879b554..46e6fffc9ae 100644
--- a/src/devices/cpu/m6502/m5074x.cpp
+++ b/src/devices/cpu/m6502/m5074x.cpp
@@ -164,16 +164,13 @@ void m5074x_device::execute_set_input(int inputnum, int state)
{
switch (inputnum)
{
- case M5074X_INT1_LINE:
- if (state == ASSERT_LINE)
- {
- m_intctrl |= IRQ_INTREQ;
- }
- else
- {
- m_intctrl &= ~IRQ_INTREQ;
- }
- break;
+ case M5074X_INT1_LINE:
+ // FIXME: edge-triggered
+ if (state == ASSERT_LINE)
+ {
+ m_intctrl |= IRQ_INTREQ;
+ }
+ break;
}
recalc_irqs();
@@ -442,12 +439,13 @@ void m5074x_device::tmrirq_w(offs_t offset, uint8_t data)
break;
case 5:
- m_intctrl = data;
+ // Interrupt request bits can only be reset
+ m_intctrl = data & (m_intctrl | ~(IRQ_CNTRREQ | IRQ_INTREQ));
recalc_irqs();
break;
case 6:
- m_tmrctrl = data;
+ m_tmrctrl = data & (m_tmrctrl | ~TMRC_TMRXREQ);
recalc_irqs();
break;
}
@@ -589,25 +587,19 @@ void m50753_device::execute_set_input(int inputnum, int state)
switch (inputnum)
{
case M50753_INT1_LINE:
+ // FIXME: edge-triggered
if (state == ASSERT_LINE)
{
m_intctrl |= IRQ_50753_INT1REQ;
}
- else
- {
- m_intctrl &= ~IRQ_50753_INT1REQ;
- }
break;
case M50753_INT2_LINE:
+ // FIXME: edge-triggered
if (state == ASSERT_LINE)
{
m_intctrl |= IRQ_50753_INT2REQ;
}
- else
- {
- m_intctrl &= ~IRQ_50753_INT2REQ;
- }
break;
}
diff --git a/src/devices/cpu/m6502/om740.lst b/src/devices/cpu/m6502/om740.lst
index 43b8cd39c10..9ece91d9913 100644
--- a/src/devices/cpu/m6502/om740.lst
+++ b/src/devices/cpu/m6502/om740.lst
@@ -126,16 +126,15 @@ rrf_zpg
prefetch();
bra_rel
- TMP = read_pc();
- read_pc_noinc();
- if(page_changing(PC, int8_t(TMP))) {
- read_arg(set_l(PC, PC+int8_t(TMP)));
- }
+ TMP = read_pc_noinc();
+ read_arg(set_l(PC, PC+1));
+ PC++;
+ read_arg(set_l(PC, PC+int8_t(TMP)));
PC += int8_t(TMP);
prefetch();
jmp_zpi
- TMP2 = read_pc();
+ TMP2 = read_pc_noinc();
TMP = read(TMP2 & 0xff);
TMP = set_h(TMP, read((TMP2+1) & 0xff));
PC = TMP;
@@ -359,6 +358,7 @@ andt_zpx
com_zpg
TMP = read_pc();
TMP2 = read(TMP);
+ read(TMP);
TMP2 ^= 0xff;
set_nz(TMP2);
write(TMP, TMP2);