Rev 205 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
485 | heavyiron | 1 | include '..\..\..\macros.inc' |
31 | halyavin | 2 | use32 |
80 | diamond | 3 | org 0x0 |
31 | halyavin | 4 | |
80 | diamond | 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 | |||
31 | halyavin | 13 | START: |
80 | diamond | 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 |
||
485 | heavyiron | 21 | mcall |
80 | diamond | 22 | mov [curtime], eax |
23 | |||
24 | red: |
||
25 | push 12 |
||
26 | pop eax |
||
27 | push 1 |
||
28 | pop ebx |
||
485 | heavyiron | 29 | mcall |
80 | diamond | 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 |
||
485 | heavyiron | 37 | mcall |
80 | diamond | 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 |
||
485 | heavyiron | 44 | mcall |
80 | diamond | 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 |
||
485 | heavyiron | 52 | mcall |
80 | diamond | 53 | |
54 | mov al, 12 |
||
55 | push 2 |
||
56 | pop ebx |
||
485 | heavyiron | 57 | mcall |
80 | diamond | 58 | |
31 | halyavin | 59 | still: |
80 | diamond | 60 | |
61 | push 11 |
||
62 | pop eax |
||
485 | heavyiron | 63 | mcall |
80 | diamond | 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 |
||
485 | heavyiron | 75 | mcall |
80 | diamond | 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 |
||
485 | heavyiron | 85 | mcall |
80 | diamond | 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 |
||
485 | heavyiron | 92 | mcall |
80 | diamond | 93 | jmp still |
94 | |||
31 | halyavin | 95 | key: |
80 | diamond | 96 | mov al, 2 |
485 | heavyiron | 97 | mcall |
80 | diamond | 98 | cmp ah, 1Bh ; |
99 | jne still |
||
31 | halyavin | 100 | button: |
80 | diamond | 101 | ; we have only one button, close |
102 | or eax, -1 |
||
485 | heavyiron | 103 | mcall |
80 | diamond | 104 | |
105 | image: |
||
106 | |||
107 | ; Рисуем пентагpамму |
||
31 | halyavin | 108 | penta: |
80 | diamond | 109 | mov edi,my_img+0x540*3 |
31 | halyavin | 110 | mov ebx,(320)*3 |
80 | diamond | 111 | mov eax,0x00fc0000 |
31 | halyavin | 112 | push edi |
80 | diamond | 113 | push 0x78 |
114 | pop ecx |
||
115 | ll_3: |
||
116 | call put_big_point |
||
117 | lea edi, [edi+ebx+6] |
||
118 | loop ll_3 |
||
31 | halyavin | 119 | pop edi |
80 | diamond | 120 | mov cl, 0x60 |
121 | ll_4: |
||
122 | call put_big_point |
||
123 | lea edi, [edi+ebx*2+3] |
||
31 | halyavin | 124 | loop ll_4 |
80 | diamond | 125 | mov cl, 0x61 |
126 | ll_5: |
||
127 | call put_big_point |
||
128 | sub edi, 2*320*3-3 |
||
31 | halyavin | 129 | loop ll_5 |
80 | diamond | 130 | mov edi, my_img+0x1D4F6 |
31 | halyavin | 131 | push edi |
80 | diamond | 132 | mov cl, 0x78 |
133 | ll_6: |
||
134 | call put_big_point |
||
31 | halyavin | 135 | add edi,6 |
136 | sub edi,ebx |
||
137 | loop ll_6 |
||
138 | pop edi |
||
139 | mov ecx,0x8F*2 |
||
80 | diamond | 140 | ll_7: stosd |
141 | mov [edi+ebx-4],eax |
||
142 | dec edi |
||
31 | halyavin | 143 | loop ll_7 |
80 | diamond | 144 | |
31 | halyavin | 145 | fire: |
146 | ; _ВHИМАHИЕ_! Здесь самое интеpесное. |
||
147 | ; Алгоpитм гоpения. |
||
148 | mov esi,[count1] |
||
80 | diamond | 149 | mov edx,[count2] |
150 | mov ecx, 10000h |
||
31 | halyavin | 151 | Flame: cmp esi,0xFA00*3+my_img ; Псевдослучайная точка в пpедалах экp |
152 | jae NxtP ; если HЕТ - беpем следующую. |
||
153 | lodsd |
||
154 | dec esi ; Считываем ее цвет. |
||
80 | diamond | 155 | ; and eax,0x00ff0000 |
156 | test eax, eax |
||
31 | halyavin | 157 | ; Точка чеpная? (гоpеть нечему?) |
158 | jz NxtP ; если ДА - беpем следующую. |
||
159 | sub eax,0x00040000 |
||
160 | ; Цветом на единицу меньшим |
||
161 | mov [esi-2*3],eax ; ставим точку слева, |
||
162 | mov [esi],eax ; спpава, |
||
80 | diamond | 163 | mov [320*3+esi-1*3],eax ; снизу |
31 | halyavin | 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: |
||
80 | diamond | 171 | ; Беpем следующую |
31 | halyavin | 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 |
||
80 | diamond | 181 | mov [count2],edx |
182 | |||
31 | halyavin | 183 | mov ebx,my_img |
184 | mov ecx,320*65536+200 |
||
185 | mov edx,2*65536+23 |
||
80 | diamond | 186 | push 7 |
187 | pop eax |
||
31 | halyavin | 188 | int 0x40 |
80 | diamond | 189 | |
31 | halyavin | 190 | inc [fps] |
191 | retn |
||
80 | diamond | 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 | |||
31 | halyavin | 200 | ;DATA |
80 | diamond | 201 | align 4 |
31 | halyavin | 202 | |
80 | diamond | 203 | count1 dd my_img |
31 | halyavin | 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: |
||
80 | diamond | 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: |