aboutsummaryrefslogtreecommitdiffstats
path: root/atk16_emu/test/test_opcode_alr.py
diff options
context:
space:
mode:
Diffstat (limited to 'atk16_emu/test/test_opcode_alr.py')
-rw-r--r--atk16_emu/test/test_opcode_alr.py86
1 files changed, 81 insertions, 5 deletions
diff --git a/atk16_emu/test/test_opcode_alr.py b/atk16_emu/test/test_opcode_alr.py
index 8561ff6..e7fe1a7 100644
--- a/atk16_emu/test/test_opcode_alr.py
+++ b/atk16_emu/test/test_opcode_alr.py
@@ -1,7 +1,7 @@
from ..emu import Machine
from .utils import make_rom
-def test_alr_s0_small_unsigned():
+def test_alr_add_small_unsigned():
machine = Machine()
rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
@@ -20,7 +20,7 @@ def test_alr_s0_small_unsigned():
assert machine.fr.zero == 0
assert machine.fr.sign == 0
-def test_alr_s0_large_unsigned():
+def test_alr_add_large_unsigned():
machine = Machine()
rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
@@ -39,7 +39,7 @@ def test_alr_s0_large_unsigned():
assert machine.fr.zero == 0
assert machine.fr.sign == 0
-def test_alr_s0_small_signed():
+def test_alr_add_small_signed():
machine = Machine()
rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
@@ -58,7 +58,7 @@ def test_alr_s0_small_signed():
assert machine.fr.zero == 1
assert machine.fr.sign == 0
-def test_alr_s0_large_signed():
+def test_alr_add_large_signed():
machine = Machine()
rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
@@ -75,4 +75,80 @@ def test_alr_s0_large_signed():
assert machine.fr.carry == 0
assert machine.fr.overflow == 1
assert machine.fr.zero == 0
- assert machine.fr.sign == 1 \ No newline at end of file
+ assert machine.fr.sign == 1
+
+def test_alr_sub_small_unsigned():
+ machine = Machine()
+
+ rom_image = make_rom([0b0000_010_000_001_001]) # ALR target=RC left=RA right=RB alu_code=1
+ machine.load_rom_image(rom_image)
+ machine.reset()
+
+ machine.ra.value = 10
+ machine.rb.value = 20
+
+ machine.run()
+ machine.step()
+
+ assert machine.rc.value == 0xFFF6 # -10
+ assert machine.fr.carry == 1
+ assert machine.fr.overflow == 0
+ assert machine.fr.zero == 0
+ assert machine.fr.sign == 1
+
+def test_alr_sub_large_unsigned():
+ machine = Machine()
+
+ rom_image = make_rom([0b0000_010_000_001_001]) # ALR target=RC left=RA right=RB alu_code=1
+ machine.load_rom_image(rom_image)
+ machine.reset()
+
+ machine.ra.value = 0xFFFF
+ machine.rb.value = 0xFFFF
+
+ machine.run()
+ machine.step()
+
+ assert machine.rc.value == 0x0000
+ assert machine.fr.carry == 0
+ assert machine.fr.overflow == 0
+ assert machine.fr.zero == 1
+ assert machine.fr.sign == 0
+
+def test_alr_sub_small_signed():
+ machine = Machine()
+
+ rom_image = make_rom([0b0000_010_000_001_001]) # ALR target=RC left=RA right=RB alu_code=1
+ machine.load_rom_image(rom_image)
+ machine.reset()
+
+ machine.ra.value = 0x0001 # 1
+ machine.rb.value = 0xFFFF # -1
+
+ machine.run()
+ machine.step()
+
+ assert machine.rc.value == 0x0002
+ assert machine.fr.carry == 1
+ assert machine.fr.overflow == 0
+ assert machine.fr.zero == 0
+ assert machine.fr.sign == 0
+
+def test_alr_sub_large_signed():
+ machine = Machine()
+
+ rom_image = make_rom([0b0000_010_000_001_001]) # ALR target=RC left=RA right=RB alu_code=1
+ machine.load_rom_image(rom_image)
+ machine.reset()
+
+ machine.ra.value = 0x7FFF # 32767
+ machine.rb.value = 0xFFFF # -1
+
+ machine.run()
+ machine.step()
+
+ assert machine.rc.value == 0x8000 # -32768
+ assert machine.fr.carry == 1
+ assert machine.fr.overflow == 1
+ assert machine.fr.zero == 0
+ assert machine.fr.sign == 1