Subversion Repositories Kolibri OS

Rev

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

Rev 2984 Rev 6619
Line 39... Line 39...
39
.screen 	equ ebp-52
39
.screen 	equ ebp-52
40
.zbuffer	equ ebp-56
40
.zbuffer	equ ebp-56
41
.ccoord 	equ ebp-60  ;current coordinate
41
.ccoord 	equ ebp-60  ;current coordinate
42
.czbuf		equ ebp-64
42
.czbuf		equ ebp-64
43
.cscr		equ ebp-68
43
.cscr		equ ebp-68
-
 
44
.xres		equ ebp-72
-
 
45
.yres		equ ebp-76
-
 
46
.xresm1 	equ ebp-80
-
 
47
.yresm1 	equ ebp-84
-
 
48
.xresp1 	equ ebp-88
44
;.lasty          equ ebp-72
49
.yresp1 	equ ebp-92
-
 
50
.xres3		equ ebp-96
-
 
51
.xres4		equ ebp-100
-
 
52
 
45
macro .update_cur_var
53
macro .update_cur_var
46
{
54
{
47
if Ext=NON
55
if Ext=NON
48
     mov	 ebx,[.dz]
56
     mov	 ebx,[.dz]
49
     add	 [.cz],ebx
57
     add	 [.cz],ebx
Line 124... Line 132...
124
    mov 	eax,[.x1]      ; check if parameters exceedes screen area
132
    mov 	eax,[.x1]      ; check if parameters exceedes screen area
125
    mov 	ebx,[.x2]
133
    mov 	ebx,[.x2]
126
    or		eax,ebx
134
    or		eax,ebx
127
    test	eax,80008000h
135
    test	eax,80008000h
128
    jne 	.end_line
136
    jne 	.end_line
-
 
137
    movzx	edx,word [size_x_var]
-
 
138
    mov 	[.xres],edx
-
 
139
    movzx	ecx,word [size_y_var]
-
 
140
    mov 	[.yres],ecx
129
    cmp 	word[.x1],SIZE_X
141
    cmp 	word[.x1],dx  ;SIZE_X
130
    jg		.end_line
142
    jg		.end_line
131
    cmp 	word[.x2],SIZE_X
143
    cmp 	word[.x2],dx  ;SIZE_X
132
    jg		.end_line
144
    jg		.end_line
133
    cmp 	word[.y1],SIZE_Y
145
    cmp 	word[.y1],cx  ;SIZE_Y
134
    jg		.end_line
146
    jg		.end_line
135
    cmp 	word[.y2],SIZE_Y
147
    cmp 	word[.y2],cx  ;SIZE_Y
136
    jg		.end_line
148
    jg		.end_line
Line -... Line 149...
-
 
149
 
-
 
150
    mov 	edx,[.xres]
-
 
151
    shl 	edx,2
-
 
152
    mov 	[.xres4],edx
-
 
153
    shr 	edx,2
-
 
154
    lea 	edx,[edx*3]
-
 
155
    mov 	[.xres3],edx
-
 
156
    mov 	edx,[.xres]
-
 
157
    mov 	ecx,[.yres]
-
 
158
    dec 	edx
-
 
159
    dec 	ecx
-
 
160
    mov 	[.xresm1],edx
-
 
161
    mov 	[.yresm1],ecx
-
 
162
    add 	edx,2
-
 
163
    add 	ecx,2
-
 
164
    mov 	[.xresp1],edx
Line 137... Line 165...
137
 
165
    mov 	[.yresp1],ecx
138
 
166
 
139
    mov 	[.screen],edi
167
    mov 	[.screen],edi
140
    mov 	cx,[.x1]
168
    mov 	cx,[.x1]
Line 179... Line 207...
179
    je		.end_line
207
    je		.end_line
180
    mov 	[.delta_x],ebx
208
    mov 	[.delta_x],ebx
Line 181... Line 209...
181
 
209
 
Line 182... Line 210...
182
    call	.calc_delta
210
    call	.calc_delta
183
 
211
 
184
    mov 	eax,SIZE_X
212
    movzx	eax,word [size_x_var]  ;SIZE_X
185
    movsx	ebx,word[.y1]
213
    movsx	ebx,word[.y1]
186
    mul 	ebx
214
    mul 	ebx
187
    add 	esi,eax
215
    add 	esi,eax
Line 245... Line 273...
245
    je		.end_line
273
    je		.end_line
246
    mov 	[.delta_y],ebx
274
    mov 	[.delta_y],ebx
Line 247... Line 275...
247
 
275
 
Line 248... Line 276...
248
    call	.calc_delta
276
    call	.calc_delta
249
 
277
 
250
    mov 	eax,SIZE_X
278
    movzx	eax,word[size_x_var]  ;SIZE_X
251
    movsx	ebx,word[.y1]
279
    movsx	ebx,word[.y1]
252
    mul 	ebx
280
    mul 	ebx
253
    add 	esi,eax
281
    add 	esi,eax
Line 288... Line 316...
288
    jle 	@f
316
    jle 	@f
Line 289... Line 317...
289
 
317
 
Line 290... Line 318...
290
    .draw_pixel
318
    .draw_pixel
291
 
319
 
292
@@:
320
@@:
Line 293... Line 321...
293
    add 	edi,SIZE_X*3
321
    add 	edi,[.xres3]
Line 294... Line 322...
294
    add 	esi,SIZE_X*4
322
    add 	esi,[.xres4]
295
 
323
 
Line 316... Line 344...
316
    movsx	ebx,bx
344
    movsx	ebx,bx
317
    mov 	[.delta_x],ebx
345
    mov 	[.delta_x],ebx
Line 318... Line 346...
318
 
346
 
Line 319... Line 347...
319
    call	.calc_delta
347
    call	.calc_delta
320
 
348
 
321
    mov 	eax,SIZE_X
349
    mov 	eax,[.xres]
322
    movsx	ebx,word[.y1] ;calc begin values in screen and Z buffers
350
    movsx	ebx,word[.y1] ;calc begin values in screen and Z buffers
323
    mul 	ebx
351
    mul 	ebx
324
    lea 	ebx,[3*eax]
352
    lea 	ebx,[3*eax]
Line 357... Line 385...
357
    .draw_pixel
385
    .draw_pixel
Line 358... Line 386...
358
 
386
 
359
@@:
387
@@:
360
    cmp 	dword[.delta_y],0
388
    cmp 	dword[.delta_y],0
361
    jl		@f
389
    jl		@f
-
 
390
    add 	edi,[.xres3]  ;SIZE_X*3+3
362
    add 	edi,SIZE_X*3+3
391
    add 	edi,3
-
 
392
    add 	esi,[.xres4]  ;SIZE_X*4+4
363
    add 	esi,SIZE_X*4+4
393
    add 	esi,4
364
    jmp 	.d45_1
394
    jmp 	.d45_1
365
@@:
395
@@:
-
 
396
    sub 	edi,[.xres3]  ;(SIZE_X*3)-3
366
    sub 	edi,(SIZE_X*3)-3
397
    sub 	edi,3
-
 
398
    sub 	esi,[.xres4]  ;(SIZE_X*4)-4
367
    sub 	esi,(SIZE_X*4)-4
399
    sub 	esi,4
368
.d45_1:
400
.d45_1:
Line 369... Line 401...
369
    .update_cur_var
401
    .update_cur_var
370
 
402
 
Line 393... Line 425...
393
    idiv	ebx
425
    idiv	ebx
394
    mov 	[.delta],eax
426
    mov 	[.delta],eax
Line 395... Line 427...
395
 
427
 
Line 396... Line 428...
396
    call	.calc_delta
428
    call	.calc_delta
397
 
429
 
398
    mov 	eax,SIZE_X
430
    mov 	eax,[.xres] ;SIZE_X
399
    movsx	ebx,word[.y1] ;calc begin values in screen and Z buffers
431
    movsx	ebx,word[.y1] ;calc begin values in screen and Z buffers
400
    mul 	ebx
432
    mul 	ebx
401
    lea 	ebx,[3*eax]
433
    lea 	ebx,[3*eax]
Line 444... Line 476...
444
 
476
 
Line 445... Line 477...
445
    .draw_pixel
477
    .draw_pixel
446
 
478
 
-
 
479
@@:
447
@@:
480
    mov 	eax,[.delta]
-
 
481
    mov 	ebx,[.xres3]
448
    mov 	eax,[.delta]
482
    add 	[.ccoord],eax
449
    add 	[.ccoord],eax
483
    mov 	eax,[.xres4]
450
    add 	dword[.cscr],SIZE_X*3  ;
484
    add 	dword[.cscr],ebx  ;SIZE_X*3  ;
Line 451... Line 485...
451
    add 	dword[.czbuf],SIZE_X*4
485
    add 	dword[.czbuf],eax  ;SIZE_X*4
Line 452... Line 486...
452
.d_m_v1:
486
.d_m_v1:
Line 516... Line 550...
516
.draw_m_h:
550
.draw_m_h:
517
    mov 	edi,[.cscr]
551
    mov 	edi,[.cscr]
518
    mov 	esi,[.czbuf]
552
    mov 	esi,[.czbuf]
519
    mov 	eax,[.ccoord]	 ; ccoord - cur y coordinate
553
    mov 	eax,[.ccoord]	 ; ccoord - cur y coordinate
520
    sar 	eax,ROUND
554
    sar 	eax,ROUND
521
    mov 	ebx,SIZE_X
555
    mov 	ebx,[.xres]  ;SIZE_X
522
    mul 	ebx
556
    mul 	ebx
523
    add 	esi,eax
557
    add 	esi,eax
524
    lea 	eax,[eax*3]
558
    lea 	eax,[eax*3]
525
    add 	esi,eax
559
    add 	esi,eax
526
    add 	edi,eax
560
    add 	edi,eax