Rev 503 | Rev 1802 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | ; |
503 | heavyiron | 2 | ; PONG for MENUET v1.0 |
3 | ; 2001 by Mario Birkner, Germany |
||
4 | ; cyflexx@digitalrice.com |
||
31 | halyavin | 5 | ; |
503 | heavyiron | 6 | ; PONG for MENUET is |
7 | ; a small PONG-clone for MenuetOS |
||
8 | ; |
||
9 | ; HINT: If the Paddle moves too slow,increase the |
||
10 | ; typematic Rate in your BIOS |
||
11 | ; |
||
31 | halyavin | 12 | |
503 | heavyiron | 13 | include '..\..\..\macros.inc' |
31 | halyavin | 14 | |
503 | heavyiron | 15 | CK_UP1 equ 113 |
16 | CK_DOWN1 equ 97 |
||
17 | CK_UP2 equ 130+48 |
||
18 | CK_DOWN2 equ 129+48 |
||
31 | halyavin | 19 | |
503 | heavyiron | 20 | use32 |
31 | halyavin | 21 | |
503 | heavyiron | 22 | org 0x0 |
31 | halyavin | 23 | |
503 | heavyiron | 24 | db 'MENUET00' ; 8 byte id |
25 | dd 38 ; required os |
||
26 | dd START ; program start |
||
27 | dd I_END ; program image size |
||
28 | dd 0x2000 ; required amount of memory |
||
29 | dd 0x2000 ; esp = 0x7FFF0 |
||
30 | dd 0x00000000 ; reserved=no extended header |
||
31 | halyavin | 31 | |
32 | |||
33 | |||
503 | heavyiron | 34 | START: |
31 | halyavin | 35 | |
503 | heavyiron | 36 | call draw_window |
31 | halyavin | 37 | |
38 | |||
39 | still: |
||
40 | |||
503 | heavyiron | 41 | mov eax,10 |
42 | add eax,[control] |
||
485 | heavyiron | 43 | mcall |
503 | heavyiron | 44 | cmp eax,1 |
31 | halyavin | 45 | je red |
503 | heavyiron | 46 | cmp eax,2 |
31 | halyavin | 47 | je key |
503 | heavyiron | 48 | cmp eax,3 |
31 | halyavin | 49 | je button |
503 | heavyiron | 50 | cmp [control],1 |
51 | jne still |
||
31 | halyavin | 52 | |
503 | heavyiron | 53 | mov eax,5 |
54 | mov ebx,[delay] |
||
485 | heavyiron | 55 | mcall |
31 | halyavin | 56 | |
503 | heavyiron | 57 | jmp move |
31 | halyavin | 58 | |
503 | heavyiron | 59 | red: |
60 | call draw_window |
||
61 | cmp [control],1 |
||
62 | jne still |
||
63 | call clall |
||
64 | call drawpad |
||
65 | jmp still |
||
66 | key: |
||
67 | mov eax,2 |
||
68 | mcall |
||
69 | cmp [control],1 |
||
70 | jne still |
||
31 | halyavin | 71 | |
503 | heavyiron | 72 | up1: |
73 | cmp ah,CK_UP1 |
||
74 | jne dn1 |
||
75 | cmp [posya],52*65536+64 |
||
76 | je still |
||
77 | sub [posya],4*65536 |
||
78 | call cl0 |
||
79 | call drawpad |
||
80 | jmp still |
||
81 | dn1: |
||
82 | cmp ah,CK_DOWN1 |
||
83 | jne up2 |
||
84 | cmp [posya],140*65536+64 |
||
85 | je still |
||
86 | add [posya],4*65536 |
||
87 | call cl0 |
||
88 | call drawpad |
||
89 | jmp still |
||
90 | up2: |
||
91 | cmp ah,CK_UP2 |
||
92 | jne dn2 |
||
93 | cmp [posyb],52*65536+64 |
||
94 | je still |
||
95 | sub [posyb],4*65536 |
||
96 | call cl1 |
||
97 | call drawpad |
||
98 | jmp still |
||
99 | dn2: |
||
100 | cmp ah,CK_DOWN2 |
||
101 | jne still |
||
102 | cmp [posyb],140*65536+64 |
||
103 | je still |
||
104 | add [posyb],4*65536 |
||
105 | call cl1 |
||
106 | call drawpad |
||
107 | jmp still |
||
31 | halyavin | 108 | |
503 | heavyiron | 109 | button: |
110 | mov eax,17 |
||
111 | mcall |
||
31 | halyavin | 112 | |
503 | heavyiron | 113 | cmp ah,1 |
114 | jne button2 |
||
115 | mov eax,-1 |
||
116 | mcall |
||
31 | halyavin | 117 | |
503 | heavyiron | 118 | jmp still |
31 | halyavin | 119 | |
503 | heavyiron | 120 | button2: |
121 | cmp ah,2 |
||
122 | jne still |
||
123 | mov [control],1 |
||
124 | mov [scp1],0 |
||
125 | mov [scp2],0 |
||
126 | jmp res |
||
127 | move: |
||
128 | mov eax,[mposx] |
||
129 | mov ebx,[mposy] |
||
130 | add [bposx],eax |
||
131 | add [bposy],ebx |
||
132 | cmp [bposx],16*65536+16 |
||
133 | je pf1 |
||
134 | cmp [bposx],272*65536+16 |
||
135 | je pf2 |
||
136 | cmp [bposy],191*65536+16 |
||
137 | je bot |
||
138 | cmp [bposy],48*65536+16 |
||
139 | je top |
||
140 | cmp [bposx],247*65536+16 |
||
141 | je rig |
||
142 | jg padr |
||
143 | cmp [bposx],55*65536+16 |
||
144 | je lef |
||
145 | jl padl |
||
146 | jmp draw |
||
31 | halyavin | 147 | |
503 | heavyiron | 148 | padr: |
149 | mov ecx,[posyb] |
||
150 | jmp pad |
||
151 | padl: |
||
152 | mov ecx,[posya] |
||
153 | pad: |
||
154 | mov eax,[bposy] |
||
155 | sub eax,16 |
||
156 | mov ebx,eax |
||
157 | add ebx,17*65536 |
||
158 | sub ecx,64 |
||
159 | mov edx,ecx |
||
160 | add edx,65*65536 |
||
161 | cmp eax,edx |
||
162 | je top |
||
163 | cmp ebx,ecx |
||
164 | je bot |
||
165 | jmp draw |
||
31 | halyavin | 166 | |
503 | heavyiron | 167 | bot: |
168 | mov [mposy],-65536 |
||
169 | jmp draw |
||
170 | top: |
||
171 | mov [mposy],65536 |
||
172 | jmp draw |
||
173 | rig: |
||
174 | mov eax,[posyb] |
||
175 | sub eax,1*65536-64 ;verhindert das der ball ins paddle eindringt |
||
176 | mov ebx,[posyb] |
||
177 | add ebx,64*65536-64 |
||
178 | mov ecx,[bposy] |
||
179 | add ecx,16*65536-16 |
||
180 | mov edx,[bposy] |
||
181 | sub edx,16 |
||
182 | cmp ecx,eax |
||
183 | je blr |
||
184 | jl draw |
||
185 | cmp edx,ebx |
||
186 | je blr |
||
187 | jl blr |
||
188 | jg draw |
||
189 | blr: |
||
190 | mov [mposx],-65536 |
||
191 | jmp draw |
||
31 | halyavin | 192 | |
503 | heavyiron | 193 | lef: |
194 | mov eax,[posya] |
||
195 | sub eax,1*65536+64 |
||
196 | mov ebx,[posya] |
||
197 | add ebx,64*65536-64 |
||
198 | mov ecx,[bposy] |
||
199 | add ecx,16*65536-16 |
||
200 | mov edx,[bposy] |
||
201 | add edx,16 |
||
202 | cmp ecx,eax |
||
203 | je bll |
||
204 | jl draw |
||
205 | cmp edx,ebx |
||
206 | je bll |
||
207 | jl bll |
||
208 | jg draw |
||
209 | bll: |
||
210 | mov [mposx],65536 |
||
211 | jmp draw |
||
31 | halyavin | 212 | |
503 | heavyiron | 213 | drawpad: |
214 | ; draw paddle |
||
215 | mov edx,[posya] |
||
216 | shr edx,16 |
||
217 | add edx,32*65536 |
||
218 | mov ecx,24*65536+64 |
||
219 | mov ebx,paddle |
||
220 | mov eax,7 |
||
221 | mcall |
||
222 | mov edx,[posyb] |
||
223 | shr edx,16 |
||
224 | add edx,264*65536 |
||
225 | mov eax,7 |
||
226 | mov ebx,paddle |
||
227 | mov ecx,24*65536+64 |
||
228 | mcall |
||
229 | ret |
||
31 | halyavin | 230 | |
503 | heavyiron | 231 | draw: |
232 | ; draw ball |
||
233 | mov eax,13 |
||
234 | mov ebx,-65536+2 |
||
235 | mov ecx,-65536+2 |
||
236 | add ebx,[bposx] |
||
237 | add ecx,[bposy] |
||
238 | xor edx,edx |
||
239 | mcall |
||
240 | add ebx,65536-2 |
||
241 | add ecx,65536-2 |
||
242 | mov edx,ebx |
||
243 | and edx,0xffff0000 |
||
244 | mov esi,ecx |
||
245 | shr esi,16 |
||
246 | add edx,esi |
||
247 | mov esi,ebx |
||
248 | shl esi,16 |
||
249 | mov edi,ecx |
||
250 | and edi,0x0000ffff |
||
251 | add esi,edi |
||
252 | mov ecx,esi |
||
253 | mov ebx,ball |
||
254 | mov eax,7 |
||
255 | mcall |
||
256 | jmp still |
||
257 | cls: |
||
258 | mov eax,13 |
||
259 | mov edx,0x00000000 |
||
260 | mcall |
||
261 | ret |
||
262 | cl0: |
||
263 | mov ebx,32*65536+24 |
||
264 | mov ecx,[posya] |
||
265 | sub ecx,4*65536+60 |
||
266 | call cls |
||
267 | mov ecx,[posya] |
||
268 | add ecx,64*65536-60 |
||
269 | call cls |
||
270 | ret |
||
271 | cl1: |
||
272 | mov ebx,264*65536+24 |
||
273 | mov ecx,[posyb] |
||
274 | sub ecx,4*65536+60 |
||
275 | call cls |
||
276 | mov ecx,[posyb] |
||
277 | add ecx,64*65536-60 |
||
278 | call cls |
||
279 | ret |
||
280 | clall: |
||
281 | mov ebx,16*65536+288 |
||
282 | mov ecx,47*65536+161 |
||
283 | call cls |
||
284 | ret |
||
285 | pf1: |
||
286 | inc [scp2] |
||
287 | jmp res |
||
288 | pf2: |
||
289 | inc [scp1] |
||
290 | res: |
||
291 | cmp [scp2],20 |
||
292 | je over |
||
293 | cmp [scp1],20 |
||
294 | je over |
||
295 | mov [bposx],152*65536+16 ;default position ball |
||
296 | mov [bposy],119*65536+16 |
||
31 | halyavin | 297 | call draw_window |
503 | heavyiron | 298 | call clall |
299 | call drawpad |
||
300 | jmp draw |
||
301 | over: |
||
302 | mov [control],0 |
||
31 | halyavin | 303 | call draw_window |
503 | heavyiron | 304 | mov eax,4 |
305 | mov ebx,120*65536+100 |
||
306 | mov ecx,0x00ffdd00 |
||
307 | mov esi,14 |
||
308 | cmp [scp1],20 |
||
309 | jne win |
||
310 | mov edx,w1 |
||
311 | mcall |
||
312 | jmp still |
||
313 | win: |
||
314 | mov edx,w2 |
||
315 | mcall |
||
316 | jmp still |
||
31 | halyavin | 317 | |
503 | heavyiron | 318 | ; ********************************************* |
319 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
||
320 | ; ********************************************* |
||
31 | halyavin | 321 | |
322 | |||
503 | heavyiron | 323 | draw_window: |
31 | halyavin | 324 | |
503 | heavyiron | 325 | mov eax,12 |
326 | mov ebx,1 |
||
327 | mcall |
||
31 | halyavin | 328 | |
329 | |||
503 | heavyiron | 330 | mov eax,0 |
331 | mov ebx,100*65536+320 |
||
332 | mov ecx,100*65536+250 |
||
551 | spraid | 333 | mov edx,0x144873a0 ;70d0 |
503 | heavyiron | 334 | mov edi,labelt |
335 | mcall |
||
31 | halyavin | 336 | |
503 | heavyiron | 337 | mov eax,8 |
338 | mov ebx,20*65536+80 |
||
339 | mov ecx,220*65536+20 |
||
340 | mov edx,2 |
||
341 | mov esi,0x900000 |
||
342 | mcall |
||
31 | halyavin | 343 | |
503 | heavyiron | 344 | mov eax,4 |
345 | mov ebx,38*65536+227 |
||
346 | mov ecx,0x00FFFFFF |
||
347 | mov edx,b0lab |
||
348 | mov esi,8 |
||
349 | mcall |
||
31 | halyavin | 350 | |
503 | heavyiron | 351 | mov eax,4 |
352 | mov ebx,25*65536+30 |
||
353 | mov ecx,0x00ffdd00 |
||
354 | mov edx,welcome |
||
355 | mov esi,40 |
||
356 | mcall |
||
31 | halyavin | 357 | |
503 | heavyiron | 358 | mov eax,4 |
359 | mov ebx,220*65536+228 |
||
360 | mov ecx,0x00ffdd00 |
||
361 | mov edx,scotext |
||
362 | mov esi,11 |
||
363 | mcall |
||
31 | halyavin | 364 | |
503 | heavyiron | 365 | mov eax,47 |
366 | mov ebx,0x00020000 |
||
367 | mov ecx,[scp1] |
||
368 | mov edx,268 shl 16+228 |
||
369 | mov esi,0x0000ddff |
||
370 | mcall |
||
31 | halyavin | 371 | |
503 | heavyiron | 372 | mov eax,47 |
373 | mov ebx,0x00020000 |
||
374 | mov ecx,[scp2] |
||
375 | mov edx,285 shl 16+228 |
||
376 | mov esi,0x0000ddff |
||
485 | heavyiron | 377 | mcall |
31 | halyavin | 378 | |
503 | heavyiron | 379 | mov eax,12 |
380 | mov ebx,2 |
||
485 | heavyiron | 381 | mcall |
31 | halyavin | 382 | |
383 | ret |
||
384 | |||
385 | |||
386 | ; DATA AREA |
||
503 | heavyiron | 387 | posya dd 96*65536+64 ;default position paddle |
388 | posyb dd 96*65536+64 |
||
389 | bposx dd 152*65536+16 ;default position ball |
||
390 | bposy dd 119*65536+16 |
||
391 | mposx dd 65536 ;richtung ball |
||
392 | mposy dd 65536 |
||
393 | control dd 0x0 |
||
394 | delay dd 0x1 ;delay betw. frames |
||
395 | scp1 dd 0x0 |
||
396 | scp2 dd 0x0 |
||
31 | halyavin | 397 | |
398 | |||
503 | heavyiron | 399 | scotext: |
400 | db 'SCORE: :' |
||
401 | welcome: |
||
402 | db 'PLAYER1: Q , A PLAYER2: , ' |
||
403 | b0lab: |
||
404 | db 'NEW GAME' |
||
405 | labelt: |
||
406 | db 'PONG FOR MENUET v1.0',0 |
||
407 | w1: |
||
408 | db 'Player 1 wins!' |
||
409 | w2: |
||
410 | db 'Player 2 wins!' |
||
411 | clsign: |
||
412 | db 'x' |
||
31 | halyavin | 413 | |
503 | heavyiron | 414 | ball: |
415 | file "ball.raw" |
||
31 | halyavin | 416 | |
503 | heavyiron | 417 | paddle: |
418 | file "paddle.raw" |
||
31 | halyavin | 419 | |
420 | I_END: |