hack-emulator-js
Version:
a hack emulator for the nand2tetris project
7,803 lines (7,801 loc) • 171 kB
Plain Text
// This file is part of www.nand2tetris.org
// and the book "The Elements of Computing Systems"
// by Nisan and Schocken, MIT Press.
// File name: projects/06/pong/Pong.asm
// The Pong game program was originally written in the high-level Jack language.
// The Jack code was then translated by the Jack compiler into VM code.
// The VM code was then translated by the VM translator into the Hack
// assembly code shown here.
@256
D=A
@SP
M=D
@133
0;JMP
@R15
M=D
@SP
AM=M-1
D=M
A=A-1
D=M-D
M=0
@END_EQ
D;JNE
@SP
A=M-1
M=-1
(END_EQ)
@R15
A=M
0;JMP
@R15
M=D
@SP
AM=M-1
D=M
A=A-1
D=M-D
M=0
@END_GT
D;JLE
@SP
A=M-1
M=-1
(END_GT)
@R15
A=M
0;JMP
@R15
M=D
@SP
AM=M-1
D=M
A=A-1
D=M-D
M=0
@END_LT
D;JGE
@SP
A=M-1
M=-1
(END_LT)
@R15
A=M
0;JMP
@5
D=A
@LCL
A=M-D
D=M
@R13
M=D
@SP
AM=M-1
D=M
@ARG
A=M
M=D
D=A
@SP
M=D+1
@LCL
D=M
@R14
AM=D-1
D=M
@THAT
M=D
@R14
AM=M-1
D=M
@THIS
M=D
@R14
AM=M-1
D=M
@ARG
M=D
@R14
AM=M-1
D=M
@LCL
M=D
@R13
A=M
0;JMP
@SP
A=M
M=D
@LCL
D=M
@SP
AM=M+1
M=D
@ARG
D=M
@SP
AM=M+1
M=D
@THIS
D=M
@SP
AM=M+1
M=D
@THAT
D=M
@SP
AM=M+1
M=D
@4
D=A
@R13
D=D+M
@SP
D=M-D
@ARG
M=D
@SP
MD=M+1
@LCL
M=D
@R14
A=M
0;JMP
@0
D=A
@R13
M=D
@sys.init
D=A
@R14
M=D
@RET_ADDRESS_CALL0
D=A
@95
0;JMP
(RET_ADDRESS_CALL0)
(ball.new)
@15
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.alloc
D=A
@R14
M=D
@RET_ADDRESS_CALL1
D=A
@95
0;JMP
(RET_ADDRESS_CALL1)
@SP
AM=M-1
D=M
@THIS
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
@ARG
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@10
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@ARG
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@6
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@THIS
D=M
@11
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@ARG
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@12
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@ARG
D=M
@5
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@6
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@THIS
D=M
@13
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@SP
M=M+1
A=M-1
M=0
@THIS
D=M
@14
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.show
D=A
@R14
M=D
@RET_ADDRESS_CALL2
D=A
@95
0;JMP
(RET_ADDRESS_CALL2)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(ball.dispose)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.dealloc
D=A
@R14
M=D
@RET_ADDRESS_CALL3
D=A
@95
0;JMP
(RET_ADDRESS_CALL3)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ball.show)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@SP
M=M+1
A=M-1
M=0
@SP
A=M-1
M=!M
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL4
D=A
@95
0;JMP
(RET_ADDRESS_CALL4)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.draw
D=A
@R14
M=D
@RET_ADDRESS_CALL5
D=A
@95
0;JMP
(RET_ADDRESS_CALL5)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ball.hide)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@SP
M=M+1
A=M-1
M=0
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL6
D=A
@95
0;JMP
(RET_ADDRESS_CALL6)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.draw
D=A
@R14
M=D
@RET_ADDRESS_CALL7
D=A
@95
0;JMP
(RET_ADDRESS_CALL7)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ball.draw)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@5
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@5
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL8
D=A
@95
0;JMP
(RET_ADDRESS_CALL8)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ball.getleft)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(ball.getright)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@5
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@54
0;JMP
(ball.setdestination)
@3
D=A
(LOOP_ball.setdestination)
D=D-1
@SP
AM=M+1
A=A-1
M=0
@LOOP_ball.setdestination
D;JGT
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
M=D
@ARG
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@math.abs
D=A
@R14
M=D
@RET_ADDRESS_CALL9
D=A
@95
0;JMP
(RET_ADDRESS_CALL9)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@math.abs
D=A
@R14
M=D
@RET_ADDRESS_CALL10
D=A
@95
0;JMP
(RET_ADDRESS_CALL10)
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT0
D=A
@38
0;JMP
(RET_ADDRESS_LT0)
@THIS
D=M
@7
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
D=M
@7
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.setdestination$if_true0
D;JNE
@ball.setdestination$if_false0
0;JMP
(ball.setdestination$if_true0)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT1
D=A
@38
0;JMP
(RET_ADDRESS_LT1)
@THIS
D=M
@8
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT2
D=A
@38
0;JMP
(RET_ADDRESS_LT2)
@THIS
D=M
@9
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@ball.setdestination$if_end0
0;JMP
(ball.setdestination$if_false0)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT3
D=A
@38
0;JMP
(RET_ADDRESS_LT3)
@THIS
D=M
@8
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT4
D=A
@38
0;JMP
(RET_ADDRESS_LT4)
@THIS
D=M
@9
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
(ball.setdestination$if_end0)
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL11
D=A
@95
0;JMP
(RET_ADDRESS_CALL11)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL12
D=A
@95
0;JMP
(RET_ADDRESS_CALL12)
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
A=A+1
M=D
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL13
D=A
@95
0;JMP
(RET_ADDRESS_CALL13)
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
A=A+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ball.move)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.hide
D=A
@R14
M=D
@RET_ADDRESS_CALL14
D=A
@95
0;JMP
(RET_ADDRESS_CALL14)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT5
D=A
@38
0;JMP
(RET_ADDRESS_LT5)
@SP
AM=M-1
D=M
@ball.move$if_true0
D;JNE
@ball.move$if_false0
0;JMP
(ball.move$if_true0)
@THIS
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@5
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@ball.move$if_end0
0;JMP
(ball.move$if_false0)
@THIS
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@6
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@THIS
D=M
@9
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.move$if_true1
D;JNE
@ball.move$if_false1
0;JMP
(ball.move$if_true1)
@THIS
D=M
@7
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.move$if_true2
D;JNE
@ball.move$if_false2
0;JMP
(ball.move$if_true2)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@ball.move$if_end2
0;JMP
(ball.move$if_false2)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
(ball.move$if_end2)
@ball.move$if_end1
0;JMP
(ball.move$if_false1)
@THIS
D=M
@7
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.move$if_true3
D;JNE
@ball.move$if_false3
0;JMP
(ball.move$if_true3)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@ball.move$if_end3
0;JMP
(ball.move$if_false3)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
(ball.move$if_end3)
(ball.move$if_end1)
(ball.move$if_end0)
@THIS
D=M
@8
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.move$if_true4
D;JNE
@ball.move$if_false4
0;JMP
(ball.move$if_true4)
@THIS
D=M
@7
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.move$if_true5
D;JNE
@ball.move$if_false5
0;JMP
(ball.move$if_true5)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
@ball.move$if_end5
0;JMP
(ball.move$if_false5)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M
M=D
(ball.move$if_end5)
@ball.move$if_end4
0;JMP
(ball.move$if_false4)
@THIS
D=M
@7
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ball.move$if_true6
D;JNE
@ball.move$if_false6
0;JMP
(ball.move$if_true6)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
@ball.move$if_end6
0;JMP
(ball.move$if_false6)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
(ball.move$if_end6)
(ball.move$if_end4)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@10
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_GT0
D=A
@22
0;JMP
(RET_ADDRESS_GT0)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ball.move$if_true7
D;JNE
@ball.move$if_false7
0;JMP
(ball.move$if_true7)
@SP
M=M+1
A=M-1
M=1
@THIS
D=M
@14
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
D=M
@10
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
(ball.move$if_false7)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@11
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT6
D=A
@38
0;JMP
(RET_ADDRESS_LT6)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ball.move$if_true8
D;JNE
@ball.move$if_false8
0;JMP
(ball.move$if_true8)
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@14
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
D=M
@11
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
(ball.move$if_false8)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@12
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_GT1
D=A
@22
0;JMP
(RET_ADDRESS_GT1)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ball.move$if_true9
D;JNE
@ball.move$if_false9
0;JMP
(ball.move$if_true9)
@3
D=A
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@14
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
D=M
@12
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
(ball.move$if_false9)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@13
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT7
D=A
@38
0;JMP
(RET_ADDRESS_LT7)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ball.move$if_true10
D;JNE
@ball.move$if_false10
0;JMP
(ball.move$if_true10)
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@14
D=D+A
@R13
M=D
@SP
AM=M-1
D=M
@R13
A=M
M=D
@THIS
D=M
@13
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
(ball.move$if_false10)
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.show
D=A
@R14
M=D
@RET_ADDRESS_CALL15
D=A
@95
0;JMP
(RET_ADDRESS_CALL15)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@14
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(ball.bounce)
@5
D=A
(LOOP_ball.bounce)
D=D-1
@SP
AM=M+1
A=A-1
M=0
@LOOP_ball.bounce
D;JGT
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@10
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.divide
D=A
@R14
M=D
@RET_ADDRESS_CALL16
D=A
@95
0;JMP
(RET_ADDRESS_CALL16)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@10
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.divide
D=A
@R14
M=D
@RET_ADDRESS_CALL17
D=A
@95
0;JMP
(RET_ADDRESS_CALL17)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_EQ0
D=A
@6
0;JMP
(RET_ADDRESS_EQ0)
@SP
AM=M-1
D=M
@ball.bounce$if_true0
D;JNE
@ball.bounce$if_false0
0;JMP
(ball.bounce$if_true0)
@10
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@ball.bounce$if_end0
0;JMP
(ball.bounce$if_false0)
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT8
D=A
@38
0;JMP
(RET_ADDRESS_LT8)
@SP
A=M-1
M=!M
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@RET_ADDRESS_EQ1
D=A
@6
0;JMP
(RET_ADDRESS_EQ1)
@SP
AM=M-1
D=M
A=A-1
M=D&M
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT9
D=A
@38
0;JMP
(RET_ADDRESS_LT9)
@SP
AM=M-1
D=M
A=A-1
M=D|M
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
A=M-1
D=!M
M=D+1
@RET_ADDRESS_EQ2
D=A
@6
0;JMP
(RET_ADDRESS_EQ2)
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
AM=M-1
D=M
@ball.bounce$if_true1
D;JNE
@ball.bounce$if_false1
0;JMP
(ball.bounce$if_true1)
@20
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@ball.bounce$if_end1
0;JMP
(ball.bounce$if_false1)
@5
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
A=A+1
M=D
(ball.bounce$if_end1)
(ball.bounce$if_end0)
@THIS
D=M
@14
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@RET_ADDRESS_EQ3
D=A
@6
0;JMP
(RET_ADDRESS_EQ3)
@SP
AM=M-1
D=M
@ball.bounce$if_true2
D;JNE
@ball.bounce$if_false2
0;JMP
(ball.bounce$if_true2)
@506
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@50
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
D=!M
M=D+1
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL18
D=A
@95
0;JMP
(RET_ADDRESS_CALL18)
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.divide
D=A
@R14
M=D
@RET_ADDRESS_CALL19
D=A
@95
0;JMP
(RET_ADDRESS_CALL19)
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL20
D=A
@95
0;JMP
(RET_ADDRESS_CALL20)
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@ball.bounce$if_end2
0;JMP
(ball.bounce$if_false2)
@THIS
D=M
@14
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ4
D=A
@6
0;JMP
(RET_ADDRESS_EQ4)
@SP
AM=M-1
D=M
@ball.bounce$if_true3
D;JNE
@ball.bounce$if_false3
0;JMP
(ball.bounce$if_true3)
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@50
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL21
D=A
@95
0;JMP
(RET_ADDRESS_CALL21)
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.divide
D=A
@R14
M=D
@RET_ADDRESS_CALL22
D=A
@95
0;JMP
(RET_ADDRESS_CALL22)
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL23
D=A
@95
0;JMP
(RET_ADDRESS_CALL23)
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@ball.bounce$if_end3
0;JMP
(ball.bounce$if_false3)
@THIS
D=M
@14
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@3
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ5
D=A
@6
0;JMP
(RET_ADDRESS_EQ5)
@SP
AM=M-1
D=M
@ball.bounce$if_true4
D;JNE
@ball.bounce$if_false4
0;JMP
(ball.bounce$if_true4)
@250
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@25
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
D=!M
M=D+1
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL24
D=A
@95
0;JMP
(RET_ADDRESS_CALL24)
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.divide
D=A
@R14
M=D
@RET_ADDRESS_CALL25
D=A
@95
0;JMP
(RET_ADDRESS_CALL25)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL26
D=A
@95
0;JMP
(RET_ADDRESS_CALL26)
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@ball.bounce$if_end4
0;JMP
(ball.bounce$if_false4)
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@25
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL27
D=A
@95
0;JMP
(RET_ADDRESS_CALL27)
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.divide
D=A
@R14
M=D
@RET_ADDRESS_CALL28
D=A
@95
0;JMP
(RET_ADDRESS_CALL28)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@math.multiply
D=A
@R14
M=D
@RET_ADDRESS_CALL29
D=A
@95
0;JMP
(RET_ADDRESS_CALL29)
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M
M=D
(ball.bounce$if_end4)
(ball.bounce$if_end3)
(ball.bounce$if_end2)
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@3
D=A
@R13
M=D
@ball.setdestination
D=A
@R14
M=D
@RET_ADDRESS_CALL30
D=A
@95
0;JMP
(RET_ADDRESS_CALL30)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.new)
@5
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.alloc
D=A
@R14
M=D
@RET_ADDRESS_CALL31
D=A
@95
0;JMP
(RET_ADDRESS_CALL31)
@SP
AM=M-1
D=M
@THIS
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
@ARG
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
M=D
@ARG
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
M=D
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.show
D=A
@R14
M=D
@RET_ADDRESS_CALL32
D=A
@95
0;JMP
(RET_ADDRESS_CALL32)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(bat.dispose)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.dealloc
D=A
@R14
M=D
@RET_ADDRESS_CALL33
D=A
@95
0;JMP
(RET_ADDRESS_CALL33)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.show)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@SP
M=M+1
A=M-1
M=0
@SP
A=M-1
M=!M
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL34
D=A
@95
0;JMP
(RET_ADDRESS_CALL34)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.draw
D=A
@R14
M=D
@RET_ADDRESS_CALL35
D=A
@95
0;JMP
(RET_ADDRESS_CALL35)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.hide)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@SP
M=M+1
A=M-1
M=0
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL36
D=A
@95
0;JMP
(RET_ADDRESS_CALL36)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.draw
D=A
@R14
M=D
@RET_ADDRESS_CALL37
D=A
@95
0;JMP
(RET_ADDRESS_CALL37)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.draw)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL38
D=A
@95
0;JMP
(RET_ADDRESS_CALL38)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.setdirection)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.getleft)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(bat.getright)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@54
0;JMP
(bat.setwidth)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.hide
D=A
@R14
M=D
@RET_ADDRESS_CALL39
D=A
@95
0;JMP
(RET_ADDRESS_CALL39)
@SP
AM=M-1
D=M
@R5
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.show
D=A
@R14
M=D
@RET_ADDRESS_CALL40
D=A
@95
0;JMP
(RET_ADDRESS_CALL40)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(bat.move)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@RET_ADDRESS_EQ6
D=A
@6
0;JMP
(RET_ADDRESS_EQ6)
@SP
AM=M-1
D=M
@bat.move$if_true0
D;JNE
@bat.move$if_false0
0;JMP
(bat.move$if_true0)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT10
D=A
@38
0;JMP
(RET_ADDRESS_LT10)
@SP
AM=M-1
D=M
@bat.move$if_true1
D;JNE
@bat.move$if_false1
0;JMP
(bat.move$if_true1)
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@THIS
A=M
M=D
(bat.move$if_false1)
@SP
M=M+1
A=M-1
M=0
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL41
D=A
@95
0;JMP
(RET_ADDRESS_CALL41)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=D+M
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL42
D=A
@95
0;JMP
(RET_ADDRESS_CALL42)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@SP
A=M-1
M=!M
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL43
D=A
@95
0;JMP
(RET_ADDRESS_CALL43)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@3
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL44
D=A
@95
0;JMP
(RET_ADDRESS_CALL44)
@SP
AM=M-1
D=M
@R5
M=D
@bat.move$if_end0
0;JMP
(bat.move$if_false0)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@511
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_GT2
D=A
@22
0;JMP
(RET_ADDRESS_GT2)
@SP
AM=M-1
D=M
@bat.move$if_true2
D;JNE
@bat.move$if_false2
0;JMP
(bat.move$if_true2)
@511
D=A
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M
M=D
(bat.move$if_false2)
@SP
M=M+1
A=M-1
M=0
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL45
D=A
@95
0;JMP
(RET_ADDRESS_CALL45)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=M-D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL46
D=A
@95
0;JMP
(RET_ADDRESS_CALL46)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@SP
A=M-1
M=!M
@1
D=A
@R13
M=D
@screen.setcolor
D=A
@R14
M=D
@RET_ADDRESS_CALL47
D=A
@95
0;JMP
(RET_ADDRESS_CALL47)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@3
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL48
D=A
@95
0;JMP
(RET_ADDRESS_CALL48)
@SP
AM=M-1
D=M
@R5
M=D
(bat.move$if_end0)
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(main.main)
@SP
AM=M+1
A=A-1
M=0
@0
D=A
@R13
M=D
@ponggame.newinstance
D=A
@R14
M=D
@RET_ADDRESS_CALL49
D=A
@95
0;JMP
(RET_ADDRESS_CALL49)
@SP
AM=M-1
D=M
@R5
M=D
@0
D=A
@R13
M=D
@ponggame.getinstance
D=A
@R14
M=D
@RET_ADDRESS_CALL50
D=A
@95
0;JMP
(RET_ADDRESS_CALL50)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ponggame.run
D=A
@R14
M=D
@RET_ADDRESS_CALL51
D=A
@95
0;JMP
(RET_ADDRESS_CALL51)
@SP
AM=M-1
D=M
@R5
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ponggame.dispose
D=A
@R14
M=D
@RET_ADDRESS_CALL52
D=A
@95
0;JMP
(RET_ADDRESS_CALL52)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ponggame.new)
@7
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.alloc
D=A
@R14
M=D
@RET_ADDRESS_CALL53
D=A
@95
0;JMP
(RET_ADDRESS_CALL53)
@SP
AM=M-1
D=M
@THIS
M=D
@0
D=A
@R13
M=D
@screen.clearscreen
D=A
@R14
M=D
@RET_ADDRESS_CALL54
D=A
@95
0;JMP
(RET_ADDRESS_CALL54)
@SP
AM=M-1
D=M
@R5
M=D
@50
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
A=A+1
A=A+1
M=D
@230
D=A
@SP
AM=M+1
A=A-1
M=D
@229
D=A
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@6
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@7
D=A
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@R13
M=D
@bat.new
D=A
@R14
M=D
@RET_ADDRESS_CALL55
D=A
@95
0;JMP
(RET_ADDRESS_CALL55)
@SP
AM=M-1
D=M
@THIS
A=M
M=D
@253
D=A
@SP
AM=M+1
A=A-1
M=D
@222
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@511
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@229
D=A
@SP
AM=M+1
A=A-1
M=D
@6
D=A
@R13
M=D
@ball.new
D=A
@R14
M=D
@RET_ADDRESS_CALL56
D=A
@95
0;JMP
(RET_ADDRESS_CALL56)
@SP
AM=M-1
D=M
@THIS
A=M+1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@400
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@3
D=A
@R13
M=D
@ball.setdestination
D=A
@R14
M=D
@RET_ADDRESS_CALL57
D=A
@95
0;JMP
(RET_ADDRESS_CALL57)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@238
D=A
@SP
AM=M+1
A=A-1
M=D
@511
D=A
@SP
AM=M+1
A=A-1
M=D
@240
D=A
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@R13
M=D
@screen.drawrectangle
D=A
@R14
M=D
@RET_ADDRESS_CALL58
D=A
@95
0;JMP
(RET_ADDRESS_CALL58)
@SP
AM=M-1
D=M
@R5
M=D
@22
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@2
D=A
@R13
M=D
@output.movecursor
D=A
@R14
M=D
@RET_ADDRESS_CALL59
D=A
@95
0;JMP
(RET_ADDRESS_CALL59)
@SP
AM=M-1
D=M
@R5
M=D
@8
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@string.new
D=A
@R14
M=D
@RET_ADDRESS_CALL60
D=A
@95
0;JMP
(RET_ADDRESS_CALL60)
@83
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL61
D=A
@95
0;JMP
(RET_ADDRESS_CALL61)
@99
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL62
D=A
@95
0;JMP
(RET_ADDRESS_CALL62)
@111
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL63
D=A
@95
0;JMP
(RET_ADDRESS_CALL63)
@114
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL64
D=A
@95
0;JMP
(RET_ADDRESS_CALL64)
@101
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL65
D=A
@95
0;JMP
(RET_ADDRESS_CALL65)
@58
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL66
D=A
@95
0;JMP
(RET_ADDRESS_CALL66)
@32
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL67
D=A
@95
0;JMP
(RET_ADDRESS_CALL67)
@48
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL68
D=A
@95
0;JMP
(RET_ADDRESS_CALL68)
@1
D=A
@R13
M=D
@output.printstring
D=A
@R14
M=D
@RET_ADDRESS_CALL69
D=A
@95
0;JMP
(RET_ADDRESS_CALL69)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
A=A+1
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(ponggame.dispose)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.dispose
D=A
@R14
M=D
@RET_ADDRESS_CALL70
D=A
@95
0;JMP
(RET_ADDRESS_CALL70)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.dispose
D=A
@R14
M=D
@RET_ADDRESS_CALL71
D=A
@95
0;JMP
(RET_ADDRESS_CALL71)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.dealloc
D=A
@R14
M=D
@RET_ADDRESS_CALL72
D=A
@95
0;JMP
(RET_ADDRESS_CALL72)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ponggame.newinstance)
@0
D=A
@R13
M=D
@ponggame.new
D=A
@R14
M=D
@RET_ADDRESS_CALL73
D=A
@95
0;JMP
(RET_ADDRESS_CALL73)
@SP
AM=M-1
D=M
@ponggame.0
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ponggame.getinstance)
@ponggame.0
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(ponggame.run)
@SP
AM=M+1
A=A-1
M=0
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
(ponggame.run$while_exp0)
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
M=!M
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ponggame.run$while_end0
D;JNE
(ponggame.run$while_exp1)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_EQ7
D=A
@6
0;JMP
(RET_ADDRESS_EQ7)
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ponggame.run$while_end1
D;JNE
@0
D=A
@R13
M=D
@keyboard.keypressed
D=A
@R14
M=D
@RET_ADDRESS_CALL74
D=A
@95
0;JMP
(RET_ADDRESS_CALL74)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.move
D=A
@R14
M=D
@RET_ADDRESS_CALL75
D=A
@95
0;JMP
(RET_ADDRESS_CALL75)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ponggame.moveball
D=A
@R14
M=D
@RET_ADDRESS_CALL76
D=A
@95
0;JMP
(RET_ADDRESS_CALL76)
@SP
AM=M-1
D=M
@R5
M=D
@ponggame.run$while_exp1
0;JMP
(ponggame.run$while_end1)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@130
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ8
D=A
@6
0;JMP
(RET_ADDRESS_EQ8)
@SP
AM=M-1
D=M
@ponggame.run$if_true0
D;JNE
@ponggame.run$if_false0
0;JMP
(ponggame.run$if_true0)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@2
D=A
@R13
M=D
@bat.setdirection
D=A
@R14
M=D
@RET_ADDRESS_CALL77
D=A
@95
0;JMP
(RET_ADDRESS_CALL77)
@SP
AM=M-1
D=M
@R5
M=D
@ponggame.run$if_end0
0;JMP
(ponggame.run$if_false0)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@132
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ9
D=A
@6
0;JMP
(RET_ADDRESS_EQ9)
@SP
AM=M-1
D=M
@ponggame.run$if_true1
D;JNE
@ponggame.run$if_false1
0;JMP
(ponggame.run$if_true1)
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@bat.setdirection
D=A
@R14
M=D
@RET_ADDRESS_CALL78
D=A
@95
0;JMP
(RET_ADDRESS_CALL78)
@SP
AM=M-1
D=M
@R5
M=D
@ponggame.run$if_end1
0;JMP
(ponggame.run$if_false1)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@140
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ10
D=A
@6
0;JMP
(RET_ADDRESS_EQ10)
@SP
AM=M-1
D=M
@ponggame.run$if_true2
D;JNE
@ponggame.run$if_false2
0;JMP
(ponggame.run$if_true2)
@SP
M=M+1
A=M-1
M=0
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
M=D
(ponggame.run$if_false2)
(ponggame.run$if_end1)
(ponggame.run$if_end0)
(ponggame.run$while_exp2)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_EQ11
D=A
@6
0;JMP
(RET_ADDRESS_EQ11)
@SP
A=M-1
M=!M
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ponggame.run$while_end2
D;JNE
@0
D=A
@R13
M=D
@keyboard.keypressed
D=A
@R14
M=D
@RET_ADDRESS_CALL79
D=A
@95
0;JMP
(RET_ADDRESS_CALL79)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.move
D=A
@R14
M=D
@RET_ADDRESS_CALL80
D=A
@95
0;JMP
(RET_ADDRESS_CALL80)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ponggame.moveball
D=A
@R14
M=D
@RET_ADDRESS_CALL81
D=A
@95
0;JMP
(RET_ADDRESS_CALL81)
@SP
AM=M-1
D=M
@R5
M=D
@ponggame.run$while_exp2
0;JMP
(ponggame.run$while_end2)
@ponggame.run$while_exp0
0;JMP
(ponggame.run$while_end0)
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ponggame.run$if_true3
D;JNE
@ponggame.run$if_false3
0;JMP
(ponggame.run$if_true3)
@10
D=A
@SP
AM=M+1
A=A-1
M=D
@27
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@output.movecursor
D=A
@R14
M=D
@RET_ADDRESS_CALL82
D=A
@95
0;JMP
(RET_ADDRESS_CALL82)
@SP
AM=M-1
D=M
@R5
M=D
@9
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@string.new
D=A
@R14
M=D
@RET_ADDRESS_CALL83
D=A
@95
0;JMP
(RET_ADDRESS_CALL83)
@71
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL84
D=A
@95
0;JMP
(RET_ADDRESS_CALL84)
@97
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL85
D=A
@95
0;JMP
(RET_ADDRESS_CALL85)
@109
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL86
D=A
@95
0;JMP
(RET_ADDRESS_CALL86)
@101
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL87
D=A
@95
0;JMP
(RET_ADDRESS_CALL87)
@32
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL88
D=A
@95
0;JMP
(RET_ADDRESS_CALL88)
@79
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL89
D=A
@95
0;JMP
(RET_ADDRESS_CALL89)
@118
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL90
D=A
@95
0;JMP
(RET_ADDRESS_CALL90)
@101
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL91
D=A
@95
0;JMP
(RET_ADDRESS_CALL91)
@114
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL92
D=A
@95
0;JMP
(RET_ADDRESS_CALL92)
@1
D=A
@R13
M=D
@output.printstring
D=A
@R14
M=D
@RET_ADDRESS_CALL93
D=A
@95
0;JMP
(RET_ADDRESS_CALL93)
@SP
AM=M-1
D=M
@R5
M=D
(ponggame.run$if_false3)
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(ponggame.moveball)
@5
D=A
(LOOP_ponggame.moveball)
D=D-1
@SP
AM=M+1
A=A-1
M=0
@LOOP_ponggame.moveball
D;JGT
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.move
D=A
@R14
M=D
@RET_ADDRESS_CALL94
D=A
@95
0;JMP
(RET_ADDRESS_CALL94)
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT3
D=A
@22
0;JMP
(RET_ADDRESS_GT3)
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@5
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ12
D=A
@6
0;JMP
(RET_ADDRESS_EQ12)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
AM=M-1
D=M
@ponggame.moveball$if_true0
D;JNE
@ponggame.moveball$if_false0
0;JMP
(ponggame.moveball$if_true0)
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.getleft
D=A
@R14
M=D
@RET_ADDRESS_CALL95
D=A
@95
0;JMP
(RET_ADDRESS_CALL95)
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@bat.getright
D=A
@R14
M=D
@RET_ADDRESS_CALL96
D=A
@95
0;JMP
(RET_ADDRESS_CALL96)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.getleft
D=A
@R14
M=D
@RET_ADDRESS_CALL97
D=A
@95
0;JMP
(RET_ADDRESS_CALL97)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
M=D
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@ball.getright
D=A
@R14
M=D
@RET_ADDRESS_CALL98
D=A
@95
0;JMP
(RET_ADDRESS_CALL98)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@THIS
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@4
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ13
D=A
@6
0;JMP
(RET_ADDRESS_EQ13)
@SP
AM=M-1
D=M
@ponggame.moveball$if_true1
D;JNE
@ponggame.moveball$if_false1
0;JMP
(ponggame.moveball$if_true1)
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_GT4
D=A
@22
0;JMP
(RET_ADDRESS_GT4)
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT11
D=A
@38
0;JMP
(RET_ADDRESS_LT11)
@SP
AM=M-1
D=M
A=A-1
M=D|M
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
M=D
@THIS
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@ponggame.moveball$if_true2
D;JNE
@ponggame.moveball$if_false2
0;JMP
(ponggame.moveball$if_true2)
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@10
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@RET_ADDRESS_LT12
D=A
@38
0;JMP
(RET_ADDRESS_LT12)
@SP
AM=M-1
D=M
@ponggame.moveball$if_true3
D;JNE
@ponggame.moveball$if_false3
0;JMP
(ponggame.moveball$if_true3)
@SP
M=M+1
A=M-1
M=1
@SP
A=M-1
D=!M
M=D+1
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@ponggame.moveball$if_end3
0;JMP
(ponggame.moveball$if_false3)
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@10
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@RET_ADDRESS_GT5
D=A
@22
0;JMP
(RET_ADDRESS_GT5)
@SP
AM=M-1
D=M
@ponggame.moveball$if_true4
D;JNE
@ponggame.moveball$if_false4
0;JMP
(ponggame.moveball$if_true4)
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
@LCL
A=M
M=D
(ponggame.moveball$if_false4)
(ponggame.moveball$if_end3)
@THIS
D=M
@6
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=M-D
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
A=A+1
A=A+1
M=D
@THIS
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@THIS
D=M
@6
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@bat.setwidth
D=A
@R14
M=D
@RET_ADDRESS_CALL99
D=A
@95
0;JMP
(RET_ADDRESS_CALL99)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THIS
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@22
D=A
@SP
AM=M+1
A=A-1
M=D
@7
D=A
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@output.movecursor
D=A
@R14
M=D
@RET_ADDRESS_CALL100
D=A
@95
0;JMP
(RET_ADDRESS_CALL100)
@SP
AM=M-1
D=M
@R5
M=D
@THIS
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@output.printint
D=A
@R14
M=D
@RET_ADDRESS_CALL101
D=A
@95
0;JMP
(RET_ADDRESS_CALL101)
@SP
AM=M-1
D=M
@R5
M=D
(ponggame.moveball$if_false2)
(ponggame.moveball$if_false1)
@THIS
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@ball.bounce
D=A
@R14
M=D
@RET_ADDRESS_CALL102
D=A
@95
0;JMP
(RET_ADDRESS_CALL102)
@SP
AM=M-1
D=M
@R5
M=D
(ponggame.moveball$if_false0)
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(array.new)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT6
D=A
@22
0;JMP
(RET_ADDRESS_GT6)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@array.new$if_true0
D;JNE
@array.new$if_false0
0;JMP
(array.new$if_true0)
@2
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@sys.error
D=A
@R14
M=D
@RET_ADDRESS_CALL103
D=A
@95
0;JMP
(RET_ADDRESS_CALL103)
@SP
AM=M-1
D=M
@R5
M=D
(array.new$if_false0)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.alloc
D=A
@R14
M=D
@RET_ADDRESS_CALL104
D=A
@95
0;JMP
(RET_ADDRESS_CALL104)
@54
0;JMP
(array.dispose)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THIS
M=D
@THIS
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.dealloc
D=A
@R14
M=D
@RET_ADDRESS_CALL105
D=A
@95
0;JMP
(RET_ADDRESS_CALL105)
@SP
AM=M-1
D=M
@R5
M=D
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(keyboard.init)
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(keyboard.keypressed)
@24576
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@memory.peek
D=A
@R14
M=D
@RET_ADDRESS_CALL106
D=A
@95
0;JMP
(RET_ADDRESS_CALL106)
@54
0;JMP
(keyboard.readchar)
@SP
A=M
M=0
AD=A+1
M=0
@SP
M=D+1
@SP
M=M+1
A=M-1
M=0
@1
D=A
@R13
M=D
@output.printchar
D=A
@R14
M=D
@RET_ADDRESS_CALL107
D=A
@95
0;JMP
(RET_ADDRESS_CALL107)
@SP
AM=M-1
D=M
@R5
M=D
(keyboard.readchar$while_exp0)
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_EQ14
D=A
@6
0;JMP
(RET_ADDRESS_EQ14)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT7
D=A
@22
0;JMP
(RET_ADDRESS_GT7)
@SP
AM=M-1
D=M
A=A-1
M=D|M
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@keyboard.readchar$while_end0
D;JNE
@0
D=A
@R13
M=D
@keyboard.keypressed
D=A
@R14
M=D
@RET_ADDRESS_CALL108
D=A
@95
0;JMP
(RET_ADDRESS_CALL108)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT8
D=A
@22
0;JMP
(RET_ADDRESS_GT8)
@SP
AM=M-1
D=M
@keyboard.readchar$if_true0
D;JNE
@keyboard.readchar$if_false0
0;JMP
(keyboard.readchar$if_true0)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
(keyboard.readchar$if_false0)
@keyboard.readchar$while_exp0
0;JMP
(keyboard.readchar$while_end0)
@0
D=A
@R13
M=D
@string.backspace
D=A
@R14
M=D
@RET_ADDRESS_CALL109
D=A
@95
0;JMP
(RET_ADDRESS_CALL109)
@1
D=A
@R13
M=D
@output.printchar
D=A
@R14
M=D
@RET_ADDRESS_CALL110
D=A
@95
0;JMP
(RET_ADDRESS_CALL110)
@SP
AM=M-1
D=M
@R5
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@output.printchar
D=A
@R14
M=D
@RET_ADDRESS_CALL111
D=A
@95
0;JMP
(RET_ADDRESS_CALL111)
@SP
AM=M-1
D=M
@R5
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(keyboard.readline)
@5
D=A
(LOOP_keyboard.readline)
D=D-1
@SP
AM=M+1
A=A-1
M=0
@LOOP_keyboard.readline
D;JGT
@80
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@string.new
D=A
@R14
M=D
@RET_ADDRESS_CALL112
D=A
@95
0;JMP
(RET_ADDRESS_CALL112)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@output.printstring
D=A
@R14
M=D
@RET_ADDRESS_CALL113
D=A
@95
0;JMP
(RET_ADDRESS_CALL113)
@SP
AM=M-1
D=M
@R5
M=D
@0
D=A
@R13
M=D
@string.newline
D=A
@R14
M=D
@RET_ADDRESS_CALL114
D=A
@95
0;JMP
(RET_ADDRESS_CALL114)
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@0
D=A
@R13
M=D
@string.backspace
D=A
@R14
M=D
@RET_ADDRESS_CALL115
D=A
@95
0;JMP
(RET_ADDRESS_CALL115)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
M=D
(keyboard.readline$while_exp0)
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
M=!M
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@keyboard.readline$while_end0
D;JNE
@0
D=A
@R13
M=D
@keyboard.readchar
D=A
@R14
M=D
@RET_ADDRESS_CALL116
D=A
@95
0;JMP
(RET_ADDRESS_CALL116)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ15
D=A
@6
0;JMP
(RET_ADDRESS_EQ15)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@keyboard.readline$if_true0
D;JNE
@keyboard.readline$if_false0
0;JMP
(keyboard.readline$if_true0)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_EQ16
D=A
@6
0;JMP
(RET_ADDRESS_EQ16)
@SP
AM=M-1
D=M
@keyboard.readline$if_true1
D;JNE
@keyboard.readline$if_false1
0;JMP
(keyboard.readline$if_true1)
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@string.eraselastchar
D=A
@R14
M=D
@RET_ADDRESS_CALL117
D=A
@95
0;JMP
(RET_ADDRESS_CALL117)
@SP
AM=M-1
D=M
@R5
M=D
@keyboard.readline$if_end1
0;JMP
(keyboard.readline$if_false1)
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@2
D=A
@R13
M=D
@string.appendchar
D=A
@R14
M=D
@RET_ADDRESS_CALL118
D=A
@95
0;JMP
(RET_ADDRESS_CALL118)
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
M=D
(keyboard.readline$if_end1)
(keyboard.readline$if_false0)
@keyboard.readline$while_exp0
0;JMP
(keyboard.readline$while_end0)
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(keyboard.readint)
@SP
A=M
M=0
AD=A+1
M=0
@SP
M=D+1
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@keyboard.readline
D=A
@R14
M=D
@RET_ADDRESS_CALL119
D=A
@95
0;JMP
(RET_ADDRESS_CALL119)
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@string.intvalue
D=A
@R14
M=D
@RET_ADDRESS_CALL120
D=A
@95
0;JMP
(RET_ADDRESS_CALL120)
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@string.dispose
D=A
@R14
M=D
@RET_ADDRESS_CALL121
D=A
@95
0;JMP
(RET_ADDRESS_CALL121)
@SP
AM=M-1
D=M
@R5
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(math.init)
@SP
AM=M+1
A=A-1
M=0
@16
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@array.new
D=A
@R14
M=D
@RET_ADDRESS_CALL122
D=A
@95
0;JMP
(RET_ADDRESS_CALL122)
@SP
AM=M-1
D=M
@math.1
M=D
@16
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@array.new
D=A
@R14
M=D
@RET_ADDRESS_CALL123
D=A
@95
0;JMP
(RET_ADDRESS_CALL123)
@SP
AM=M-1
D=M
@math.0
M=D
@SP
M=M+1
A=M-1
M=0
@math.0
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
@R5
M=D
@SP
AM=M-1
D=M
@THAT
M=D
@R5
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THAT
A=M
M=D
(math.init$while_exp0)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@15
D=A
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT13
D=A
@38
0;JMP
(RET_ADDRESS_LT13)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@math.init$while_end0
D;JNE
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@math.0
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=M-D
@math.0
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THAT
M=D
@THAT
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=M-D
@math.0
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THAT
M=D
@THAT
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@R5
M=D
@SP
AM=M-1
D=M
@THAT
M=D
@R5
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@THAT
A=M
M=D
@math.init$while_exp0
0;JMP
(math.init$while_end0)
@SP
M=M+1
A=M-1
M=0
@54
0;JMP
(math.abs)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT14
D=A
@38
0;JMP
(RET_ADDRESS_LT14)
@SP
AM=M-1
D=M
@math.abs$if_true0
D;JNE
@math.abs$if_false0
0;JMP
(math.abs$if_true0)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
D=!M
M=D+1
@SP
AM=M-1
D=M
@ARG
A=M
M=D
(math.abs$if_false0)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(math.multiply)
@5
D=A
(LOOP_math.multiply)
D=D-1
@SP
AM=M+1
A=A-1
M=0
@LOOP_math.multiply
D;JGT
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT15
D=A
@38
0;JMP
(RET_ADDRESS_LT15)
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT9
D=A
@22
0;JMP
(RET_ADDRESS_GT9)
@SP
AM=M-1
D=M
A=A-1
M=D&M
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT10
D=A
@22
0;JMP
(RET_ADDRESS_GT10)
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT16
D=A
@38
0;JMP
(RET_ADDRESS_LT16)
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
AM=M-1
D=M
A=A-1
M=D|M
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
A=A+1
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@math.abs
D=A
@R14
M=D
@RET_ADDRESS_CALL124
D=A
@95
0;JMP
(RET_ADDRESS_CALL124)
@SP
AM=M-1
D=M
@ARG
A=M
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@math.abs
D=A
@R14
M=D
@RET_ADDRESS_CALL125
D=A
@95
0;JMP
(RET_ADDRESS_CALL125)
@SP
AM=M-1
D=M
@ARG
A=M+1
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT17
D=A
@38
0;JMP
(RET_ADDRESS_LT17)
@SP
AM=M-1
D=M
@math.multiply$if_true0
D;JNE
@math.multiply$if_false0
0;JMP
(math.multiply$if_true0)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@LCL
A=M+1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ARG
A=M
M=D
@LCL
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@ARG
A=M+1
M=D
(math.multiply$if_false0)
(math.multiply$while_exp0)
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@RET_ADDRESS_LT18
D=A
@38
0;JMP
(RET_ADDRESS_LT18)
@SP
A=M-1
M=!M
@SP
AM=M-1
D=M
@math.multiply$while_end0
D;JNE
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@math.0
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THAT
M=D
@THAT
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT11
D=A
@22
0;JMP
(RET_ADDRESS_GT11)
@SP
AM=M-1
D=M
@math.multiply$if_true1
D;JNE
@math.multiply$if_false1
0;JMP
(math.multiply$if_true1)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M
M=D
@LCL
A=M+1
A=A+1
D=M
@SP
AM=M+1
A=A-1
M=D
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@math.0
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@THAT
M=D
@THAT
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
M=D
(math.multiply$if_false1)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@ARG
A=M
M=D
@LCL
D=M
@3
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=1
@SP
AM=M-1
D=M
A=A-1
M=D+M
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
A=A+1
M=D
@math.multiply$while_exp0
0;JMP
(math.multiply$while_end0)
@LCL
D=M
@4
A=D+A
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
@math.multiply$if_true2
D;JNE
@math.multiply$if_false2
0;JMP
(math.multiply$if_true2)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
A=M-1
D=!M
M=D+1
@SP
AM=M-1
D=M
@LCL
A=M
M=D
(math.multiply$if_false2)
@LCL
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@54
0;JMP
(math.divide)
@4
D=A
(LOOP_math.divide)
D=D-1
@SP
AM=M+1
A=A-1
M=0
@LOOP_math.divide
D;JGT
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_EQ17
D=A
@6
0;JMP
(RET_ADDRESS_EQ17)
@SP
AM=M-1
D=M
@math.divide$if_true0
D;JNE
@math.divide$if_false0
0;JMP
(math.divide$if_true0)
@3
D=A
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@sys.error
D=A
@R14
M=D
@RET_ADDRESS_CALL126
D=A
@95
0;JMP
(RET_ADDRESS_CALL126)
@SP
AM=M-1
D=M
@R5
M=D
(math.divide$if_false0)
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT19
D=A
@38
0;JMP
(RET_ADDRESS_LT19)
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT12
D=A
@22
0;JMP
(RET_ADDRESS_GT12)
@SP
AM=M-1
D=M
A=A-1
M=D&M
@ARG
A=M
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_GT13
D=A
@22
0;JMP
(RET_ADDRESS_GT13)
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
M=M+1
A=M-1
M=0
@RET_ADDRESS_LT20
D=A
@38
0;JMP
(RET_ADDRESS_LT20)
@SP
AM=M-1
D=M
A=A-1
M=D&M
@SP
AM=M-1
D=M
A=A-1
M=D|M
@SP
AM=M-1
D=M
@LCL
A=M+1
A=A+1
M=D
@SP
M=M+1
A=M-1
M=0
@math.1
D=M
@SP
AM=M+1
A=A-1
M=D
@SP
AM=M-1
D=M
A=A-1
M=D+M
@ARG
A=M+1
D=M
@SP
AM=M+1
A=A-1
M=D
@1
D=A
@R13
M=D
@math.abs
D=A
@R14
M=D
@RET_ADDRESS_CALL127
D=A
@95
0;JMP
(RET_ADDRESS_CALL127)