Files
QkoSad 7894b48931 .
2025-07-16 13:00:37 +03:00

657 lines
7.7 KiB
Plaintext
Executable File

function Screen.init 1
push constant 16
call Array.new 1
pop static 1
push static 1
push constant 0
push constant 1
pop temp 1
add
pop pointer 1
push temp 1
pop that 0
label L0
push local 0
push constant 15
lt
not
if-goto L1
push local 0
push constant 1
add
pop local 0
push static 1
push local 0
push static 1
push local 0
push constant 1
sub
add
pop pointer 1
push that 0
push static 1
push local 0
push constant 1
sub
add
pop pointer 1
push that 0
add
pop temp 1
add
pop pointer 1
push temp 1
pop that 0
goto L0
label L1
push constant 1
neg
pop static 2
push constant 0
return
function Screen.clearScreen 1
push constant 16384
pop local 0
label L2
push local 0
push constant 24575
lt
not
if-goto L3
push static 0
push local 0
push constant 0
pop temp 1
add
pop pointer 1
push temp 1
pop that 0
push local 0
push constant 1
add
pop local 0
goto L2
label L3
push constant 0
return
function Screen.setColor 0
push argument 0
pop static 2
push constant 0
return
function Screen.drawPixel 4
push argument 0
push constant 511
gt
push argument 0
push constant 0
lt
or
push argument 1
push constant 255
gt
or
push argument 1
push constant 0
lt
or
not
if-goto L4
push constant 7
call Sys.error 1
pop temp 0
goto L5
label L4
label L5
push argument 0
push constant 16
call Math.divide 2
pop local 3
push constant 32
push argument 1
call Math.multiply 2
push local 3
add
push constant 16384
add
pop local 1
push static 0
push local 1
add
pop pointer 1
push that 0
pop local 0
push argument 0
push local 3
push constant 16
call Math.multiply 2
sub
pop local 2
push static 2
not
if-goto L6
push static 0
push local 1
push static 1
push local 2
add
pop pointer 1
push that 0
push local 0
or
pop temp 1
add
pop pointer 1
push temp 1
pop that 0
goto L7
label L6
push static 0
push local 1
push static 1
push local 2
add
pop pointer 1
push that 0
not
push local 0
and
pop temp 1
add
pop pointer 1
push temp 1
pop that 0
label L7
push constant 0
return
function Screen.drawLine 5
push argument 0
push constant 0
lt
push argument 2
push constant 511
gt
or
push argument 1
push constant 0
lt
or
push argument 3
push constant 255
gt
or
not
if-goto L8
push constant 8
call Sys.error 1
pop temp 0
goto L9
label L8
label L9
push argument 2
push argument 0
sub
pop local 1
push argument 3
push argument 1
sub
pop local 2
push local 1
push constant 0
eq
not
if-goto L10
push local 2
push constant 0
gt
not
if-goto L11
label L12
push local 4
push local 2
gt
not
not
if-goto L13
push argument 0
push argument 1
push local 4
add
call Screen.drawPixel 2
pop temp 0
push local 4
push constant 1
add
pop local 4
goto L12
label L13
push constant 0
return
goto L14
label L11
label L15
push local 4
push local 2
lt
not
not
if-goto L16
push argument 0
push argument 1
push local 4
add
call Screen.drawPixel 2
pop temp 0
push local 4
push constant 1
sub
pop local 4
goto L15
label L16
push constant 0
return
label L14
goto L17
label L10
label L17
push local 2
push constant 0
eq
not
if-goto L18
push local 1
push constant 0
gt
not
if-goto L19
label L20
push local 3
push local 1
gt
not
not
if-goto L21
push argument 0
push local 3
add
push argument 1
call Screen.drawPixel 2
pop temp 0
push local 3
push constant 1
add
pop local 3
goto L20
label L21
push constant 0
return
goto L22
label L19
label L23
push local 3
push local 1
lt
not
not
if-goto L24
push argument 0
push local 3
add
push argument 1
call Screen.drawPixel 2
pop temp 0
push local 3
push constant 1
sub
pop local 3
goto L23
label L24
push constant 0
return
label L22
goto L25
label L18
label L25
push local 1
push constant 0
lt
not
if-goto L26
push local 2
push constant 0
lt
not
if-goto L27
label L28
push local 3
push local 1
lt
not
push local 4
push local 2
lt
not
and
not
if-goto L29
push argument 0
push local 3
add
push argument 1
push local 4
add
call Screen.drawPixel 2
pop temp 0
push local 0
push constant 0
lt
not
if-goto L30
push local 3
push constant 1
sub
pop local 3
push local 0
push local 2
sub
pop local 0
goto L31
label L30
push local 4
push constant 1
sub
pop local 4
push local 0
push local 1
add
pop local 0
label L31
goto L28
label L29
goto L32
label L27
label L33
push local 3
push local 1
lt
not
push local 4
push local 2
gt
not
and
not
if-goto L34
push argument 0
push local 3
add
push argument 1
push local 4
add
call Screen.drawPixel 2
pop temp 0
push local 0
push constant 0
lt
not
if-goto L35
push local 3
push constant 1
sub
pop local 3
push local 0
push local 2
add
pop local 0
goto L36
label L35
push local 4
push constant 1
add
pop local 4
push local 0
push local 1
add
pop local 0
label L36
goto L33
label L34
label L32
goto L37
label L26
push local 2
push constant 0
lt
not
if-goto L38
label L39
push local 3
push local 1
gt
not
push local 4
push local 2
lt
not
and
not
if-goto L40
push argument 0
push local 3
add
push argument 1
push local 4
add
call Screen.drawPixel 2
pop temp 0
push local 0
push constant 0
lt
not
if-goto L41
push local 3
push constant 1
add
pop local 3
push local 0
push local 2
sub
pop local 0
goto L42
label L41
push local 4
push constant 1
sub
pop local 4
push local 0
push local 1
sub
pop local 0
label L42
goto L39
label L40
goto L43
label L38
label L44
push local 3
push local 1
gt
not
push local 4
push local 2
gt
not
and
not
if-goto L45
push argument 0
push local 3
add
push argument 1
push local 4
add
call Screen.drawPixel 2
pop temp 0
push local 0
push constant 0
lt
not
if-goto L46
push local 3
push constant 1
add
pop local 3
push local 0
push local 2
add
pop local 0
goto L47
label L46
push local 4
push constant 1
add
pop local 4
push local 0
push local 1
sub
pop local 0
label L47
goto L44
label L45
label L43
label L37
push constant 0
return
function Screen.drawRectangle 2
push argument 0
push argument 2
gt
not
if-goto L48
push argument 0
pop local 1
push argument 2
pop argument 0
push local 1
pop argument 2
goto L49
label L48
label L49
push argument 1
push argument 3
gt
not
if-goto L50
push argument 1
pop local 1
push argument 3
pop argument 1
push local 1
pop argument 3
goto L51
label L50
label L51
push argument 0
push constant 0
lt
push argument 2
push constant 511
gt
or
push argument 1
push constant 0
lt
or
push argument 3
push constant 255
gt
or
not
if-goto L52
push constant 8
call Sys.error 1
pop temp 0
goto L53
label L52
label L53
push argument 3
push argument 1
sub
pop local 1
label L54
push local 0
push local 1
lt
not
if-goto L55
push argument 0
push argument 1
push local 0
add
push argument 2
push argument 1
push local 0
add
call Screen.drawLine 4
pop temp 0
push local 0
push constant 1
add
pop local 0
goto L54
label L55
push constant 0
return
function Screen.drawCircle 3
push argument 2
push constant 181
gt
not
if-goto L56
push constant 7
call Sys.error 1
pop temp 0
goto L57
label L56
label L57
push argument 2
neg
pop local 0
label L58
push local 0
push argument 2
lt
not
if-goto L59
push argument 2
push argument 2
call Math.multiply 2
push local 0
push local 0
call Math.multiply 2
sub
call Math.sqrt 1
pop local 2
push argument 0
push local 2
sub
push argument 1
push local 0
add
push argument 0
push local 2
add
push argument 1
push local 0
add
call Screen.drawLine 4
pop temp 0
push local 0
push constant 1
add
pop local 0
goto L58
label L59
push constant 0
return