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 ; 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 ; bracketed strings are an extension 51 000112 070250 .word ^r ; 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)