diff options
Diffstat (limited to 'projects/12/ScreenTest/Screen.vm')
-rw-r--r-- | projects/12/ScreenTest/Screen.vm | 407 |
1 files changed, 407 insertions, 0 deletions
diff --git a/projects/12/ScreenTest/Screen.vm b/projects/12/ScreenTest/Screen.vm new file mode 100644 index 0000000..8468225 --- /dev/null +++ b/projects/12/ScreenTest/Screen.vm @@ -0,0 +1,407 @@ +function Screen.init 2 +push constant 1 +pop local 1 +push constant 0 +pop local 0 +push constant 16 +call Array.new 1 +pop static 0 +label WHILE_EXP0 +push local 0 +push constant 16 +lt +not +if-goto WHILE_END0 +push local 0 +push static 0 +add +push local 1 +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +push local 1 +push local 1 +add +pop local 1 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 16384 +pop static 1 +push constant 0 +not +pop static 2 +push constant 0 +return +function Screen.clearScreen 1 +push static 2 +pop local 0 +push constant 0 +pop static 2 +push constant 0 +push constant 0 +push constant 511 +push constant 255 +call Screen.drawRectangle 4 +pop temp 0 +push local 0 +pop static 2 +push constant 0 +return +function Screen.setColor 0 +push argument 0 +pop static 2 +push constant 0 +return +function Screen.drawPixel 2 +push argument 0 +push constant 0 +lt +push argument 1 +push constant 0 +lt +or +push argument 0 +push constant 511 +gt +or +push argument 1 +push constant 255 +gt +or +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 0 +return +label IF_FALSE0 +push argument 0 +push constant 16 +call Math.divide 2 +pop local 1 +push constant 32 +push argument 1 +call Math.multiply 2 +push local 1 +add +pop local 0 +push static 2 +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push local 0 +push static 1 +add +push local 0 +push static 1 +add +pop pointer 1 +push that 0 +push argument 0 +push local 1 +push constant 16 +call Math.multiply 2 +sub +push static 0 +add +pop pointer 1 +push that 0 +or +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +goto IF_END1 +label IF_FALSE1 +push local 0 +push static 1 +add +push local 0 +push static 1 +add +pop pointer 1 +push that 0 +push argument 0 +push local 1 +push constant 16 +call Math.multiply 2 +sub +push static 0 +add +pop pointer 1 +push that 0 +push constant 1 +add +neg +and +pop temp 0 +pop pointer 1 +push temp 0 +pop that 0 +label IF_END1 +push constant 0 +return +function Screen.drawLine 7 +push argument 0 +pop local 2 +push argument 1 +pop local 3 +push local 2 +push local 3 +call Screen.drawPixel 2 +pop temp 0 +push argument 0 +push argument 2 +eq +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push argument 1 +push argument 3 +eq +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push constant 0 +return +goto IF_END1 +label IF_FALSE1 +push constant 1 +pop local 6 +label IF_END1 +goto IF_END0 +label IF_FALSE0 +push argument 1 +push argument 3 +eq +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push constant 1 +neg +pop local 6 +goto IF_END2 +label IF_FALSE2 +push constant 0 +pop local 6 +label IF_END2 +label IF_END0 +push argument 2 +push argument 0 +sub +pop local 0 +push argument 3 +push argument 1 +sub +pop local 1 +push local 0 +call Math.sign 1 +pop local 4 +push local 1 +call Math.sign 1 +pop local 5 +push local 0 +call Math.abs 1 +pop local 0 +push local 1 +call Math.abs 1 +pop local 1 +label WHILE_EXP0 +push local 2 +push argument 2 +eq +push local 3 +push argument 3 +eq +and +not +not +if-goto WHILE_END0 +push local 6 +push constant 0 +lt +if-goto IF_TRUE3 +goto IF_FALSE3 +label IF_TRUE3 +push local 2 +push local 4 +add +pop local 2 +push local 6 +push local 1 +add +pop local 6 +goto IF_END3 +label IF_FALSE3 +push local 3 +push local 5 +add +pop local 3 +push local 6 +push local 0 +sub +pop local 6 +label IF_END3 +push local 2 +push local 3 +call Screen.drawPixel 2 +pop temp 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function Screen.drawRectangle 1 +push argument 0 +push argument 2 +gt +push argument 1 +push argument 3 +gt +or +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 0 +return +label IF_FALSE0 +push argument 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push argument 2 +gt +not +not +if-goto WHILE_END0 +push local 0 +push argument 1 +push local 0 +push argument 3 +call Screen.drawLine 4 +pop temp 0 +push local 0 +push constant 1 +add +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return +function Screen.drawCircle 3 +push argument 2 +push constant 181 +gt +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 27 +call String.new 1 +push constant 100 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 119 +call String.appendChar 2 +push constant 67 +call String.appendChar 2 +push constant 105 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 99 +call String.appendChar 2 +push constant 108 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 58 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 100 +call String.appendChar 2 +push constant 105 +call String.appendChar 2 +push constant 117 +call String.appendChar 2 +push constant 115 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 116 +call String.appendChar 2 +push constant 111 +call String.appendChar 2 +push constant 111 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 98 +call String.appendChar 2 +push constant 105 +call String.appendChar 2 +push constant 103 +call String.appendChar 2 +push constant 33 +call String.appendChar 2 +call String.println 1 +pop temp 0 +push constant 2 +call Sys.error 1 +pop temp 0 +push constant 0 +return +label IF_FALSE0 +push argument 2 +neg +pop local 1 +push argument 2 +push argument 2 +call Math.multiply 2 +pop local 2 +label WHILE_EXP0 +push local 1 +push argument 2 +gt +not +not +if-goto WHILE_END0 +push local 2 +push local 1 +push local 1 +call Math.multiply 2 +sub +call Math.sqrt 1 +pop local 0 +push argument 0 +push local 0 +sub +push argument 1 +push local 1 +add +push argument 0 +push local 0 +add +push argument 1 +push local 1 +add +call Screen.drawLine 4 +pop temp 0 +push local 1 +push constant 1 +add +pop local 1 +goto WHILE_EXP0 +label WHILE_END0 +push constant 0 +return |