| version 1.1 | | version 1.2 |
|---|
| | |
| /// tmap_scanline_per - Pentium-optimized assembly version | | /// tmap_scanline_per - Pentium-optimized assembly version |
| /// written by Brian Raiter, Mar 1998. | | /// written by Brian Raiter, Mar 1998. |
| | | /// lighting roundoff error fixed by Matt Mueller, July 1999 |
| | | |
| | | |
| /// The gist of the algorithm is as follows (note that this is | | /// The gist of the algorithm is as follows (note that this is |
| | |
| // original values are divided by 256 so that the byte needed for the | | // original values are divided by 256 so that the byte needed for the |
| // fade table offset is squarely in %dh. | | // fade table offset is squarely in %dh. |
| | | |
| | | //Dividing by 256 is bad.. rounding errors and crap. We'll now do that |
| | | //right before we need to access the table instead. -MM |
| | | |
| movl (_fx_l), %ebp | | movl (_fx_l), %ebp |
| sarl $8, %ebp | | // sarl $8, %ebp |
| movl (_fx_dl_dx), %edx | | movl (_fx_dl_dx), %edx |
| sarl $6, %edx | | // sarl $6, %edx |
| | | sall $2, %edx |
| movl %edx, (dldx) | | movl %edx, (dldx) |
| | | |
| // Store pixptr, the pointer to our 64x64 texture map, in %esi. Store | | // Store pixptr, the pointer to our 64x64 texture map, in %esi. Store |
| | |
| movb %cl, %ch // 0 b | | movb %cl, %ch // 0 b |
| subl %eax, %ebx | | subl %eax, %ebx |
| shrl $10, %ecx // 0 c | | shrl $10, %ecx // 0 c |
| //edited 05/14/99 Matt Mueller - original glitches in really dark places, so changed from 0xFF00 to 0x7F00 to eliminate invalid values | | movl $0x7F0000, %edx |
| movl $0x7F00, %edx | | |
| //end edit -MM | | |
| shrl $2, %ebx | | shrl $2, %ebx |
| andl %ebp, %edx | | andl %ebp, %edx |
| | | sarl $8, %edx |
| movb (%esi,%ecx), %dl // 0 d | | movb (%esi,%ecx), %dl // 0 d |
| addl $4, %edi | | addl $4, %edi |
| lea (%eax,%ebx,2), %ecx // %ecx = uv value for pixel 2 | | lea (%eax,%ebx,2), %ecx // %ecx = uv value for pixel 2 |
| | |
| movb %cl, %ch // 0 b | | movb %cl, %ch // 0 b |
| addl $4, %edi | | addl $4, %edi |
| shrl $10, %ecx // 0 c | | shrl $10, %ecx // 0 c |
| //edited 05/14/99 Matt Mueller - original glitches in really dark places, so changed from 0xFF00 to 0x7F00 to eliminate invalid values | | movl $0x7F0000, %edx |
| movl $0x7F00, %edx | | |
| //end edit -MM | | |
| movl %ebx, (uvzero) | | movl %ebx, (uvzero) |
| andl %ebp, %edx | | andl %ebp, %edx |
| | | sarl $8, %edx |
| movb (%esi,%ecx), %dl // 0 d | | movb (%esi,%ecx), %dl // 0 d |
| orl $0x1000, %ebx | | orl $0x1000, %ebx |
| subl %eax, %ebx | | subl %eax, %ebx |
| | |
| andl $0x003FC0FF, %ecx | | andl $0x003FC0FF, %ecx |
| movl %ebp, %edx | | movl %ebp, %edx |
| movl (lastpixel), %ebp | | movl (lastpixel), %ebp |
| //added 05/14/99 Matt Mueller - original glitches in really dark places, this fixes it. whee. | | andl $0x7F0000, %edx |
| andl $0x7F00, %edx | | sarl $8, %edx |
| //end addition -MM | | |
| | | |
| LoopLastBits: movl %ebx, %eax | | LoopLastBits: movl %ebx, %eax |
| movb %al, %ah | | movb %al, %ah |