summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaymaekers Luca <luca@spacehb.net>2025-10-14 12:13:58 +0200
committerRaymaekers Luca <luca@spacehb.net>2025-10-14 12:13:58 +0200
commit323a04b6e38a9456977551fa49f7031229c7abdd (patch)
treed50b24fa26a3b64e2a98be975827c9b0cbba4494
parenta068e5ace6374583f79973374a7581b0d87a47dd (diff)
checkpoint
-rwxr-xr-xsrc/build/sim86bin57872 -> 58120 bytes
-rw-r--r--src/code/sim86.cpp40
2 files changed, 29 insertions, 11 deletions
diff --git a/src/build/sim86 b/src/build/sim86
index 14cb6ef..16e2bdd 100755
--- a/src/build/sim86
+++ b/src/build/sim86
Binary files differ
diff --git a/src/code/sim86.cpp b/src/code/sim86.cpp
index 0fca8a5..8ea8453 100644
--- a/src/code/sim86.cpp
+++ b/src/code/sim86.cpp
@@ -31,7 +31,7 @@ Run8086(psize DisassemblySize, u8 *Disassembly)
Offset += Decoded.Size;
#if SIM86_INTERNAL
- printf("Size:%u Op:%s Flags:0x%x\n", Decoded.Size, Sim86_MnemonicFromOperationType(Decoded.Op), Decoded.Flags);
+ printf("Size:%u Op:%s Flags:0x%x", Decoded.Size, Sim86_MnemonicFromOperationType(Decoded.Op), Decoded.Flags);
#endif
if(0) {}
else if(Decoded.Op == Op_mov)
@@ -75,19 +75,28 @@ Run8086(psize DisassemblySize, u8 *Disassembly)
Assert(0);
}
+ s32 Old = *Destination;
if(Decoded.Flags & Inst_Wide)
{
- s32 Old = *Destination;
*Destination = *Source;
-
- printf("%4x->%4x\n", Old, *Destination);
-
}
else
{
- Assert(0);
+ // NOTE(luca): We assume that an immediate will have an Offset of 0.
+ u32 DestOffset = Decoded.Operands[0].Register.Offset;
+ u32 SourceOffset = Decoded.Operands[1].Register.Offset;
+
+ u8 *SourceByte = (u8 *)Source + SourceOffset;
+ u8 *DestByte = (u8 *)Destination + DestOffset;
+
+ *DestByte = *SourceByte;
}
+#if SIM86_INTERNAL
+ printf(" ; %s:0x%x->0x%x", Sim86_RegisterNameFromOperand(&Decoded.Operands[0].Register),
+ Old, *Destination);
+#endif
+
}
else
{
@@ -100,21 +109,30 @@ Run8086(psize DisassemblySize, u8 *Disassembly)
printf("Unrecognized instruction\n");
break;
}
+
+#if SIM86_INTERNAL
+ printf("\n");
+#endif
+
}
printf("Final registers:\n");
for(u32 RegisterIndex = Register_a;
- RegisterIndex < Register_di + 1;
+ RegisterIndex < Register_ds + 1;
RegisterIndex++)
{
register_access Register = {};
Register.Index = RegisterIndex;
Register.Offset = 0;
Register.Count = 2;
- printf(" %s: 0x%04x (%d)\n",
- Sim86_RegisterNameFromOperand(&Register),
- Registers[RegisterIndex],
- Registers[RegisterIndex]);
+
+ u32 Value = Registers[RegisterIndex];
+ if(Value > 0)
+ {
+ printf(" %s: 0x%04x (%d)\n",
+ Sim86_RegisterNameFromOperand(&Register),
+ Value, Value);
+ }
}
}