Subversion Repositories Kolibri OS

Rev

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