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