summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/upd7810
diff options
context:
space:
mode:
author Wilbert Pol <wilbert@jdg.info>2012-06-29 20:21:16 +0000
committer Wilbert Pol <wilbert@jdg.info>2012-06-29 20:21:16 +0000
commit172f66dc0759781566052ca604d9d25cc0810e27 (patch)
tree7205131e892fe98e1aa891545f04594a75f29581 /src/emu/cpu/upd7810
parent67641df139e3b9fa5432974fd4a1e42767e9e004 (diff)
upd7810.c: Fixed setting of flags in the ACI_[VABCDEHL]_xx functions. Fixed handling of Carry flag in the DAA instruction. [Wilbert Pol]
Diffstat (limited to 'src/emu/cpu/upd7810')
-rw-r--r--src/emu/cpu/upd7810/7810ops.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/emu/cpu/upd7810/7810ops.c b/src/emu/cpu/upd7810/7810ops.c
index 2621c051482..937d544e1c3 100644
--- a/src/emu/cpu/upd7810/7810ops.c
+++ b/src/emu/cpu/upd7810/7810ops.c
@@ -6806,7 +6806,7 @@ static void ACI_V_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = V + imm + (PSW & CY);
- ZHC_SUB( tmp, V, (PSW & CY) );
+ ZHC_ADD( tmp, V, (PSW & CY) );
V = tmp;
}
@@ -6817,7 +6817,7 @@ static void ACI_A_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = A + imm + (PSW & CY);
- ZHC_SUB( tmp, A, (PSW & CY) );
+ ZHC_ADD( tmp, A, (PSW & CY) );
A = tmp;
}
@@ -6828,7 +6828,7 @@ static void ACI_B_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = B + imm + (PSW & CY);
- ZHC_SUB( tmp, B, (PSW & CY) );
+ ZHC_ADD( tmp, B, (PSW & CY) );
B = tmp;
}
@@ -6839,7 +6839,7 @@ static void ACI_C_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = C + imm + (PSW & CY);
- ZHC_SUB( tmp, C, (PSW & CY) );
+ ZHC_ADD( tmp, C, (PSW & CY) );
C = tmp;
}
@@ -6850,7 +6850,7 @@ static void ACI_D_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = D + imm + (PSW & CY);
- ZHC_SUB( tmp, D, (PSW & CY) );
+ ZHC_ADD( tmp, D, (PSW & CY) );
D = tmp;
}
@@ -6861,7 +6861,7 @@ static void ACI_E_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = E + imm + (PSW & CY);
- ZHC_SUB( tmp, E, (PSW & CY) );
+ ZHC_ADD( tmp, E, (PSW & CY) );
E = tmp;
}
@@ -6872,7 +6872,7 @@ static void ACI_H_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = H + imm + (PSW & CY);
- ZHC_SUB( tmp, H, (PSW & CY) );
+ ZHC_ADD( tmp, H, (PSW & CY) );
H = tmp;
}
@@ -6883,7 +6883,7 @@ static void ACI_L_xx(upd7810_state *cpustate)
RDOPARG( imm );
tmp = L + imm + (PSW & CY);
- ZHC_SUB( tmp, L, (PSW & CY) );
+ ZHC_ADD( tmp, L, (PSW & CY) );
L = tmp;
}
@@ -8822,7 +8822,8 @@ static void PRE_60(upd7810_state *cpustate)
/* 61: 0110 0001 */
static void DAA(upd7810_state *cpustate)
{
- UINT8 l = A & 0x0f, h = A >> 4, tmp, adj = 0x00;
+ UINT8 l = A & 0x0f, h = A >> 4, tmp, adj = 0x00, old_cy = PSW & CY;
+
if (0 == (PSW & HC))
{
if (l < 10)
@@ -8848,6 +8849,7 @@ static void DAA(upd7810_state *cpustate)
}
tmp = A + adj;
ZHC_ADD( tmp, A, PSW & CY );
+ PSW |= old_cy;
A = tmp;
}