Subversion Repositories Kolibri OS

Rev

Rev 1245 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1245 Rev 1776
Line 20... Line 20...
20
.x2    equ word[ebp-6]
20
.x2    equ word[ebp-6]
21
.y2    equ word[ebp-8]
21
.y2    equ word[ebp-8]
22
.x3    equ word[ebp-10]
22
.x3    equ word[ebp-10]
23
.y3    equ word[ebp-12]
23
.y3    equ word[ebp-12]
Line 24... Line 24...
24
 
24
 
25
.dc12r equ dword[ebp-16]
25
.dx12  equ dword[ebp-16]
26
.dc12g equ dword[ebp-20]
26
.dc12r equ dword[ebp-20]
27
.dc12b equ dword[ebp-24]
27
.dc12g equ [ebp-24]
28
.dc13r equ dword[ebp-28]
28
.dc12b equ dword[ebp-28]
29
.dc13g equ dword[ebp-32]
29
.dx13  equ dword[ebp-32]
30
.dc13b equ dword[ebp-36]
30
.dc13r equ dword[ebp-36]
31
.dc23r equ dword[ebp-40]
31
.dc13g equ [ebp-40]
32
.dc23g equ dword[ebp-44]
32
.dc13b equ dword[ebp-44]
33
.dc23b equ dword[ebp-48]
-
 
34
 
33
.dx23  equ dword[ebp-48]
35
.c1r   equ dword[ebp-52]
34
.dc23r equ dword[ebp-52]
36
.c1g   equ dword[ebp-56]
35
.dc23g equ [ebp-56]
-
 
36
.dc23b equ dword[ebp-60]
37
.c1b   equ dword[ebp-60]
37
 
38
.c2r   equ dword[ebp-64]
38
.c1r   equ dword[ebp-64]
39
.c2g   equ dword[ebp-68]
39
.c1g   equ [ebp-68]
40
.c2b   equ dword[ebp-72]
-
 
41
 
40
.c1b   equ dword[ebp-72]
42
.dx12  equ dword[ebp-76]
41
.c2r   equ dword[ebp-76]
43
.dx13  equ dword[ebp-80]
42
.c2g   equ [ebp-80]
44
.dx23  equ dword[ebp-84]
-
 
Line 45... Line 43...
45
 
43
.c2b   equ dword[ebp-84]
46
 
44
 
Line 71... Line 69...
71
       jmp .sort3
69
       jmp .sort3
72
 .sort2:
70
 .sort2:
73
       push eax   ;store triangle coordinates in user friendly variables
71
       push eax   ;store triangle coordinates in user friendly variables
74
       push ebx
72
       push ebx
75
       push ecx
73
       push ecx
76
       sub esp,72 ; set correctly value of esp
74
    ;   sub esp,72 ; set correctly value of esp
Line 77... Line 75...
77
 
75
 
78
       mov edx,eax    ; check only X triangle coordinate
76
       mov edx,eax    ; check only X triangle coordinate
79
       or edx,ebx
77
       or edx,ebx
80
       or edx,ecx
78
       or edx,ecx
Line 92... Line 90...
92
 
90
 
93
 
91
 
94
       mov bx,.y2	; calc deltas
92
       mov bx,.y2	; calc deltas
-
 
93
       sub bx,.y1
-
 
94
       jnz .gt_dx12_make
-
 
95
       xor edx,edx
-
 
96
       mov ecx,4
-
 
97
     @@:
95
       sub bx,.y1
98
       push edx
96
       jnz .gt_dx12_make
99
       loop @b
97
       mov .dx12,0
100
     ;  mov .dx12,0
98
       mov .dc12r,0
101
     ;  mov .dc12r,0
99
       mov .dc12g,0
102
     ;  mov .dc12g,0
100
       mov .dc12b,0
103
     ;  mov .dc12b,0
Line 101... Line 104...
101
       jmp .gt_dx12_done
104
       jmp .gt_dx12_done
102
  .gt_dx12_make:
105
  .gt_dx12_make:
103
 
106
 
104
       mov ax,.x2
107
       mov ax,.x2
