mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-13 15:27:18 +00:00
- Negative shift values are right-shift - Optimize shift of 0 or more than 15 - Allow shifting symbols by complex relocation
104 lines
2.3 KiB
Plaintext
104 lines
2.3 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
|
|
five = 5
|
|
a: .word 123 _ 3 ; 001230
|
|
.word five _ 6 ; 000500
|
|
.word 101_five ; 004040
|
|
.word 177400 _ -8. ; 000377
|
|
.word a _ 3 ; Complex relocation
|
|
|
|
.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
|