summaryrefslogtreecommitdiff
path: root/src/heretic/linear.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/heretic/linear.asm')
-rw-r--r--src/heretic/linear.asm258
1 files changed, 0 insertions, 258 deletions
diff --git a/src/heretic/linear.asm b/src/heretic/linear.asm
deleted file mode 100644
index 0543f883..00000000
--- a/src/heretic/linear.asm
+++ /dev/null
@@ -1,258 +0,0 @@
- .386
- .MODEL small
- INCLUDE defs.inc
-
-
-;============================================================================
-;
-; unwound vertical scaling code
-;
-; eax light table pointer, 0 lowbyte overwritten
-; ebx all 0, low byte overwritten
-; ecx fractional step value
-; edx fractional scale value
-; esi start of source pixels
-; edi bottom pixel in screenbuffer to blit into
-;
-; ebx should be set to 0 0 0 dh to feed the pipeline
-;
-; The graphics wrap vertically at 128 pixels
-;============================================================================
-
-.DATA
-
-EXTRN _centery:DWORD
-
-SCALEDEFINE MACRO number
- dd vscale&number
-ENDM
-
- ALIGN 4
-scalecalls LABEL
-LINE = 0
-REPT SCREENHEIGHT+1
- SCALEDEFINE %LINE
-LINE = LINE+1
-ENDM
-
-
-;=================================
-
-
-.CODE
-
-;================
-;
-; R_DrawColumn
-;
-;================
-
-PROC R_DrawColumn_
-PUBLIC R_DrawColumn_
- PUSHR
-
- mov ebp,[_dc_yh]
- mov ebx,ebp
- mov edi,[_ylookup+ebx*4]
- mov ebx,[_dc_x]
- add edi,[_columnofs + ebx*4]
-
- mov eax,[_dc_yl]
- sub ebp,eax ; ebp = pixel count
- or ebp,ebp
- js done
-
- mov ecx,[_dc_iscale]
-
- sub eax,[_centery]
- imul ecx
- mov edx,[_dc_texturemid]
- add edx,eax
- shl edx,9 ; 7 significant bits, 25 frac
-
- shl ecx,9 ; 7 significant bits, 25 frac
- mov esi,[_dc_source]
-
- mov eax,[_dc_colormap]
-
- xor ebx,ebx
- shld ebx,edx,7 ; get address of first location
- call [scalecalls+4+ebp*4]
-
-done:
- POPR
- ret
-
-;============ HIGH DETAIL ============
-
-SCALELABEL MACRO number
-vscale&number:
-ENDM
-
-LINE = SCREENHEIGHT
-REPT SCREENHEIGHT-1
- SCALELABEL %LINE
- mov al,[esi+ebx] ; get source pixel
- add edx,ecx ; calculate next location
- mov al,[eax] ; translate the color
-; xor ebx,ebx
-; shld ebx,edx,7 ; get address of next location
- mov ebx,edx
- shr ebx,25
- mov [edi-(LINE-1)*SCREENWIDTH],al ; draw a pixel to the buffer
-LINE = LINE-1
-ENDM
-vscale1:
- mov al,[esi+ebx]
- mov al,[eax]
- mov [edi],al
-vscale0:
- ret
-
-ENDP
-
-
-
-;============================================================================
-;
-; unwound horizontal texture mapping code
-;
-; eax lighttable
-; ebx scratch register
-; ecx position 6.10 bits x, 6.10 bits y
-; edx step 6.10 bits x, 6.10 bits y
-; esi start of block
-; edi dest
-; ebp fff to mask bx
-;
-; ebp should by preset from ebx / ecx before calling
-;============================================================================
-
-OP_SHLD = 0fh
-
-
-.DATA
-
-
-MAPDEFINE MACRO number
- dd hmap&number
-ENDM
-
- ALIGN 4
-mapcalls LABEL
-LINE = 0
-REPT SCREENWIDTH+1
- MAPDEFINE %LINE
-LINE = LINE+1
-ENDM
-
-
-callpoint dd 0
-returnpoint dd 0
-
-
-.CODE
-
-;================
-;
-; R_DrawSpan
-;
-; Horizontal texture mapping
-;
-;================
-
-
-PROC R_DrawSpan_
-PUBLIC R_DrawSpan_
- PUSHR
-
-IFE SKIPPRIMITIVES
-
- mov eax,[_ds_x1]
- mov ebx,[_ds_x2]
- mov eax,[mapcalls+eax*4]
- mov [callpoint],eax ; spot to jump into unwound
- mov eax,[mapcalls+4+ebx*4]
- mov [returnpoint],eax ; spot to patch a ret at
- mov BYTE PTR [eax], OP_RET
-
-;
-; build composite position
-;
- mov ecx,[_ds_xfrac]
- shl ecx,10
- and ecx,0ffff0000h
- mov eax,[_ds_yfrac]
- shr eax,6
- and eax,0ffffh
- or ecx,eax
-
-;
-; build composite step
-;
- mov edx,[_ds_xstep]
- shl edx,10
- and edx,0ffff0000h
- mov eax,[_ds_ystep]
- shr eax,6
- and eax,0ffffh
- or edx,eax
-
- mov esi,[_ds_source]
-
- mov edi,[_ds_y]
- mov edi,[_ylookup+edi*4]
- add edi,[_columnofs]
-
- mov eax,[_ds_colormap]
-
-;
-; feed the pipeline and jump in
-;
- mov ebp,0fffh ; used to mask off slop high bits from position
- shld ebx,ecx,22 ; shift y units in
- shld ebx,ecx,6 ; shift x units in
- and ebx,ebp ; mask off slop bits
- call [callpoint]
-
- mov ebx,[returnpoint]
- mov BYTE PTR [ebx],OP_MOVAL ; remove the ret patched in
-
-ENDIF
- POPR
- ret
-
-
-;============= HIGH DETAIL ============
-
-.CODE
-
-MAPLABEL MACRO number
-hmap&number:
-ENDM
-
-LINE = 0
-PCOL = 0
-REPT SCREENWIDTH/4
-PLANE = 0
-REPT 4
- MAPLABEL %LINE
-LINE = LINE + 1
-
- mov al,[esi+ebx] ; get source pixel
- shld ebx,ecx,22 ; shift y units in
- shld ebx,ecx,6 ; shift x units in
- mov al,[eax] ; translate color
- and ebx,ebp ; mask off slop bits
- add ecx,edx ; position += step
- mov [edi+PLANE+PCOL*4],al ; write pixel
-PLANE = PLANE + 1
-ENDM
-PCOL = PCOL + 1
-ENDM
-hmap320:
- ret
-
-ENDP
-
-END