Subversion Repositories Kolibri OS

Rev

Rev 5462 | 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.                 db     'MENUET01'
  33.                 dd     1
  34.                 dd     START
  35.                 dd     I_END
  36.                 dd     MEM
  37.                 dd     STACKTOP
  38.                 dd     0
  39.                 dd     0
  40.  
  41.  
  42. include '../../../macros.inc'
  43.  
  44. START:
  45.  
  46.     mov  eax, 66
  47.     mov  ebx, 1
  48.     mov  ecx, ebx
  49.     mcall               ; óñòàíîâèòü ðåæèì ñêàíêîäîâ
  50.  
  51.     call draw_window
  52.  
  53.  
  54. still:
  55.  
  56.     mov  eax,10
  57.     add  eax,[control]
  58.     mcall
  59.     cmp  eax,1
  60.     je   red
  61.     cmp  eax,2
  62.     je   key
  63.     cmp  eax,3
  64.     je   button
  65.     cmp  [control],1
  66.     jne  still
  67.  
  68.     mov  eax,5
  69.     mov  ebx,[delay]
  70.     mcall
  71.  
  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.  
  107.     jmp  move
  108.  
  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
  121.  
  122.    up1:
  123.     cmp  ah,CK_UP1 ; îáðàáîòêà íàæàòèÿ êëàâèøè
  124.     jne  dn1
  125.     mov  [is_up1], 1
  126.     mov  [is_dn1], 0
  127.     jmp  still
  128.    dn1:
  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 ; îáðàáîòêà îòïóñêàíèÿ êëàâèøè
  142.     jne  up2
  143.     mov  [is_up1], 0
  144.     mov  [is_dn1], 0
  145.     jmp  still
  146.  
  147.    up2:
  148.     cmp  ah,CK_UP2 ; îáðàáîòêà íàæàòèÿ êëàâèøè
  149.     jne  dn2
  150.     mov  [is_up2], 1
  151.     mov  [is_dn2], 0
  152.     jmp  still
  153.    dn2:
  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 ; îáðàáîòêà îòïóñêàíèÿ êëàâèøè
  167.     jne  still
  168.     mov  [is_up2], 0
  169.     mov  [is_dn2], 0
  170.     jmp  still
  171.  
  172.   button:
  173.     mov  eax,17
  174.     mcall
  175.  
  176.     cmp  ah,1
  177.     jne  button2
  178.     mov  eax,-1
  179.     mcall
  180.  
  181.     jmp  still
  182.  
  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
  210.  
  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
  229.  
  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
  255.  
  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
  275.  
  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
  293.  
  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
  360.     call draw_window
  361.     call clall
  362.     call drawpad
  363.     jmp  draw
  364. over:
  365.     mov  [control],0
  366.     call draw_window
  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
  380.  
  381. ;   *********************************************
  382. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  383. ;   *********************************************
  384.  
  385.  
  386. draw_window:
  387.  
  388.     mov  eax,12
  389.     mov  ebx,1
  390.     mcall
  391.  
  392.  
  393.     mov  eax,0
  394.     mov  ebx,100*65536+320
  395.     mov  ecx,100*65536+250
  396.     mov  edx,0x144873a0    ;70d0
  397.     mov  edi,labelt
  398.     mcall
  399.  
  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
  406.  
  407.     mov  eax,4
  408.     mov  ebx,38*65536+227
  409.     mov  ecx,0x00FFFFFF
  410.     mov  edx,b0lab
  411.     mov  esi,8
  412.     mcall
  413.  
  414.     mov  eax,4
  415.     mov  ebx,25*65536+30
  416.     mov  ecx,0x00ffdd00
  417.     mov  edx,welcome
  418.     mov  esi,40
  419.     mcall
  420.  
  421.     mov  eax,4
  422.     mov  ebx,220*65536+228
  423.     mov  ecx,0x00ffdd00
  424.     mov  edx,scotext
  425.     mov  esi,11
  426.     mcall
  427.  
  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
  434.  
  435.     mov  eax,47
  436.     mov  ebx,0x00020000
  437.     mov  ecx,[scp2]
  438.     mov  edx,285 shl 16+228
  439.     mov  esi,0x0000ddff
  440.     mcall
  441.  
  442.     mov  eax,12
  443.     mov  ebx,2
  444.     mcall
  445.  
  446.     ret
  447.  
  448.  
  449. ; DATA AREA
  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
  460.  
  461. is_up1  dd 0x0 ; \
  462. is_dn1  dd 0x0 ; | êàêèå êëàâèøè íàæàòû
  463. is_up2  dd 0x0 ; |
  464. is_dn2  dd 0x0 ; /
  465.  
  466. include "lang.inc"
  467. if lang eq ru
  468. include "russian.inc"
  469. else
  470. include "english.inc"
  471. end if
  472.  
  473. ball:
  474. file "ball.raw"
  475.  
  476. paddle:
  477. file "paddle.raw"
  478.  
  479. I_END:
  480.         rb 256
  481. STACKTOP:
  482. MEM:
  483.