Subversion Repositories Kolibri OS

Rev

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

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