Subversion Repositories Kolibri OS

Rev

Rev 551 | Rev 5091 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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