prog8/testsource/conditionals.ill
Irmen de Jong 3c70790fbf ply
2018-01-04 04:53:15 +01:00

145 lines
3.5 KiB
Plaintext

%output prg,basic
%import c64lib
~ main {
var .word value
memory .word memvalue = $8000
start:
A = 100
; conditional if, without conditional expression. needs explicit if status.
if_not goto label
if_true goto label
if_zero goto label
if_cc goto label
if_lt goto label
if_le goto label
if_ge goto label
if_gt goto label
if_cc goto value
;if_cc goto memvalue
if_cc goto #value
;if_cc goto #memvalue
if_cc goto [value]
;if_cc goto [memvalue]
;if_cc goto $c000
;if_cc goto [$c000.word]
label:
; conditional if with a single 'truth' value (register)
if_true A goto label2
if_not A goto label2
if_zero A goto label2
if A goto label2
if_true X goto label2
if_not X goto label2
if_zero X goto label2
if X goto label2
if_true Y goto label2
if_not Y goto label2
if_zero Y goto label2
if Y goto label2
if_true XY goto label2
if_not XY goto label2
if_zero XY goto label2
if XY goto label2
label2:
; conditional if with a single 'truth' value (variable)
if_true value goto label3
if_not value goto label3
if_zero value goto label3
if value goto label3
if_true memvalue goto label3
if_not memvalue goto label3
if_zero memvalue goto label3
if memvalue goto label3
label3:
; conditional if with a single 'truth' value (indirect address)
if_true [$c000] goto label4
if_not [$c000] goto label4
if_zero [$c000] goto label4
if [$c000] goto label4
if_true [XY] goto label4
if_true [AY] goto label4
if_true [AX] goto label4
if_true [X] goto label4
if_true [A] goto label4
if_true [Y] goto label4
label4:
return
}
; @todo temporarily disabled until comparison operators are properly implemented:
~ {
var .text name = "?"*80
var bytevar = 22
var bytevar2 = 23
var .word wordvar = 22345
start:
c64.init_system()
A = 0
printloop:
c64scr.print_byte_decimal(A)
c64.CHROUT('\n')
A++
if A <20 goto printloop
return
label1:
if_true A==123 goto label1
if_true A == 123 goto label1
if_true A!=0 goto label1
if_not X!=0 goto label1
if_true A <= 1 goto label1
if_true A==1 goto label1
if_true A!=1 goto label1
if_not X < 1 goto label1
if_not Y>1 goto label1
if_not X!=1 goto label1
if_true 22<=Y goto label1
if_true A<=22 goto label1
if_true A<X goto label1
if_true X>Y goto label1
if_true X>A goto label1
if A<=22 goto label1
if A <= 22 goto label1
if_zero A goto label1
if_zero X goto label1
if Y goto label1
if_true XY goto label1
if_not XY goto label1
if A goto label1
if_not goto label1
if_true bytevar<=A goto label2
if_true bytevar<=22 goto label2
if bytevar<=22 goto label2
if bytevar<=22 goto label2
if bytevar goto label2
if bytevar>bytevar2 goto label2
if_zero bytevar goto label2
if_not wordvar goto label2
if_zero wordvar goto label2
if_true wordvar goto label2
label2:
return
}