aboutsummaryrefslogtreecommitdiffstats
path: root/test/e2e/sum
diff options
context:
space:
mode:
Diffstat (limited to 'test/e2e/sum')
-rw-r--r--test/e2e/sum/sum.atk1631
-rw-r--r--test/e2e/sum/test_sum.py19
2 files changed, 50 insertions, 0 deletions
diff --git a/test/e2e/sum/sum.atk16 b/test/e2e/sum/sum.atk16
new file mode 100644
index 0000000..8399767
--- /dev/null
+++ b/test/e2e/sum/sum.atk16
@@ -0,0 +1,31 @@
+; Program: sum two values and store the result in RAM
+
+; ROM (and program execution) starts at offset 0x0
+@address 0x0
+ jpi program
+
+@label ram_offset
+ 0x8000 ; store ram offset for later memory access
+
+@label program
+ ldi 10 RA ; RA := 10
+ ldi 20 RB ; RB := 20
+ alr al_plus RA RB RC ; RC := RA + RB
+ ldi ram_offset RD ; store address of ram_offset in RD
+ ldr RD RD ; dereference ram_offset address
+@label debug
+ str RC RD ; store RC in RAM
+
+ ; Check that 10 + 20 = 30
+ ali al_plus RC 0 RA ; RA := result of sum
+ ldi 30 RB ; RB := 30
+ alr al_minus RA RB RC ; RC := RA - RB
+ bri zero success ; if result is zero, jump to success
+
+ ldi 2 RA ; RA := 2 to signal failure
+ hlt
+
+ ; Else
+@label success
+ ldi 1 RA ; RA := 1 to signal success
+ hlt
diff --git a/test/e2e/sum/test_sum.py b/test/e2e/sum/test_sum.py
new file mode 100644
index 0000000..3484af5
--- /dev/null
+++ b/test/e2e/sum/test_sum.py
@@ -0,0 +1,19 @@
+from atk16_asm import assemble
+from atk16_emu import Machine
+from test.utils import pad_bytearray
+
+def test_sum():
+ filename = "test/e2e/sum/sum.atk16"
+ with open(filename, "r") as f:
+ source = f.read()
+
+ obj = assemble(source, filename)
+ rom_image = pad_bytearray(obj)
+
+ machine = Machine()
+ machine.load_rom_image(rom_image)
+ machine.reset()
+ machine.run_until_halted()
+ machine.print_state_summary()
+
+ assert machine.rb.value == 30