-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathpongtest.s
237 lines (212 loc) · 2.68 KB
/
pongtest.s
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
!to "pongtest", cbm
* = $0600
vectordirX = $20
vectordirY = $21
ballposX = $8
ballposY = $18
player1posX = $9
player1posY = $19
IAposX = $0a
IAposY = $1a
ASCII_w = $77
ASCII_s = $73
crashUpborder = $01
crashDownborder = $02
crashRightborder = $04
crashLeftborder = $08
score = $06
canmove = $30
distance = $03
border = $fd
init:
lda #$02
sta canmove
lda #$02 ; ypos
sta ballposY ; ball
lda #$01 ; ypos
sta player1posY ; plr1
lda #$1e ; ypos
sta IAposY ; plr2
lda #$04
sta IAposX ; plr2
sta ballposX ; ball
sta player1posX ; plr1
lsr
lda #$01
sta vectordirX ; xdir (ball)
lda #$01
sta vectordirY ; ydir (ball)
lda #$1b
sta distance
lda #$00
sta score
mainloop:
!byte $03
jsr checkcollisions
jsr readkeys
jsr getmovesball
jsr playerseeker
jmp mainloop
getmovesball:
jsr getmoveX
jsr getmoveY
rts
getmoveX:
lda vectordirX
cmp #$01
beq movup
cmp #$02
beq movdown
rts
getmoveY:
lda vectordirY
cmp #$01
beq movright
cmp #$02
beq movleft
rts
movup:
lda ballposY
sec
sbc #$20
sta ballposY
bcc upup
rts
upup:
dec ballposX
rts
movright:
inc ballposY
rts
movdown:
lda ballposY
clc
adc #$20
sta ballposY
bcs downdown
rts
downdown:
inc ballposX
rts
movleft:
dec ballposY
rts
readkeys:
lda $ff
cmp #ASCII_w
beq movPlayerup
cmp #ASCII_s
beq movPlayerdown
rts
movPlayerup:
lda IAposY
sec
sbc #$20
sta IAposY
bcc playerupup
lda #$00
sta $ff
rts
playerupup:
dec IAposX
lda #$00
sta $ff
rts
movPlayerdown:
lda IAposY
clc
adc #$20
sta IAposY
bcs playerdowndown
lda #$00
sta $ff
rts
playerdowndown:
inc IAposX
lda #$00
sta $ff
rts
checkcollisions:
jsr checkbordercollitions
jsr checkplayercollision
jsr checkcomputercollision
rts
checkbordercollitions:
lda border
cmp #crashUpborder
beq UpborderTouch
cmp #crashDownborder
beq DownborderTouch
cmp #crashRightborder
beq gameOver
cmp #crashLeftborder
beq gameOver
rts
UpborderTouch:
lda #$02
sta vectordirX
rts
DownborderTouch:
lda #$01
sta vectordirX
rts
checkplayercollision:
lda ballposX
cmp IAposX
beq maycolliteIa ;IA somos los jugadores crack
rts
maycolliteIa:
lda ballposY
clc
adc #$01
cmp IAposY
beq didcolliteIA
rts
didcolliteIA:
lda #$02
sta vectordirY
lda #$01
sta canmove
rts
checkcomputercollision:
lda ballposX
cmp player1posX
beq maycolliteplayer ;player es la compu crack
rts
maycolliteplayer:
lda ballposY
sec
sbc #$01
cmp player1posY
beq didcolliteplayer
rts
didcolliteplayer:
lda #$01
sta vectordirY
rts
playerseeker:
lda distance
cmp #$01
beq dontmove
lda canmove
cmp #$01
beq domove
rts
domove:
sec
lda distance
sbc #$01
sta distance
lda ballposX
sta player1posX
lda ballposY
sbc distance
sta player1posY
rts
dontmove:
lda #$1b
sta distance
lda #$02
sta canmove
rts
gameOver: