Subversion Repositories Kolibri OS

Rev

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