diff options
| author | Raymaekers Luca <luca@spacehb.net> | 2025-10-15 11:51:03 +0200 |
|---|---|---|
| committer | Raymaekers Luca <luca@spacehb.net> | 2025-10-15 11:51:03 +0200 |
| commit | 0982906027721c71307e234d6f14f886bdca47c5 (patch) | |
| tree | 46bb166afe8a5f63412c62beb69879b101ec9847 /src/code | |
| parent | 323a04b6e38a9456977551fa49f7031229c7abdd (diff) | |
checkpoint
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/sim86.cpp | 55 | ||||
| -rw-r--r-- | src/code/sim86.h | 6 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/code/sim86.cpp b/src/code/sim86.cpp index 8ea8453..75e1e93 100644 --- a/src/code/sim86.cpp +++ b/src/code/sim86.cpp @@ -20,6 +20,7 @@ internal void Run8086(psize DisassemblySize, u8 *Disassembly) { s32 Registers[Register_count] = {}; + u32 Flags = 0; u32 Offset = 0; while(Offset < DisassemblySize) @@ -96,7 +97,61 @@ Run8086(psize DisassemblySize, u8 *Disassembly) printf(" ; %s:0x%x->0x%x", Sim86_RegisterNameFromOperand(&Decoded.Operands[0].Register), Old, *Destination); #endif + } + else if(Decoded.Op == Op_cmp) + { + Assert(0 && "cmp has not been implemented yet"); + } + else if(Decoded.Op == Op_sub) + { + s32 *Destination = 0; + s32 *Source = 0; + + if(0) {} + else if(Decoded.Operands[0].Type == Operand_Register) + { + Destination = Registers + Decoded.Operands[0].Register.Index; + } + else + { + Assert(0 && "Destination must be a register"); + } + + if(0) {} + else if(Decoded.Operands[1].Type == Operand_Register) + { + Source = Registers + Decoded.Operands[1].Register.Index; + } + else if(Decoded.Operands[1].Type == Operand_Immediate) + { + Source = &Decoded.Operands[1].Immediate.Value; + } + else + { + Assert(1 && "Substraction from memory address is not implemented yet."); + } + + Assert(0 && "sub has not been implemented yet"); + *Destination = (u16)((u16)(*Destination) - ((u16)(*Source))); + if(*Destination & (1 << 15)) + { + Flags |= Flag_Sign; + } + + if(*Destination == 0) + { + Flags |= Flag_Zero; + } + else + { + Flags &= (~Flag_Zero); + } + + } + else if(Decoded.Op == Op_add) + { + Assert(0 && "add has not been implemented yet"); } else { diff --git a/src/code/sim86.h b/src/code/sim86.h index 2a3427e..5beef0b 100644 --- a/src/code/sim86.h +++ b/src/code/sim86.h @@ -35,5 +35,11 @@ enum register_mapping_8086 Register_count, }; +enum flags_8086 +{ + Flag_Zero = 0x1, + Flag_Sign = 0x2, +}; + #endif //SIM86_H |
