Subversion Repositories Kolibri OS

Rev

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