105
       sub ax,.x1
108
       sub ax,.x1
106
       cwde
109
       cwde
107
       movsx ebx,bx
110
       movsx ebx,bx
108
       shl eax,ROUND
111
       shl eax,ROUND
-
 
112
       cdq
Line 109... Line 113...
109
       cdq
113
       idiv ebx
110
       idiv ebx
114
     ;  mov .dx12,eax
111
       mov .dx12,eax
115
       push eax
112
 
116
 
113
       mov ax,word[.col2r]
117
       mov ax,word[.col2r]
114
       sub ax,word[.col1r]
118
       sub ax,word[.col1r]
115
       cwde
119
       cwde
-
 
120
       shl eax,ROUND
-
 
121
       cdq
116
       shl eax,ROUND
122
       idiv ebx
117
       cdq
123
      ; mov .dc12r,eax
118
       idiv ebx
124
       push eax
119
       mov .dc12r,eax
125
 
120
       mov ax,word[.col2g]
126
       mov ax,word[.col2g]
121
       sub ax,word[.col1g]
127
       sub ax,word[.col1g]
122
       cwde
128
       cwde
-
 
129
       shl eax,ROUND
-
 
130
       cdq
123
       shl eax,ROUND
131
       idiv ebx
124
       cdq
132
     ;  mov .dc12g,eax
125
       idiv ebx
133
       push eax
126
       mov .dc12g,eax
134
 
127
       mov ax,word[.col2b]
135
       mov ax,word[.col2b]
128
       sub ax,word[.col1b]
136
       sub ax,word[.col1b]
129
       cwde
137
       cwde
-
 
138
       shl eax,ROUND
130
       shl eax,ROUND
139
       cdq
131
       cdq
-
 
132
       idiv ebx
140
       idiv ebx
133
       mov .dc12b,eax
141
     ;  mov .dc12b,eax
134
.gt_dx12_done:
142
       push eax
-
 
143
.gt_dx12_done:
-
 
144
       mov bx,.y3
-
 
145
       sub bx,.y1
-
 
146
       jnz .gt_dx13_make
-
 
147
       xor edx,edx
135
 
148
       mov ecx,4
136
       mov bx,.y3
149
     @@:
137
       sub bx,.y1
150
       push edx
138
       jnz .gt_dx13_make
151
       loop @b
139
       mov .dx13,0
152
   ;    mov .dx13,0
140
       mov .dc13r,0
153
   ;    mov .dc13r,0
141
       mov .dc13g,0
154
   ;    mov .dc13g,0
142
       mov .dc13b,0
155
   ;    mov .dc13b,0
143
       jmp .gt_dx13_done
156
       jmp .gt_dx13_done
144
.gt_dx13_make:
157
.gt_dx13_make:
145
       mov ax,.x3
158
       mov ax,.x3
146
       sub ax,.x1
159
       sub ax,.x1
147
       cwde
160
       cwde
148
       movsx ebx,bx
161
       movsx ebx,bx
-
 
162
       shl eax,ROUND
Line 149... Line 163...
149
       shl eax,ROUND
163
       cdq
150
       cdq
164
       idiv ebx
151
       idiv ebx
165
   ;    mov .dx13,eax
152
       mov .dx13,eax
166
       push eax
153
 
167
 
154
       mov ax,word[.col3r]
168
       mov ax,word[.col3r]
155
       sub ax,word[.col1r]
169
       sub ax,word[.col1r]
-
 
170
       cwde
-
 
171
       shl eax,ROUND
156
       cwde
172
       cdq
157
       shl eax,ROUND
173
       idiv ebx
158
       cdq
174
    ;   mov .dc13r,eax
159
       idiv ebx
175
       push eax
160
       mov .dc13r,eax
176
 
161
       mov ax,word[.col3g]
177
       mov ax,word[.col3g]
162
       sub ax,word[.col1g]
178
       sub ax,word[.col1g]
-
 
179
       cwde
163
       cwde
180
       shl eax,ROUND
164
       shl eax,ROUND
181
       cdq
165
       cdq
182
       idiv ebx
166
       idiv ebx
