Subversion Repositories Kolibri OS

Rev

Rev 5091 | Rev 9345 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ;    PONG for MENUET v1.1
  3. ;    2001 by Mario Birkner, Germany
  4. ;    cyflexx@digitalrice.com
  5. ;
  6. ;    PONG for MENUET is
  7. ;    a small PONG-clone for MenuetOS/KolibriOS
  8. ;
  9. ;
  10. ;    improved by Oleksandr Bogomaz aka Albom
  11. ;    albom85@yandex.ru
  12. ;    11.07.2008
  13. ;
  14.  
  15. format binary as ""
  16.  
  17. CK_UP1 equ 16
  18. CK_DOWN1 equ 30
  19. CK_UP2 equ 72
  20. CK_DOWN2 equ 80
  21.  
  22. use32
  23.  
  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.  
  33. include '../../../macros.inc'
  34.  
  35. START:
  36.  
  37.     mov  eax, 66
  38.     mov  ebx, 1
  39.     mov  ecx, 1
  40.     mcall               ; óñòàíîâèòü ðåæèì ñêàíêîäîâ
  41.  
  42.     call draw_window
  43.  
  44.  
  45. still:
  46.  
  47.     mov  eax,10
  48.     add  eax,[control]
  49.     mcall
  50.     cmp  eax,1
  51.     je   red
  52.     cmp  eax,2
  53.     je   key
  54.     cmp  eax,3
  55.     je   button
  56.     cmp  [control],1
  57.     jne  still
  58.  
  59.     mov  eax,5
  60.     mov  ebx,[delay]
  61.     mcall
  62.  
  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.  
  98.     jmp  move
  99.  
  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
  112.  
  113.    up1:
  114.     cmp  ah,CK_UP1 ; îáðàáîòêà íàæàòèÿ êëàâèøè
  115.     jne  dn1
  116.     mov  [is_up1], 1
  117.     mov  [is_dn1], 0
  118.     jmp  still
  119.    dn1:
  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 ; îáðàáîòêà îòïóñêàíèÿ êëàâèøè
  133.     jne  up2
  134.     mov  [is_up1], 0
  135.     mov  [is_dn1], 0
  136.     jmp  still
  137.  
  138.    up2:
  139.     cmp  ah,CK_UP2 ; îáðàáîòêà íàæàòèÿ êëàâèøè
  140.     jne  dn2
  141.     mov  [is_up2], 1
  142.     mov  [is_dn2], 0
  143.     jmp  still
  144.    dn2:
  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 ; îáðàáîòêà îòïóñêàíèÿ êëàâèøè
  158.     jne  still
  159.     mov  [is_up2], 0
  160.     mov  [is_dn2], 0
  161.     jmp  still
  162.  
  163.   button:
  164.     mov  eax,17
  165.     mcall
  166.  
  167.     cmp  ah,1
  168.     jne  button2
  169.     mov  eax,-1
  170.     mcall
  171.  
  172.     jmp  still
  173.  
  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
  201.  
  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
  220.  
  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
  246.  
  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
  266.  
  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
  284.  
  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
  351.     call draw_window
  352.     call clall
  353.     call drawpad
  354.     jmp  draw
  355. over:
  356.     mov  [control],0
  357.     call draw_window
  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
  371.  
  372. ;   *********************************************
  373. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  374. ;   *********************************************
  375.  
  376.  
  377. draw_window:
  378.  
  379.     mov  eax,12
  380.     mov  ebx,1
  381.     mcall
  382.  
  383.  
  384.     mov  eax,0
  385.     mov  ebx,100*65536+320
  386.     mov  ecx,100*65536+250
  387.     mov  edx,0x144873a0    ;70d0
  388.     mov  edi,labelt
  389.     mcall
  390.  
  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
  397.  
  398.     mov  eax,4
  399.     mov  ebx,38*65536+227
  400.     mov  ecx,0x00FFFFFF
  401.     mov  edx,b0lab
  402.     mov  esi,8
  403.     mcall
  404.  
  405.     mov  eax,4
  406.     mov  ebx,25*65536+30
  407.     mov  ecx,0x00ffdd00
  408.     mov  edx,welcome
  409.     mov  esi,40
  410.     mcall
  411.  
  412.     mov  eax,4
  413.     mov  ebx,220*65536+228
  414.     mov  ecx,0x00ffdd00
  415.     mov  edx,scotext
  416.     mov  esi,11
  417.     mcall
  418.  
  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
  425.  
  426.     mov  eax,47
  427.     mov  ebx,0x00020000
  428.     mov  ecx,[scp2]
  429.     mov  edx,285 shl 16+228
  430.     mov  esi,0x0000ddff
  431.     mcall
  432.  
  433.     mov  eax,12
  434.     mov  ebx,2
  435.     mcall
  436.  
  437.     ret
  438.  
  439.  
  440. ; DATA AREA
  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
  451.  
  452. is_up1  dd 0x0 ; \
  453. is_dn1  dd 0x0 ; | êàêèå êëàâèøè íàæàòû
  454. is_up2  dd 0x0 ; |
  455. is_dn2  dd 0x0 ; /
  456.  
  457. include "lang.inc"
  458. if lang eq ru
  459. include "russian.inc"
  460. else
  461. include "english.inc"
  462. end if
  463.  
  464. ball:
  465. file "ball.raw"
  466.  
  467. paddle:
  468. file "paddle.raw"
  469.  
  470. I_END:
  471.