diff options
Diffstat (limited to 'Q1.core/Pipeline/Disassembler.cs')
| -rw-r--r-- | Q1.core/Pipeline/Disassembler.cs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Q1.core/Pipeline/Disassembler.cs b/Q1.core/Pipeline/Disassembler.cs new file mode 100644 index 0000000..ae93e12 --- /dev/null +++ b/Q1.core/Pipeline/Disassembler.cs @@ -0,0 +1,36 @@ +namespace Q1.core.Pipeline; + +using Arch; +using Arch.Lookups; + +public class Disassembler +{ + public StringWriter Disassemble(MemoryStream stream) + { + var reader = new BinaryReader(stream); + var writer = new StringWriter(); + + while (reader.BaseStream.Position < reader.BaseStream.Length) + { + u16 instruction = reader.ReadUInt16(); + InstructionEncoding.Decode(instruction, out u8 opcode, out u8 m1, out u8 m2, out bool word); + + var group = InstructionSet.Lookup[opcode]; + (string name, int param) = (m1, m2) switch + { + (0x00, 0x00) => (group.Implicit.Name, 0), + (_, 0x00) => (group.SimpleAddressing.Name, 1), + (0x00, 0x01) => (group.ExtendedImplicit.Name, 0), + (_, _) => (group.ExtendedAddressing.Name, 2) + }; + + writer.Write(name); + if (param == 1) + { + + } + } + + return writer; + } +}
\ No newline at end of file |
