diff options
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 |
commit | 172f66dc0759781566052ca604d9d25cc0810e27 (patch) | |
tree | 7205131e892fe98e1aa891545f04594a75f29581 /src/emu/cpu/upd7810 | |
parent | 67641df139e3b9fa5432974fd4a1e42767e9e004 (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.c | 20 |
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; } |