- [FIX] Adjusted flags and timing for LD A, I and LD A,R

This commit is contained in:
2024-04-16 10:21:02 +02:00
parent 4b4aad7658
commit aff713fc62

26
z80.cpp
View File

@@ -407,6 +407,24 @@ namespace z80
SUB8(b, false); 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() void RLCA()
{ {
rA = (rA>>7) | (rA<<1); rA = (rA>>7) | (rA<<1);
@@ -2026,26 +2044,26 @@ namespace z80
case 0x44: NEG(); break; case 0x44: NEG(); break;
case 0x45: RETN(); break; case 0x45: RETN(); break;
case 0x46: IM(0); break; case 0x46: IM(0); break;
case 0x47: rI = rA; break; case 0x47: rI = rA; t++; break;
case 0x48: rC = IN(); break; case 0x48: rC = IN(); break;
case 0x49: OUT(rC, rC); break; case 0x49: OUT(rC, rC); break;
case 0x4A: ADC16(_rHL, rBC); break; case 0x4A: ADC16(_rHL, rBC); break;
case 0x4B: rBC = READ_MEM_16(READ_MEM_16());break; case 0x4B: rBC = READ_MEM_16(READ_MEM_16());break;
case 0x4D: RETI(); break; case 0x4D: RETI(); break;
case 0x4F: rR = rA; break; case 0x4F: rR = rA; t++; break;
case 0x50: rD = IN(); break; case 0x50: rD = IN(); break;
case 0x51: OUT(rD, rC); break; case 0x51: OUT(rD, rC); break;
case 0x52: SBC16(_rHL, rDE); break; case 0x52: SBC16(_rHL, rDE); break;
case 0x53: WRITE_MEM_16(READ_MEM_16(), rDE);break; case 0x53: WRITE_MEM_16(READ_MEM_16(), rDE);break;
case 0x56: IM(1); break; case 0x56: IM(1); break;
case 0x57: rA = rI; break; case 0x57: LD_A_I(); break;
case 0x58: rE = IN(); break; case 0x58: rE = IN(); break;
case 0x59: OUT(rE, rC); break; case 0x59: OUT(rE, rC); break;
case 0x5A: ADC16(_rHL, rDE); break; case 0x5A: ADC16(_rHL, rDE); break;
case 0x5B: rDE = READ_MEM_16(READ_MEM_16());break; case 0x5B: rDE = READ_MEM_16(READ_MEM_16());break;
case 0x5E: IM(2); break; case 0x5E: IM(2); break;
case 0x5F: rA = rR; break; case 0x5F: LD_A_R(); break;
case 0x60: rH = IN(); break; case 0x60: rH = IN(); break;
case 0x61: OUT(rH, rC); break; case 0x61: OUT(rH, rC); break;