-
Notifications
You must be signed in to change notification settings - Fork 1
/
Segment.vm
executable file
·149 lines (149 loc) · 2.22 KB
/
Segment.vm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
function Segment.new 0
push constant 4
call Memory.alloc 1
pop pointer 0
push constant 8
pop static 0
push argument 0
pop this 0
push argument 1
pop this 1
push argument 2
pop this 2
push constant 0
pop this 3
push pointer 0
return
function Segment.setX 0
push argument 0
pop pointer 0
push argument 1
pop this 0
push constant 0
return
function Segment.setY 0
push argument 0
pop pointer 0
push argument 1
pop this 1
push constant 0
return
function Segment.getX 0
push argument 0
pop pointer 0
push this 0
return
function Segment.getY 0
push argument 0
pop pointer 0
push this 1
return
function Segment.draw 0
push argument 0
pop pointer 0
push this 0
push static 0
call Math.multiply 2
push constant 1
add
push this 1
push static 0
call Math.multiply 2
push constant 1
add
push this 0
push static 0
call Math.multiply 2
push static 0
add
push constant 1
sub
push this 1
push static 0
call Math.multiply 2
push static 0
add
push constant 1
sub
call Screen.drawRectangle 4
pop temp 0
push constant 0
return
function Segment.next 0
push argument 0
pop pointer 0
push this 2
return
function Segment.previous 0
push argument 0
pop pointer 0
push this 3
return
function Segment.add 0
push argument 0
pop pointer 0
push argument 1
pop this 2
push argument 1
push pointer 0
call Segment.setPrevious 2
pop temp 0
push constant 0
return
function Segment.setNext 0
push argument 0
pop pointer 0
push argument 1
pop this 2
push constant 0
return
function Segment.setPrevious 0
push argument 0
pop pointer 0
push argument 1
pop this 3
push constant 0
return
function Segment.collide 0
push argument 0
pop pointer 0
push argument 1
push constant 0
eq
not
if-goto IF_TRUE0
goto IF_FALSE0
label IF_TRUE0
push argument 1
call Segment.getX 1
push this 0
eq
push argument 1
call Segment.getY 1
push this 1
eq
and
if-goto IF_TRUE1
goto IF_FALSE1
label IF_TRUE1
push constant 1
neg
return
goto IF_END1
label IF_FALSE1
push constant 0
return
label IF_END1
goto IF_END0
label IF_FALSE0
push constant 0
return
label IF_END0
function Segment.dispose 0
push argument 0
pop pointer 0
push pointer 0
call Memory.deAlloc 1
pop temp 0
push constant 0
return