From aff713fc624fc0eb1994d3f875945224b117b416 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 16 Apr 2024 10:21:02 +0200 Subject: [PATCH] - [FIX] Adjusted flags and timing for LD A, I and LD A,R --- z80.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/z80.cpp b/z80.cpp index 25b6309..345f389 100644 --- a/z80.cpp +++ b/z80.cpp @@ -407,6 +407,24 @@ namespace z80 SUB8(b, false); } + void LD_A_I() + { + t++; + rA = rI; + KEEP_FLAGS(fC); + FLAGS_SZXY(rA); + if (iff2) SET_FLAGS(fP); + } + + void LD_A_R() + { + t++; + rA = rR; + KEEP_FLAGS(fC); + FLAGS_SZXY(rA); + if (iff2) SET_FLAGS(fP); + } + void RLCA() { rA = (rA>>7) | (rA<<1); @@ -2026,26 +2044,26 @@ namespace z80 case 0x44: NEG(); break; case 0x45: RETN(); break; case 0x46: IM(0); break; - case 0x47: rI = rA; break; + case 0x47: rI = rA; t++; break; case 0x48: rC = IN(); break; case 0x49: OUT(rC, rC); break; case 0x4A: ADC16(_rHL, rBC); break; case 0x4B: rBC = READ_MEM_16(READ_MEM_16());break; case 0x4D: RETI(); break; - case 0x4F: rR = rA; break; + case 0x4F: rR = rA; t++; break; case 0x50: rD = IN(); break; case 0x51: OUT(rD, rC); break; case 0x52: SBC16(_rHL, rDE); break; case 0x53: WRITE_MEM_16(READ_MEM_16(), rDE);break; case 0x56: IM(1); break; - case 0x57: rA = rI; break; + case 0x57: LD_A_I(); break; case 0x58: rE = IN(); break; case 0x59: OUT(rE, rC); break; case 0x5A: ADC16(_rHL, rDE); break; case 0x5B: rDE = READ_MEM_16(READ_MEM_16());break; case 0x5E: IM(2); break; - case 0x5F: rA = rR; break; + case 0x5F: LD_A_R(); break; case 0x60: rH = IN(); break; case 0x61: OUT(rH, rC); break;