Subversion Repositories Kolibri OS

Rev

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: