Implemented a shit load of OpCodes

This commit is contained in:
2026-04-15 00:27:15 +01:00
parent 695db41f60
commit 7e7453691f
2 changed files with 388 additions and 135 deletions

View File

@@ -256,6 +256,14 @@ namespace Desktop
mnemonic = $"LD BC, 0x{bcVal:X4}";
instructionLength = 3;
break;
// --- 16-Bit Increments ---
case 0x03: mnemonic = "INC BC"; break;
case 0x13: mnemonic = "INC DE"; break;
case 0x33: mnemonic = "INC SP"; break;
// --- 16-Bit Decrements ---
case 0x0B: mnemonic = "DEC BC"; break;
case 0x3B: mnemonic = "DEC SP"; break;
case 0x04:
mnemonic = "INC B";
break;
@@ -376,72 +384,145 @@ namespace Desktop
case 0x3F:
mnemonic = "CCF";
break;
case 0x47:
mnemonic = "LD B, A";
break;
case 0x4E:
mnemonic = "LD C, (HL)";
break;
case 0x56:
mnemonic = "LD D, (HL)";
break;
case 0x5E:
mnemonic = "LD E, (HL)";
break;
case 0x5F:
mnemonic = "LD E, A";
break;
case 0x62:
mnemonic = "LD H, D";
break;
case 0x67:
mnemonic = "LD H, A";
break;
case 0x6B:
mnemonic = "LD L, E";
break;
case 0x6F:
mnemonic = "LD L, A";
break;
case 0x72:
mnemonic = "LD (HL), D";
break;
case 0x73:
mnemonic = "LD (HL), E";
break;
case 0x77:
mnemonic = "LD (HL), A";
break;
case 0x7A:
mnemonic = "LD A, D";
break;
case 0x7E:
mnemonic = "LD A, (HL)";
break;
case 0x87:
mnemonic = "ADD A, A";
break;
case 0x91:
mnemonic = "SUB C";
break;
case 0xA7:
mnemonic = "AND A";
break;
case 0xAE:
mnemonic = "XOR (HL)";
break;
case 0xAF:
mnemonic = "XOR A";
break;
case 0xB3:
mnemonic = "OR E";
break;
case 0xB9:
mnemonic = "CP C";
break;
case 0xBC:
mnemonic = "CP H";
break;
// --- LD B, r ---
case 0x40: mnemonic = "LD B, B"; break;
case 0x41: mnemonic = "LD B, C"; break;
case 0x42: mnemonic = "LD B, D"; break;
case 0x43: mnemonic = "LD B, E"; break;
case 0x44: mnemonic = "LD B, H"; break;
case 0x45: mnemonic = "LD B, L"; break;
case 0x46: mnemonic = "LD B, (HL)"; break;
case 0x47: mnemonic = "LD B, A"; break;
// --- LD C, r ---
case 0x48: mnemonic = "LD C, B"; break;
case 0x49: mnemonic = "LD C, C"; break;
case 0x4A: mnemonic = "LD C, D"; break;
case 0x4B: mnemonic = "LD C, E"; break;
case 0x4C: mnemonic = "LD C, H"; break;
case 0x4D: mnemonic = "LD C, L"; break;
case 0x4E: mnemonic = "LD C, (HL)"; break;
case 0x4F: mnemonic = "LD C, A"; break;
// --- LD D, r ---
case 0x50: mnemonic = "LD D, B"; break;
case 0x51: mnemonic = "LD D, C"; break;
case 0x52: mnemonic = "LD D, D"; break;
case 0x53: mnemonic = "LD D, E"; break;
case 0x54: mnemonic = "LD D, H"; break;
case 0x55: mnemonic = "LD D, L"; break;
case 0x56: mnemonic = "LD D, (HL)"; break;
case 0x57: mnemonic = "LD D, A"; break;
// --- LD E, r ---
case 0x58: mnemonic = "LD E, B"; break;
case 0x59: mnemonic = "LD E, C"; break;
case 0x5A: mnemonic = "LD E, D"; break;
case 0x5B: mnemonic = "LD E, E"; break;
case 0x5C: mnemonic = "LD E, H"; break;
case 0x5D: mnemonic = "LD E, L"; break;
case 0x5E: mnemonic = "LD E, (HL)"; break;
case 0x5F: mnemonic = "LD E, A"; break;
// --- LD H, r ---
case 0x60: mnemonic = "LD H, B"; break;
case 0x61: mnemonic = "LD H, C"; break;
case 0x62: mnemonic = "LD H, D"; break;
case 0x63: mnemonic = "LD H, E"; break;
case 0x64: mnemonic = "LD H, H"; break;
case 0x65: mnemonic = "LD H, L"; break;
case 0x66: mnemonic = "LD H, (HL)"; break;
case 0x67: mnemonic = "LD H, A"; break;
// --- LD L, r ---
case 0x68: mnemonic = "LD L, B"; break;
case 0x69: mnemonic = "LD L, C"; break;
case 0x6A: mnemonic = "LD L, D"; break;
case 0x6B: mnemonic = "LD L, E"; break;
case 0x6C: mnemonic = "LD L, H"; break;
case 0x6D: mnemonic = "LD L, L"; break;
case 0x6E: mnemonic = "LD L, (HL)"; break;
case 0x6F: mnemonic = "LD L, A"; break;
// --- LD (HL), r --- (Note: 0x76 is HALT, so it is skipped)
case 0x70: mnemonic = "LD (HL), B"; break;
case 0x71: mnemonic = "LD (HL), C"; break;
case 0x72: mnemonic = "LD (HL), D"; break;
case 0x73: mnemonic = "LD (HL), E"; break;
case 0x74: mnemonic = "LD (HL), H"; break;
case 0x75: mnemonic = "LD (HL), L"; break;
case 0x77: mnemonic = "LD (HL), A"; break;
// --- LD A, r ---
case 0x78: mnemonic = "LD A, B"; break;
case 0x79: mnemonic = "LD A, C"; break;
case 0x7A: mnemonic = "LD A, D"; break;
case 0x7B: mnemonic = "LD A, E"; break;
case 0x7C: mnemonic = "LD A, H"; break;
case 0x7D: mnemonic = "LD A, L"; break;
case 0x7E: mnemonic = "LD A, (HL)"; break;
case 0x7F: mnemonic = "LD A, A"; break;
// --- ADD A, r ---
case 0x80: mnemonic = "ADD A, B"; break;
case 0x81: mnemonic = "ADD A, C"; break;
case 0x82: mnemonic = "ADD A, D"; break;
case 0x83: mnemonic = "ADD A, E"; break;
case 0x84: mnemonic = "ADD A, H"; break;
case 0x85: mnemonic = "ADD A, L"; break;
case 0x86: mnemonic = "ADD A, (HL)"; break;
case 0x87: mnemonic = "ADD A, A"; break;
// --- SUB r ---
case 0x90: mnemonic = "SUB B"; break;
case 0x91: mnemonic = "SUB C"; break;
case 0x92: mnemonic = "SUB D"; break;
case 0x93: mnemonic = "SUB E"; break;
case 0x94: mnemonic = "SUB H"; break;
case 0x95: mnemonic = "SUB L"; break;
case 0x96: mnemonic = "SUB (HL)"; break;
case 0x97: mnemonic = "SUB A"; break;
// --- AND r ---
case 0xA0: mnemonic = "AND B"; break;
case 0xA1: mnemonic = "AND C"; break;
case 0xA2: mnemonic = "AND D"; break;
case 0xA3: mnemonic = "AND E"; break;
case 0xA4: mnemonic = "AND H"; break;
case 0xA5: mnemonic = "AND L"; break;
case 0xA6: mnemonic = "AND (HL)"; break;
case 0xA7: mnemonic = "AND A"; break;
// --- XOR r ---
case 0xA8: mnemonic = "XOR B"; break;
case 0xA9: mnemonic = "XOR C"; break;
case 0xAA: mnemonic = "XOR D"; break;
case 0xAB: mnemonic = "XOR E"; break;
case 0xAC: mnemonic = "XOR H"; break;
case 0xAD: mnemonic = "XOR L"; break;
case 0xAE: mnemonic = "XOR (HL)"; break;
case 0xAF: mnemonic = "XOR A"; break;
// --- OR r ---
case 0xB0: mnemonic = "OR B"; break;
case 0xB1: mnemonic = "OR C"; break;
case 0xB2: mnemonic = "OR D"; break;
case 0xB3: mnemonic = "OR E"; break;
case 0xB4: mnemonic = "OR H"; break;
case 0xB5: mnemonic = "OR L"; break;
case 0xB6: mnemonic = "OR (HL)"; break;
case 0xB7: mnemonic = "OR A"; break;
// --- CP r ---
case 0xB8: mnemonic = "CP B"; break;
case 0xB9: mnemonic = "CP C"; break;
case 0xBA: mnemonic = "CP D"; break;
case 0xBB: mnemonic = "CP E"; break;
case 0xBC: mnemonic = "CP H"; break;
case 0xBD: mnemonic = "CP L"; break;
case 0xBE: mnemonic = "CP (HL)"; break;
case 0xBF: mnemonic = "CP A"; break;
case 0xC1: mnemonic = "POP BC"; break;
case 0xC3:
// JP nn
byte jpLow = _memoryBus.Read((ushort)(currentPc + 1));
@@ -449,6 +530,9 @@ namespace Desktop
mnemonic = $"JP 0x{jpHigh:X2}{jpLow:X2}";
instructionLength = 3;
break;
case 0xc5:
mnemonic = "PUSH BC";
break;
case 0xC6:
{
byte addImm = _memoryBus.Read((ushort)(currentPc + 1));
@@ -470,6 +554,7 @@ namespace Desktop
case 0xD0:
mnemonic = "RET NC";
break;
case 0xD1: mnemonic = "POP DE"; break;
case 0xD3:
byte outPort = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"OUT (0x{outPort:X2}), A";
@@ -478,11 +563,24 @@ namespace Desktop
case 0xD9:
mnemonic = "EXX";
break;
break;
case 0xd5:
mnemonic = "PUSH DE";
break;
case 0xD6:
byte subImm = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"SUB 0x{subImm:X2}";
instructionLength = 2;
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 0xE5:
mnemonic = "PUSH HL";
break;
case 0xE6:
byte andImm = _memoryBus.Read((ushort)(currentPc + 1));
mnemonic = $"AND 0x{andImm:X2}";
@@ -536,9 +634,14 @@ namespace Desktop
break;
}
break;
case 0xF1: mnemonic = "POP AF"; break;
case 0xF3:
mnemonic = "DI";
break;
break;
case 0xf5:
mnemonic = "PUSH AF";
break;
case 0xF9:
mnemonic = "LD SP, HL";
break;
@@ -578,6 +681,14 @@ namespace Desktop
mnemonic = $"LD L, (IY{signL}{offsetL})";
instructionLength = 3;
}
else if (fdOpcode == 0x86) // ADD A, (IY+d)
{
sbyte dAdd = (sbyte)_memoryBus.Read((ushort)(currentPc + 2));
string signAdd = dAdd >= 0 ? "+" : "";
mnemonic = $"ADD A, (IY{signAdd}{dAdd})";
instructionLength = 3;
}
else if (fdOpcode == 0xCB) // FD CB prefix
{
sbyte d = (sbyte)_memoryBus.Read((ushort)(currentPc + 2));