Implemented many more OpCodes - 11_04_2026__02_23

This commit is contained in:
2026-04-11 02:23:38 +01:00
parent 0ef8b9f3eb
commit d953eb4ec7
2 changed files with 160 additions and 13 deletions

View File

@@ -222,6 +222,14 @@ namespace Desktop
switch (opcode)
{
case 0x00: mnemonic = "NOP"; break;
case 0x01:
ushort bcVal = (ushort)(_memoryBus.Read((ushort)(currentPc + 1)) | (_memoryBus.Read((ushort)(currentPc + 2)) << 8));
mnemonic = $"LD BC, 0x{bcVal:X4}";
instructionLength = 3;
break;
case 0x04:
mnemonic = "INC B";
break;
case 0x11:
// LD DE, nn
byte deLow = _memoryBus.Read((ushort)(currentPc + 1));
@@ -238,6 +246,18 @@ namespace Desktop
mnemonic = $"JR NZ, 0x{destination:X4}";
instructionLength = 2;
break;
case 0x21:
{
ushort hlImm = (ushort)(_memoryBus.Read((ushort)(currentPc + 1)) | (_memoryBus.Read((ushort)(currentPc + 2)) << 8));
mnemonic = $"LD HL, 0x{hlImm:X4}";
instructionLength = 3;
break;
}
case 0x22:
ushort hlAddr = (ushort)(_memoryBus.Read((ushort)(currentPc + 1)) | (_memoryBus.Read((ushort)(currentPc + 2)) << 8));
mnemonic = $"LD (0x{hlAddr:X4}), HL";
instructionLength = 3;
break;
case 0x23:
mnemonic = "INC HL";
break;
@@ -247,6 +267,13 @@ namespace Desktop
mnemonic = $"JR Z, 0x{jrZDest:X4}";
instructionLength = 2;
break;
case 0x2A:
{
ushort addr2A = (ushort)(_memoryBus.Read((ushort)(currentPc + 1)) | (_memoryBus.Read((ushort)(currentPc + 2)) << 8));
mnemonic = $"LD HL, (0x{addr2A:X4})";
instructionLength = 3;
break;
}
case 0x2B:
mnemonic = "DEC HL";
break;
@@ -306,12 +333,19 @@ namespace Desktop
mnemonic = $"SBC A, 0x{sbcValue:X2}";
instructionLength = 2;
break;
case 0xEB:
mnemonic = "EX DE, HL";
break;
case 0xED:
byte extendedOp = _memoryBus.Read((ushort)(currentPc + 1));
switch (extendedOp)
{
// Example: ED 47 is LD I, A
case 0x43:
ushort bcAddr = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD (0x{bcAddr:X4}), BC";
instructionLength = 4;
break;
case 0x47:
mnemonic = "LD I, A";
instructionLength = 2; // 0xED + 0x47
@@ -320,11 +354,23 @@ namespace Desktop
mnemonic = "SBC HL, DE";
instructionLength = 2; // ED 52
break;
// Example: ED B0 is LDIR (a massive block copy instruction)
case 0x53:
ushort deAddr = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD (0x{deAddr:X4}), DE";
instructionLength = 4;
break;
case 0x56:
mnemonic = "IM 1";
instructionLength = 2;
break;
case 0xB0:
mnemonic = "LDIR";
instructionLength = 2;
break;
case 0xB8:
mnemonic = "LDDR";
instructionLength = 2;
break;
default:
mnemonic = $"EXT UNKNOWN (ED {extendedOp:X2})";
@@ -335,6 +381,9 @@ namespace Desktop
case 0xF3:
mnemonic = "DI";
break;
case 0xF9:
mnemonic = "LD SP, HL";
break;
default:
mnemonic = $"UNKNOWN (0x{opcode:X2})";
break;