summaryrefslogtreecommitdiff
path: root/Q1.tests/Pipeline/AssemblerTests.cs
diff options
context:
space:
mode:
authorMelodi <62381002+Melodi17@users.noreply.github.com>2026-07-11 09:03:50 +1000
committerMelodi <62381002+Melodi17@users.noreply.github.com>2026-07-11 09:03:50 +1000
commitcb3cc7e94327c57a0f7539d8f8f2406ca4b04037 (patch)
tree8e4d241a466e58b438579622a8a1a6e2339489e9 /Q1.tests/Pipeline/AssemblerTests.cs
parent512a5f0efeea46994d01124b409ef51f9b9177a0 (diff)
Diffstat (limited to 'Q1.tests/Pipeline/AssemblerTests.cs')
-rw-r--r--Q1.tests/Pipeline/AssemblerTests.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/Q1.tests/Pipeline/AssemblerTests.cs b/Q1.tests/Pipeline/AssemblerTests.cs
new file mode 100644
index 0000000..4eb36bb
--- /dev/null
+++ b/Q1.tests/Pipeline/AssemblerTests.cs
@@ -0,0 +1,59 @@
+namespace Q1.tests.Pipeline;
+
+using core.Arch;
+using core.Arch.Constants;
+using core.Arch.Lookups;
+using core.Pipeline;
+
+[TestFixture]
+public class AssemblerTests
+{
+ private Assembler CreateAssembler()
+ {
+ return new Assembler();
+ }
+
+ private byte[] Assemble(string source)
+ {
+ var assembler = this.CreateAssembler();
+ var reader = new StringReader(source);
+ return assembler.Assemble(reader).ToArray();
+ }
+
+ [Test]
+ public void Assembler_ShouldAssembleSimpleProgram()
+ {
+ // Arrange
+ string source = """
+ mov 0x1234, ax
+ """;
+
+ // Act
+ var result = Assemble(source);
+
+ // Assert
+ MemoryStream expected = new MemoryStream();
+ WriteWord(expected, InstructionEncoding.Encode(
+ InstructionSet.GetOpcode("MOV"),
+ AddressingModes.GetAddressingMode("Immediate"),
+ AddressingModes.GetAddressingMode("Register"),
+ true));
+ WriteWord(expected, 0x1234);
+ WriteByte(expected, ChipRegisters.AX);
+
+ Assert.That(result, Is.EqualTo(expected.ToArray()));
+ }
+
+ private void WriteByte(MemoryStream stream, byte value)
+ {
+ stream.WriteByte(value);
+ }
+
+ private void WriteWord(MemoryStream stream, ushort value)
+ {
+ u8 high = (u8) (value & 0xFF);
+ u8 low = (u8) ((value >> 8) & 0xFF);
+ stream.WriteByte(low);
+ stream.WriteByte(high);
+ }
+} \ No newline at end of file