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