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