183
     ;  mov .dc13g,eax
167
       mov .dc13g,eax
184
       push eax
168
       mov ax,word[.col3b]
185
       mov ax,word[.col3b]
169
       sub ax,word[.col1b]
186
       sub ax,word[.col1b]
-
 
187
       cwde
170
       cwde
188
       shl eax,ROUND
171
       shl eax,ROUND
-
 
172
       cdq
189
       cdq
173
       idiv ebx
190
       idiv ebx
174
       mov .dc13b,eax
191
    ;   mov .dc13b,eax
-
 
192
       push eax
-
 
193
.gt_dx13_done:
-
 
194
       mov bx,.y3
-
 
195
       sub bx,.y2
-
 
196
       jnz .gt_dx23_make
175
.gt_dx13_done:
197
       xor edx,edx
176
 
198
       mov ecx,4
177
       mov bx,.y3
199
     @@:
178
       sub bx,.y2
200
       push edx
179
       jnz .gt_dx23_make
201
       loop @b
180
       mov .dx23,0
202
   ;    mov .dx23,0
181
       mov .dc23r,0
203
   ;    mov .dc23r,0
182
       mov .dc23g,0
204
   ;    mov .dc23g,0
183
       mov .dc23b,0
205
   ;    mov .dc23b,0
184
       jmp .gt_dx23_done
206
       jmp .gt_dx23_done
185
.gt_dx23_make:
207
.gt_dx23_make:
186
       mov ax,.x3
208
       mov ax,.x3
187
       sub ax,.x2
209
       sub ax,.x2
188
       cwde
210
       cwde
-
 
211
       movsx ebx,bx
Line 189... Line 212...
189
       movsx ebx,bx
212
       shl eax,ROUND
190
       shl eax,ROUND
213
       cdq
191
       cdq
214
       idiv ebx
192
       idiv ebx
215
     ; mov .dx23,eax
193
       mov .dx23,eax
216
       push eax
194
 
217
 
195
       mov ax,word[.col3r]
218
       mov ax,word[.col3r]
-
 
219
       sub ax,word[.col2r]
-
 
220
       cwde
-
 
221
       shl eax,ROUND
196
       sub ax,word[.col2r]
222
       cdq
197
       cwde
223
       idiv ebx
198
       shl eax,ROUND
224
      ; mov .dc23r,eax
199
       cdq
225
       push eax
200
       idiv ebx
226
 
201
       mov .dc23r,eax
227
 
202
       mov ax,word[.col3g]
228
       mov ax,word[.col3g]
-
 
229
       sub ax,word[.col2g]
-
 
230
       cwde
203
       sub ax,word[.col2g]
231
       shl eax,ROUND
204
       cwde
232
       cdq
205
       shl eax,ROUND
233
       idiv ebx
206
       cdq
234
     ;  mov .dc23g,eax
207
       idiv ebx
235
       push eax
208
       mov .dc23g,eax
236
 
209
       mov ax,word[.col3b]
237
       mov ax,word[.col3b]
210
       sub ax,word[.col2b]
238
       sub ax,word[.col2b]
Line -... Line 239...
-
 
239
       cwde
-
 
240
       shl eax,ROUND
211
       cwde
241
       cdq
212
       shl eax,ROUND
242
       idiv ebx
213
       cdq
243
    ;   mov .dc23b,eax
214
       idiv ebx
244
       push eax
215
       mov .dc23b,eax
245
 
Line 238... Line 268...
238
       push ebx 		      ; ebx - cur x2
268
       push ebx 		      ; ebx - cur x2
239
       push cx			      ; cx  - cur y
269
       push cx			      ; cx  - cur y
240
       push edi
270
       push edi
241
       push ebp
271
       push ebp
Line -... Line 272...
-
 
272
 
-
 
273
       sar ebx,ROUND
242
 
274
       push bx
243
       mov edx,.c2r		 ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
275
       mov edx,.c2r		 ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
244
       sar edx,ROUND
276
       sar edx,ROUND
245
       push dx
277
       push dx
246
       mov edx,.c2g
278
       mov edx,.c2g
247
       sar edx,ROUND
