Subversion Repositories Kolibri OS

Rev

Rev 9345 | 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.                 org     0x0
  24.  
  25.                 db     'MENUET01'
  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
  31.                 dd     0
  32.                 dd     0
  33.  
  34.  
  35. include '../../../macros.inc'
  36.  
  37. START:
  38.  
  39.     mov  eax, 66
  40.     mov  ebx, 1
  41.     mov  ecx, ebx
  42.     mcall               ; óñòàíîâèòü ðåæèì ñêàíêîäîâ
  43.  
  44.     call draw_window
  45.  
  46.  
  47. still:
  48.  
  49.     mov  eax,10
  50.     add  eax,[control]
  51.     mcall
  52.     cmp  eax,1
  53.     je   red
  54.     cmp  eax,2
  55.     je   key
  56.     cmp  eax,3
  57.     je   button
  58.     cmp  [control],1
  59.     jne  still
  60.  
  61.     mov  eax,5
  62.     mov  ebx,[delay]
  63.     mcall
  64.  
  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.  
  100.     jmp  move
  101.  
  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
  114.  
  115.    up1:
  116.     cmp  ah,CK_UP1 ; îáðàáîòêà íàæàòèÿ êëàâèøè
  117.     jne  dn1
  118.     mov  [is_up1], 1
  119.     mov  [is_dn1], 0
  120.     jmp  still
  121.    dn1:
  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 ; îáðàáîòêà îòïóñêàíèÿ êëàâèøè
  135.     jne  up2
  136.     mov  [is_up1], 0
  137.     mov  [is_dn1], 0
  138.     jmp  still
  139.  
  140.    up2:
  141.     cmp  ah,CK_UP2 ; îáðàáîòêà íàæàòèÿ êëàâèøè
  142.     jne  dn2
  143.     mov  [is_up2], 1
  144.     mov  [is_dn2], 0
  145.     jmp  still
  146.    dn2:
  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 ; îáðàáîòêà îòïóñêàíèÿ êëàâèøè
  160.     jne  still
  161.     mov  [is_up2], 0
  162.     mov  [is_dn2], 0
  163.     jmp  still
  164.  
  165.   button:
  166.     mov  eax,17
  167.     mcall
  168.  
  169.     cmp  ah,1
  170.     jne  button2
  171.     mov  eax,-1
  172.     mcall
  173.  
  174.     jmp  still
  175.  
  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
  203.  
  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
  222.  
  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
  248.  
  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
  268.  
  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
  286.  
  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
  353.     call draw_window
  354.     call clall
  355.     call drawpad
  356.     jmp  draw
  357. over:
  358.     mov  [control],0
  359.     call draw_window
  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
  373.  
  374. ;   *********************************************
  375. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  376. ;   *********************************************
  377.  
  378.  
  379. draw_window:
  380.  
  381.     mov  eax,12
  382.     mov  ebx,1
  383.     mcall
  384.  
  385.  
  386.     mov  eax,0
  387.     mov  ebx,100*65536+320
  388.     mov  ecx,100*65536+250
  389.     mov  edx,0x144873a0    ;70d0
  390.     mov  edi,labelt
  391.     mcall
  392.  
  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
  399.  
  400.     mov  eax,4
  401.     mov  ebx,38*65536+227
  402.     mov  ecx,0x00FFFFFF
  403.     mov  edx,b0lab
  404.     mov  esi,8
  405.     mcall
  406.  
  407.     mov  eax,4
  408.     mov  ebx,25*65536+30
  409.     mov  ecx,0x00ffdd00
  410.     mov  edx,welcome
  411.     mov  esi,40
  412.     mcall
  413.  
  414.     mov  eax,4
  415.     mov  ebx,220*65536+228
  416.     mov  ecx,0x00ffdd00
  417.     mov  edx,scotext
  418.     mov  esi,11
  419.     mcall
  420.  
  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
  427.  
  428.     mov  eax,47
  429.     mov  ebx,0x00020000
  430.     mov  ecx,[scp2]
  431.     mov  edx,285 shl 16+228
  432.     mov  esi,0x0000ddff
  433.     mcall
  434.  
  435.     mov  eax,12
  436.     mov  ebx,2
  437.     mcall
  438.  
  439.     ret
  440.  
  441.  
  442. ; DATA AREA
  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
  453.  
  454. is_up1  dd 0x0 ; \
  455. is_dn1  dd 0x0 ; | êàêèå êëàâèøè íàæàòû
  456. is_up2  dd 0x0 ; |
  457. is_dn2  dd 0x0 ; /
  458.  
  459. include "lang.inc"
  460. if lang eq ru
  461. include "russian.inc"
  462. else
  463. include "english.inc"
  464. end if
  465.  
  466. ball:
  467. file "ball.raw"
  468.  
  469. paddle:
  470. file "paddle.raw"
  471.  
  472. I_END:
  473.         rb 256
  474. STACKTOP:
  475. MEM:
  476.