1 .386P 2 .model FLAT 3 externdef _d_zistepu:dword 4 externdef _d_pzbuffer:dword 5 externdef _d_zistepv:dword 6 externdef _d_zrowbytes:dword 7 externdef _d_ziorigin:dword 8 externdef _r_turb_s:dword 9 externdef _r_turb_t:dword 10 externdef _r_turb_pdest:dword 11 externdef _r_turb_spancount:dword 12 externdef _r_turb_turb:dword 13 externdef _r_turb_pbase:dword 14 externdef _r_turb_sstep:dword 15 externdef _r_turb_tstep:dword 16 externdef _r_bmodelactive:dword 17 externdef _d_sdivzstepu:dword 18 externdef _d_tdivzstepu:dword 19 externdef _d_sdivzstepv:dword 20 externdef _d_tdivzstepv:dword 21 externdef _d_sdivzorigin:dword 22 externdef _d_tdivzorigin:dword 23 externdef _sadjust:dword 24 externdef _tadjust:dword 25 externdef _bbextents:dword 26 externdef _bbextentt:dword 27 externdef _cacheblock:dword 28 externdef _d_viewbuffer:dword 29 externdef _cachewidth:dword 30 externdef _d_pzbuffer:dword 31 externdef _d_zrowbytes:dword 32 externdef _d_zwidth:dword 33 externdef _d_scantable:dword 34 externdef _r_lightptr:dword 35 externdef _r_numvblocks:dword 36 externdef _prowdestbase:dword 37 externdef _pbasesource:dword 38 externdef _r_lightwidth:dword 39 externdef _lightright:dword 40 externdef _lightrightstep:dword 41 externdef _lightdeltastep:dword 42 externdef _lightdelta:dword 43 externdef _lightright:dword 44 externdef _lightdelta:dword 45 externdef _sourcetstep:dword 46 externdef _surfrowbytes:dword 47 externdef _lightrightstep:dword 48 externdef _lightdeltastep:dword 49 externdef _r_sourcemax:dword 50 externdef _r_stepback:dword 51 externdef _colormap:dword 52 externdef _blocksize:dword 53 externdef _sourcesstep:dword 54 externdef _lightleft:dword 55 externdef _blockdivshift:dword 56 externdef _blockdivmask:dword 57 externdef _lightleftstep:dword 58 externdef _r_origin:dword 59 externdef _r_ppn:dword 60 externdef _r_pup:dword 61 externdef _r_pright:dword 62 externdef _ycenter:dword 63 externdef _xcenter:dword 64 externdef _d_vrectbottom_particle:dword 65 externdef _d_vrectright_particle:dword 66 externdef _d_vrecty:dword 67 externdef _d_vrectx:dword 68 externdef _d_pix_shift:dword 69 externdef _d_pix_min:dword 70 externdef _d_pix_max:dword 71 externdef _d_y_aspect_shift:dword 72 externdef _screenwidth:dword 73 externdef _vright:dword 74 externdef _vup:dword 75 externdef _vpn:dword 76 externdef _BOPS_Error:dword 77 externdef _snd_scaletable:dword 78 externdef _paintbuffer:dword 79 externdef _snd_linear_count:dword 80 externdef _snd_p:dword 81 externdef _snd_vol:dword 82 externdef _snd_out:dword 83 externdef _r_leftclipped:dword 84 externdef _r_leftenter:dword 85 externdef _r_rightclipped:dword 86 externdef _r_rightenter:dword 87 externdef _modelorg:dword 88 externdef _xscale:dword 89 externdef _r_refdef:dword 90 externdef _yscale:dword 91 externdef _r_leftexit:dword 92 externdef _r_rightexit:dword 93 externdef _r_lastvertvalid:dword 94 externdef _cacheoffset:dword 95 externdef _newedges:dword 96 externdef _removeedges:dword 97 externdef _r_pedge:dword 98 externdef _r_framecount:dword 99 externdef _r_u1:dword 100 externdef _r_emitted:dword 101 externdef _edge_p:dword 102 externdef _surface_p:dword 103 externdef _surfaces:dword 104 externdef _r_lzi1:dword 105 externdef _r_v1:dword 106 externdef _r_ceilv1:dword 107 externdef _r_nearzi:dword 108 externdef _r_nearzionly:dword 109 externdef _edge_aftertail:dword 110 externdef _edge_tail:dword 111 externdef _current_iv:dword 112 externdef _edge_head_u_shift20:dword 113 externdef _span_p:dword 114 externdef _edge_head:dword 115 externdef _fv:dword 116 externdef _edge_tail_u_shift20:dword 117 externdef _r_apverts:dword 118 externdef _r_anumverts:dword 119 externdef _aliastransform:dword 120 externdef _r_avertexnormals:dword 121 externdef _r_plightvec:dword 122 externdef _r_ambientlight:dword 123 externdef _r_shadelight:dword 124 externdef _aliasxcenter:dword 125 externdef _aliasycenter:dword 126 externdef _a_sstepxfrac:dword 127 externdef _r_affinetridesc:dword 128 externdef _acolormap:dword 129 externdef _d_pcolormap:dword 130 externdef _r_affinetridesc:dword 131 externdef _d_sfrac:dword 132 externdef _d_ptex:dword 133 externdef _d_pedgespanpackage:dword 134 externdef _d_tfrac:dword 135 externdef _d_light:dword 136 externdef _d_zi:dword 137 externdef _d_pdest:dword 138 externdef _d_pz:dword 139 externdef _d_aspancount:dword 140 externdef _erroradjustup:dword 141 externdef _errorterm:dword 142 externdef _d_xdenom:dword 143 externdef _r_p0:dword 144 externdef _r_p1:dword 145 externdef _r_p2:dword 146 externdef _a_tstepxfrac:dword 147 externdef _r_sstepx:dword 148 externdef _r_tstepx:dword 149 externdef _a_ststepxwhole:dword 150 externdef _zspantable:dword 151 externdef _skintable:dword 152 externdef _r_zistepx:dword 153 externdef _erroradjustdown:dword 154 externdef _d_countextrastep:dword 155 externdef _ubasestep:dword 156 externdef _a_ststepxwhole:dword 157 externdef _a_tstepxfrac:dword 158 externdef _r_lstepx:dword 159 externdef _a_spans:dword 160 externdef _erroradjustdown:dword 161 externdef _d_pdestextrastep:dword 162 externdef _d_pzextrastep:dword 163 externdef _d_sfracextrastep:dword 164 externdef _d_ptexextrastep:dword 165 externdef _d_countextrastep:dword 166 externdef _d_tfracextrastep:dword 167 externdef _d_lightextrastep:dword 168 externdef _d_ziextrastep:dword 169 externdef _d_pdestbasestep:dword 170 externdef _d_pzbasestep:dword 171 externdef _d_sfracbasestep:dword 172 externdef _d_ptexbasestep:dword 173 externdef _ubasestep:dword 174 externdef _d_tfracbasestep:dword 175 externdef _d_lightbasestep:dword 176 externdef _d_zibasestep:dword 177 externdef _zspantable:dword 178 externdef _r_lstepy:dword 179 externdef _r_sstepy:dword 180 externdef _r_tstepy:dword 181 externdef _r_zistepy:dword 182 externdef _D_PolysetSetEdgeTable:dword 183 externdef _D_RasterizeAliasPolySmooth:dword 184 externdef float_point5:dword 185 externdef Float2ToThe31nd:dword 186 externdef izistep:dword 187 externdef izi:dword 188 externdef FloatMinus2ToThe31nd:dword 189 externdef float_1:dword 190 externdef float_particle_z_clip:dword 191 externdef float_minus_1:dword 192 externdef float_0:dword 193 externdef fp_16:dword 194 externdef fp_64k:dword 195 externdef fp_1m:dword 196 externdef fp_1m_minus_1:dword 197 externdef fp_8:dword 198 externdef entryvec_table:dword 199 externdef advancetable:dword 200 externdef sstep:dword 201 externdef tstep:dword 202 externdef pspantemp:dword 203 externdef counttemp:dword 204 externdef jumptemp:dword 205 externdef reciprocal_table:dword 206 externdef DP_Count:dword 207 externdef DP_u:dword 208 externdef DP_v:dword 209 externdef DP_32768:dword 210 externdef DP_Color:dword 211 externdef DP_Pix:dword 212 externdef DP_EntryTable:dword 213 externdef pbase:dword 214 externdef s:dword 215 externdef t:dword 216 externdef sfracf:dword 217 externdef tfracf:dword 218 externdef snext:dword 219 externdef tnext:dword 220 externdef spancountminus1:dword 221 externdef zi16stepu:dword 222 externdef sdivz16stepu:dword 223 externdef tdivz16stepu:dword 224 externdef zi8stepu:dword 225 externdef sdivz8stepu:dword 226 externdef tdivz8stepu:dword 227 externdef reciprocal_table_16:dword 228 externdef entryvec_table_16:dword 229 externdef ceil_cw:dword 230 externdef single_cw:dword 231 externdef fp_64kx64k:dword 232 externdef pz:dword 233 externdef spr8entryvec_table:dword 234_TEXT SEGMENT 235LClampHigh0: 236 mov esi,ds:dword ptr[_bbextents] 237 jmp LClampReentry0 238LClampHighOrLow0: 239 jg LClampHigh0 240 xor esi,esi 241 jmp LClampReentry0 242LClampHigh1: 243 mov edx,ds:dword ptr[_bbextentt] 244 jmp LClampReentry1 245LClampHighOrLow1: 246 jg LClampHigh1 247 xor edx,edx 248 jmp LClampReentry1 249LClampLow2: 250 mov ebp,2048 251 jmp LClampReentry2 252LClampHigh2: 253 mov ebp,ds:dword ptr[_bbextents] 254 jmp LClampReentry2 255LClampLow3: 256 mov ecx,2048 257 jmp LClampReentry3 258LClampHigh3: 259 mov ecx,ds:dword ptr[_bbextentt] 260 jmp LClampReentry3 261LClampLow4: 262 mov eax,2048 263 jmp LClampReentry4 264LClampHigh4: 265 mov eax,ds:dword ptr[_bbextents] 266 jmp LClampReentry4 267LClampLow5: 268 mov ebx,2048 269 jmp LClampReentry5 270LClampHigh5: 271 mov ebx,ds:dword ptr[_bbextentt] 272 jmp LClampReentry5 273 align 4 274 public _D_DrawSpans8 275_D_DrawSpans8: 276 push ebp 277 push edi 278 push esi 279 push ebx 280 fld ds:dword ptr[_d_sdivzstepu] 281 fmul ds:dword ptr[fp_8] 282 mov edx,ds:dword ptr[_cacheblock] 283 fld ds:dword ptr[_d_tdivzstepu] 284 fmul ds:dword ptr[fp_8] 285 mov ebx,ds:dword ptr[4+16+esp] 286 fld ds:dword ptr[_d_zistepu] 287 fmul ds:dword ptr[fp_8] 288 mov ds:dword ptr[pbase],edx 289 fstp ds:dword ptr[zi8stepu] 290 fstp ds:dword ptr[tdivz8stepu] 291 fstp ds:dword ptr[sdivz8stepu] 292LSpanLoop: 293 fild ds:dword ptr[4+ebx] 294 fild ds:dword ptr[0+ebx] 295 fld st(1) 296 fmul ds:dword ptr[_d_sdivzstepv] 297 fld st(1) 298 fmul ds:dword ptr[_d_sdivzstepu] 299 fld st(2) 300 fmul ds:dword ptr[_d_tdivzstepu] 301 fxch st(1) 302 faddp st(2),st(0) 303 fxch st(1) 304 fld st(3) 305 fmul ds:dword ptr[_d_tdivzstepv] 306 fxch st(1) 307 fadd ds:dword ptr[_d_sdivzorigin] 308 fxch st(4) 309 fmul ds:dword ptr[_d_zistepv] 310 fxch st(1) 311 faddp st(2),st(0) 312 fxch st(2) 313 fmul ds:dword ptr[_d_zistepu] 314 fxch st(1) 315 fadd ds:dword ptr[_d_tdivzorigin] 316 fxch st(2) 317 faddp st(1),st(0) 318 fld ds:dword ptr[fp_64k] 319 fxch st(1) 320 fadd ds:dword ptr[_d_ziorigin] 321 fdiv st(1),st(0) 322 mov ecx,ds:dword ptr[_d_viewbuffer] 323 mov eax,ds:dword ptr[4+ebx] 324 mov ds:dword ptr[pspantemp],ebx 325 mov edx,ds:dword ptr[_tadjust] 326 mov esi,ds:dword ptr[_sadjust] 327 mov edi,ds:dword ptr[_d_scantable+eax*4] 328 add edi,ecx 329 mov ecx,ds:dword ptr[0+ebx] 330 add edi,ecx 331 mov ecx,ds:dword ptr[8+ebx] 332 cmp ecx,8 333 ja LSetupNotLast1 334 dec ecx 335 jz LCleanup1 336 mov ds:dword ptr[spancountminus1],ecx 337 fxch st(1) 338 fld st(0) 339 fmul st(0),st(4) 340 fxch st(1) 341 fmul st(0),st(3) 342 fxch st(1) 343 fistp ds:dword ptr[s] 344 fistp ds:dword ptr[t] 345 fild ds:dword ptr[spancountminus1] 346 fld ds:dword ptr[_d_tdivzstepu] 347 fld ds:dword ptr[_d_zistepu] 348 fmul st(0),st(2) 349 fxch st(1) 350 fmul st(0),st(2) 351 fxch st(2) 352 fmul ds:dword ptr[_d_sdivzstepu] 353 fxch st(1) 354 faddp st(3),st(0) 355 fxch st(1) 356 faddp st(3),st(0) 357 faddp st(3),st(0) 358 fld ds:dword ptr[fp_64k] 359 fdiv st(0),st(1) 360 jmp LFDIVInFlight1 361LCleanup1: 362 fxch st(1) 363 fld st(0) 364 fmul st(0),st(4) 365 fxch st(1) 366 fmul st(0),st(3) 367 fxch st(1) 368 fistp ds:dword ptr[s] 369 fistp ds:dword ptr[t] 370 jmp LFDIVInFlight1 371 align 4 372LSetupNotLast1: 373 fxch st(1) 374 fld st(0) 375 fmul st(0),st(4) 376 fxch st(1) 377 fmul st(0),st(3) 378 fxch st(1) 379 fistp ds:dword ptr[s] 380 fistp ds:dword ptr[t] 381 fadd ds:dword ptr[zi8stepu] 382 fxch st(2) 383 fadd ds:dword ptr[sdivz8stepu] 384 fxch st(2) 385 fld ds:dword ptr[tdivz8stepu] 386 faddp st(2),st(0) 387 fld ds:dword ptr[fp_64k] 388 fdiv st(0),st(1) 389LFDIVInFlight1: 390 add esi,ds:dword ptr[s] 391 add edx,ds:dword ptr[t] 392 mov ebx,ds:dword ptr[_bbextents] 393 mov ebp,ds:dword ptr[_bbextentt] 394 cmp esi,ebx 395 ja LClampHighOrLow0 396LClampReentry0: 397 mov ds:dword ptr[s],esi 398 mov ebx,ds:dword ptr[pbase] 399 shl esi,16 400 cmp edx,ebp 401 mov ds:dword ptr[sfracf],esi 402 ja LClampHighOrLow1 403LClampReentry1: 404 mov ds:dword ptr[t],edx 405 mov esi,ds:dword ptr[s] 406 shl edx,16 407 mov eax,ds:dword ptr[t] 408 sar esi,16 409 mov ds:dword ptr[tfracf],edx 410 sar eax,16 411 mov edx,ds:dword ptr[_cachewidth] 412 imul eax,edx 413 add esi,ebx 414 add esi,eax 415 cmp ecx,8 416 jna LLastSegment 417LNotLastSegment: 418 fld st(0) 419 fmul st(0),st(4) 420 fxch st(1) 421 fmul st(0),st(3) 422 fxch st(1) 423 fistp ds:dword ptr[snext] 424 fistp ds:dword ptr[tnext] 425 mov eax,ds:dword ptr[snext] 426 mov edx,ds:dword ptr[tnext] 427 mov bl,ds:byte ptr[esi] 428 sub ecx,8 429 mov ebp,ds:dword ptr[_sadjust] 430 mov ds:dword ptr[counttemp],ecx 431 mov ecx,ds:dword ptr[_tadjust] 432 mov ds:byte ptr[edi],bl 433 add ebp,eax 434 add ecx,edx 435 mov eax,ds:dword ptr[_bbextents] 436 mov edx,ds:dword ptr[_bbextentt] 437 cmp ebp,2048 438 jl LClampLow2 439 cmp ebp,eax 440 ja LClampHigh2 441LClampReentry2: 442 cmp ecx,2048 443 jl LClampLow3 444 cmp ecx,edx 445 ja LClampHigh3 446LClampReentry3: 447 mov ds:dword ptr[snext],ebp 448 mov ds:dword ptr[tnext],ecx 449 sub ebp,ds:dword ptr[s] 450 sub ecx,ds:dword ptr[t] 451 mov eax,ecx 452 mov edx,ebp 453 sar eax,19 454 jz LZero 455 sar edx,19 456 mov ebx,ds:dword ptr[_cachewidth] 457 imul eax,ebx 458 jmp LSetUp1 459LZero: 460 sar edx,19 461 mov ebx,ds:dword ptr[_cachewidth] 462LSetUp1: 463 add eax,edx 464 mov edx,ds:dword ptr[tfracf] 465 mov ds:dword ptr[advancetable+4],eax 466 add eax,ebx 467 shl ebp,13 468 mov ebx,ds:dword ptr[sfracf] 469 shl ecx,13 470 mov ds:dword ptr[advancetable],eax 471 mov ds:dword ptr[tstep],ecx 472 add edx,ecx 473 sbb ecx,ecx 474 add ebx,ebp 475 adc esi,ds:dword ptr[advancetable+4+ecx*4] 476 add edx,ds:dword ptr[tstep] 477 sbb ecx,ecx 478 mov al,ds:byte ptr[esi] 479 add ebx,ebp 480 mov ds:byte ptr[1+edi],al 481 adc esi,ds:dword ptr[advancetable+4+ecx*4] 482 add edx,ds:dword ptr[tstep] 483 sbb ecx,ecx 484 add ebx,ebp 485 mov al,ds:byte ptr[esi] 486 adc esi,ds:dword ptr[advancetable+4+ecx*4] 487 add edx,ds:dword ptr[tstep] 488 sbb ecx,ecx 489 mov ds:byte ptr[2+edi],al 490 add ebx,ebp 491 mov al,ds:byte ptr[esi] 492 adc esi,ds:dword ptr[advancetable+4+ecx*4] 493 add edx,ds:dword ptr[tstep] 494 sbb ecx,ecx 495 mov ds:byte ptr[3+edi],al 496 add ebx,ebp 497 mov al,ds:byte ptr[esi] 498 adc esi,ds:dword ptr[advancetable+4+ecx*4] 499 mov ecx,ds:dword ptr[counttemp] 500 cmp ecx,8 501 ja LSetupNotLast2 502 dec ecx 503 jz LFDIVInFlight2 504 mov ds:dword ptr[spancountminus1],ecx 505 fild ds:dword ptr[spancountminus1] 506 fld ds:dword ptr[_d_zistepu] 507 fmul st(0),st(1) 508 fld ds:dword ptr[_d_tdivzstepu] 509 fmul st(0),st(2) 510 fxch st(1) 511 faddp st(3),st(0) 512 fxch st(1) 513 fmul ds:dword ptr[_d_sdivzstepu] 514 fxch st(1) 515 faddp st(3),st(0) 516 fld ds:dword ptr[fp_64k] 517 fxch st(1) 518 faddp st(4),st(0) 519 fdiv st(0),st(1) 520 jmp LFDIVInFlight2 521 align 4 522LSetupNotLast2: 523 fadd ds:dword ptr[zi8stepu] 524 fxch st(2) 525 fadd ds:dword ptr[sdivz8stepu] 526 fxch st(2) 527 fld ds:dword ptr[tdivz8stepu] 528 faddp st(2),st(0) 529 fld ds:dword ptr[fp_64k] 530 fdiv st(0),st(1) 531LFDIVInFlight2: 532 mov ds:dword ptr[counttemp],ecx 533 add edx,ds:dword ptr[tstep] 534 sbb ecx,ecx 535 mov ds:byte ptr[4+edi],al 536 add ebx,ebp 537 mov al,ds:byte ptr[esi] 538 adc esi,ds:dword ptr[advancetable+4+ecx*4] 539 add edx,ds:dword ptr[tstep] 540 sbb ecx,ecx 541 mov ds:byte ptr[5+edi],al 542 add ebx,ebp 543 mov al,ds:byte ptr[esi] 544 adc esi,ds:dword ptr[advancetable+4+ecx*4] 545 add edx,ds:dword ptr[tstep] 546 sbb ecx,ecx 547 mov ds:byte ptr[6+edi],al 548 add ebx,ebp 549 mov al,ds:byte ptr[esi] 550 adc esi,ds:dword ptr[advancetable+4+ecx*4] 551 add edi,8 552 mov ds:dword ptr[tfracf],edx 553 mov edx,ds:dword ptr[snext] 554 mov ds:dword ptr[sfracf],ebx 555 mov ebx,ds:dword ptr[tnext] 556 mov ds:dword ptr[s],edx 557 mov ds:dword ptr[t],ebx 558 mov ecx,ds:dword ptr[counttemp] 559 cmp ecx,8 560 mov ds:byte ptr[-1+edi],al 561 ja LNotLastSegment 562LLastSegment: 563 test ecx,ecx 564 jz LNoSteps 565 fld st(0) 566 fmul st(0),st(4) 567 fxch st(1) 568 fmul st(0),st(3) 569 fxch st(1) 570 fistp ds:dword ptr[snext] 571 fistp ds:dword ptr[tnext] 572 mov al,ds:byte ptr[esi] 573 mov ebx,ds:dword ptr[_tadjust] 574 mov ds:byte ptr[edi],al 575 mov eax,ds:dword ptr[_sadjust] 576 add eax,ds:dword ptr[snext] 577 add ebx,ds:dword ptr[tnext] 578 mov ebp,ds:dword ptr[_bbextents] 579 mov edx,ds:dword ptr[_bbextentt] 580 cmp eax,2048 581 jl LClampLow4 582 cmp eax,ebp 583 ja LClampHigh4 584LClampReentry4: 585 mov ds:dword ptr[snext],eax 586 cmp ebx,2048 587 jl LClampLow5 588 cmp ebx,edx 589 ja LClampHigh5 590LClampReentry5: 591 cmp ecx,1 592 je LOnlyOneStep 593 sub eax,ds:dword ptr[s] 594 sub ebx,ds:dword ptr[t] 595 add eax,eax 596 add ebx,ebx 597 imul ds:dword ptr[reciprocal_table-8+ecx*4] 598 mov ebp,edx 599 mov eax,ebx 600 imul ds:dword ptr[reciprocal_table-8+ecx*4] 601LSetEntryvec: 602 mov ebx,ds:dword ptr[entryvec_table+ecx*4] 603 mov eax,edx 604 mov ds:dword ptr[jumptemp],ebx 605 mov ecx,ebp 606 sar edx,16 607 mov ebx,ds:dword ptr[_cachewidth] 608 sar ecx,16 609 imul edx,ebx 610 add edx,ecx 611 mov ecx,ds:dword ptr[tfracf] 612 mov ds:dword ptr[advancetable+4],edx 613 add edx,ebx 614 shl ebp,16 615 mov ebx,ds:dword ptr[sfracf] 616 shl eax,16 617 mov ds:dword ptr[advancetable],edx 618 mov ds:dword ptr[tstep],eax 619 mov edx,ecx 620 add edx,eax 621 sbb ecx,ecx 622 add ebx,ebp 623 adc esi,ds:dword ptr[advancetable+4+ecx*4] 624 jmp dword ptr[jumptemp] 625LNoSteps: 626 mov al,ds:byte ptr[esi] 627 sub edi,7 628 jmp LEndSpan 629LOnlyOneStep: 630 sub eax,ds:dword ptr[s] 631 sub ebx,ds:dword ptr[t] 632 mov ebp,eax 633 mov edx,ebx 634 jmp LSetEntryvec 635 public Entry2_8 636Entry2_8: 637 sub edi,6 638 mov al,ds:byte ptr[esi] 639 jmp LLEntry2_8 640 public Entry3_8 641Entry3_8: 642 sub edi,5 643 add edx,eax 644 mov al,ds:byte ptr[esi] 645 sbb ecx,ecx 646 add ebx,ebp 647 adc esi,ds:dword ptr[advancetable+4+ecx*4] 648 jmp LLEntry3_8 649 public Entry4_8 650Entry4_8: 651 sub edi,4 652 add edx,eax 653 mov al,ds:byte ptr[esi] 654 sbb ecx,ecx 655 add ebx,ebp 656 adc esi,ds:dword ptr[advancetable+4+ecx*4] 657 add edx,ds:dword ptr[tstep] 658 jmp LLEntry4_8 659 public Entry5_8 660Entry5_8: 661 sub edi,3 662 add edx,eax 663 mov al,ds:byte ptr[esi] 664 sbb ecx,ecx 665 add ebx,ebp 666 adc esi,ds:dword ptr[advancetable+4+ecx*4] 667 add edx,ds:dword ptr[tstep] 668 jmp LLEntry5_8 669 public Entry6_8 670Entry6_8: 671 sub edi,2 672 add edx,eax 673 mov al,ds:byte ptr[esi] 674 sbb ecx,ecx 675 add ebx,ebp 676 adc esi,ds:dword ptr[advancetable+4+ecx*4] 677 add edx,ds:dword ptr[tstep] 678 jmp LLEntry6_8 679 public Entry7_8 680Entry7_8: 681 dec edi 682 add edx,eax 683 mov al,ds:byte ptr[esi] 684 sbb ecx,ecx 685 add ebx,ebp 686 adc esi,ds:dword ptr[advancetable+4+ecx*4] 687 add edx,ds:dword ptr[tstep] 688 jmp LLEntry7_8 689 public Entry8_8 690Entry8_8: 691 add edx,eax 692 mov al,ds:byte ptr[esi] 693 sbb ecx,ecx 694 add ebx,ebp 695 adc esi,ds:dword ptr[advancetable+4+ecx*4] 696 add edx,ds:dword ptr[tstep] 697 sbb ecx,ecx 698 mov ds:byte ptr[1+edi],al 699 add ebx,ebp 700 mov al,ds:byte ptr[esi] 701 adc esi,ds:dword ptr[advancetable+4+ecx*4] 702 add edx,ds:dword ptr[tstep] 703LLEntry7_8: 704 sbb ecx,ecx 705 mov ds:byte ptr[2+edi],al 706 add ebx,ebp 707 mov al,ds:byte ptr[esi] 708 adc esi,ds:dword ptr[advancetable+4+ecx*4] 709 add edx,ds:dword ptr[tstep] 710LLEntry6_8: 711 sbb ecx,ecx 712 mov ds:byte ptr[3+edi],al 713 add ebx,ebp 714 mov al,ds:byte ptr[esi] 715 adc esi,ds:dword ptr[advancetable+4+ecx*4] 716 add edx,ds:dword ptr[tstep] 717LLEntry5_8: 718 sbb ecx,ecx 719 mov ds:byte ptr[4+edi],al 720 add ebx,ebp 721 mov al,ds:byte ptr[esi] 722 adc esi,ds:dword ptr[advancetable+4+ecx*4] 723 add edx,ds:dword ptr[tstep] 724LLEntry4_8: 725 sbb ecx,ecx 726 mov ds:byte ptr[5+edi],al 727 add ebx,ebp 728 mov al,ds:byte ptr[esi] 729 adc esi,ds:dword ptr[advancetable+4+ecx*4] 730LLEntry3_8: 731 mov ds:byte ptr[6+edi],al 732 mov al,ds:byte ptr[esi] 733LLEntry2_8: 734LEndSpan: 735 fstp st(0) 736 fstp st(0) 737 fstp st(0) 738 mov ebx,ds:dword ptr[pspantemp] 739 mov ebx,ds:dword ptr[12+ebx] 740 test ebx,ebx 741 mov ds:byte ptr[7+edi],al 742 jnz LSpanLoop 743 pop ebx 744 pop esi 745 pop edi 746 pop ebp 747 ret 748 749LClamp: 750 mov edx,040000000h 751 xor ebx,ebx 752 fstp st(0) 753 jmp LZDraw 754LClampNeg: 755 mov edx,040000000h 756 xor ebx,ebx 757 fstp st(0) 758 jmp LZDrawNeg 759 public _D_DrawZSpans 760_D_DrawZSpans: 761 push ebp 762 push edi 763 push esi 764 push ebx 765 fld ds:dword ptr[_d_zistepu] 766 mov eax,ds:dword ptr[_d_zistepu] 767 mov esi,ds:dword ptr[4+16+esp] 768 test eax,eax 769 jz LFNegSpan 770 fmul ds:dword ptr[Float2ToThe31nd] 771 fistp ds:dword ptr[izistep] 772 mov ebx,ds:dword ptr[izistep] 773LFSpanLoop: 774 fild ds:dword ptr[4+esi] 775 fild ds:dword ptr[0+esi] 776 mov ecx,ds:dword ptr[4+esi] 777 mov edi,ds:dword ptr[_d_pzbuffer] 778 fmul ds:dword ptr[_d_zistepu] 779 fxch st(1) 780 fmul ds:dword ptr[_d_zistepv] 781 fxch st(1) 782 fadd ds:dword ptr[_d_ziorigin] 783 imul ecx,ds:dword ptr[_d_zrowbytes] 784 faddp st(1),st(0) 785 fcom ds:dword ptr[float_point5] 786 add edi,ecx 787 mov edx,ds:dword ptr[0+esi] 788 add edx,edx 789 mov ecx,ds:dword ptr[8+esi] 790 add edi,edx 791 push esi 792 fnstsw ax 793 test ah,045h 794 jz LClamp 795 fmul ds:dword ptr[Float2ToThe31nd] 796 fistp ds:dword ptr[izi] 797 mov edx,ds:dword ptr[izi] 798LZDraw: 799 test edi,2 800 jz LFMiddle 801 mov eax,edx 802 add edx,ebx 803 shr eax,16 804 dec ecx 805 mov ds:word ptr[edi],ax 806 add edi,2 807LFMiddle: 808 push ecx 809 shr ecx,1 810 jz LFLast 811 shr ecx,1 812 jnc LFMiddleLoop 813 mov eax,edx 814 add edx,ebx 815 shr eax,16 816 mov esi,edx 817 add edx,ebx 818 and esi,0FFFF0000h 819 or eax,esi 820 mov ds:dword ptr[edi],eax 821 add edi,4 822 and ecx,ecx 823 jz LFLast 824LFMiddleLoop: 825 mov eax,edx 826 add edx,ebx 827 shr eax,16 828 mov esi,edx 829 add edx,ebx 830 and esi,0FFFF0000h 831 or eax,esi 832 mov ebp,edx 833 mov ds:dword ptr[edi],eax 834 add edx,ebx 835 shr ebp,16 836 mov esi,edx 837 add edx,ebx 838 and esi,0FFFF0000h 839 or ebp,esi 840 mov ds:dword ptr[4+edi],ebp 841 add edi,8 842 dec ecx 843 jnz LFMiddleLoop 844LFLast: 845 pop ecx 846 pop esi 847 and ecx,1 848 jz LFSpanDone 849 shr edx,16 850 mov ds:word ptr[edi],dx 851LFSpanDone: 852 mov esi,ds:dword ptr[12+esi] 853 test esi,esi 854 jnz LFSpanLoop 855 jmp LFDone 856LFNegSpan: 857 fmul ds:dword ptr[FloatMinus2ToThe31nd] 858 fistp ds:dword ptr[izistep] 859 mov ebx,ds:dword ptr[izistep] 860LFNegSpanLoop: 861 fild ds:dword ptr[4+esi] 862 fild ds:dword ptr[0+esi] 863 mov ecx,ds:dword ptr[4+esi] 864 mov edi,ds:dword ptr[_d_pzbuffer] 865 fmul ds:dword ptr[_d_zistepu] 866 fxch st(1) 867 fmul ds:dword ptr[_d_zistepv] 868 fxch st(1) 869 fadd ds:dword ptr[_d_ziorigin] 870 imul ecx,ds:dword ptr[_d_zrowbytes] 871 faddp st(1),st(0) 872 fcom ds:dword ptr[float_point5] 873 add edi,ecx 874 mov edx,ds:dword ptr[0+esi] 875 add edx,edx 876 mov ecx,ds:dword ptr[8+esi] 877 add edi,edx 878 push esi 879 fnstsw ax 880 test ah,045h 881 jz LClampNeg 882 fmul ds:dword ptr[Float2ToThe31nd] 883 fistp ds:dword ptr[izi] 884 mov edx,ds:dword ptr[izi] 885LZDrawNeg: 886 test edi,2 887 jz LFNegMiddle 888 mov eax,edx 889 sub edx,ebx 890 shr eax,16 891 dec ecx 892 mov ds:word ptr[edi],ax 893 add edi,2 894LFNegMiddle: 895 push ecx 896 shr ecx,1 897 jz LFNegLast 898 shr ecx,1 899 jnc LFNegMiddleLoop 900 mov eax,edx 901 sub edx,ebx 902 shr eax,16 903 mov esi,edx 904 sub edx,ebx 905 and esi,0FFFF0000h 906 or eax,esi 907 mov ds:dword ptr[edi],eax 908 add edi,4 909 and ecx,ecx 910 jz LFNegLast 911LFNegMiddleLoop: 912 mov eax,edx 913 sub edx,ebx 914 shr eax,16 915 mov esi,edx 916 sub edx,ebx 917 and esi,0FFFF0000h 918 or eax,esi 919 mov ebp,edx 920 mov ds:dword ptr[edi],eax 921 sub edx,ebx 922 shr ebp,16 923 mov esi,edx 924 sub edx,ebx 925 and esi,0FFFF0000h 926 or ebp,esi 927 mov ds:dword ptr[4+edi],ebp 928 add edi,8 929 dec ecx 930 jnz LFNegMiddleLoop 931LFNegLast: 932 pop ecx 933 pop esi 934 and ecx,1 935 jz LFNegSpanDone 936 shr edx,16 937 mov ds:word ptr[edi],dx 938LFNegSpanDone: 939 mov esi,ds:dword ptr[12+esi] 940 test esi,esi 941 jnz LFNegSpanLoop 942LFDone: 943 pop ebx 944 pop esi 945 pop edi 946 pop ebp 947 ret 948_TEXT ENDS 949 END 950