279
       sar edx,ROUND
248
       push dx
280
       push dx
249
       mov edx,.c2b
281
       mov edx,.c2b
250
       sar edx,ROUND
282
       sar edx,ROUND
-
 
283
       push dx
-
 
284
 
-
 
285
       sar eax,ROUND
251
       push dx
286
       push ax
252
       mov edx,.c1r
287
       mov edx,.c1r
253
       sar edx,ROUND
288
       sar edx,ROUND
254
       push dx
289
       push dx
255
       mov edx,.c1g
290
       mov edx,.c1g
256
       sar edx,ROUND
291
       sar edx,ROUND
257
       push dx
292
       push dx
258
       mov edx,.c1b
293
       mov edx,.c1b
259
       sar edx,ROUND
294
       sar edx,ROUND
260
       push dx
295
       push dx
261
       push cx
-
 
262
       sar ebx,ROUND
-
 
263
       push bx
-
 
264
       sar eax,ROUND
-
 
265
       push ax
296
       push cx
Line 266... Line 297...
266
       call gouraud_line
297
       call gouraud_line
267
 
298
 
268
       pop ebp
299
       pop ebp
269
       pop edi
300
       pop edi
270
       pop cx
301
       pop cx
Line -... Line 302...
-
 
302
       pop ebx
-
 
303
       pop eax
-
 
304
 
-
 
305
if Ext >= MMX
-
 
306
       movq mm0,.c1g
271
       pop ebx
307
       paddd mm0,.dc13g
272
       pop eax
308
       movq .c1g,mm0
273
 
309
else
274
       mov edx,.dc13r
310
       mov edx,.dc13r
-
 
311
       add .c1r,edx
275
       add .c1r,edx
312
       mov edx,.dc13g
276
       mov edx,.dc13g
313
       add .c1g,edx
-
 
314
end if
-
 
315
       mov edx,.dc13b
-
 
316
       add .c1b,edx
-
 
317
if Ext >= MMX
-
 
318
       movq mm0,.c2g
277
       add .c1g,edx
319
       paddd mm0,.dc12g
278
       mov edx,.dc13b
320
       movq .c2g,mm0
279
       add .c1b,edx
321
else
280
       mov edx,.dc12r
322
       mov edx,.dc12r
-
 
323
       add .c2r,edx
281
       add .c2r,edx
324
       mov edx,.dc12g
282
       mov edx,.dc12g
325
       add .c2g,edx
Line 283... Line 326...
283
       add .c2g,edx
326
end if
284
       mov edx,.dc12b
327
       mov edx,.dc12b
Line 311... Line 354...
311
       push ebx 		      ; ebx - cur x2
354
       push ebx 		      ; ebx - cur x2
312
       push cx
355
       push cx
313
       push edi
356
       push edi
314
       push ebp
357
       push ebp
Line -... Line 358...
-
 
358
 
-
 
359
       sar ebx,ROUND
315
 
360
       push bx
316
       mov edx,.c2r
361
       mov edx,.c2r
317
       sar edx,ROUND
362
       sar edx,ROUND
318
       push dx
363
       push dx
319
       mov edx,.c2g
364
       mov edx,.c2g
320
       sar edx,ROUND
365
       sar edx,ROUND
321
       push dx
366
       push dx
322
       mov edx,.c2b
367
       mov edx,.c2b
323
       sar edx,ROUND
368
       sar edx,ROUND
-
 
369
       push dx
-
 
370
 
-
 
371
       sar eax,ROUND
324
       push dx
372
       push ax
325
       mov edx,.c1r
373
       mov edx,.c1r
326
       sar edx,ROUND
374
       sar edx,ROUND
327
       push dx
375
       push dx
328
       mov edx,.c1g
376
       mov edx,.c1g
329
       sar edx,ROUND
377
       sar edx,ROUND
330
       push dx
378
       push dx
331
       mov edx,.c1b
379
       mov edx,.c1b
332
       sar edx,ROUND
380
       sar edx,ROUND
333
       push dx
381
       push dx
334
       push cx
-
 
335
       sar ebx,ROUND
