Implemented a shit load of OpCodes
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user