mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-20 17:58:12 +00:00
If the command line option yus to allow the underscore character in symbols is NOT selected, then interpret underscore as a new binary operator meaning to do a left shift of the left side value by the number of bit positions indicated by the right side value. As for the arithmetic operators, both values must be literal (numeric constants or symbols equated to a numeric constant).
137 lines
7.8 KiB
Plaintext
137 lines
7.8 KiB
Plaintext
1 ;;;;;
|
|
2 ;
|
|
3 ; Test operator precedencce
|
|
4 ; or rather the lack thereof
|
|
5 ;
|
|
6 000000 000006 .word 1 + 2 + 3 ; 6
|
|
7 000002 000011 .word 1 + 2 * 3 ; 3*3 = 11
|
|
8 000004 000004 .word 1 & 2 ! 4 ; 0 ! 4 = 4
|
|
9 000006 000000 .word 1 ! 2 & 4 ; 3 & 4 = 0
|
|
10 000010 000003 .word 1 ! 2 & 7 ; 3 & 7 = 3
|
|
11 000012 000005 .word 1+1 ! 2+3 ; 2!2+3 = 2+3 = 5
|
|
12
|
|
13 ;;;;;
|
|
14 ;
|
|
15 ; Test all operators at least once
|
|
16 ;
|
|
17 000014 000007 .word 3 + 4 ; 000007
|
|
18 000016 000001 .word 4 - 3 ; 000001
|
|
19 000020 000014 .word 3 * 4 ; 000014
|
|
20 000022 000003 .word 12. / 4 ; 000003
|
|
21 000024 000121 .word 123 & 771 ; 000121
|
|
22 000026 123323 .word 123121 ! 322 ; 123323
|
|
23 000005 five = 5
|
|
24 000030 001230 a: .word 123 _ 3 ; 001230
|
|
25 000032 000500 .word five _ 6 ; 000500
|
|
26 000034 004040 .word 101_five ; 004040
|
|
test-prec.mac:27: ***ERROR Invalid expression
|
|
27 000036 000000 .word a _ 3 ; Invalid expression
|
|
28
|
|
29 000040 177401 .word - 377 ; 177401
|
|
30 000042 000377 .word + 377 ; 000377
|
|
31
|
|
32 000044 177400 .word ^C 377 ; 177400
|
|
33 000046 177400 .word ^c 377 ; 177400
|
|
34 000050 052525 .word ^B 0101010101010101 ; 052525
|
|
35 000052 125252 .word ^b 1010101010101010 ; 125252
|
|
36 000054 000144 .word ^d 100 ; 000144
|
|
37 000056 000144 .word 100. ; 000144
|
|
38 000060 000400 .word ^x 100 ; 000400 hexadecimal is an extension
|
|
39 000062 070254 .word ^rRAD ; 070254 up to 3 characters; no leading spaces
|
|
40 000064 003100 .word ^rA ; 003100 up to 3 characters
|
|
41 000066 000050 .word ^r A ; 000050 up to 3 characters
|
|
42 000070 000001 .word ^r A ; 000001 up to 3 characters
|
|
43 000072 000051 .word ^r AA ; 000051
|
|
44 000074 003101 .word ^rA A ; 003101
|
|
45 000076 003150 .word ^rAA ; 003150
|
|
46 000100 003151 .word ^r^/AAA/ ; bracketed strings are an extension
|
|
47 000102 070254 .word ^r<RAD> ; bracketed strings are an extension
|
|
48 000104 000054 .word ^r< AD> ; bracketed strings are an extension
|
|
49 000106 000004 .word ^r< D> ; bracketed strings are an extension
|
|
50 000110 070204 .word ^r<R D> ; bracketed strings are an extension
|
|
51 000112 070250 .word ^r<RA > ; bracketed strings are an extension
|
|
52 000114 157614 .word ^R50. ; 157614 there is no whitespace in between.
|
|
53 000116 040300 .word ^f 1.5 ; 040300
|
|
54
|
|
55 ;;;;;
|
|
56 ;
|
|
57 ; Test bracketing
|
|
58 ;
|
|
59 000120 000007 .word 1 + < 2 * 3 > ; 1 + 6 = 7
|
|
60 000122 000007 .word 1 + ^! 2 * 3 ! ; 1 + 6 = 7
|
|
61 000124 000007 .word 1 + ^/ 2 * 3 / ; 1 + 6 = 7
|
|
62 000126 000007 .word 1 + ^$ 2 * 3 $ ; 1 + 6 = 7
|
|
test-prec.mac:63: ***ERROR Invalid expression
|
|
63 000130 000003 000000 .word 1 + ^* 2 * 3 * ; Invalid expression
|
|
64
|
|
65 ;;;;;
|
|
66 ;
|
|
67 ; There was an obscure bug in parse_expr(), used to evaluate 'if df',
|
|
68 ; where it could skip past the end of the line marker.
|
|
69 ;
|
|
70 ; If this happened inside an expanded macro, then after that was the
|
|
71 ; next line...
|
|
72 ; In other cases it might be worse.
|
|
73 ;
|
|
74 .macro dirdef name, flags, cond
|
|
75 .rad50 /.'name/
|
|
76 .byte flags+0, 0
|
|
77 .if df cond
|
|
78 .globl opcerr
|
|
79 .word opcerr
|
|
80 .iff
|
|
81 .globl name
|
|
82 .word name
|
|
83 .endc
|
|
84 .endm
|
|
85
|
|
86 000134 dirdef name
|
|
1 000134 130461 051010 .rad50 /.name/
|
|
2 000140 000 000 .byte +0, 0
|
|
3 .if df
|
|
4 .globl opcerr
|
|
5 .word opcerr
|
|
6 .iff
|
|
7 .globl name
|
|
8 000142 000000G .word name
|
|
9 .endc
|
|
87
|
|
test-prec.mac:88: ***ERROR Invalid expression in .WORD
|
|
88 .word (
|
|
test-prec.mac:89: ***ERROR Invalid expression in .WORD
|
|
89 (
|
|
90
|
|
test-prec.mac:91: ***ERROR Invalid expression in .WORD
|
|
91 .word _,$
|
|
test-prec.mac:92: ***ERROR Invalid expression in .WORD
|
|
92 _
|
|
93 000144 000000G $
|
|
test-prec.mac:94: ***ERROR Invalid expression in .WORD
|
|
94 .word /
|
|
test-prec.mac:95: ***ERROR Invalid expression in .WORD
|
|
95 /
|
|
test-prec.mac:96: ***ERROR Invalid expression in .WORD
|
|
96 .word ^px
|
|
test-prec.mac:97: ***ERROR Invalid expression in .WORD
|
|
97 ^px
|
|
test-prec.mac:98: ***ERROR Invalid expression in .WORD
|
|
98 .word ^px / 256
|
|
test-prec.mac:99: ***ERROR Invalid expression in .WORD
|
|
99 ^px / 256
|
|
100
|
|
101 000146 000001 000002 000003 1,2,3
|
|
102 000154 000000G 000000G 000000G .1,.2,.3
|
|
102
|
|
|
|
|
|
Symbol table
|
|
|
|
$ = ****** GX .1 = ****** GX .3 = ****** GX FIVE = 000005
|
|
. ******R 001 .2 = ****** GX A 000030R 001 NAME = ****** G
|
|
|
|
|
|
Program sections:
|
|
|
|
. ABS. 000000 000 (RW,I,GBL,ABS,OVR,NOSAV)
|
|
000162 001 (RW,I,LCL,REL,CON,NOSAV)
|