-
 
336
       push bx
-
 
337
       sar eax,ROUND
-
 
338
       push ax
382
       push cx
Line 339... Line 383...
339
       call gouraud_line
383
       call gouraud_line
340
 
384
 
341
       pop ebp
385
       pop ebp
342
       pop edi
386
       pop edi
343
       pop cx
387
       pop cx
Line -... Line 388...
-
 
388
       pop ebx
-
 
389
       pop eax
-
 
390
 
-
 
391
if Ext >= MMX
-
 
392
       movq mm0,.c1g
344
       pop ebx
393
       paddd mm0,.dc13g
345
       pop eax
394
       movq .c1g,mm0
346
 
395
else
347
       mov edx,.dc13r
396
       mov edx,.dc13r
-
 
397
       add .c1r,edx
348
       add .c1r,edx
398
       mov edx,.dc13g
349
       mov edx,.dc13g
399
       add .c1g,edx
-
 
400
end if
-
 
401
       mov edx,.dc13b
-
 
402
       add .c1b,edx
-
 
403
if Ext >= MMX
-
 
404
       movq mm0,.c2g
350
       add .c1g,edx
405
       paddd mm0,.dc23g
351
       mov edx,.dc13b
406
       movq .c2g,mm0
352
       add .c1b,edx
407
else
353
       mov edx,.dc23r
408
       mov edx,.dc23r
-
 
409
       add .c2r,edx
354
       add .c2r,edx
410
       mov edx,.dc23g
355
       mov edx,.dc23g
411
       add .c2g,edx
Line 356... Line 412...
356
       add .c2g,edx
412
end if
357
       mov edx,.dc23b
413
       mov edx,.dc23b
Line 368... Line 424...
368
      mov esp,ebp
424
      mov esp,ebp
369
ret 18
425
ret 18
370
gouraud_line:
426
gouraud_line:
371
;-------------in - edi - pointer to screen buffer
427
;-------------in - edi - pointer to screen buffer
372
;----------------- stack - another parameters
428
;----------------- stack - another parameters
373
.x1 equ word [ebp+4]
429
.y equ word [ebp+4]
374
.x2 equ word [ebp+6]
430
.col1b equ ebp+6
375
.y equ word [ebp+8]
431
.col1g equ ebp+8
376
.col1b equ ebp+10
432
.col1r equ ebp+10
377
.col1g equ ebp+12
433
.x1    equ [ebp+12]
378
.col1r equ ebp+14
434
.col2b equ ebp+14
379
.col2b equ ebp+16
435
.col2g equ ebp+16
380
.col2g equ ebp+18
436
.col2r equ ebp+18
381
.col2r equ ebp+20
437
.x2    equ [ebp+20]
382
.dc_r equ dword[ebp-4]
438
.dc_r equ dword[ebp-4]
383
.dc_g equ dword[ebp-8]
439
.dc_g equ dword[ebp-8]
384
.dc_b equ dword[ebp-12]
440
.dc_b equ dword[ebp-12]
385
       mov ebp,esp
441
       mov ebp,esp
Line 393... Line 449...
393
       mov ax,.x1
449
       mov ax,.x1
394
       cmp ax,.x2
450
       cmp ax,.x2
395
       je .gl_quit
451
       je .gl_quit
396
       jl .gl_ok
452
       jl .gl_ok
Line -... Line 453...
-
 
453
 
-
 
454
if Ext >= MMX
397
 
455
       movq mm0,[.col1b]
398
       xchg ax,.x2
456
       movq mm1,[.col2b]
-
 
457
       movq [.col1b],mm1
-
 
458
       movq [.col2b],mm0
399
       mov .x1,ax
459
else
400
       mov eax,dword[.col1b]
460
       mov eax,[.col1b]
401
       xchg eax,dword[.col2b]
461
       xchg eax,[.col2b]
402
       mov  dword[.col1b],eax
462
       mov  [.col1b],eax
403
       mov ax,word[.col1r]
463
       mov eax,[.col1r]
404
       xchg ax,word[.col2r]
464
       xchg eax,[.col2r]
-
 
