3
3
from esp32_ulp .nocomment import remove_comments
4
4
5
5
src = """\
6
+ .set const, 123
6
7
7
8
start: wait 42
8
9
ld r0, r1, 0
@@ -16,12 +17,13 @@ def test_parse_line():
16
17
a = Assembler ()
17
18
lines = src .splitlines ()
18
19
# note: line number = index + 1
19
- assert a .parse_line (lines [0 ]) == None
20
- assert a .parse_line (lines [1 ]) == ('start' , 'wait' , ('42' , ))
21
- assert a .parse_line (lines [2 ]) == (None , 'ld' , ('r0' , 'r1' , '0' , ))
22
- assert a .parse_line (lines [3 ]) == (None , 'st' , ('r0' , 'r1' , '0' , ))
23
- assert a .parse_line (lines [4 ]) == (None , 'halt' , ())
24
- assert a .parse_line (lines [5 ]) == ('end' , None , ())
20
+ assert a .parse_line (lines [0 ]) == (None , '.set' , ('const' , '123' , ))
21
+ assert a .parse_line (lines [1 ]) == None
22
+ assert a .parse_line (lines [2 ]) == ('start' , 'wait' , ('42' , ))
23
+ assert a .parse_line (lines [3 ]) == (None , 'ld' , ('r0' , 'r1' , '0' , ))
24
+ assert a .parse_line (lines [4 ]) == (None , 'st' , ('r0' , 'r1' , '0' , ))
25
+ assert a .parse_line (lines [5 ]) == (None , 'halt' , ())
26
+ assert a .parse_line (lines [6 ]) == ('end' , None , ())
25
27
26
28
27
29
def test_parse ():
@@ -34,8 +36,10 @@ def test_parse():
34
36
def test_assemble ():
35
37
a = Assembler ()
36
38
a .assemble (src )
39
+ assert a .symbols .has_sym ('const' )
37
40
assert a .symbols .has_sym ('start' )
38
41
assert a .symbols .has_sym ('end' )
42
+ assert a .symbols .get_sym ('const' ) == (ABS , None , 123 )
39
43
assert a .symbols .get_sym ('start' ) == (REL , TEXT , 0 )
40
44
assert a .symbols .get_sym ('end' ) == (REL , TEXT , 4 )
41
45
assert len (b'' .join (a .sections [TEXT ])) == 16 # 4 instructions * 4B
@@ -50,6 +54,7 @@ def test_symbols():
50
54
('abs_t4' , ABS , TEXT , 4 ),
51
55
('rel_d4' , REL , DATA , 4 ),
52
56
('abs_d4' , ABS , DATA , 4 ),
57
+ ('const' , ABS , None , 123 ),
53
58
]:
54
59
st .set_sym (* entry )
55
60
# PASS 1 ========================================================
@@ -62,11 +67,13 @@ def test_symbols():
62
67
assert st .resolve_absolute ('abs_d4' ) == 4
63
68
assert st .resolve_absolute ('rel_t4' ) == 4
64
69
assert st .resolve_absolute ('rel_d4' ) == 4
70
+ assert st .resolve_absolute ('const' ) == 123
65
71
st .set_from (TEXT , 8 )
66
72
assert st .resolve_relative ('abs_t4' ) == - 4
67
73
assert st .resolve_relative ('abs_d4' ) == - 4
68
74
assert st .resolve_relative ('rel_t4' ) == - 4
69
75
assert st .resolve_relative ('rel_d4' ) == - 4
76
+ assert st .resolve_absolute ('const' ) == 123
70
77
# PASS 2 ========================================================
71
78
st .set_bases ({TEXT : 100 , DATA : 200 })
72
79
st .set_pass (2 )
@@ -84,11 +91,13 @@ def test_symbols():
84
91
assert st .resolve_absolute ('abs_d4' ) == 4
85
92
assert st .resolve_absolute ('rel_t4' ) == 100 + 4
86
93
assert st .resolve_absolute ('rel_d4' ) == 200 + 4
94
+ assert st .resolve_absolute ('const' ) == 123
87
95
st .set_from (TEXT , 8 )
88
96
assert st .resolve_relative ('abs_t4' ) == 4 - 108
89
97
assert st .resolve_relative ('abs_d4' ) == 4 - 108
90
98
assert st .resolve_relative ('rel_t4' ) == 104 - 108
91
99
assert st .resolve_relative ('rel_d4' ) == 204 - 108
100
+ assert st .resolve_absolute ('const' ) == 123
92
101
93
102
94
103
test_parse_line ()
0 commit comments