diff options
Diffstat (limited to 'projects/12/KeyboardTest/Keyboard.vm')
-rw-r--r-- | projects/12/KeyboardTest/Keyboard.vm | 310 |
1 files changed, 310 insertions, 0 deletions
diff --git a/projects/12/KeyboardTest/Keyboard.vm b/projects/12/KeyboardTest/Keyboard.vm new file mode 100644 index 0000000..bebd916 --- /dev/null +++ b/projects/12/KeyboardTest/Keyboard.vm @@ -0,0 +1,310 @@ +function Keyboard.init 0 +push constant 0 +return +function Keyboard.keyPressed 0 +push constant 24576 +call Memory.peek 1 +return +function Keyboard.readChar 2 +push constant 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 0 +eq +not +if-goto WHILE_END0 +push constant 24576 +call Memory.peek 1 +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push local 0 +pop local 1 +label WHILE_EXP1 +push local 1 +push local 0 +eq +not +if-goto WHILE_END1 +push constant 24576 +call Memory.peek 1 +pop local 1 +goto WHILE_EXP1 +label WHILE_END1 +push local 0 +push constant 31 +gt +push local 0 +push constant 127 +lt +and +push local 0 +push constant 128 +eq +or +push local 0 +push constant 129 +eq +or +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push local 0 +call Output.printChar 1 +pop temp 0 +label IF_FALSE0 +push local 0 +return +function Keyboard.readLine 2 +push constant 140 +call String.new 1 +pop local 1 +push argument 0 +call Output.printString 1 +pop temp 0 +call Keyboard.readChar 0 +pop local 0 +label WHILE_EXP0 +push local 0 +push constant 128 +eq +not +not +if-goto WHILE_END0 +push local 0 +push constant 129 +eq +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push local 1 +call String.length 1 +push constant 0 +gt +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push local 1 +call String.eraseLastChar 1 +pop temp 0 +label IF_FALSE1 +goto IF_END0 +label IF_FALSE0 +push local 1 +push local 0 +call String.appendChar 2 +pop temp 0 +label IF_END0 +call Keyboard.readChar 0 +pop local 0 +goto WHILE_EXP0 +label WHILE_END0 +push local 1 +return +function Keyboard.readInt 6 +push argument 0 +call Output.printString 1 +pop temp 0 +push constant 0 +pop local 0 +push constant 0 +pop local 4 +push constant 0 +call String.new 1 +call Keyboard.readLine 1 +pop local 3 +push constant 0 +pop local 1 +push local 3 +push constant 0 +call String.charAt 2 +push constant 45 +eq +if-goto IF_TRUE0 +goto IF_FALSE0 +label IF_TRUE0 +push constant 1 +pop local 1 +push constant 0 +not +pop local 4 +label IF_FALSE0 +push local 3 +push local 1 +call String.charAt 2 +pop local 2 +push local 2 +push constant 48 +lt +push local 2 +push constant 57 +gt +or +if-goto IF_TRUE1 +goto IF_FALSE1 +label IF_TRUE1 +push constant 3 +call Sys.error 1 +pop temp 0 +push constant 47 +call String.new 1 +push constant 75 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 121 +call String.appendChar 2 +push constant 98 +call String.appendChar 2 +push constant 111 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 100 +call String.appendChar 2 +push constant 46 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 100 +call String.appendChar 2 +push constant 73 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 116 +call String.appendChar 2 +push constant 58 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 116 +call String.appendChar 2 +push constant 104 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 105 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 112 +call String.appendChar 2 +push constant 117 +call String.appendChar 2 +push constant 116 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 100 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 116 +call String.appendChar 2 +push constant 97 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 105 +call String.appendChar 2 +push constant 115 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 111 +call String.appendChar 2 +push constant 116 +call String.appendChar 2 +push constant 32 +call String.appendChar 2 +push constant 110 +call String.appendChar 2 +push constant 117 +call String.appendChar 2 +push constant 109 +call String.appendChar 2 +push constant 98 +call String.appendChar 2 +push constant 101 +call String.appendChar 2 +push constant 114 +call String.appendChar 2 +push constant 33 +call String.appendChar 2 +call Output.printString 1 +pop temp 0 +label IF_FALSE1 +push constant 0 +pop local 5 +label WHILE_EXP0 +push local 5 +not +not +if-goto WHILE_END0 +push local 3 +push local 1 +call String.charAt 2 +push constant 47 +gt +push local 3 +push local 1 +call String.charAt 2 +push constant 58 +lt +and +if-goto IF_TRUE2 +goto IF_FALSE2 +label IF_TRUE2 +push local 0 +push constant 10 +call Math.multiply 2 +push local 3 +push local 1 +call String.charAt 2 +push constant 48 +sub +add +pop local 0 +goto IF_END2 +label IF_FALSE2 +push constant 0 +not +pop local 5 +label IF_END2 +push local 1 +push constant 1 +add +pop local 1 +push local 5 +push local 1 +push constant 1 +add +push local 3 +call String.length 1 +gt +or +pop local 5 +goto WHILE_EXP0 +label WHILE_END0 +push local 4 +if-goto IF_TRUE3 +goto IF_FALSE3 +label IF_TRUE3 +push local 0 +neg +pop local 0 +label IF_FALSE3 +push local 0 +return |