465
       mov [.col1r],eax
405
       mov word[.col1r],ax
466
end if
406
.gl_ok:
467
.gl_ok:
407
  ;     cmp .x1,SIZE_X-1  ;check
468
  ;     cmp .x1,SIZE_X-1  ;check
408
  ;     jg .gl_quit
469
  ;     jg .gl_quit
409
  ;     cmp .x2,SIZE_X-1
470
  ;     cmp .x2,SIZE_X-1
Line 418... Line 479...
418
  ;     jl .gl_quit
479
  ;     jl .gl_quit
Line 419... Line 480...
419
 
480
 
420
       movsx ecx,.y
481
       movsx ecx,.y
421
       mov eax,SIZE_X*3
482
       mov eax,SIZE_X*3
422
       mul ecx
483
       mul ecx
423
       movsx ebx,.x1
484
       movsx ebx,word .x1
424
       lea ecx,[ebx*2+eax]
485
       lea ecx,[ebx*2+eax]
425
       add edi,ecx
486
       add edi,ecx
Line 426... Line 487...
426
       add edi,ebx
487
       add edi,ebx
Line 477... Line 538...
477
       loop .gl_draw
538
       loop .gl_draw
478
.gl_quit:
539
.gl_quit:
479
      ; add esp,12
540
      ; add esp,12
480
       mov esp,ebp
541
       mov esp,ebp
481
ret 18
542
ret 18
482
543
if 0
-
 
544
gouraud_line_SSE:	 ; new
-
 
545
;-------------in - edi - pointer to screen buffer
-
 
546
;----------------- stack - another parameters
-
 
547
.y equ word [ebp+4]
-
 
548
.col1b equ ebp+6
-
 
549
.col1g equ ebp+8
-
 
550
.col1r equ ebp+10
-
 
551
.x1    equ [ebp+12]
-
 
552
.col2b equ ebp+14
-
 
553
.col2g equ ebp+16
-
 
554
.col2r equ ebp+18
-
 
555
.x2    equ [ebp+20]
-
 
556
.dc_r equ dword[ebp-4]
-
 
557
.dc_g equ dword[ebp-8]
-
 
558
.dc_b equ dword[ebp-12]
-
 
559
.lenght equ [ebp-16]
-
 
560
.factor equ [ebp-24]   ;new
-
 
561
       mov ebp,esp
-
 
562
 
-
 
563
       mov ax,.y
-
 
564
       or ax,ax
-
 
565
       jl .gl_quit
-
 
566
       cmp ax,SIZE_Y-1
-
 
567
       jg .gl_quit
-
 
568
 
-
 
569
       mov ax,.x1
-
 
570
       cmp ax,.x2
-
 
571
       je .gl_quit
-
 
572
       jl .gl_ok
-
 
573
 
-
 
574
if Ext >= MMX
-
 
575
       movq mm0,[.col1b]
-
 
576
       movq mm1,[.col2b]
-
 
577
       movq [.col1b],mm1
-
 
578
       movq [.col2b],mm0
-
 
579
else
-
 
580
       mov eax,[.col1b]
-
 
581
       xchg eax,[.col2b]
-
 
582
       mov  [.col1b],eax
-
 
583
       mov eax,[.col1r]
-
 
584
       xchg eax,[.col2r]
-
 
585
       mov [.col1r],eax
-
 
586
end if
-
 
587
.gl_ok:
-
 
588
  ;     cmp .x1,SIZE_X-1  ;check
-
 
589
  ;     jg .gl_quit
-
 
590
  ;     cmp .x2,SIZE_X-1
-
 
591
  ;     jl @f
-
 
592
  ;     mov .x2,SIZE_X-1
-
 
593
  ;  @@:
-
 
594
  ;     cmp .x1,0
-
 
595
  ;     jg @f
-
 
596
  ;     mov .x1,0
-
 
597
  ;  @@:
-
 
598
  ;     cmp .x2,0
-
 
599
  ;     jl .gl_quit
-
 
600
 
-
 
601
       movsx ecx,.y
-
 
602
       mov eax,SIZE_X*3
-
 
603
       mul ecx
