Subversion Repositories Kolibri OS

Rev

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

  1. include '..\..\..\macros.inc'
  2. use32
  3.         org     0x0
  4.  
  5.         db      'MENUET01'
  6.         dd      0x01
  7.         dd      START
  8.         dd      I_END
  9.         dd      mem_end
  10.         dd      mem_end
  11.         dd      0x0, 0x0
  12.  
  13. START:
  14.  
  15.         mov     edi, my_img
  16.         mov     ecx, 64001*3/4+1
  17.         xor     eax, eax
  18.         rep     stosd
  19.  
  20.         mov     al, 3
  21.         mcall
  22.         mov     [curtime], eax
  23.  
  24. red:
  25.         push    12
  26.         pop     eax
  27.         push    1
  28.         pop     ebx
  29.         mcall
  30.  
  31.         xor     eax, eax
  32.         mov     ebx, 200*65536+325
  33.         mov     ecx, 150*65536+225
  34.         xor     edx, edx
  35.         xor     esi, esi
  36.         mov     edi, 0x00100000
  37.         mcall
  38.  
  39.         mov     al, 8
  40.         mov     ebx, (325-19)*65536+12
  41.         mov     ecx, 5*65536+12
  42.         inc     edx
  43.         mov     esi, 0x00400000
  44.         mcall
  45.  
  46.         mov     al, 4
  47.         mov     ebx, 8*65536+8
  48.         mov     ecx, 0x00FFFFFF;0x00402020
  49.         mov     edx, fire_label
  50.         push    len00
  51.         pop     esi
  52.         mcall
  53.  
  54.         mov     al, 12
  55.         push    2
  56.         pop     ebx
  57.         mcall
  58.  
  59. still:
  60.  
  61.         push    11
  62.         pop     eax
  63.         mcall
  64.  
  65.         dec     eax
  66.         jz      red
  67.         dec     eax
  68.         jz      key
  69.         dec     eax
  70.         jz      button
  71.  
  72.         call    image
  73.         push    3
  74.         pop     eax
  75.         mcall
  76.         cmp     eax, [curtime]
  77.         jz      still
  78.         mov     [curtime], eax
  79. print_fps:
  80.         push    13
  81.         pop     eax
  82.         mov     ebx, (8+27*6)*65536+18
  83.         mov     ecx, 8*65536+8
  84.         xor     edx, edx
  85.         mcall
  86.         lea     edx, [ebx-10]
  87.         mov     al, 47
  88.         mov     ebx, 30000h
  89.         xor     ecx, ecx
  90.         xchg    ecx, [fps]
  91.         mov     esi, 0x00FFFFFF ;0x00400000
  92.         mcall
  93.         jmp     still
  94.  
  95. key:
  96.         mov     al, 2
  97.         mcall
  98.         cmp     ah, 1Bh   ;<Esc>
  99.         jne     still
  100. button:
  101. ; we have only one button, close
  102.         or      eax, -1
  103.         mcall
  104.  
  105. image:
  106.  
  107. ; ¨á㥬 ¯¥­â £p ¬¬ã
  108. penta:
  109.         mov edi,my_img+0x540*3
  110.         mov ebx,(320)*3
  111.        mov     eax,0x00fc0000
  112.        push    edi
  113.         push     0x78
  114.         pop     ecx
  115. ll_3:
  116.         call    put_big_point
  117.         lea      edi, [edi+ebx+6]
  118.         loop    ll_3
  119.        pop     edi
  120.         mov     cl, 0x60
  121. ll_4:
  122.         call    put_big_point
  123.        lea      edi, [edi+ebx*2+3]
  124.        loop    ll_4
  125.         mov     cl, 0x61
  126. ll_5:
  127.         call    put_big_point
  128.         sub     edi, 2*320*3-3
  129.        loop    ll_5
  130.         mov     edi, my_img+0x1D4F6
  131.        push    edi
  132.         mov     cl, 0x78
  133. ll_6:
  134.         call    put_big_point
  135.        add edi,6
  136.        sub     edi,ebx
  137.        loop    ll_6
  138.        pop     edi
  139.        mov     ecx,0x8F*2
  140. ll_7:  stosd
  141.        mov [edi+ebx-4],eax
  142.        dec edi
  143.        loop ll_7
  144.  
  145. fire:
  146. ; _‚HˆŒ€Hˆ…_! ‡¤¥áì á ¬®¥ ¨­â¥p¥á­®¥.
  147. ; €«£®p¨â¬ £®p¥­¨ï.
  148.         mov esi,[count1]
  149.         mov edx,[count2]
  150.         mov     ecx, 10000h
  151. Flame: cmp     esi,0xFA00*3+my_img       ; á¥¢¤®á«ãç ©­ ï â®çª  ¢ ¯p¥¤ « å íªp
  152.        jae     NxtP      ; ¥á«¨ H…’ - ¡¥p¥¬ á«¥¤ãîéãî.
  153.        lodsd
  154.        dec esi                   ; ‘ç¨â뢠¥¬ ¥¥ 梥â.
  155. ;       and      eax,0x00ff0000
  156.         test    eax, eax
  157.                                 ; ’®çª  ç¥p­ ï? (£®p¥âì ­¥ç¥¬ã?)
  158.        jz      NxtP      ; ¥á«¨ „€ - ¡¥p¥¬ á«¥¤ãîéãî.
  159.        sub     eax,0x00040000
  160.                                    ; –¢¥â®¬ ­  ¥¤¨­¨æã ¬¥­ì訬
  161.        mov     [esi-2*3],eax       ;    áâ ¢¨¬ â®çªã á«¥¢ ,
  162.        mov     [esi],eax         ;    á¯p ¢ ,
  163.        mov     [320*3+esi-1*3],eax    ;    á­¨§ã
  164.        mov     [esi-0x141*3],eax ;    ¨ ᢥpåã.
  165. NxtP:
  166.        add     esi,edx
  167.        cmp esi,0xffff*3+my_img
  168.        jbe loc_cont
  169.        sub esi,0xfffe*3
  170. loc_cont:
  171.                                 ; ¥p¥¬ á«¥¤ãîéãî
  172.        add     edx,3
  173.        cmp edx,0x10000*3
  174.        jbe loc_cont2
  175.        sub edx,0xfffe*3
  176. loc_cont2:
  177.                                ;    ¯á¥¢¤®á«ãç ©­ãî â®çªã.
  178.        ;jnz     Flame           ; ˆ â ª 65536 p §.
  179.         loop Flame
  180.         mov [count1],esi
  181.         mov [count2],edx
  182.  
  183.         mov ebx,my_img
  184.         mov ecx,320*65536+200
  185.         mov edx,2*65536+23
  186.         push    7
  187.         pop     eax
  188.         int 0x40
  189.  
  190.         inc [fps]
  191.         retn
  192.  
  193. put_big_point:
  194.         mov     [edi], eax
  195.         mov     [edi+3], eax
  196.         mov     [edi-3], eax
  197.         mov     [edi+ebx], eax
  198.         ret
  199.  
  200. ;DATA
  201. align 4
  202.    
  203. count1  dd my_img
  204. count2 dd 0
  205. curtime dd 0
  206. fps     dd 0
  207. fire_label      db 'Pentagramm in FIRE     FPS:'
  208. len00=$-fire_label
  209. I_END:
  210.  
  211. align 16
  212.         rb      320*3
  213. my_img  rb      320*200*3
  214.         rb      320*3
  215.  
  216. ; stack
  217.         align   256
  218.         rb      256
  219. mem_end:
  220.