diff options
Diffstat (limited to 'atk16_emu/test/test_opcode_alr.py')
| -rw-r--r-- | atk16_emu/test/test_opcode_alr.py | 86 |
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 |