-
 
604
       movsx ebx,word .x1
-
 
605
       lea ecx,[ebx*2+eax]
-
 
606
       add edi,ecx
-
 
607
       add edi,ebx
-
 
608
 
-
 
609
       mov ax,word[.col2r]
-
 
610
       sub ax,word[.col1r]
-
 
611
       cwde
-
 
612
       shl eax,ROUND
-
 
613
       cdq
-
 
614
       mov cx,.x2
-
 
615
       sub cx,.x1
-
 
616
       movsx ecx,cx
-
 
617
       idiv ecx
-
 
618
       ;mov .dc_r,eax           ;first delta
-
 
619
       push eax
-
 
620
 
-
 
621
       mov ax,word[.col2g]
-
 
622
       sub ax,word[.col1g]
-
 
623
       cwde
-
 
624
       shl eax,ROUND
-
 
625
       cdq
-
 
626
       idiv ecx
-
 
627
       ;mov .dc_g,eax
-
 
628
       push eax
-
 
629
 
-
 
630
       mov ax,word[.col2b]
-
 
631
       sub ax,word[.col1b]
-
 
632
       cwde
-
 
633
       shl eax,ROUND
-
 
634
       cdq
-
 
635
       idiv ecx
-
 
636
      ; mov .dc_b,eax
-
 
637
       push eax
-
 
638
 
-
 
639
       movsx ebx,word[.col1r]
-
 
640
       shl ebx,ROUND
-
 
641
       movsx edx,word[.col1g]
-
 
642
       shl edx,ROUND
-
 
643
       movsx esi,word[.col1b]
-
 
644
       shl esi,ROUND
-
 
645
 
-
 
646
       push	 ecx	     ; store line lenght
-
 
647
       movd	 mm3,.dc_r
-
 
648
       psrlq	 mm3,16      ; load dr to lowest word of mm3
-
 
649
       pxor	 mm2,mm2     ; clear mm2
-
 
650
       movd	 mm4,.dc_g
-
 
651
       punpcklwd mm3,mm3     ; unpack dr to lower 2 words in in mm3
-
 
652
       psrlq	 mm4,16      ; load dg to lowest word of mm4
-
 
653
       movd	 mm5,.dc_b
-
 
654
       psrlq	 mm5,16      ; load db to lowest word of mm5
-
 
655
       punpcklwd mm4,mm4     ; unpack dg to lower 2 words in in mm3
-
 
656
       lea	 ecx,[factor]
-
 
657
       punpckldq mm3,mm3
-
 
658
       punpcklwd mm5,mm5     ; unpack db to lower 2 words in in mm5
-
 
659
       movq	 mm6,[.col1b]
-
 
660
       xor	 eax,eax
-
 
661
       pinsrw	 mm6,eax,3     ; clear the highest word in mm6
-
 
662
       mov	 eax,010000h
-
 
663
       punpckldq mm4,mm4     ; unpack dg to 4 words in mm4
-
 
664
       mov	 [ecx],eax
-
 
665
       mov	 eax,030002h
-
 
666
       punpckldq mm5,mm5    ; unpack db to 4 words in mm5
-
 
667
       movq	 mm7,mm6    ; load r1r1,g1g1,b1b1 to the first three
-
 
668
			    ; words of mm7
-
 
669
       pxor	 mm1,mm1    ; clear mm1
-
 
670
 
-
 
671
 
-
 
672
.gl_draw:
-
 
673
       mov eax,ebx
-
 
674
       sar eax,ROUND
-
 
675
       stosb
-
 
676
       mov eax,edx
-
 
677
       sar eax,ROUND
-
 
678
       stosb
-
 
679
       mov eax,esi
-
 
680
       sar eax,ROUND
-
 
681
       stosb
-
 
682
       add ebx,.dc_r
-
 
683
       add edx,.dc_g
-
 
684
       add esi,.dc_b
-
 
685
       loop .gl_draw
-
 
686
.gl_quit:
-
 
687
      ; add esp,12
-
 
688
       mov esp,ebp
-
 
689
ret 18
-
 
690
end if
-
 
691