Implemented a shit load more OpCodes

This commit is contained in:
2026-04-15 01:47:23 +01:00
parent 7e7453691f
commit f52180aeb3
2 changed files with 270 additions and 26 deletions

View File

@@ -264,14 +264,43 @@ namespace Desktop
// --- 16-Bit Decrements ---
case 0x0B: mnemonic = "DEC BC"; break;
case 0x3B: mnemonic = "DEC SP"; break;
case 0x04:
mnemonic = "INC B";
// --- 8-Bit Increments ---
case 0x04: mnemonic = "INC B"; break;
case 0x0C: mnemonic = "INC C"; break;
case 0x14: mnemonic = "INC D"; break;
case 0x1C: mnemonic = "INC E"; break;
case 0x24: mnemonic = "INC H"; break;
case 0x2C: mnemonic = "INC L"; break;
case 0x34: mnemonic = "INC (HL)"; break;
case 0x3C: mnemonic = "INC A"; break;
// --- 8-Bit Decrements ---
case 0x05: mnemonic = "DEC B"; break;
case 0x0D: mnemonic = "DEC C"; break;
case 0x15: mnemonic = "DEC D"; break;
case 0x1D: mnemonic = "DEC E"; break;
case 0x25: mnemonic = "DEC H"; break;
case 0x2D: mnemonic = "DEC L"; break;
case 0x35: mnemonic = "DEC (HL)"; break;
case 0x3D: mnemonic = "DEC A"; break;
case 0x06:
byte bImm = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"LD B, 0x{bImm:X2}";
instructionLength = 2;
break;
// --- ADD HL, rr ---
case 0x09: mnemonic = "ADD HL, BC"; break;
case 0x19: mnemonic = "ADD HL, DE"; break;
case 0x29: mnemonic = "ADD HL, HL"; break;
case 0x39: mnemonic = "ADD HL, SP"; break;
case 0x0E:
byte cImm = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"LD C, 0x{cImm:X2}";
instructionLength = 2;
break;
case 0x0F:
mnemonic = "RRCA";
break;
case 0x10:
sbyte djnzOffset = (sbyte)_memoryBus.Read((ushort)(currentPc + 1));
ushort djnzDest = (ushort)(currentPc + 2 + djnzOffset);
@@ -298,8 +327,8 @@ namespace Desktop
mnemonic = $"JR 0x{targetAddressUnconditional:X4}";
instructionLength = 2;
break;
case 0x19:
mnemonic = "ADD HL, DE";
case 0x1A:
mnemonic = "LD A, (DE)";
break;
case 0x1B:
mnemonic = "DEC DE";
@@ -359,9 +388,6 @@ namespace Desktop
instructionLength = 3;
break;
}
case 0x35:
mnemonic = "DEC (HL)";
break;
case 0x36:
byte memValue = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"LD (HL), 0x{memValue:X2}";
@@ -377,6 +403,11 @@ namespace Desktop
mnemonic = $"JR C, 0x{targetC:X4}";
instructionLength = 2;
break;
case 0x3A:
ushort addr3A = (ushort)(_memoryBus.Read((ushort)(currentPc + 1)) | (_memoryBus.Read((ushort)(currentPc + 2)) << 8));
mnemonic = $"LD A, (0x{addr3A:X4})";
instructionLength = 3;
break;
case 0x3E:
mnemonic = $"LD A, 0x{_memoryBus.Read((ushort)(currentPc + 1)):X2}";
instructionLength = 2;
@@ -540,12 +571,42 @@ namespace Desktop
instructionLength = 2;
break;
}
// --- RST Instructions ---
case 0xC7: mnemonic = "RST 00h"; break;
case 0xCF: mnemonic = "RST 08h"; break;
case 0xD7: mnemonic = "RST 10h"; break;
case 0xDF: mnemonic = "RST 18h"; break;
case 0xE7: mnemonic = "RST 20h"; break;
case 0xEF: mnemonic = "RST 28h"; break;
case 0xF7: mnemonic = "RST 30h"; break;
case 0xFF: mnemonic = "RST 38h"; break;
case 0xC8:
mnemonic = "RET Z";
break;
case 0xC9:
mnemonic = "RET";
break;
case 0xCB:
byte cbOp = _memoryBus.Read((ushort)(currentPc + 1));
if (cbOp == 0x7E)
{
mnemonic = "BIT 7, (HL)";
}
else if (cbOp == 0xAE)
{
mnemonic = "RES 5, (HL)";
}
else if (cbOp == 0xC6)
{
mnemonic = "SET 0, (HL)";
}
else
{
mnemonic = $"CB UNKNOWN (0x{cbOp:X2})";
}
instructionLength = 2;
break;
case 0xCD:
ushort callDest = (ushort)(_memoryBus.Read((ushort)(currentPc + 1)) | (_memoryBus.Read((ushort)(currentPc + 2)) << 8));
mnemonic = $"CALL 0x{callDest:X4}";
@@ -572,12 +633,18 @@ namespace Desktop
mnemonic = $"SUB 0x{subImm:X2}";
instructionLength = 2;
break;
case 0xD8:
mnemonic = "RET C";
break;
case 0xDE:
byte sbcValue = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"SBC A, 0x{sbcValue:X2}";
instructionLength = 2;
break;
case 0xE1: mnemonic = "POP HL"; break;
case 0xE3:
mnemonic = "EX (SP), HL";
break;
case 0xE5:
mnemonic = "PUSH HL";
break;
@@ -606,6 +673,11 @@ namespace Desktop
mnemonic = "LD I, A";
instructionLength = 2; // 0xED + 0x47
break;
case 0x4B:
ushort addr4B = (ushort)(_memoryBus.Read((ushort)(currentPc + 2)) | (_memoryBus.Read((ushort)(currentPc + 3)) << 8));
mnemonic = $"LD BC, (0x{addr4B:X4})";
instructionLength = 4;
break;
case 0x52:
mnemonic = "SBC HL, DE";
instructionLength = 2; // ED 52
@@ -638,10 +710,14 @@ namespace Desktop
case 0xF3:
mnemonic = "DI";
break;
break;
case 0xf5:
mnemonic = "PUSH AF";
break;
case 0xF6:
byte orImm = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"OR 0x{orImm:X2}";
instructionLength = 2;
break;
case 0xF9:
mnemonic = "LD SP, HL";
break;
@@ -673,6 +749,14 @@ namespace Desktop
mnemonic = $"LD (IY{sign}{d}), 0x{n:X2}";
instructionLength = 4;
}
else if (fdOpcode == 0x46) // LD B, (IY+d)
{
sbyte dB = (sbyte)_memoryBus.Read((ushort)(currentPc + 2));
string signB = dB >= 0 ? "+" : "";
mnemonic = $"LD B, (IY{signB}{dB})";
instructionLength = 3;
}
else if (fdOpcode == 0x6E)
{
sbyte offsetL = (sbyte)_memoryBus.Read((ushort)(currentPc + 2));
@@ -772,6 +856,11 @@ namespace Desktop
}
break;
}
case 0xFE:
byte cpImm = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"CP 0x{cpImm:X2}";
instructionLength = 2;
break;
default:
mnemonic = $"UNKNOWN (0x{opcode:X2})";
break;