mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-14 15:45:23 +00:00
The comment "eat first char of illegal label, else endless loop on implied .WORD" was no longer true. It did reveal some other small gotchas, which are corrected now as well.
98 lines
2.2 KiB
Plaintext
98 lines
2.2 KiB
Plaintext
;;;;;
|
|
;
|
|
; Test operator precedencce
|
|
; or rather the lack thereof
|
|
;
|
|
.word 1 + 2 + 3 ; 6
|
|
.word 1 + 2 * 3 ; 3*3 = 11
|
|
.word 1 & 2 ! 4 ; 0 ! 4 = 4
|
|
.word 1 ! 2 & 4 ; 3 & 4 = 0
|
|
.word 1 ! 2 & 7 ; 3 & 7 = 3
|
|
.word 1+1 ! 2+3 ; 2!2+3 = 2+3 = 5
|
|
|
|
;;;;;
|
|
;
|
|
; Test all operators at least once
|
|
;
|
|
.word 3 + 4 ; 000007
|
|
.word 4 - 3 ; 000001
|
|
.word 3 * 4 ; 000014
|
|
.word 12. / 4 ; 000003
|
|
.word 123 & 771 ; 000121
|
|
.word 123121 ! 322 ; 123323
|
|
|
|
.word - 377 ; 177401
|
|
.word + 377 ; 000377
|
|
|
|
.word ^C 377 ; 177400
|
|
.word ^c 377 ; 177400
|
|
.word ^B 0101010101010101 ; 052525
|
|
.word ^b 1010101010101010 ; 125252
|
|
.word ^d 100 ; 000144
|
|
.word 100. ; 000144
|
|
.word ^x 100 ; 000400 hexadecimal is an extension
|
|
.word ^rRAD ; 070254 up to 3 characters; no leading spaces
|
|
.word ^rA ; 003100 up to 3 characters
|
|
.word ^r A ; 000050 up to 3 characters
|
|
.word ^r A ; 000001 up to 3 characters
|
|
.word ^r AA ; 000051
|
|
.word ^rA A ; 003101
|
|
.word ^rAA ; 003150
|
|
.word ^r^/AAA/ ; bracketed strings are an extension
|
|
.word ^r<RAD> ; bracketed strings are an extension
|
|
.word ^r< AD> ; bracketed strings are an extension
|
|
.word ^r< D> ; bracketed strings are an extension
|
|
.word ^r<R D> ; bracketed strings are an extension
|
|
.word ^r<RA > ; bracketed strings are an extension
|
|
.word ^R50. ; 157614 there is no whitespace in between.
|
|
.word ^f 1.5 ; 040300
|
|
|
|
;;;;;
|
|
;
|
|
; Test bracketing
|
|
;
|
|
.word 1 + < 2 * 3 > ; 1 + 6 = 7
|
|
.word 1 + ^! 2 * 3 ! ; 1 + 6 = 7
|
|
.word 1 + ^/ 2 * 3 / ; 1 + 6 = 7
|
|
.word 1 + ^$ 2 * 3 $ ; 1 + 6 = 7
|
|
.word 1 + ^* 2 * 3 * ; Invalid expression
|
|
|
|
;;;;;
|
|
;
|
|
; There was an obscure bug in parse_expr(), used to evaluate 'if df',
|
|
; where it could skip past the end of the line marker.
|
|
;
|
|
; If this happened inside an expanded macro, then after that was the
|
|
; next line...
|
|
; In other cases it might be worse.
|
|
;
|
|
.macro dirdef name, flags, cond
|
|
.rad50 /.'name/
|
|
.byte flags+0, 0
|
|
.if df cond
|
|
.globl opcerr
|
|
.word opcerr
|
|
.iff
|
|
.globl name
|
|
.word name
|
|
.endc
|
|
.endm
|
|
|
|
dirdef name
|
|
|
|
.word (
|
|
(
|
|
|
|
.word _,$
|
|
_
|
|
$
|
|
.word /
|
|
/
|
|
.word ^px
|
|
^px
|
|
.word ^px / 256
|
|
^px / 256
|
|
|
|
1,2,3
|
|
.1,.2,.3
|