Rev 2095 | Rev 7125 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2095 | Rev 2552 | ||
---|---|---|---|
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ; A firework demo |
2 | ; A firework demo |
3 | ; Programmed by Yaniv LEVIATHAN |
3 | ; Programmed by Yaniv LEVIATHAN |
4 | ; http://yaniv.leviathanonline.com |
4 | ; http://yaniv.leviathanonline.com |
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 |
11 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
11 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
12 | use32 |
12 | use32 |
13 | org 0x0 |
13 | org 0x0 |
14 | 14 | ||
15 | db 'MENUET00' ; 8 byte id |
15 | db 'MENUET00' ; 8 byte id |
16 | dd 38 ; required os |
16 | dd 38 ; required os |
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 0x100000 ; required amount of memory |
20 | dd 0x00000000 ; reserved=no extended header |
20 | dd 0x00000000 ; reserved=no extended header |
21 | 21 | ||
22 | include '../../../macros.inc' |
22 | include '../../../macros.inc' |
23 | include "aspapi.inc" |
23 | include "aspapi.inc" |
24 | SCREEN_WIDTH equ 320 |
24 | SCREEN_WIDTH equ 320 |
25 | SCREEN_HEIGHT equ 200 |
25 | SCREEN_HEIGHT equ 200 |
26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
26 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
27 | ; Global defines |
27 | ; Global defines |
28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
29 | 29 | ||
30 | NUM_PARTS = 150 |
30 | NUM_PARTS = 150 |
31 | X_OFFSET = 0 |
31 | X_OFFSET = 0 |
32 | Y_OFFSET = 4 |
32 | Y_OFFSET = 4 |
33 | X_SPEED_OFFSET = 8 |
33 | X_SPEED_OFFSET = 8 |
34 | Y_SPEED_OFFSET = 12 |
34 | Y_SPEED_OFFSET = 12 |
35 | COLOR_OFFSET = 16 |
35 | COLOR_OFFSET = 16 |
36 | PART_SIZE = 20 |
36 | PART_SIZE = 20 |
37 | 37 | ||
38 | macro draw_window |
38 | macro draw_window |
39 | { |
39 | { |
40 | local x, xsize, y, ysize, areacolor, caption |
40 | local x, xsize, y, ysize, areacolor, caption |
41 | x = 100 |
41 | x = 100 |
42 | y = 70 |
42 | y = 70 |
43 | xsize = SCREEN_WIDTH+9 |
43 | xsize = SCREEN_WIDTH+9 |
44 | ysize = SCREEN_HEIGHT+4 |
44 | ysize = SCREEN_HEIGHT+4 |
45 | areacolor = 0x14224466 |
45 | areacolor = 0x54224466 |
46 | caption = labelt |
46 | caption = labelt |
47 | mov eax, 12 ; function 12:tell os about windowdraw |
47 | mov eax, 12 ; function 12:tell os about windowdraw |
48 | mov ebx, 1 ; 1, start of draw |
48 | mov ebx, 1 ; 1, start of draw |
49 | int 0x40 |
49 | int 0x40 |
50 | ; DRAW WINDOW |
50 | ; DRAW WINDOW |
51 | mov eax, 48 |
51 | mov eax, 48 |
52 | mov ebx, 4 |
52 | mov ebx, 4 |
53 | int 0x40 |
53 | int 0x40 |
54 | lea ecx, [y*65536+ysize+eax] |
54 | lea ecx, [y*65536+ysize+eax] |
55 | xor eax, eax ; function 0 : define and draw window |
55 | xor eax, eax ; function 0 : define and draw window |
56 | mov ebx, x*65536+xsize ; [x start] *65536 + [x size] |
56 | mov ebx, x*65536+xsize ; [x start] *65536 + [x size] |
57 | mov edx, areacolor ; color of work area RRGGBB |
57 | mov edx, areacolor ; color of work area RRGGBB |
58 | mov edi, caption |
58 | mov edi, caption |
59 | int 0x40 |
59 | int 0x40 |
60 | ; start_draw_window 100,70,SCREEN_WIDTH+9,SCREEN_HEIGHT+29,0x04224466,labelt;, 14;labellen-labelt |
60 | ; start_draw_window 100,70,SCREEN_WIDTH+9,SCREEN_HEIGHT+29,0x04224466,labelt;, 14;labellen-labelt |
61 | end_draw_window |
61 | end_draw_window |
62 | } |
62 | } |
63 | 63 | ||
64 | macro mmx_shade |
64 | macro mmx_shade |
65 | { |
65 | { |
66 | mov ecx, SCREEN_WIDTH*SCREEN_HEIGHT/8 |
66 | mov ecx, SCREEN_WIDTH*SCREEN_HEIGHT/8 |
67 | mov edi,buffer |
67 | mov edi,buffer |
68 | movq mm1, [sub_mask] |
68 | movq mm1, [sub_mask] |
69 | .lop: |
69 | .lop: |
70 | movq mm0, [edi] |
70 | movq mm0, [edi] |
71 | psubusb mm0, mm1 |
71 | psubusb mm0, mm1 |
72 | movq [edi], mm0 |
72 | movq [edi], mm0 |
73 | add edi, 8 |
73 | add edi, 8 |
74 | loop .lop |
74 | loop .lop |
75 | } |
75 | } |
76 | 76 | ||
77 | macro mmx_blur_prepare |
77 | macro mmx_blur_prepare |
78 | { |
78 | { |
79 | mov ecx, (SCREEN_WIDTH*SCREEN_HEIGHT-330*2)/8 |
79 | mov ecx, (SCREEN_WIDTH*SCREEN_HEIGHT-330*2)/8 |
80 | mov edi,buffer + 328 |
80 | mov edi,buffer + 328 |
81 | } |
81 | } |
82 | 82 | ||
83 | macro mmx_blur |
83 | macro mmx_blur |
84 | { |
84 | { |
85 | local .lop |
85 | local .lop |
86 | .lop: |
86 | .lop: |
87 | movq mm0, [edi] |
87 | movq mm0, [edi] |
88 | movq mm1, [edi+1] |
88 | movq mm1, [edi+1] |
89 | movq mm2, [edi-1] |
89 | movq mm2, [edi-1] |
90 | movq mm3, mm0 |
90 | movq mm3, mm0 |
91 | movq mm4, [edi-SCREEN_WIDTH] |
91 | movq mm4, [edi-SCREEN_WIDTH] |
92 | movq mm5, [edi+SCREEN_WIDTH] |
92 | movq mm5, [edi+SCREEN_WIDTH] |
93 | 93 | ||
94 | pavgb mm0, mm1 ; mm0 = avg(cur,cur+1) |
94 | pavgb mm0, mm1 ; mm0 = avg(cur,cur+1) |
95 | pavgb mm3, mm2 ; mm3 = avg(cur,cur-1) |
95 | pavgb mm3, mm2 ; mm3 = avg(cur,cur-1) |
96 | pavgb mm4, mm5 ; mm4 = avg(cur+320,cur-320) |
96 | pavgb mm4, mm5 ; mm4 = avg(cur+320,cur-320) |
97 | pavgb mm3, mm4 ; mm3 = avg(avg(cur,cur-1),avg(cur+320,cur-320)) |
97 | pavgb mm3, mm4 ; mm3 = avg(avg(cur,cur-1),avg(cur+320,cur-320)) |
98 | pavgb mm0, mm3 ; mm0 = avg(avg(cur,cur+1), |
98 | pavgb mm0, mm3 ; mm0 = avg(avg(cur,cur+1), |
99 | 99 | ||
100 | movq [edi], mm0 |
100 | movq [edi], mm0 |
101 | add edi, 8 |
101 | add edi, 8 |
102 | loop .lop |
102 | loop .lop |
103 | } |
103 | } |
104 | 104 | ||
105 | 105 | ||
106 | macro mmx_blur_right |
106 | macro mmx_blur_right |
107 | { |
107 | { |
108 | local .lop |
108 | local .lop |
109 | .lop: |
109 | .lop: |
110 | movq mm0, [edi] |
110 | movq mm0, [edi] |
111 | movq mm1, [edi+1] |
111 | movq mm1, [edi+1] |
112 | movq mm2, [edi+SCREEN_WIDTH] |
112 | movq mm2, [edi+SCREEN_WIDTH] |
113 | movq mm3, [edi+SCREEN_WIDTH+1] |
113 | movq mm3, [edi+SCREEN_WIDTH+1] |
114 | pavgb mm0, mm1 |
114 | pavgb mm0, mm1 |
115 | pavgb mm3, mm2 |
115 | pavgb mm3, mm2 |
116 | pavgb mm0, mm3 |
116 | pavgb mm0, mm3 |
117 | movq [edi], mm0 |
117 | movq [edi], mm0 |
118 | add edi, 8 |
118 | add edi, 8 |
119 | loop .lop |
119 | loop .lop |
120 | } |
120 | } |
121 | 121 | ||
122 | STARTAPP: |
122 | STARTAPP: |
123 | 123 | ||
124 | init_palette: |
124 | init_palette: |
125 | mov edi, pal |
125 | mov edi, pal |
126 | xor eax, eax |
126 | xor eax, eax |
127 | red_loop: |
127 | red_loop: |
128 | stosd |
128 | stosd |
129 | stosd |
129 | stosd |
130 | add eax, 0x040000 |
130 | add eax, 0x040000 |
131 | and eax, 0xFFFFFF |
131 | and eax, 0xFFFFFF |
132 | jnz red_loop |
132 | jnz red_loop |
133 | 133 | ||
134 | mov eax, 63*4*65536 |
134 | mov eax, 63*4*65536 |
135 | @@: |
135 | @@: |
136 | stosd |
136 | stosd |
137 | stosd |
137 | stosd |
138 | add ax, 0x0404 |
138 | add ax, 0x0404 |
139 | jnc @b |
139 | jnc @b |
140 | 140 | ||
141 | ;zero_buffer: |
141 | ;zero_buffer: |
142 | mov ecx, SCREEN_WIDTH*SCREEN_HEIGHT/4 |
142 | mov ecx, SCREEN_WIDTH*SCREEN_HEIGHT/4 |
143 | ; mov edi,buffer |
143 | ; mov edi,buffer |
144 | xor eax, eax |
144 | xor eax, eax |
145 | rep stosd |
145 | rep stosd |
146 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
146 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
147 | ; Main Functions |
147 | ; Main Functions |
148 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
148 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
149 | virtual at esp |
149 | virtual at esp |
150 | global_x dd ? |
150 | global_x dd ? |
151 | global_y dd ? |
151 | global_y dd ? |
152 | seed dd ? |
152 | seed dd ? |
153 | end virtual |
153 | end virtual |
154 | 154 | ||
155 | db 0x0f, 0x31 |
155 | db 0x0f, 0x31 |
156 | push eax ; seed |
156 | push eax ; seed |
157 | push 100*64 ; global_y |
157 | push 100*64 ; global_y |
158 | push 160*64 ; global_x |
158 | push 160*64 ; global_x |
159 | 159 | ||
160 | jmp MAIN |
160 | jmp MAIN |
161 | 161 | ||
162 | 162 | ||
163 | red: |
163 | red: |
164 | mcall 9,proc_info,-1 |
164 | mcall 9,proc_info,-1 |
165 | draw_window |
165 | draw_window |
166 | MAIN: |
166 | MAIN: |
167 | test [proc_info.wnd_state], 0x04 |
167 | test [proc_info.wnd_state], 0x04 |
168 | jnz still |
168 | jnz still |
169 | mov ecx, NUM_PARTS |
169 | mov ecx, NUM_PARTS |
170 | mov ebp, particles |
170 | mov ebp, particles |
171 | .advance_particles: |
171 | .advance_particles: |
172 | mov eax, [ebp+X_OFFSET] |
172 | mov eax, [ebp+X_OFFSET] |
173 | mov ebx, [ebp+Y_OFFSET] |
173 | mov ebx, [ebp+Y_OFFSET] |
174 | 174 | ||
175 | sar eax, 6 |
175 | sar eax, 6 |
176 | sar ebx, 6 |
176 | sar ebx, 6 |
177 | 177 | ||
178 | cmp eax, 5 |
178 | cmp eax, 5 |
179 | jb .new_particle |
179 | jb .new_particle |
180 | cmp eax, SCREEN_WIDTH-5;315 |
180 | cmp eax, SCREEN_WIDTH-5;315 |
181 | jge .new_particle |
181 | jge .new_particle |
182 | cmp ebx, 5 |
182 | cmp ebx, 5 |
183 | jb .new_particle |
183 | jb .new_particle |
184 | cmp ebx, SCREEN_HEIGHT-5;195 |
184 | cmp ebx, SCREEN_HEIGHT-5;195 |
185 | jl .part_ok |
185 | jl .part_ok |
186 | 186 | ||
187 | .new_particle: |
187 | .new_particle: |
188 | call init_particle |
188 | call init_particle |
189 | jmp .advance_particles |
189 | jmp .advance_particles |
190 | 190 | ||
191 | .part_ok: |
191 | .part_ok: |
192 | ; mov edi, eax |
192 | ; mov edi, eax |
193 | ; add edi,buffer |
193 | ; add edi,buffer |
194 | ; mov eax, SCREEN_WIDTH |
194 | ; mov eax, SCREEN_WIDTH |
195 | ; mul ebx |
195 | ; mul ebx |
196 | imul edi, ebx, SCREEN_WIDTH |
196 | imul edi, ebx, SCREEN_WIDTH |
197 | mov dl, [ebp+COLOR_OFFSET] |
197 | mov dl, [ebp+COLOR_OFFSET] |
198 | mov [buffer+eax+edi], dl |
198 | mov [buffer+eax+edi], dl |
199 | 199 | ||
200 | ; mov eax, [ebp+X_OFFSET] |
200 | ; mov eax, [ebp+X_OFFSET] |
201 | ; mov ebx, [ebp+Y_OFFSET] |
201 | ; mov ebx, [ebp+Y_OFFSET] |
202 | ; add eax, [ebp+X_SPEED_OFFSET] |
202 | ; add eax, [ebp+X_SPEED_OFFSET] |
203 | ; add ebx, [ebp+Y_SPEED_OFFSET] |
203 | ; add ebx, [ebp+Y_SPEED_OFFSET] |
204 | ; mov [ebp+X_OFFSET], eax |
204 | ; mov [ebp+X_OFFSET], eax |
205 | ; mov [ebp+Y_OFFSET], ebx |
205 | ; mov [ebp+Y_OFFSET], ebx |
206 | mov eax, [ebp+X_SPEED_OFFSET] |
206 | mov eax, [ebp+X_SPEED_OFFSET] |
207 | add [ebp+X_OFFSET], eax |
207 | add [ebp+X_OFFSET], eax |
208 | mov eax, [ebp+Y_SPEED_OFFSET] |
208 | mov eax, [ebp+Y_SPEED_OFFSET] |
209 | add [ebp+Y_OFFSET], eax |
209 | add [ebp+Y_OFFSET], eax |
210 | 210 | ||
211 | db 0x0f, 0x31 |
211 | db 0x0f, 0x31 |
212 | and al, 0x7F |
212 | and al, 0x7F |
213 | jnz .dont_inc_y_speed |
213 | jnz .dont_inc_y_speed |
214 | inc dword [ebp+Y_SPEED_OFFSET] |
214 | inc dword [ebp+Y_SPEED_OFFSET] |
215 | .dont_inc_y_speed: |
215 | .dont_inc_y_speed: |
216 | 216 | ||
217 | add ebp, PART_SIZE |
217 | add ebp, PART_SIZE |
218 | loop .advance_particles |
218 | loop .advance_particles |
219 | 219 | ||
220 | mmx_shade |
220 | mmx_shade |
221 | ; jmp .copy_buffer_to_video |
221 | ; jmp .copy_buffer_to_video |
222 | mmx_blur_prepare |
222 | mmx_blur_prepare |
223 | test dword [blur_right_flag] , 0x800000 |
223 | test dword [blur_right_flag] , 0x800000 |
224 | jnz .do_blur_right |
224 | jnz .do_blur_right |
225 | mmx_blur |
225 | mmx_blur |
226 | db 0x0f, 0x31 |
226 | db 0x0f, 0x31 |
227 | and al, 1 |
227 | and al, 1 |
228 | jz .blur_ok |
228 | jz .blur_ok |
229 | jmp .dont_blur |
229 | jmp .dont_blur |
230 | .do_blur_right: |
230 | .do_blur_right: |
231 | mmx_blur_right |
231 | mmx_blur_right |
232 | .blur_ok: |
232 | .blur_ok: |
233 | add dword [blur_right_flag], 0x1000 |
233 | add dword [blur_right_flag], 0x1000 |
234 | .dont_blur: |
234 | .dont_blur: |
235 | 235 | ||
236 | .copy_buffer_to_video: |
236 | .copy_buffer_to_video: |
237 | ; mov eax, 18 ;@WAITVSYNC(); |
237 | ; mov eax, 18 ;@WAITVSYNC(); |
238 | ; mov ebx, 14 |
238 | ; mov ebx, 14 |
239 | ; int 0x40 |
239 | ; int 0x40 |
240 | 240 | ||
241 | mov eax, 48 |
241 | mov eax, 48 |
242 | mov ebx, 4 |
242 | mov ebx, 4 |
243 | int 0x40 |
243 | int 0x40 |
244 | lea edx, [5*65536+eax] |
244 | lea edx, [5*65536+eax] |
245 | 245 | ||
246 | mov eax, 65 ;copyfard(0xA000,0,screen,0,16000); |
246 | mov eax, 65 ;copyfard(0xA000,0,screen,0,16000); |
247 | mov ebx, buffer;dword [screen] |
247 | mov ebx, buffer;dword [screen] |
248 | mov ecx, SCREEN_WIDTH*65536+SCREEN_HEIGHT ;ecx = w*65536+h |
248 | mov ecx, SCREEN_WIDTH*65536+SCREEN_HEIGHT ;ecx = w*65536+h |
249 | ; mov edx, 5*65536+25 ;edx = x*65536+y |
249 | ; mov edx, 5*65536+25 ;edx = x*65536+y |
250 | push 8 |
250 | push 8 |
251 | pop esi |
251 | pop esi |
252 | ;mov esi, 8 |
252 | ;mov esi, 8 |
253 | mov edi, pal |
253 | mov edi, pal |
254 | xor ebp, ebp |
254 | xor ebp, ebp |
255 | int 0x40 |
255 | int 0x40 |
256 | 256 | ||
257 | 257 | ||
258 | still: |
258 | still: |
259 | mov eax, 11 ; Test if there is an event in the queue. |
259 | mov eax, 11 ; Test if there is an event in the queue. |
260 | int 0x40 |
260 | int 0x40 |
261 | 261 | ||
262 | dec eax ; redraw request ? |
262 | dec eax ; redraw request ? |
263 | jz red |
263 | jz red |
264 | dec eax ; key in buffer ? |
264 | dec eax ; key in buffer ? |
265 | jz key |
265 | jz key |
266 | dec eax ; button in buffer ? |
266 | dec eax ; button in buffer ? |
267 | jz button |
267 | jz button |
268 | 268 | ||
269 | jmp MAIN |
269 | jmp MAIN |
270 | 270 | ||
271 | 271 | ||
272 | key: |
272 | key: |
273 | mov eax, 2 |
273 | mov eax, 2 |
274 | int 0x40 |
274 | int 0x40 |
275 | ; cmp ah, 1 ; Test Esc in Scan |
275 | ; cmp ah, 1 ; Test Esc in Scan |
276 | ; je close_app |
276 | ; je close_app |
277 | cmp ah, 27 ; Test Esc in ASCII |
277 | cmp ah, 27 ; Test Esc in ASCII |
278 | je close_app |
278 | je close_app |
279 | jmp MAIN |
279 | jmp MAIN |
280 | 280 | ||
281 | button: |
281 | button: |
282 | ; we have only one button, close |
282 | ; we have only one button, close |
283 | ; mov eax, 17 ; Get pressed button code |
283 | ; mov eax, 17 ; Get pressed button code |
284 | ; int 0x40 |
284 | ; int 0x40 |
285 | ; cmp ah, 1 ; Test x button |
285 | ; cmp ah, 1 ; Test x button |
286 | ; je close_app |
286 | ; je close_app |
287 | ; jmp MAIN |
287 | ; jmp MAIN |
288 | ; fall through to close_app |
288 | ; fall through to close_app |
289 | 289 | ||
290 | fail: |
290 | fail: |
291 | ; Type something here. |
291 | ; Type something here. |
292 | close_app: |
292 | close_app: |
293 | mov eax,-1 ; close this program |
293 | mov eax,-1 ; close this program |
294 | int 0x40 |
294 | int 0x40 |
295 | 295 | ||
296 | init_particle: |
296 | init_particle: |
297 | db 0x0f, 0x31 |
297 | db 0x0f, 0x31 |
298 | and al, 0x1F |
298 | and al, 0x1F |
299 | jnz .dont_re_init_globals |
299 | jnz .dont_re_init_globals |
300 | ; init x |
300 | ; init x |
301 | call rand |
301 | call rand |
302 | cdq |
302 | cdq |
303 | ;xor dx, dx |
303 | ;xor dx, dx |
304 | mov ebx, SCREEN_WIDTH |
304 | mov ebx, SCREEN_WIDTH |
305 | div ebx |
305 | div ebx |
306 | shl edx, 6 |
306 | shl edx, 6 |
307 | mov [4+global_x], edx |
307 | mov [4+global_x], edx |
308 | ; init y |
308 | ; init y |
309 | call rand |
309 | call rand |
310 | cdq |
310 | cdq |
311 | ;xor dx, dx |
311 | ;xor dx, dx |
312 | mov ebx, SCREEN_HEIGHT |
312 | mov ebx, SCREEN_HEIGHT |
313 | div ebx |
313 | div ebx |
314 | shl edx, 6 |
314 | shl edx, 6 |
315 | mov [4+global_y], edx |
315 | mov [4+global_y], edx |
316 | .dont_re_init_globals: |
316 | .dont_re_init_globals: |
317 | ; init x |
317 | ; init x |
318 | mov eax, [4+global_x] |
318 | mov eax, [4+global_x] |
319 | mov [ebp+X_OFFSET], eax |
319 | mov [ebp+X_OFFSET], eax |
320 | ; init y |
320 | ; init y |
321 | mov eax, [4+global_y] |
321 | mov eax, [4+global_y] |
322 | mov [ebp+Y_OFFSET], eax |
322 | mov [ebp+Y_OFFSET], eax |
323 | ; init x speed |
323 | ; init x speed |
324 | call rand |
324 | call rand |
325 | and eax, 31 |
325 | and eax, 31 |
326 | sub eax, 15 |
326 | sub eax, 15 |
327 | ;shl ax, 6 |
327 | ;shl ax, 6 |
328 | mov [ebp+X_SPEED_OFFSET], eax |
328 | mov [ebp+X_SPEED_OFFSET], eax |
329 | ; init y speed |
329 | ; init y speed |
330 | call rand |
330 | call rand |
331 | and eax, 31 |
331 | and eax, 31 |
332 | sub eax, 15 |
332 | sub eax, 15 |
333 | ;shl ax, 6 |
333 | ;shl ax, 6 |
334 | mov [ebp+Y_SPEED_OFFSET], eax |
334 | mov [ebp+Y_SPEED_OFFSET], eax |
335 | ; init color |
335 | ; init color |
336 | ; mov ax, 255 |
336 | ; mov ax, 255 |
337 | ;call rand |
337 | ;call rand |
338 | ;and ax, 0xFF |
338 | ;and ax, 0xFF |
339 | mov [ebp+COLOR_OFFSET], dword 255;ax |
339 | mov [ebp+COLOR_OFFSET], dword 255;ax |
340 | ret |
340 | ret |
341 | 341 | ||
342 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
342 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
343 | ; Misc. Functions |
343 | ; Misc. Functions |
344 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
344 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
345 | 345 | ||
346 | 346 | ||
347 | rand: |
347 | rand: |
348 | mov eax, [8+seed] |
348 | mov eax, [8+seed] |
349 | imul eax, 214013 |
349 | imul eax, 214013 |
350 | add eax, 2531011 |
350 | add eax, 2531011 |
351 | mov [8+seed], eax |
351 | mov [8+seed], eax |
352 | shr eax, 16 |
352 | shr eax, 16 |
353 | ret |
353 | ret |
354 | 354 | ||
355 | ; DATA AREA |
355 | ; DATA AREA |
356 | 356 | ||
357 | ; Application Title |
357 | ; Application Title |
358 | labelt db 'Firework demo',0 |
358 | labelt db 'Firework demo',0 |
359 | ;labelt db 'Matrix demo',0 |
359 | ;labelt db 'Matrix demo',0 |
360 | 360 | ||
361 | ;seed: dd 0 |
361 | ;seed: dd 0 |
362 | ;global_x: dd 160*64 |
362 | ;global_x: dd 160*64 |
363 | ;global_y: dd 100*64 |
363 | ;global_y: dd 100*64 |
364 | sub_mask: dd 0x01010101, 0x01010101 |
364 | sub_mask: dd 0x01010101, 0x01010101 |
365 | ; x, y, x_speed, y_speed, color |
365 | ; x, y, x_speed, y_speed, color |
366 | particles: times NUM_PARTS dd 0, 0, 0, 0, 0 |
366 | particles: times NUM_PARTS dd 0, 0, 0, 0, 0 |
367 | blur_right_flag: dd 0 |
367 | blur_right_flag: dd 0 |
368 | ;include 'Dex.inc' |
368 | ;include 'Dex.inc' |
369 | I_END: |
369 | I_END: |
370 | proc_info process_information |
370 | proc_info process_information |
371 | pal rb 256*4 ;dup(0) |
371 | pal rb 256*4 ;dup(0) |
372 | ;pal dd 256 dup(0) |
372 | ;pal dd 256 dup(0) |
373 | ;buffer rb 1024*64 |
373 | ;buffer rb 1024*64 |
374 | buffer rb SCREEN_WIDTH*SCREEN_HEIGHT |
374 | buffer rb SCREEN_WIDTH*SCREEN_HEIGHT |