aboutsummaryrefslogtreecommitdiffstats
path: root/atk16_emu/test/test_opcode_alr.py
blob: 8561ff685083669680fb9563349e31abfa58b84a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from ..emu import Machine
from .utils import make_rom

def test_alr_s0_small_unsigned():
  machine = Machine()

  rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
  machine.load_rom_image(rom_image)
  machine.reset()

  machine.ra.value = 10
  machine.rb.value = 20

  machine.run()
  machine.step()

  assert machine.rc.value == 30
  assert machine.fr.carry == 0
  assert machine.fr.overflow == 0
  assert machine.fr.zero == 0
  assert machine.fr.sign == 0

def test_alr_s0_large_unsigned():
  machine = Machine()

  rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
  machine.load_rom_image(rom_image)
  machine.reset()

  machine.ra.value = 0xFFFF
  machine.rb.value = 20

  machine.run()
  machine.step()

  assert machine.rc.value == 19
  assert machine.fr.carry == 1
  assert machine.fr.overflow == 0
  assert machine.fr.zero == 0
  assert machine.fr.sign == 0

def test_alr_s0_small_signed():
  machine = Machine()

  rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
  machine.load_rom_image(rom_image)
  machine.reset()

  machine.ra.value = 0xFFFF # -1
  machine.rb.value = 0x0001 # 1

  machine.run()
  machine.step()

  assert machine.rc.value == 0
  assert machine.fr.carry == 1
  assert machine.fr.overflow == 0
  assert machine.fr.zero == 1
  assert machine.fr.sign == 0

def test_alr_s0_large_signed():
  machine = Machine()

  rom_image = make_rom([0b0000_010_000_001_000]) # ALR target=RC left=RA right=RB alu_code=0
  machine.load_rom_image(rom_image)
  machine.reset()

  machine.ra.value = 0x7FFF # 32767
  machine.rb.value = 0x0001 # 1

  machine.run()
  machine.step()

  assert machine.rc.value == 0x8000 # -32768
  assert machine.fr.carry == 0
  assert machine.fr.overflow == 1
  assert machine.fr.zero == 0
  assert machine.fr.sign == 1