Rev 2552 | Rev 7276 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2552 | Rev 7125 | ||
---|---|---|---|
Line 5... | Line 5... | ||
5 | ; Converted to DexOS, By Dex |
5 | ; Converted to DexOS, By Dex |
6 | ; Converted to KolibriOS, By Asper |
6 | ; Converted to KolibriOS, By Asper |
7 | ; Optimized for KolibriOS, By Diamond |
7 | ; Optimized for KolibriOS, By Diamond |
8 | ; Assemble with |
8 | ; Assemble with |
9 | ; c:fasm firework.asm firework.kex |
9 | ; c:fasm firework.asm firework.kex |
10 | ; NOTE: Needs MMX & SSE |
10 | ; NOTE: Needs MMX & SSE, optionally AVX |
11 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
11 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
12 | use32 |
12 | use32 |
13 | org 0x0 |
13 | org 0x0 |
Line 14... | Line 14... | ||
14 | 14 | ||
15 | db 'MENUET00' ; 8 byte id |
15 | db 'MENUET01' ; 8 byte id |
16 | dd 38 ; required os |
16 | dd 0x01 ; version |
17 | dd STARTAPP ; program start |
17 | dd STARTAPP ; program start |
18 | dd I_END ; program image size |
18 | dd I_END ; program image size |
19 | dd 0x100000 ; required amount of memory |
19 | dd E_END ; required amount of memory |
- | 20 | dd stacktop ; reserved=no extended header |
|
Line 20... | Line 21... | ||
20 | dd 0x00000000 ; reserved=no extended header |
21 | dd 0, 0 |
21 | - | ||
22 | include '../../../macros.inc' |
22 | |
23 | include "aspapi.inc" |
23 | include '../../../macros.inc' |
- | 24 | SCREEN_WIDTH = 320 |
|
- | 25 | SCREEN_HEIGHT = 200 |
|
- | 26 | SIMD equ SSE |
|
24 | SCREEN_WIDTH equ 320 |
27 | SIMD_BYTES = 8 |
25 | SCREEN_HEIGHT equ 200 |
28 | assert SCREEN_WIDTH mod SIMD_BYTES = 0 |
26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
29 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 27... | Line 30... | ||
27 | ; Global defines |
30 | ; Global defines |
Line 33... | Line 36... | ||
33 | X_SPEED_OFFSET = 8 |
36 | X_SPEED_OFFSET = 8 |
34 | Y_SPEED_OFFSET = 12 |
37 | Y_SPEED_OFFSET = 12 |
35 | COLOR_OFFSET = 16 |
38 | COLOR_OFFSET = 16 |
36 | PART_SIZE = 20 |
39 | PART_SIZE = 20 |
Line 37... | Line 40... | ||
37 | 40 | ||
38 | macro draw_window |
41 | macro shade |
39 | { |
- | |
40 | local x, xsize, y, ysize, areacolor, caption |
42 | { |
41 | x = 100 |
- | |
42 | y = 70 |
- | |
43 | xsize = SCREEN_WIDTH+9 |
- | |
44 | ysize = SCREEN_HEIGHT+4 |
- | |
45 | areacolor = 0x54224466 |
- | |
46 | caption = labelt |
- | |
47 | mov eax, 12 ; function 12:tell os about windowdraw |
- | |
48 | mov ebx, 1 ; 1, start of draw |
- | |
49 | int 0x40 |
43 | local .lop |
50 | ; DRAW WINDOW |
- | |
51 | mov eax, 48 |
- | |
52 | mov ebx, 4 |
- | |
53 | int 0x40 |
- | |
54 | lea ecx, [y*65536+ysize+eax] |
- | |
55 | xor eax, eax ; function 0 : define and draw window |
- | |
56 | mov ebx, x*65536+xsize ; [x start] *65536 + [x size] |
- | |
57 | mov edx, areacolor ; color of work area RRGGBB |
- | |
58 | mov edi, caption |
- | |
59 | int 0x40 |
- | |
60 | ; start_draw_window 100,70,SCREEN_WIDTH+9,SCREEN_HEIGHT+29,0x04224466,labelt;, 14;labellen-labelt |
- | |
61 | end_draw_window |
- | |
62 | } |
- | |
63 | - | ||
64 | macro mmx_shade |
- | |
65 | { |
44 | if SIMD eq SSE |
66 | mov ecx, SCREEN_WIDTH*SCREEN_HEIGHT/8 |
45 | mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES |
67 | mov edi,buffer |
46 | mov edi, buffer |
68 | movq mm1, [sub_mask] |
47 | movq mm1, qword [sub_mask] |
69 | .lop: |
48 | .lop: |
70 | movq mm0, [edi] |
49 | movq mm0, [edi] |
71 | psubusb mm0, mm1 |
50 | psubusb mm0, mm1 |
72 | movq [edi], mm0 |
51 | movq [edi], mm0 |
73 | add edi, 8 |
52 | add edi, SIMD_BYTES |
- | 53 | loop .lop |
|
- | 54 | else if SIMD eq AVX |
|
- | 55 | mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES |
|
- | 56 | mov edi, buffer |
|
- | 57 | vmovdqa xmm1, xword [sub_mask] |
|
- | 58 | .lop: |
|
- | 59 | vmovdqa xmm0, [edi] |
|
- | 60 | vpsubusb xmm0, xmm0, xmm1 |
|
- | 61 | vmovdqa [edi], xmm0 |
|
- | 62 | add edi, SIMD_BYTES |
|
- | 63 | loop .lop |
|
- | 64 | else if SIMD eq AVX2 |
|
- | 65 | mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES |
|
- | 66 | mov edi, buffer |
|
- | 67 | vmovdqa ymm1, yword [sub_mask] |
|
- | 68 | .lop: |
|
- | 69 | vmovdqa ymm0, [edi] |
|
- | 70 | vpsubusb ymm0, ymm0, ymm1 |
|
- | 71 | vmovdqa [edi], ymm0 |
|
- | 72 | add edi, SIMD_BYTES |
|
- | 73 | loop .lop |
|
- | 74 | else if SIMD eq AVX512 |
|
- | 75 | mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES |
|
- | 76 | mov edi, buffer |
|
- | 77 | vmovdqa64 zmm1, zword [sub_mask] |
|
- | 78 | .lop: |
|
- | 79 | vmovdqa64 zmm0, [edi] |
|
- | 80 | vpsubusb zmm0, zmm0, zmm1 |
|
- | 81 | vmovdqa64 [edi], zmm0 |
|
- | 82 | add edi, SIMD_BYTES |
|
- | 83 | loop .lop |
|
74 | loop .lop |
84 | end if |
Line 75... | Line 85... | ||
75 | } |
85 | } |
76 | 86 | ||
77 | macro mmx_blur_prepare |
87 | macro blur_prepare |
78 | { |
88 | { |
79 | mov ecx, (SCREEN_WIDTH*SCREEN_HEIGHT-330*2)/8 |
89 | mov ecx, (SCREEN_WIDTH * SCREEN_HEIGHT - SCREEN_WIDTH * 2 - SIMD_BYTES*2) / SIMD_BYTES |
Line 80... | Line 90... | ||
80 | mov edi,buffer + 328 |
90 | mov edi, buffer + SCREEN_WIDTH + SIMD_BYTES |
81 | } |
91 | } |
82 | 92 | ||
- | 93 | macro blur |
|
83 | macro mmx_blur |
94 | { |
84 | { |
95 | local .lop |
85 | local .lop |
96 | if SIMD eq SSE |
86 | .lop: |
97 | .lop: |
87 | movq mm0, [edi] |
98 | movq mm0, [edi] |
88 | movq mm1, [edi+1] |
99 | movq mm1, [edi + 1] |
89 | movq mm2, [edi-1] |
100 | movq mm2, [edi - 1] |
Line 90... | Line 101... | ||
90 | movq mm3, mm0 |
101 | movq mm3, mm0 |
91 | movq mm4, [edi-SCREEN_WIDTH] |
102 | movq mm4, [edi - SCREEN_WIDTH] |
92 | movq mm5, [edi+SCREEN_WIDTH] |
103 | movq mm5, [edi + SCREEN_WIDTH] |
93 | 104 | ||
94 | pavgb mm0, mm1 ; mm0 = avg(cur,cur+1) |
105 | pavgb mm0, mm1 ; mm0 = avg(cur,cur+1) |
Line 95... | Line 106... | ||
95 | pavgb mm3, mm2 ; mm3 = avg(cur,cur-1) |
106 | pavgb mm3, mm2 ; mm3 = avg(cur,cur-1) |
96 | pavgb mm4, mm5 ; mm4 = avg(cur+320,cur-320) |
107 | pavgb mm4, mm5 ; mm4 = avg(cur+width,cur-width) |
97 | pavgb mm3, mm4 ; mm3 = avg(avg(cur,cur-1),avg(cur+320,cur-320)) |
108 | pavgb mm3, mm4 ; mm3 = avg(avg(cur,cur-1),avg(cur+width,cur-width)) |
- | 109 | pavgb mm0, mm3 ; mm0 = avg(avg(cur,cur+1), |
|
- | 110 | ||
- | 111 | movq [edi], mm0 |
|
- | 112 | add edi, SIMD_BYTES |
|
- | 113 | loop .lop |
|
98 | pavgb mm0, mm3 ; mm0 = avg(avg(cur,cur+1), |
114 | else if SIMD eq AVX |
- | 115 | .lop: |
|
- | 116 | vmovdqa xmm0, [edi] |
|
- | 117 | vmovdqa xmm1, xmm0 |
|
- | 118 | vmovdqa xmm2, [edi - SCREEN_WIDTH] |
|
- | 119 | ||
Line -... | Line 120... | ||
- | 120 | vpavgb xmm0, xmm0, [edi + 1] |
|
- | 121 | vpavgb xmm1, xmm1, [edi - 1] |
|
- | 122 | vpavgb xmm2, xmm2, [edi + SCREEN_WIDTH] |
|
- | 123 | vpavgb xmm1, xmm1, xmm2 |
|
- | 124 | vpavgb xmm0, xmm0, xmm1 |
|
- | 125 | ||
- | 126 | vmovdqa [edi], xmm0 |
|
- | 127 | add edi, SIMD_BYTES |
|
- | 128 | loop .lop |
|
- | 129 | else if SIMD eq AVX2 |
|
- | 130 | .lop: |
|
- | 131 | vmovdqa ymm0, [edi] |
|
- | 132 | vmovdqa ymm1, ymm0 |
|
- | 133 | vmovdqa ymm2, [edi - SCREEN_WIDTH] |
|
Line -... | Line 134... | ||
- | 134 | ||
- | 135 | vpavgb ymm0, ymm0, [edi + 1] |
|
- | 136 | vpavgb ymm1, ymm1, [edi - 1] |
|
- | 137 | vpavgb ymm2, ymm2, [edi + SCREEN_WIDTH] |
|
- | 138 | vpavgb ymm1, ymm1, ymm2 |
|
- | 139 | vpavgb ymm0, ymm0, ymm1 |
|
- | 140 | ||
- | 141 | vmovdqa [edi], ymm0 |
|
- | 142 | add edi, SIMD_BYTES |
|
- | 143 | loop .lop |
|
- | 144 | else if SIMD eq AVX512 |
|
- | 145 | .lop: |
|
- | 146 | vmovdqa64 zmm0, [edi] |
|
- | 147 | vmovdqa64 zmm1, zmm0 |
|
- | 148 | vmovdqa64 zmm2, [edi - SCREEN_WIDTH] |
|
- | 149 | ||
- | 150 | vpavgb zmm0, zmm0, [edi + 1] |
|
- | 151 | vpavgb zmm1, zmm1, [edi - 1] |
|
- | 152 | vpavgb zmm2, zmm2, [edi + SCREEN_WIDTH] |
|
- | 153 | vpavgb zmm1, zmm1, zmm2 |
|
- | 154 | vpavgb zmm0, zmm0, zmm1 |
|
99 | 155 | ||
100 | movq [edi], mm0 |
156 | vmovdqa64 [edi], zmm0 |
101 | add edi, 8 |
157 | add edi, SIMD_BYTES |
- | 158 | loop .lop |
|
102 | loop .lop |
159 | end if |
103 | } |
160 | } |
104 | 161 | ||
105 | 162 | macro blur_right |
|
106 | macro mmx_blur_right |
163 | { |
107 | { |
164 | local .lop |
108 | local .lop |
165 | if SIMD eq SSE |
109 | .lop: |
166 | .lop: |
110 | movq mm0, [edi] |
167 | movq mm0, [edi] |
- | 168 | movq mm1, [edi + 1] |
|
- | 169 | movq mm2, [edi + SCREEN_WIDTH] |
|
- | 170 | movq mm3, [edi + SCREEN_WIDTH + 1] |
|
- | 171 | pavgb mm0, mm1 |
|
- | 172 | pavgb mm3, mm2 |
|
- | 173 | pavgb mm0, mm3 |
|
- | 174 | movq [edi], mm0 |
|
- | 175 | add edi, SIMD_BYTES |
|
- | 176 | loop .lop |
|
111 | movq mm1, [edi+1] |
177 | else if SIMD eq AVX |
- | 178 | .lop: |
|
- | 179 | vmovdqa xmm0, [edi] |
|
- | 180 | vmovdqu xmm1, [edi + SCREEN_WIDTH + 1] |
|
- | 181 | vpavgb xmm2, xmm0, [edi + 1] |
|
- | 182 | vpavgb xmm3, xmm1, [edi + SCREEN_WIDTH] |
|
- | 183 | vpavgb xmm4, xmm2, xmm3 |
|
- | 184 | vmovdqa [edi], xmm4 |
|
- | 185 | add edi, SIMD_BYTES |
|
- | 186 | loop .lop |
|
- | 187 | else if SIMD eq AVX2 |
|
- | 188 | .lop: |
|
112 | movq mm2, [edi+SCREEN_WIDTH] |
189 | vmovdqa ymm0, [edi] |
- | 190 | vmovdqu ymm1, [edi + SCREEN_WIDTH + 1] |
|
- | 191 | vpavgb ymm2, ymm0, [edi + 1] |
|
- | 192 | vpavgb ymm3, ymm1, [edi + SCREEN_WIDTH] |
|
- | 193 | vpavgb ymm4, ymm2, ymm3 |
|
- | 194 | vmovdqa [edi], ymm4 |
|
- | 195 | add edi, SIMD_BYTES |
|
- | 196 | loop .lop |
|
- | 197 | else if SIMD eq AVX512 |
|
- | 198 | .lop: |
|
- | 199 | vmovdqa64 zmm0, [edi] |
|
- | 200 | vmovdqu64 zmm1, [edi + SCREEN_WIDTH + 1] |
|
113 | movq mm3, [edi+SCREEN_WIDTH+1] |
201 | vpavgb zmm2, zmm0, [edi + 1] |
Line 114... | Line 202... | ||
114 | pavgb mm0, mm1 |
202 | vpavgb zmm3, zmm1, [edi + SCREEN_WIDTH] |
Line 115... | Line 203... | ||
115 | pavgb mm3, mm2 |
203 | vpavgb zmm4, zmm2, zmm3 |
Line 129... | Line 217... | ||
129 | stosd |
217 | stosd |
130 | add eax, 0x040000 |
218 | add eax, 0x040000 |
131 | and eax, 0xFFFFFF |
219 | and eax, 0xFFFFFF |
132 | jnz red_loop |
220 | jnz red_loop |
Line 133... | Line 221... | ||
133 | 221 | ||
134 | mov eax, 63*4*65536 |
222 | mov eax, 63*4 SHL 16 |
135 | @@: |
223 | @@: |
136 | stosd |
224 | stosd |
137 | stosd |
225 | stosd |
138 | add ax, 0x0404 |
226 | add ax, 0x0404 |
Line 141... | Line 229... | ||
141 | ;zero_buffer: |
229 | ;zero_buffer: |
142 | mov ecx, SCREEN_WIDTH*SCREEN_HEIGHT/4 |
230 | mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / 4 |
143 | ; mov edi,buffer |
231 | ; mov edi, buffer |
144 | xor eax, eax |
232 | xor eax, eax |
145 | rep stosd |
233 | rep stosd |
- | 234 | ||
146 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
235 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
147 | ; Main Functions |
236 | ; Main Functions |
148 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
237 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
149 | virtual at esp |
238 | virtual at esp |
150 | global_x dd ? |
239 | global_x dd ? |
151 | global_y dd ? |
240 | global_y dd ? |
152 | seed dd ? |
241 | seed dd ? |
153 | end virtual |
242 | end virtual |
Line 154... | Line 243... | ||
154 | 243 | ||
155 | db 0x0f, 0x31 |
244 | rdtsc |
156 | push eax ; seed |
245 | push eax ; seed |
157 | push 100*64 ; global_y |
246 | push 100 * 64 ; global_y |
Line 158... | Line 247... | ||
158 | push 160*64 ; global_x |
247 | push 160 * 64 ; global_x |
Line 159... | Line 248... | ||
159 | 248 | ||
160 | jmp MAIN |
249 | jmp MAIN |
- | 250 | ||
- | 251 | ||
- | 252 | red: |
|
- | 253 | mcall 9, proc_info, -1 |
|
- | 254 | x = 100 |
|
- | 255 | y = 70 |
|
- | 256 | xsize = SCREEN_WIDTH+9 |
|
161 | 257 | ysize = SCREEN_HEIGHT+4 |
|
- | 258 | areacolor = 0x54224466 |
|
- | 259 | mov eax, 12 ; function 12:tell os about windowdraw |
|
- | 260 | mov ebx, 1 ; 1, start of draw |
|
- | 261 | int 0x40 |
|
- | 262 | mov eax, 48 |
|
- | 263 | mov ebx, 4 |
|
- | 264 | int 0x40 |
|
- | 265 | lea ecx, [(y SHL 16) + ysize + eax] |
|
- | 266 | xor eax, eax ; function 0 : define and draw window |
|
- | 267 | mov ebx, (x SHL 16) + xsize ; [x start] *65536 + [x size] |
|
- | 268 | mov edx, areacolor ; color of work area RRGGBB |
|
- | 269 | mov edi, window_title |
|
- | 270 | int 0x40 |
|
162 | 271 | mov eax, 12 ; end of redraw |
|
163 | red: |
272 | mov ebx, 2 |
164 | mcall 9,proc_info,-1 |
273 | int 0x40 |
165 | draw_window |
274 | |
166 | MAIN: |
275 | MAIN: |
Line 175... | Line 284... | ||
175 | sar eax, 6 |
284 | sar eax, 6 |
176 | sar ebx, 6 |
285 | sar ebx, 6 |
Line 177... | Line 286... | ||
177 | 286 | ||
178 | cmp eax, 5 |
287 | cmp eax, 5 |
179 | jb .new_particle |
288 | jb .new_particle |
180 | cmp eax, SCREEN_WIDTH-5;315 |
289 | cmp eax, SCREEN_WIDTH - 5 |
181 | jge .new_particle |
290 | jge .new_particle |
182 | cmp ebx, 5 |
291 | cmp ebx, 5 |
183 | jb .new_particle |
292 | jb .new_particle |
184 | cmp ebx, SCREEN_HEIGHT-5;195 |
293 | cmp ebx, SCREEN_HEIGHT - 5 |
Line 185... | Line 294... | ||
185 | jl .part_ok |
294 | jl .part_ok |
186 | 295 | ||
187 | .new_particle: |
296 | .new_particle: |
Line 188... | Line 297... | ||
188 | call init_particle |
297 | call init_particle |
189 | jmp .advance_particles |
- | |
190 | - | ||
191 | .part_ok: |
- | |
192 | ; mov edi, eax |
- | |
193 | ; add edi,buffer |
298 | jmp .advance_particles |
194 | ; mov eax, SCREEN_WIDTH |
299 | |
195 | ; mul ebx |
300 | .part_ok: |
Line 196... | Line -... | ||
196 | imul edi, ebx, SCREEN_WIDTH |
- | |
197 | mov dl, [ebp+COLOR_OFFSET] |
- | |
198 | mov [buffer+eax+edi], dl |
- | |
199 | - | ||
200 | ; mov eax, [ebp+X_OFFSET] |
- | |
201 | ; mov ebx, [ebp+Y_OFFSET] |
- | |
202 | ; add eax, [ebp+X_SPEED_OFFSET] |
301 | imul edi, ebx, SCREEN_WIDTH |
203 | ; add ebx, [ebp+Y_SPEED_OFFSET] |
302 | mov dl, [ebp+COLOR_OFFSET] |
204 | ; mov [ebp+X_OFFSET], eax |
303 | mov [buffer+eax+edi], dl |
205 | ; mov [ebp+Y_OFFSET], ebx |
304 | |
Line 206... | Line 305... | ||
206 | mov eax, [ebp+X_SPEED_OFFSET] |
305 | mov eax, [ebp+X_SPEED_OFFSET] |
207 | add [ebp+X_OFFSET], eax |
306 | add [ebp+X_OFFSET], eax |
208 | mov eax, [ebp+Y_SPEED_OFFSET] |
307 | mov eax, [ebp+Y_SPEED_OFFSET] |
209 | add [ebp+Y_OFFSET], eax |
308 | add [ebp+Y_OFFSET], eax |
210 | 309 | ||
Line 211... | Line 310... | ||
211 | db 0x0f, 0x31 |
310 | rdtsc |
212 | and al, 0x7F |
311 | and al, 0x7F |
Line 213... | Line 312... | ||
213 | jnz .dont_inc_y_speed |
312 | jnz .dont_inc_y_speed |
214 | inc dword [ebp+Y_SPEED_OFFSET] |
313 | inc dword [ebp+Y_SPEED_OFFSET] |
215 | .dont_inc_y_speed: |
314 | .dont_inc_y_speed: |
216 | 315 | ||
217 | add ebp, PART_SIZE |
316 | add ebp, PART_SIZE |
218 | loop .advance_particles |
317 | loop .advance_particles |
219 | 318 | ||
220 | mmx_shade |
319 | shade |
221 | ; jmp .copy_buffer_to_video |
320 | ; jmp .copy_buffer_to_video |
222 | mmx_blur_prepare |
321 | blur_prepare |
223 | test dword [blur_right_flag] , 0x800000 |
322 | test dword [blur_right_flag] , 0x800000 |
224 | jnz .do_blur_right |
323 | jnz .do_blur_right |
225 | mmx_blur |
324 | blur |
226 | db 0x0f, 0x31 |
325 | rdtsc |
227 | and al, 1 |
326 | and al, 1 |
Line 228... | Line 327... | ||
228 | jz .blur_ok |
327 | jz .blur_ok |
229 | jmp .dont_blur |
- | |
230 | .do_blur_right: |
- | |
231 | mmx_blur_right |
- | |
Line 232... | Line 328... | ||
232 | .blur_ok: |
328 | jmp .dont_blur |
233 | add dword [blur_right_flag], 0x1000 |
- | |
234 | .dont_blur: |
- | |
235 | 329 | .do_blur_right: |
|
Line 236... | Line 330... | ||
236 | .copy_buffer_to_video: |
330 | blur_right |
237 | ; mov eax, 18 ;@WAITVSYNC(); |
331 | .blur_ok: |
238 | ; mov ebx, 14 |
332 | add dword [blur_right_flag], 0x1000 |
239 | ; int 0x40 |
- | |
240 | 333 | .dont_blur: |
|
241 | mov eax, 48 |
334 | |
242 | mov ebx, 4 |
- | |
243 | int 0x40 |
335 | .copy_buffer_to_video: |
244 | lea edx, [5*65536+eax] |
336 | |
245 | 337 | mcall 48, 4 |
|
Line 278... | Line 370... | ||
278 | je close_app |
370 | je close_app |
279 | jmp MAIN |
371 | jmp MAIN |
Line 280... | Line 372... | ||
280 | 372 | ||
281 | button: |
373 | button: |
282 | ; we have only one button, close |
- | |
283 | ; mov eax, 17 ; Get pressed button code |
- | |
284 | ; int 0x40 |
- | |
285 | ; cmp ah, 1 ; Test x button |
- | |
286 | ; je close_app |
- | |
287 | ; jmp MAIN |
- | |
288 | ; fall through to close_app |
- | |
289 | - | ||
290 | fail: |
- | |
291 | ; Type something here. |
374 | ; we have only one button, close |
292 | close_app: |
375 | close_app: |
293 | mov eax,-1 ; close this program |
376 | mov eax, -1 ; close this program |
Line 294... | Line 377... | ||
294 | int 0x40 |
377 | int 0x40 |
295 | 378 | ||
296 | init_particle: |
379 | init_particle: |
297 | db 0x0f, 0x31 |
380 | rdtsc |
298 | and al, 0x1F |
381 | and al, 0x1F |
299 | jnz .dont_re_init_globals |
382 | jnz .dont_re_init_globals |
300 | ; init x |
383 | ; init x |
Line 331... | Line 414... | ||
331 | and eax, 31 |
414 | and eax, 31 |
332 | sub eax, 15 |
415 | sub eax, 15 |
333 | ;shl ax, 6 |
416 | ;shl ax, 6 |
334 | mov [ebp+Y_SPEED_OFFSET], eax |
417 | mov [ebp + Y_SPEED_OFFSET], eax |
335 | ; init color |
418 | ; init color |
336 | ; mov ax, 255 |
- | |
337 | ;call rand |
- | |
338 | ;and ax, 0xFF |
- | |
339 | mov [ebp+COLOR_OFFSET], dword 255;ax |
419 | mov [ebp + COLOR_OFFSET], dword 255 |
340 | ret |
420 | ret |
Line 341... | Line -... | ||
341 | - | ||
342 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
343 | ; Misc. Functions |
- | |
344 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
- | |
345 | - | ||
346 | 421 | ||
347 | rand: |
422 | rand: |
348 | mov eax, [8+seed] |
423 | mov eax, [8 + seed] |
349 | imul eax, 214013 |
424 | imul eax, 214013 |
350 | add eax, 2531011 |
425 | add eax, 2531011 |
351 | mov [8+seed], eax |
426 | mov [8 + seed], eax |
352 | shr eax, 16 |
427 | shr eax, 16 |
Line 353... | Line 428... | ||
353 | ret |
428 | ret |
354 | - | ||
355 | ; DATA AREA |
- | |
356 | 429 | ||
357 | ; Application Title |
- | |
358 | labelt db 'Firework demo',0 |
- | |
359 | ;labelt db 'Matrix demo',0 |
430 | ; DATA AREA |
360 | - | ||
361 | ;seed: dd 0 |
- | |
362 | ;global_x: dd 160*64 |
431 | window_title db 'Firework demo',0 |
363 | ;global_y: dd 100*64 |
432 | align SIMD_BYTES |
364 | sub_mask: dd 0x01010101, 0x01010101 |
433 | sub_mask db SIMD_BYTES dup 0x01 |
365 | ; x, y, x_speed, y_speed, color |
434 | ; x, y, x_speed, y_speed, color |
366 | particles: times NUM_PARTS dd 0, 0, 0, 0, 0 |
- | |
367 | blur_right_flag: dd 0 |
435 | particles: times NUM_PARTS dd 0, 0, 0, 0, 0 |
368 | ;include 'Dex.inc' |
436 | blur_right_flag dd 0 |
369 | I_END: |
437 | I_END: |
370 | proc_info process_information |
438 | proc_info process_information |
371 | pal rb 256*4 ;dup(0) |
439 | align 16 |
372 | ;pal dd 256 dup(0) |
440 | pal rb 256 * 4 |
373 | ;buffer rb 1024*64 |
441 | align SIMD_BYTES |
- | 442 | buffer rb SCREEN_WIDTH * SCREEN_HEIGHT |
|
- | 443 | E_END: |