Subversion Repositories Kolibri OS

Rev

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