From d0ac39bba4065d891e55d72433c675d8203995ca Mon Sep 17 00:00:00 2001 From: Marco Vicari Date: Sun, 14 Feb 2016 19:04:00 +0100 Subject: [PATCH] Dropping ASM code, cleaning up variables and misc things. --- Makefile | 86 +-- asm/d_copy.s | 169 ----- asm/d_draw.s | 1040 ------------------------- asm/d_draw16.s | 978 ------------------------ asm/d_parta.s | 484 ------------ asm/d_polysa.s | 1749 ------------------------------------------- asm/d_scana.s | 98 --- asm/d_spr8.s | 902 ---------------------- asm/d_varsa.s | 215 ------ asm/math.s | 430 ----------- asm/r_aclipa.s | 218 ------ asm/r_aliasa.s | 239 ------ asm/r_drawa.s | 840 --------------------- asm/r_edgea.s | 752 ------------------- asm/r_varsa.s | 66 -- asm/snd_mixa.s | 221 ------ asm/surf16.s | 174 ----- asm/surf8.s | 788 ------------------- asm/surf8fst.s | 735 ------------------ asm/sys.s | 256 ------- asm/worlda.s | 146 ---- engine/cl_bot.c | 4 +- engine/cl_chase.c | 20 +- engine/cl_input.c | 35 +- engine/cl_main.c | 433 ++++------- engine/console.c | 80 +- engine/draw.c | 279 +++---- engine/host.c | 6 - engine/sbar.c | 6 +- engine/sv_move.c | 45 +- engine/sv_user.c | 142 ++-- engine/view.c | 198 ++--- icon.xpm | 114 +-- include/common.h | 17 +- include/globaldef.h | 24 +- renderer/d_polyse.c | 250 ++----- renderer/d_surf.c | 18 +- renderer/r_main.c | 15 +- renderer/r_part.c | 415 ++-------- video/vid_gdk.c | 8 +- video/vid_x11.c | 8 +- 41 files changed, 593 insertions(+), 12110 deletions(-) delete mode 100644 asm/d_copy.s delete mode 100644 asm/d_draw.s delete mode 100644 asm/d_draw16.s delete mode 100644 asm/d_parta.s delete mode 100644 asm/d_polysa.s delete mode 100644 asm/d_scana.s delete mode 100644 asm/d_spr8.s delete mode 100644 asm/d_varsa.s delete mode 100644 asm/math.s delete mode 100644 asm/r_aclipa.s delete mode 100644 asm/r_aliasa.s delete mode 100644 asm/r_drawa.s delete mode 100644 asm/r_edgea.s delete mode 100644 asm/r_varsa.s delete mode 100644 asm/snd_mixa.s delete mode 100644 asm/surf16.s delete mode 100644 asm/surf8.s delete mode 100644 asm/surf8fst.s delete mode 100644 asm/sys.s delete mode 100644 asm/worlda.s diff --git a/Makefile b/Makefile index d90a68c..6a5e2bd 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,6 @@ XLDFLAGS=`pkg-config --libs gtk+-2.0` DO_CC=$(CC) $(CFLAGS) -o $@ -c $< DO_DEBUG_CC=$(CC) $(DEBUG_CFLAGS) -o $@ -c $< -DO_AS=$(CC) $(CFLAGS) -DELF -x assembler-with-cpp -o $@ -c $< DO_DUMB=$(CC) $(CFLAGS) -o $@ -c $< ############################################################################# @@ -182,27 +181,7 @@ NGUNIX_OBJS = \ $(BUILDDIR)/nvs_client.o \ $(BUILDDIR)/nvs_common.o \ $(BUILDDIR)/nvs_server.o \ - $(BUILDDIR)/nvs_server_data.o \ - \ - $(BUILDDIR)/d_draw.o \ - $(BUILDDIR)/d_draw16.o \ - $(BUILDDIR)/d_parta.o \ - $(BUILDDIR)/d_polysa.o \ - $(BUILDDIR)/d_scana.o \ - $(BUILDDIR)/d_spr8.o \ - $(BUILDDIR)/d_varsa.o \ - $(BUILDDIR)/math.o \ - $(BUILDDIR)/r_aliasa.o \ - $(BUILDDIR)/r_drawa.o \ - $(BUILDDIR)/r_edgea.o \ - $(BUILDDIR)/r_varsa.o \ - $(BUILDDIR)/surf16.o \ - $(BUILDDIR)/surf8.o \ - $(BUILDDIR)/surf8fst.o \ - $(BUILDDIR)/worlda.o \ - $(BUILDDIR)/r_aclipa.o \ - $(BUILDDIR)/snd_mixa.o \ - $(BUILDDIR)/sys.o + $(BUILDDIR)/nvs_server_data.o $(MASTER_DIR)/ngunix.x86 : $(NGUNIX_OBJS) $(CC) $(CFLAGS) -o $@ $(NGUNIX_OBJS) $(XLDFLAGS) $(LDFLAGS) @@ -575,69 +554,6 @@ $(BUILDDIR)/nvs_server.o :$(MOUNT_DIR)/../network/nvs_server.c $(BUILDDIR)/nvs_server_data.o :$(MOUNT_DIR)/../network/nvs_server_data.c $(DO_CC) - -##### - -$(BUILDDIR)/d_copy.o : $(MOUNT_DIR)/../asm/d_copy.s - $(DO_AS) - -$(BUILDDIR)/d_draw.o : $(MOUNT_DIR)/../asm/d_draw.s - $(DO_AS) - -$(BUILDDIR)/d_draw16.o : $(MOUNT_DIR)/../asm/d_draw16.s - $(DO_AS) - -$(BUILDDIR)/d_parta.o : $(MOUNT_DIR)/../asm/d_parta.s - $(DO_AS) - -$(BUILDDIR)/d_polysa.o : $(MOUNT_DIR)/../asm/d_polysa.s - $(DO_AS) - -$(BUILDDIR)/d_scana.o : $(MOUNT_DIR)/../asm/d_scana.s - $(DO_AS) - -$(BUILDDIR)/d_spr8.o : $(MOUNT_DIR)/../asm/d_spr8.s - $(DO_AS) - -$(BUILDDIR)/d_varsa.o : $(MOUNT_DIR)/../asm/d_varsa.s - $(DO_AS) - -$(BUILDDIR)/math.o : $(MOUNT_DIR)/../asm/math.s - $(DO_AS) - -$(BUILDDIR)/r_aliasa.o : $(MOUNT_DIR)/../asm/r_aliasa.s - $(DO_AS) - -$(BUILDDIR)/r_drawa.o : $(MOUNT_DIR)/../asm/r_drawa.s - $(DO_AS) - -$(BUILDDIR)/r_edgea.o : $(MOUNT_DIR)/../asm/r_edgea.s - $(DO_AS) - -$(BUILDDIR)/r_varsa.o : $(MOUNT_DIR)/../asm/r_varsa.s - $(DO_AS) - -$(BUILDDIR)/surf16.o : $(MOUNT_DIR)/../asm/surf16.s - $(DO_AS) - -$(BUILDDIR)/surf8.o : $(MOUNT_DIR)/../asm/surf8.s - $(DO_AS) - -$(BUILDDIR)/surf8fst.o : $(MOUNT_DIR)/../asm/surf8fst.s - $(DO_AS) - -$(BUILDDIR)/worlda.o : $(MOUNT_DIR)/../asm/worlda.s - $(DO_AS) - -$(BUILDDIR)/r_aclipa.o : $(MOUNT_DIR)/../asm/r_aclipa.s - $(DO_AS) - -$(BUILDDIR)/snd_mixa.o : $(MOUNT_DIR)/../asm/snd_mixa.s - $(DO_AS) - -$(BUILDDIR)/sys.o : $(MOUNT_DIR)/../asm/sys.s - $(DO_AS) - ############################################################################# # MISC ############################################################################# diff --git a/asm/d_copy.s b/asm/d_copy.s deleted file mode 100644 index 6860272..0000000 --- a/asm/d_copy.s +++ /dev/null @@ -1,169 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_copy.s -// x86 assembly-language screen copying code. -// - -#ifndef NOASM -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" - - .data - -LCopyWidth: .long 0 -LBlockSrcStep: .long 0 -LBlockDestStep: .long 0 -LSrcDelta: .long 0 -LDestDelta: .long 0 - -#define bufptr 4+16 - -// copies 16 rows per plane at a pop; idea is that 16*512 = 8k, and since -// no Mode X mode is wider than 360, all the data should fit in the cache for -// the passes for the next 3 planes - - .text - -.globl C(VGA_UpdatePlanarScreen) -C(VGA_UpdatePlanarScreen): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - - movl C(VGA_bufferrowbytes),%eax - shll $1,%eax - movl %eax,LBlockSrcStep - movl C(VGA_rowbytes),%eax - shll $1,%eax - movl %eax,LBlockDestStep - - movl $0x3C4,%edx - movb $2,%al - outb %al,%dx // point the SC to the Map Mask - incl %edx - - movl bufptr(%esp),%esi - movl C(VGA_pagebase),%edi - movl C(VGA_height),%ebp - shrl $1,%ebp - - movl C(VGA_width),%ecx - movl C(VGA_bufferrowbytes),%eax - subl %ecx,%eax - movl %eax,LSrcDelta - movl C(VGA_rowbytes),%eax - shll $2,%eax - subl %ecx,%eax - movl %eax,LDestDelta - shrl $4,%ecx - movl %ecx,LCopyWidth - -LRowLoop: - movb $1,%al - -LPlaneLoop: - outb %al,%dx - movb $2,%ah - - pushl %esi - pushl %edi -LRowSetLoop: - movl LCopyWidth,%ecx -LColumnLoop: - movb 12(%esi),%bh - movb 8(%esi),%bl - shll $16,%ebx - movb 4(%esi),%bh - movb (%esi),%bl - movl %ebx,(%edi) - addl $16,%esi - addl $4,%edi - decl %ecx - jnz LColumnLoop - - addl LDestDelta,%edi - addl LSrcDelta,%esi - decb %ah - jnz LRowSetLoop - - popl %edi - popl %esi - incl %esi - - shlb $1,%al - cmpb $16,%al - jnz LPlaneLoop - - subl $4,%esi - addl LBlockSrcStep,%esi - addl LBlockDestStep,%edi - decl %ebp - jnz LRowLoop - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - - ret - - -#define srcptr 4+16 -#define destptr 8+16 -#define width 12+16 -#define height 16+16 -#define srcrowbytes 20+16 -#define destrowbytes 24+16 - -.globl C(VGA_UpdateLinearScreen) -C(VGA_UpdateLinearScreen): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - - cld - movl srcptr(%esp),%esi - movl destptr(%esp),%edi - movl width(%esp),%ebx - movl srcrowbytes(%esp),%eax - subl %ebx,%eax - movl destrowbytes(%esp),%edx - subl %ebx,%edx - shrl $2,%ebx - movl height(%esp),%ebp -LLRowLoop: - movl %ebx,%ecx - rep/movsl (%esi),(%edi) - addl %eax,%esi - addl %edx,%edi - decl %ebp - jnz LLRowLoop - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - - ret -#endif diff --git a/asm/d_draw.s b/asm/d_draw.s deleted file mode 100644 index e355956..0000000 --- a/asm/d_draw.s +++ /dev/null @@ -1,1040 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_draw.s -// x86 assembly-language horizontal 8-bpp span-drawing code. -// - -#ifndef NOASM -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - -//---------------------------------------------------------------------- -// 8-bpp horizontal span drawing code for polygons, with no transparency. -// -// Assumes there is at least one span in pspans, and that every span -// contains at least one pixel -//---------------------------------------------------------------------- - - .text - -// out-of-line, rarely-needed clamping code - -LClampHigh0: - movl C(bbextents),%esi - jmp LClampReentry0 -LClampHighOrLow0: - jg LClampHigh0 - xorl %esi,%esi - jmp LClampReentry0 - -LClampHigh1: - movl C(bbextentt),%edx - jmp LClampReentry1 -LClampHighOrLow1: - jg LClampHigh1 - xorl %edx,%edx - jmp LClampReentry1 - -LClampLow2: - movl $2048,%ebp - jmp LClampReentry2 -LClampHigh2: - movl C(bbextents),%ebp - jmp LClampReentry2 - -LClampLow3: - movl $2048,%ecx - jmp LClampReentry3 -LClampHigh3: - movl C(bbextentt),%ecx - jmp LClampReentry3 - -LClampLow4: - movl $2048,%eax - jmp LClampReentry4 -LClampHigh4: - movl C(bbextents),%eax - jmp LClampReentry4 - -LClampLow5: - movl $2048,%ebx - jmp LClampReentry5 -LClampHigh5: - movl C(bbextentt),%ebx - jmp LClampReentry5 - - -#define pspans 4+16 - - .align 4 -.globl C(D_DrawSpans8) -C(D_DrawSpans8): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// -// set up scaled-by-8 steps, for 8-long segments; also set up cacheblock -// and span list pointers -// -// TODO: any overlap from rearranging? - flds C(d_sdivzstepu) - fmuls fp_8 - movl C(cacheblock),%edx - flds C(d_tdivzstepu) - fmuls fp_8 - movl pspans(%esp),%ebx // point to the first span descriptor - flds C(d_zistepu) - fmuls fp_8 - movl %edx,pbase // pbase = cacheblock - fstps zi8stepu - fstps tdivz8stepu - fstps sdivz8stepu - -LSpanLoop: -// -// set up the initial s/z, t/z, and 1/z on the FP stack, and generate the -// initial s and t values -// -// FIXME: pipeline FILD? - fildl espan_t_v(%ebx) - fildl espan_t_u(%ebx) - - fld %st(1) // dv | du | dv - fmuls C(d_sdivzstepv) // dv*d_sdivzstepv | du | dv - fld %st(1) // du | dv*d_sdivzstepv | du | dv - fmuls C(d_sdivzstepu) // du*d_sdivzstepu | dv*d_sdivzstepv | du | dv - fld %st(2) // du | du*d_sdivzstepu | dv*d_sdivzstepv | du | dv - fmuls C(d_tdivzstepu) // du*d_tdivzstepu | du*d_sdivzstepu | - // dv*d_sdivzstepv | du | dv - fxch %st(1) // du*d_sdivzstepu | du*d_tdivzstepu | - // dv*d_sdivzstepv | du | dv - faddp %st(0),%st(2) // du*d_tdivzstepu | - // du*d_sdivzstepu + dv*d_sdivzstepv | du | dv - fxch %st(1) // du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fld %st(3) // dv | du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fmuls C(d_tdivzstepv) // dv*d_tdivzstepv | - // du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fxch %st(1) // du*d_sdivzstepu + dv*d_sdivzstepv | - // dv*d_tdivzstepv | du*d_tdivzstepu | du | dv - fadds C(d_sdivzorigin) // sdivz = d_sdivzorigin + dv*d_sdivzstepv + - // du*d_sdivzstepu; stays in %st(2) at end - fxch %st(4) // dv | dv*d_tdivzstepv | du*d_tdivzstepu | du | - // s/z - fmuls C(d_zistepv) // dv*d_zistepv | dv*d_tdivzstepv | - // du*d_tdivzstepu | du | s/z - fxch %st(1) // dv*d_tdivzstepv | dv*d_zistepv | - // du*d_tdivzstepu | du | s/z - faddp %st(0),%st(2) // dv*d_zistepv | - // dv*d_tdivzstepv + du*d_tdivzstepu | du | s/z - fxch %st(2) // du | dv*d_tdivzstepv + du*d_tdivzstepu | - // dv*d_zistepv | s/z - fmuls C(d_zistepu) // du*d_zistepu | - // dv*d_tdivzstepv + du*d_tdivzstepu | - // dv*d_zistepv | s/z - fxch %st(1) // dv*d_tdivzstepv + du*d_tdivzstepu | - // du*d_zistepu | dv*d_zistepv | s/z - fadds C(d_tdivzorigin) // tdivz = d_tdivzorigin + dv*d_tdivzstepv + - // du*d_tdivzstepu; stays in %st(1) at end - fxch %st(2) // dv*d_zistepv | du*d_zistepu | t/z | s/z - faddp %st(0),%st(1) // dv*d_zistepv + du*d_zistepu | t/z | s/z - - flds fp_64k // fp_64k | dv*d_zistepv + du*d_zistepu | t/z | s/z - fxch %st(1) // dv*d_zistepv + du*d_zistepu | fp_64k | t/z | s/z - fadds C(d_ziorigin) // zi = d_ziorigin + dv*d_zistepv + - // du*d_zistepu; stays in %st(0) at end - // 1/z | fp_64k | t/z | s/z -// -// calculate and clamp s & t -// - fdivr %st(0),%st(1) // 1/z | z*64k | t/z | s/z - -// -// point %edi to the first pixel in the span -// - movl C(d_viewbuffer),%ecx - movl espan_t_v(%ebx),%eax - movl %ebx,pspantemp // preserve spans pointer - - movl C(tadjust),%edx - movl C(sadjust),%esi - movl C(d_scantable)(,%eax,4),%edi // v * screenwidth - addl %ecx,%edi - movl espan_t_u(%ebx),%ecx - addl %ecx,%edi // pdest = &pdestspan[scans->u]; - movl espan_t_count(%ebx),%ecx - -// -// now start the FDIV for the end of the span -// - - cmpl $8,%ecx - ja LSetupNotLast1 - - decl %ecx - jz LCleanup1 // if only one pixel, no need to start an FDIV - movl %ecx,spancountminus1 - -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - - fildl spancountminus1 - - flds C(d_tdivzstepu) // C(d_tdivzstepu) | spancountminus1 - flds C(d_zistepu) // C(d_zistepu) | C(d_tdivzstepu) | spancountminus1 - fmul %st(2),%st(0) // C(d_zistepu)*scm1 | C(d_tdivzstepu) | scm1 - fxch %st(1) // C(d_tdivzstepu) | C(d_zistepu)*scm1 | scm1 - fmul %st(2),%st(0) // C(d_tdivzstepu)*scm1 | C(d_zistepu)*scm1 | scm1 - fxch %st(2) // scm1 | C(d_zistepu)*scm1 | C(d_tdivzstepu)*scm1 - fmuls C(d_sdivzstepu) // C(d_sdivzstepu)*scm1 | C(d_zistepu)*scm1 | - // C(d_tdivzstepu)*scm1 - fxch %st(1) // C(d_zistepu)*scm1 | C(d_sdivzstepu)*scm1 | - // C(d_tdivzstepu)*scm1 - faddp %st(0),%st(3) // C(d_sdivzstepu)*scm1 | C(d_tdivzstepu)*scm1 - fxch %st(1) // C(d_tdivzstepu)*scm1 | C(d_sdivzstepu)*scm1 - faddp %st(0),%st(3) // C(d_sdivzstepu)*scm1 - faddp %st(0),%st(3) - - flds fp_64k - fdiv %st(1),%st(0) // this is what we've gone to all this trouble to - // overlap - jmp LFDIVInFlight1 - -LCleanup1: -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - jmp LFDIVInFlight1 - - .align 4 -LSetupNotLast1: -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - - fadds zi8stepu - fxch %st(2) - fadds sdivz8stepu - fxch %st(2) - flds tdivz8stepu - faddp %st(0),%st(2) - flds fp_64k - fdiv %st(1),%st(0) // z = 1/1/z - // this is what we've gone to all this trouble to - // overlap -LFDIVInFlight1: - - addl s,%esi - addl t,%edx - movl C(bbextents),%ebx - movl C(bbextentt),%ebp - cmpl %ebx,%esi - ja LClampHighOrLow0 -LClampReentry0: - movl %esi,s - movl pbase,%ebx - shll $16,%esi - cmpl %ebp,%edx - movl %esi,sfracf - ja LClampHighOrLow1 -LClampReentry1: - movl %edx,t - movl s,%esi // sfrac = scans->sfrac; - shll $16,%edx - movl t,%eax // tfrac = scans->tfrac; - sarl $16,%esi - movl %edx,tfracf - -// -// calculate the texture starting address -// - sarl $16,%eax - movl C(cachewidth),%edx - imull %edx,%eax // (tfrac >> 16) * cachewidth - addl %ebx,%esi - addl %eax,%esi // psource = pbase + (sfrac >> 16) + - // ((tfrac >> 16) * cachewidth); - -// -// determine whether last span or not -// - cmpl $8,%ecx - jna LLastSegment - -// -// not the last segment; do full 8-wide segment -// -LNotLastSegment: - -// -// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to -// get there -// - -// pick up after the FDIV that was left in flight previously - - fld %st(0) // duplicate it - fmul %st(4),%st(0) // s = s/z * z - fxch %st(1) - fmul %st(3),%st(0) // t = t/z * z - fxch %st(1) - fistpl snext - fistpl tnext - movl snext,%eax - movl tnext,%edx - - movb (%esi),%bl // get first source texel - subl $8,%ecx // count off this segments' pixels - movl C(sadjust),%ebp - movl %ecx,counttemp // remember count of remaining pixels - - movl C(tadjust),%ecx - movb %bl,(%edi) // store first dest pixel - - addl %eax,%ebp - addl %edx,%ecx - - movl C(bbextents),%eax - movl C(bbextentt),%edx - - cmpl $2048,%ebp - jl LClampLow2 - cmpl %eax,%ebp - ja LClampHigh2 -LClampReentry2: - - cmpl $2048,%ecx - jl LClampLow3 - cmpl %edx,%ecx - ja LClampHigh3 -LClampReentry3: - - movl %ebp,snext - movl %ecx,tnext - - subl s,%ebp - subl t,%ecx - -// -// set up advancetable -// - movl %ecx,%eax - movl %ebp,%edx - sarl $19,%eax // tstep >>= 16; - jz LZero - sarl $19,%edx // sstep >>= 16; - movl C(cachewidth),%ebx - imull %ebx,%eax - jmp LSetUp1 - -LZero: - sarl $19,%edx // sstep >>= 16; - movl C(cachewidth),%ebx - -LSetUp1: - - addl %edx,%eax // add in sstep - // (tstep >> 16) * cachewidth + (sstep >> 16); - movl tfracf,%edx - movl %eax,advancetable+4 // advance base in t - addl %ebx,%eax // ((tstep >> 16) + 1) * cachewidth + - // (sstep >> 16); - shll $13,%ebp // left-justify sstep fractional part - movl sfracf,%ebx - shll $13,%ecx // left-justify tstep fractional part - movl %eax,advancetable // advance extra in t - - movl %ecx,tstep - addl %ecx,%edx // advance tfrac fractional part by tstep frac - - sbbl %ecx,%ecx // turn tstep carry into -1 (0 if none) - addl %ebp,%ebx // advance sfrac fractional part by sstep frac - adcl advancetable+4(,%ecx,4),%esi // point to next source texel - - addl tstep,%edx - sbbl %ecx,%ecx - movb (%esi),%al - addl %ebp,%ebx - movb %al,1(%edi) - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,2(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,3(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - -// -// start FDIV for end of next segment in flight, so it can overlap -// - movl counttemp,%ecx - cmpl $8,%ecx // more than one segment after this? - ja LSetupNotLast2 // yes - - decl %ecx - jz LFDIVInFlight2 // if only one pixel, no need to start an FDIV - movl %ecx,spancountminus1 - fildl spancountminus1 - - flds C(d_zistepu) // C(d_zistepu) | spancountminus1 - fmul %st(1),%st(0) // C(d_zistepu)*scm1 | scm1 - flds C(d_tdivzstepu) // C(d_tdivzstepu) | C(d_zistepu)*scm1 | scm1 - fmul %st(2),%st(0) // C(d_tdivzstepu)*scm1 | C(d_zistepu)*scm1 | scm1 - fxch %st(1) // C(d_zistepu)*scm1 | C(d_tdivzstepu)*scm1 | scm1 - faddp %st(0),%st(3) // C(d_tdivzstepu)*scm1 | scm1 - fxch %st(1) // scm1 | C(d_tdivzstepu)*scm1 - fmuls C(d_sdivzstepu) // C(d_sdivzstepu)*scm1 | C(d_tdivzstepu)*scm1 - fxch %st(1) // C(d_tdivzstepu)*scm1 | C(d_sdivzstepu)*scm1 - faddp %st(0),%st(3) // C(d_sdivzstepu)*scm1 - flds fp_64k // 64k | C(d_sdivzstepu)*scm1 - fxch %st(1) // C(d_sdivzstepu)*scm1 | 64k - faddp %st(0),%st(4) // 64k - - fdiv %st(1),%st(0) // this is what we've gone to all this trouble to - // overlap - jmp LFDIVInFlight2 - - .align 4 -LSetupNotLast2: - fadds zi8stepu - fxch %st(2) - fadds sdivz8stepu - fxch %st(2) - flds tdivz8stepu - faddp %st(0),%st(2) - flds fp_64k - fdiv %st(1),%st(0) // z = 1/1/z - // this is what we've gone to all this trouble to - // overlap -LFDIVInFlight2: - movl %ecx,counttemp - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,4(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,5(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,6(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl $8,%edi - movl %edx,tfracf - movl snext,%edx - movl %ebx,sfracf - movl tnext,%ebx - movl %edx,s - movl %ebx,t - - movl counttemp,%ecx // retrieve count - -// -// determine whether last span or not -// - cmpl $8,%ecx // are there multiple segments remaining? - movb %al,-1(%edi) - ja LNotLastSegment // yes - -// -// last segment of scan -// -LLastSegment: - -// -// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to -// get there. The number of pixels left is variable, and we want to land on the -// last pixel, not step one past it, so we can't run into arithmetic problems -// - testl %ecx,%ecx - jz LNoSteps // just draw the last pixel and we're done - -// pick up after the FDIV that was left in flight previously - - - fld %st(0) // duplicate it - fmul %st(4),%st(0) // s = s/z * z - fxch %st(1) - fmul %st(3),%st(0) // t = t/z * z - fxch %st(1) - fistpl snext - fistpl tnext - - movb (%esi),%al // load first texel in segment - movl C(tadjust),%ebx - movb %al,(%edi) // store first pixel in segment - movl C(sadjust),%eax - - addl snext,%eax - addl tnext,%ebx - - movl C(bbextents),%ebp - movl C(bbextentt),%edx - - cmpl $2048,%eax - jl LClampLow4 - cmpl %ebp,%eax - ja LClampHigh4 -LClampReentry4: - movl %eax,snext - - cmpl $2048,%ebx - jl LClampLow5 - cmpl %edx,%ebx - ja LClampHigh5 -LClampReentry5: - - cmpl $1,%ecx // don't bother - je LOnlyOneStep // if two pixels in segment, there's only one step, - // of the segment length - subl s,%eax - subl t,%ebx - - addl %eax,%eax // convert to 15.17 format so multiply by 1.31 - addl %ebx,%ebx // reciprocal yields 16.48 - - imull reciprocal_table-8(,%ecx,4) // sstep = (snext - s) / (spancount-1) - movl %edx,%ebp - - movl %ebx,%eax - imull reciprocal_table-8(,%ecx,4) // tstep = (tnext - t) / (spancount-1) - -LSetEntryvec: -// -// set up advancetable -// - movl entryvec_table(,%ecx,4),%ebx - movl %edx,%eax - movl %ebx,jumptemp // entry point into code for RET later - movl %ebp,%ecx - sarl $16,%edx // tstep >>= 16; - movl C(cachewidth),%ebx - sarl $16,%ecx // sstep >>= 16; - imull %ebx,%edx - - addl %ecx,%edx // add in sstep - // (tstep >> 16) * cachewidth + (sstep >> 16); - movl tfracf,%ecx - movl %edx,advancetable+4 // advance base in t - addl %ebx,%edx // ((tstep >> 16) + 1) * cachewidth + - // (sstep >> 16); - shll $16,%ebp // left-justify sstep fractional part - movl sfracf,%ebx - shll $16,%eax // left-justify tstep fractional part - movl %edx,advancetable // advance extra in t - - movl %eax,tstep - movl %ecx,%edx - addl %eax,%edx - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - - jmp *jumptemp // jump to the number-of-pixels handler - -//---------------------------------------- - -LNoSteps: - movb (%esi),%al // load first texel in segment - subl $7,%edi // adjust for hardwired offset - jmp LEndSpan - - -LOnlyOneStep: - subl s,%eax - subl t,%ebx - movl %eax,%ebp - movl %ebx,%edx - jmp LSetEntryvec - -//---------------------------------------- - -.globl Entry2_8 -Entry2_8: - subl $6,%edi // adjust for hardwired offsets - movb (%esi),%al - jmp LLEntry2_8 - -//---------------------------------------- - -.globl Entry3_8 -Entry3_8: - subl $5,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - jmp LLEntry3_8 - -//---------------------------------------- - -.globl Entry4_8 -Entry4_8: - subl $4,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LLEntry4_8 - -//---------------------------------------- - -.globl Entry5_8 -Entry5_8: - subl $3,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LLEntry5_8 - -//---------------------------------------- - -.globl Entry6_8 -Entry6_8: - subl $2,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LLEntry6_8 - -//---------------------------------------- - -.globl Entry7_8 -Entry7_8: - decl %edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LLEntry7_8 - -//---------------------------------------- - -.globl Entry8_8 -Entry8_8: - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,1(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LLEntry7_8: - sbbl %ecx,%ecx - movb %al,2(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LLEntry6_8: - sbbl %ecx,%ecx - movb %al,3(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LLEntry5_8: - sbbl %ecx,%ecx - movb %al,4(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LLEntry4_8: - sbbl %ecx,%ecx - movb %al,5(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi -LLEntry3_8: - movb %al,6(%edi) - movb (%esi),%al -LLEntry2_8: - -LEndSpan: - -// -// clear s/z, t/z, 1/z from FP stack -// - fstp %st(0) - fstp %st(0) - fstp %st(0) - - movl pspantemp,%ebx // restore spans pointer - movl espan_t_pnext(%ebx),%ebx // point to next span - testl %ebx,%ebx // any more spans? - movb %al,7(%edi) - jnz LSpanLoop // more spans - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - -//---------------------------------------------------------------------- -// 8-bpp horizontal span z drawing codefor polygons, with no transparency. -// -// Assumes there is at least one span in pzspans, and that every span -// contains at least one pixel -//---------------------------------------------------------------------- - - .text - -// z-clamp on a non-negative gradient span -LClamp: - movl $0x40000000,%edx - xorl %ebx,%ebx - fstp %st(0) - jmp LZDraw - -// z-clamp on a negative gradient span -LClampNeg: - movl $0x40000000,%edx - xorl %ebx,%ebx - fstp %st(0) - jmp LZDrawNeg - - -#define pzspans 4+16 - -.globl C(D_DrawZSpans) -C(D_DrawZSpans): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - - flds C(d_zistepu) - movl C(d_zistepu),%eax - movl pzspans(%esp),%esi - testl %eax,%eax - jz LFNegSpan - - fmuls Float2ToThe31nd - fistpl izistep // note: we are relying on FP exceptions being turned - // off here to avoid range problems - movl izistep,%ebx // remains loaded for all spans - -LFSpanLoop: -// set up the initial 1/z value - fildl espan_t_v(%esi) - fildl espan_t_u(%esi) - movl espan_t_v(%esi),%ecx - movl C(d_pzbuffer),%edi - fmuls C(d_zistepu) - fxch %st(1) - fmuls C(d_zistepv) - fxch %st(1) - fadds C(d_ziorigin) - imull C(d_zrowbytes),%ecx - faddp %st(0),%st(1) - -// clamp if z is nearer than 2 (1/z > 0.5) - fcoms float_point5 - addl %ecx,%edi - movl espan_t_u(%esi),%edx - addl %edx,%edx // word count - movl espan_t_count(%esi),%ecx - addl %edx,%edi // pdest = &pdestspan[scans->u]; - pushl %esi // preserve spans pointer - fnstsw %ax - testb $0x45,%ah - jz LClamp - - fmuls Float2ToThe31nd - fistpl izi // note: we are relying on FP exceptions being turned - // off here to avoid problems when the span is closer - // than 1/(2**31) - movl izi,%edx - -// at this point: -// %ebx = izistep -// %ecx = count -// %edx = izi -// %edi = pdest - -LZDraw: - -// do a single pixel up front, if necessary to dword align the destination - testl $2,%edi - jz LFMiddle - movl %edx,%eax - addl %ebx,%edx - shrl $16,%eax - decl %ecx - movw %ax,(%edi) - addl $2,%edi - -// do middle a pair of aligned dwords at a time -LFMiddle: - pushl %ecx - shrl $1,%ecx // count / 2 - jz LFLast // no aligned dwords to do - shrl $1,%ecx // (count / 2) / 2 - jnc LFMiddleLoop // even number of aligned dwords to do - - movl %edx,%eax - addl %ebx,%edx - shrl $16,%eax - movl %edx,%esi - addl %ebx,%edx - andl $0xFFFF0000,%esi - orl %esi,%eax - movl %eax,(%edi) - addl $4,%edi - andl %ecx,%ecx - jz LFLast - -LFMiddleLoop: - movl %edx,%eax - addl %ebx,%edx - shrl $16,%eax - movl %edx,%esi - addl %ebx,%edx - andl $0xFFFF0000,%esi - orl %esi,%eax - movl %edx,%ebp - movl %eax,(%edi) - addl %ebx,%edx - shrl $16,%ebp - movl %edx,%esi - addl %ebx,%edx - andl $0xFFFF0000,%esi - orl %esi,%ebp - movl %ebp,4(%edi) // FIXME: eliminate register contention - addl $8,%edi - - decl %ecx - jnz LFMiddleLoop - -LFLast: - popl %ecx // retrieve count - popl %esi // retrieve span pointer - -// do the last, unaligned pixel, if there is one - andl $1,%ecx // is there an odd pixel left to do? - jz LFSpanDone // no - shrl $16,%edx - movw %dx,(%edi) // do the final pixel's z - -LFSpanDone: - movl espan_t_pnext(%esi),%esi - testl %esi,%esi - jnz LFSpanLoop - - jmp LFDone - -LFNegSpan: - fmuls FloatMinus2ToThe31nd - fistpl izistep // note: we are relying on FP exceptions being turned - // off here to avoid range problems - movl izistep,%ebx // remains loaded for all spans - -LFNegSpanLoop: -// set up the initial 1/z value - fildl espan_t_v(%esi) - fildl espan_t_u(%esi) - movl espan_t_v(%esi),%ecx - movl C(d_pzbuffer),%edi - fmuls C(d_zistepu) - fxch %st(1) - fmuls C(d_zistepv) - fxch %st(1) - fadds C(d_ziorigin) - imull C(d_zrowbytes),%ecx - faddp %st(0),%st(1) - -// clamp if z is nearer than 2 (1/z > 0.5) - fcoms float_point5 - addl %ecx,%edi - movl espan_t_u(%esi),%edx - addl %edx,%edx // word count - movl espan_t_count(%esi),%ecx - addl %edx,%edi // pdest = &pdestspan[scans->u]; - pushl %esi // preserve spans pointer - fnstsw %ax - testb $0x45,%ah - jz LClampNeg - - fmuls Float2ToThe31nd - fistpl izi // note: we are relying on FP exceptions being turned - // off here to avoid problems when the span is closer - // than 1/(2**31) - movl izi,%edx - -// at this point: -// %ebx = izistep -// %ecx = count -// %edx = izi -// %edi = pdest - -LZDrawNeg: - -// do a single pixel up front, if necessary to dword align the destination - testl $2,%edi - jz LFNegMiddle - movl %edx,%eax - subl %ebx,%edx - shrl $16,%eax - decl %ecx - movw %ax,(%edi) - addl $2,%edi - -// do middle a pair of aligned dwords at a time -LFNegMiddle: - pushl %ecx - shrl $1,%ecx // count / 2 - jz LFNegLast // no aligned dwords to do - shrl $1,%ecx // (count / 2) / 2 - jnc LFNegMiddleLoop // even number of aligned dwords to do - - movl %edx,%eax - subl %ebx,%edx - shrl $16,%eax - movl %edx,%esi - subl %ebx,%edx - andl $0xFFFF0000,%esi - orl %esi,%eax - movl %eax,(%edi) - addl $4,%edi - andl %ecx,%ecx - jz LFNegLast - -LFNegMiddleLoop: - movl %edx,%eax - subl %ebx,%edx - shrl $16,%eax - movl %edx,%esi - subl %ebx,%edx - andl $0xFFFF0000,%esi - orl %esi,%eax - movl %edx,%ebp - movl %eax,(%edi) - subl %ebx,%edx - shrl $16,%ebp - movl %edx,%esi - subl %ebx,%edx - andl $0xFFFF0000,%esi - orl %esi,%ebp - movl %ebp,4(%edi) // FIXME: eliminate register contention - addl $8,%edi - - decl %ecx - jnz LFNegMiddleLoop - -LFNegLast: - popl %ecx // retrieve count - popl %esi // retrieve span pointer - -// do the last, unaligned pixel, if there is one - andl $1,%ecx // is there an odd pixel left to do? - jz LFNegSpanDone // no - shrl $16,%edx - movw %dx,(%edi) // do the final pixel's z - -LFNegSpanDone: - movl espan_t_pnext(%esi),%esi - testl %esi,%esi - jnz LFNegSpanLoop - -LFDone: - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - -#endif // id386 -#endif // NOASM diff --git a/asm/d_draw16.s b/asm/d_draw16.s deleted file mode 100644 index 26889ec..0000000 --- a/asm/d_draw16.s +++ /dev/null @@ -1,978 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_draw16.s -// x86 assembly-language horizontal 8-bpp span-drawing code, with 16-pixel -// subdivision. -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - -//---------------------------------------------------------------------- -// 8-bpp horizontal span drawing code for polygons, with no transparency and -// 16-pixel subdivision. -// -// Assumes there is at least one span in pspans, and that every span -// contains at least one pixel -//---------------------------------------------------------------------- - - .data - - .text - -// out-of-line, rarely-needed clamping code - -LClampHigh0: - movl C(bbextents),%esi - jmp LClampReentry0 -LClampHighOrLow0: - jg LClampHigh0 - xorl %esi,%esi - jmp LClampReentry0 - -LClampHigh1: - movl C(bbextentt),%edx - jmp LClampReentry1 -LClampHighOrLow1: - jg LClampHigh1 - xorl %edx,%edx - jmp LClampReentry1 - -LClampLow2: - movl $4096,%ebp - jmp LClampReentry2 -LClampHigh2: - movl C(bbextents),%ebp - jmp LClampReentry2 - -LClampLow3: - movl $4096,%ecx - jmp LClampReentry3 -LClampHigh3: - movl C(bbextentt),%ecx - jmp LClampReentry3 - -LClampLow4: - movl $4096,%eax - jmp LClampReentry4 -LClampHigh4: - movl C(bbextents),%eax - jmp LClampReentry4 - -LClampLow5: - movl $4096,%ebx - jmp LClampReentry5 -LClampHigh5: - movl C(bbextentt),%ebx - jmp LClampReentry5 - - -#define pspans 4+16 - - .align 4 -.globl C(D_DrawSpans16) -C(D_DrawSpans16): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// -// set up scaled-by-16 steps, for 16-long segments; also set up cacheblock -// and span list pointers -// -// TODO: any overlap from rearranging? - flds C(d_sdivzstepu) - fmuls fp_16 - movl C(cacheblock),%edx - flds C(d_tdivzstepu) - fmuls fp_16 - movl pspans(%esp),%ebx // point to the first span descriptor - flds C(d_zistepu) - fmuls fp_16 - movl %edx,pbase // pbase = cacheblock - fstps zi16stepu - fstps tdivz16stepu - fstps sdivz16stepu - -LSpanLoop: -// -// set up the initial s/z, t/z, and 1/z on the FP stack, and generate the -// initial s and t values -// -// FIXME: pipeline FILD? - fildl espan_t_v(%ebx) - fildl espan_t_u(%ebx) - - fld %st(1) // dv | du | dv - fmuls C(d_sdivzstepv) // dv*d_sdivzstepv | du | dv - fld %st(1) // du | dv*d_sdivzstepv | du | dv - fmuls C(d_sdivzstepu) // du*d_sdivzstepu | dv*d_sdivzstepv | du | dv - fld %st(2) // du | du*d_sdivzstepu | dv*d_sdivzstepv | du | dv - fmuls C(d_tdivzstepu) // du*d_tdivzstepu | du*d_sdivzstepu | - // dv*d_sdivzstepv | du | dv - fxch %st(1) // du*d_sdivzstepu | du*d_tdivzstepu | - // dv*d_sdivzstepv | du | dv - faddp %st(0),%st(2) // du*d_tdivzstepu | - // du*d_sdivzstepu + dv*d_sdivzstepv | du | dv - fxch %st(1) // du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fld %st(3) // dv | du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fmuls C(d_tdivzstepv) // dv*d_tdivzstepv | - // du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fxch %st(1) // du*d_sdivzstepu + dv*d_sdivzstepv | - // dv*d_tdivzstepv | du*d_tdivzstepu | du | dv - fadds C(d_sdivzorigin) // sdivz = d_sdivzorigin + dv*d_sdivzstepv + - // du*d_sdivzstepu; stays in %st(2) at end - fxch %st(4) // dv | dv*d_tdivzstepv | du*d_tdivzstepu | du | - // s/z - fmuls C(d_zistepv) // dv*d_zistepv | dv*d_tdivzstepv | - // du*d_tdivzstepu | du | s/z - fxch %st(1) // dv*d_tdivzstepv | dv*d_zistepv | - // du*d_tdivzstepu | du | s/z - faddp %st(0),%st(2) // dv*d_zistepv | - // dv*d_tdivzstepv + du*d_tdivzstepu | du | s/z - fxch %st(2) // du | dv*d_tdivzstepv + du*d_tdivzstepu | - // dv*d_zistepv | s/z - fmuls C(d_zistepu) // du*d_zistepu | - // dv*d_tdivzstepv + du*d_tdivzstepu | - // dv*d_zistepv | s/z - fxch %st(1) // dv*d_tdivzstepv + du*d_tdivzstepu | - // du*d_zistepu | dv*d_zistepv | s/z - fadds C(d_tdivzorigin) // tdivz = d_tdivzorigin + dv*d_tdivzstepv + - // du*d_tdivzstepu; stays in %st(1) at end - fxch %st(2) // dv*d_zistepv | du*d_zistepu | t/z | s/z - faddp %st(0),%st(1) // dv*d_zistepv + du*d_zistepu | t/z | s/z - - flds fp_64k // fp_64k | dv*d_zistepv + du*d_zistepu | t/z | s/z - fxch %st(1) // dv*d_zistepv + du*d_zistepu | fp_64k | t/z | s/z - fadds C(d_ziorigin) // zi = d_ziorigin + dv*d_zistepv + - // du*d_zistepu; stays in %st(0) at end - // 1/z | fp_64k | t/z | s/z -// -// calculate and clamp s & t -// - fdivr %st(0),%st(1) // 1/z | z*64k | t/z | s/z - -// -// point %edi to the first pixel in the span -// - movl C(d_viewbuffer),%ecx - movl espan_t_v(%ebx),%eax - movl %ebx,pspantemp // preserve spans pointer - - movl C(tadjust),%edx - movl C(sadjust),%esi - movl C(d_scantable)(,%eax,4),%edi // v * screenwidth - addl %ecx,%edi - movl espan_t_u(%ebx),%ecx - addl %ecx,%edi // pdest = &pdestspan[scans->u]; - movl espan_t_count(%ebx),%ecx - -// -// now start the FDIV for the end of the span -// - cmpl $16,%ecx - ja LSetupNotLast1 - - decl %ecx - jz LCleanup1 // if only one pixel, no need to start an FDIV - movl %ecx,spancountminus1 - -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - - fildl spancountminus1 - - flds C(d_tdivzstepu) // C(d_tdivzstepu) | spancountminus1 - flds C(d_zistepu) // C(d_zistepu) | C(d_tdivzstepu) | spancountminus1 - fmul %st(2),%st(0) // C(d_zistepu)*scm1 | C(d_tdivzstepu) | scm1 - fxch %st(1) // C(d_tdivzstepu) | C(d_zistepu)*scm1 | scm1 - fmul %st(2),%st(0) // C(d_tdivzstepu)*scm1 | C(d_zistepu)*scm1 | scm1 - fxch %st(2) // scm1 | C(d_zistepu)*scm1 | C(d_tdivzstepu)*scm1 - fmuls C(d_sdivzstepu) // C(d_sdivzstepu)*scm1 | C(d_zistepu)*scm1 | - // C(d_tdivzstepu)*scm1 - fxch %st(1) // C(d_zistepu)*scm1 | C(d_sdivzstepu)*scm1 | - // C(d_tdivzstepu)*scm1 - faddp %st(0),%st(3) // C(d_sdivzstepu)*scm1 | C(d_tdivzstepu)*scm1 - fxch %st(1) // C(d_tdivzstepu)*scm1 | C(d_sdivzstepu)*scm1 - faddp %st(0),%st(3) // C(d_sdivzstepu)*scm1 - faddp %st(0),%st(3) - - flds fp_64k - fdiv %st(1),%st(0) // this is what we've gone to all this trouble to - // overlap - jmp LFDIVInFlight1 - -LCleanup1: -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - jmp LFDIVInFlight1 - - .align 4 -LSetupNotLast1: -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - - fadds zi16stepu - fxch %st(2) - fadds sdivz16stepu - fxch %st(2) - flds tdivz16stepu - faddp %st(0),%st(2) - flds fp_64k - fdiv %st(1),%st(0) // z = 1/1/z - // this is what we've gone to all this trouble to - // overlap -LFDIVInFlight1: - - addl s,%esi - addl t,%edx - movl C(bbextents),%ebx - movl C(bbextentt),%ebp - cmpl %ebx,%esi - ja LClampHighOrLow0 -LClampReentry0: - movl %esi,s - movl pbase,%ebx - shll $16,%esi - cmpl %ebp,%edx - movl %esi,sfracf - ja LClampHighOrLow1 -LClampReentry1: - movl %edx,t - movl s,%esi // sfrac = scans->sfrac; - shll $16,%edx - movl t,%eax // tfrac = scans->tfrac; - sarl $16,%esi - movl %edx,tfracf - -// -// calculate the texture starting address -// - sarl $16,%eax - movl C(cachewidth),%edx - imull %edx,%eax // (tfrac >> 16) * cachewidth - addl %ebx,%esi - addl %eax,%esi // psource = pbase + (sfrac >> 16) + - // ((tfrac >> 16) * cachewidth); -// -// determine whether last span or not -// - cmpl $16,%ecx - jna LLastSegment - -// -// not the last segment; do full 16-wide segment -// -LNotLastSegment: - -// -// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to -// get there -// - -// pick up after the FDIV that was left in flight previously - - fld %st(0) // duplicate it - fmul %st(4),%st(0) // s = s/z * z - fxch %st(1) - fmul %st(3),%st(0) // t = t/z * z - fxch %st(1) - fistpl snext - fistpl tnext - movl snext,%eax - movl tnext,%edx - - movb (%esi),%bl // get first source texel - subl $16,%ecx // count off this segments' pixels - movl C(sadjust),%ebp - movl %ecx,counttemp // remember count of remaining pixels - - movl C(tadjust),%ecx - movb %bl,(%edi) // store first dest pixel - - addl %eax,%ebp - addl %edx,%ecx - - movl C(bbextents),%eax - movl C(bbextentt),%edx - - cmpl $4096,%ebp - jl LClampLow2 - cmpl %eax,%ebp - ja LClampHigh2 -LClampReentry2: - - cmpl $4096,%ecx - jl LClampLow3 - cmpl %edx,%ecx - ja LClampHigh3 -LClampReentry3: - - movl %ebp,snext - movl %ecx,tnext - - subl s,%ebp - subl t,%ecx - -// -// set up advancetable -// - movl %ecx,%eax - movl %ebp,%edx - sarl $20,%eax // tstep >>= 16; - jz LZero - sarl $20,%edx // sstep >>= 16; - movl C(cachewidth),%ebx - imull %ebx,%eax - jmp LSetUp1 - -LZero: - sarl $20,%edx // sstep >>= 16; - movl C(cachewidth),%ebx - -LSetUp1: - - addl %edx,%eax // add in sstep - // (tstep >> 16) * cachewidth + (sstep >> 16); - movl tfracf,%edx - movl %eax,advancetable+4 // advance base in t - addl %ebx,%eax // ((tstep >> 16) + 1) * cachewidth + - // (sstep >> 16); - shll $12,%ebp // left-justify sstep fractional part - movl sfracf,%ebx - shll $12,%ecx // left-justify tstep fractional part - movl %eax,advancetable // advance extra in t - - movl %ecx,tstep - addl %ecx,%edx // advance tfrac fractional part by tstep frac - - sbbl %ecx,%ecx // turn tstep carry into -1 (0 if none) - addl %ebp,%ebx // advance sfrac fractional part by sstep frac - adcl advancetable+4(,%ecx,4),%esi // point to next source texel - - addl tstep,%edx - sbbl %ecx,%ecx - movb (%esi),%al - addl %ebp,%ebx - movb %al,1(%edi) - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,2(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,3(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,4(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,5(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,6(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,7(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - -// -// start FDIV for end of next segment in flight, so it can overlap -// - movl counttemp,%ecx - cmpl $16,%ecx // more than one segment after this? - ja LSetupNotLast2 // yes - - decl %ecx - jz LFDIVInFlight2 // if only one pixel, no need to start an FDIV - movl %ecx,spancountminus1 - fildl spancountminus1 - - flds C(d_zistepu) // C(d_zistepu) | spancountminus1 - fmul %st(1),%st(0) // C(d_zistepu)*scm1 | scm1 - flds C(d_tdivzstepu) // C(d_tdivzstepu) | C(d_zistepu)*scm1 | scm1 - fmul %st(2),%st(0) // C(d_tdivzstepu)*scm1 | C(d_zistepu)*scm1 | scm1 - fxch %st(1) // C(d_zistepu)*scm1 | C(d_tdivzstepu)*scm1 | scm1 - faddp %st(0),%st(3) // C(d_tdivzstepu)*scm1 | scm1 - fxch %st(1) // scm1 | C(d_tdivzstepu)*scm1 - fmuls C(d_sdivzstepu) // C(d_sdivzstepu)*scm1 | C(d_tdivzstepu)*scm1 - fxch %st(1) // C(d_tdivzstepu)*scm1 | C(d_sdivzstepu)*scm1 - faddp %st(0),%st(3) // C(d_sdivzstepu)*scm1 - flds fp_64k // 64k | C(d_sdivzstepu)*scm1 - fxch %st(1) // C(d_sdivzstepu)*scm1 | 64k - faddp %st(0),%st(4) // 64k - - fdiv %st(1),%st(0) // this is what we've gone to all this trouble to - // overlap - - jmp LFDIVInFlight2 - - .align 4 -LSetupNotLast2: - fadds zi16stepu - fxch %st(2) - fadds sdivz16stepu - fxch %st(2) - flds tdivz16stepu - faddp %st(0),%st(2) - flds fp_64k - fdiv %st(1),%st(0) // z = 1/1/z - // this is what we've gone to all this trouble to - // overlap -LFDIVInFlight2: - movl %ecx,counttemp - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,8(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,9(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,10(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,11(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,12(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,13(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,14(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - - addl $16,%edi - movl %edx,tfracf - movl snext,%edx - movl %ebx,sfracf - movl tnext,%ebx - movl %edx,s - movl %ebx,t - - movl counttemp,%ecx // retrieve count - -// -// determine whether last span or not -// - cmpl $16,%ecx // are there multiple segments remaining? - movb %al,-1(%edi) - ja LNotLastSegment // yes - -// -// last segment of scan -// -LLastSegment: - -// -// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to -// get there. The number of pixels left is variable, and we want to land on the -// last pixel, not step one past it, so we can't run into arithmetic problems -// - testl %ecx,%ecx - jz LNoSteps // just draw the last pixel and we're done - -// pick up after the FDIV that was left in flight previously - - - fld %st(0) // duplicate it - fmul %st(4),%st(0) // s = s/z * z - fxch %st(1) - fmul %st(3),%st(0) // t = t/z * z - fxch %st(1) - fistpl snext - fistpl tnext - - movb (%esi),%al // load first texel in segment - movl C(tadjust),%ebx - movb %al,(%edi) // store first pixel in segment - movl C(sadjust),%eax - - addl snext,%eax - addl tnext,%ebx - - movl C(bbextents),%ebp - movl C(bbextentt),%edx - - cmpl $4096,%eax - jl LClampLow4 - cmpl %ebp,%eax - ja LClampHigh4 -LClampReentry4: - movl %eax,snext - - cmpl $4096,%ebx - jl LClampLow5 - cmpl %edx,%ebx - ja LClampHigh5 -LClampReentry5: - - cmpl $1,%ecx // don't bother - je LOnlyOneStep // if two pixels in segment, there's only one step, - // of the segment length - subl s,%eax - subl t,%ebx - - addl %eax,%eax // convert to 15.17 format so multiply by 1.31 - addl %ebx,%ebx // reciprocal yields 16.48 - - imull reciprocal_table_16-8(,%ecx,4) // sstep = (snext - s) / - // (spancount-1) - movl %edx,%ebp - - movl %ebx,%eax - imull reciprocal_table_16-8(,%ecx,4) // tstep = (tnext - t) / - // (spancount-1) -LSetEntryvec: -// -// set up advancetable -// - movl entryvec_table_16(,%ecx,4),%ebx - movl %edx,%eax - movl %ebx,jumptemp // entry point into code for RET later - movl %ebp,%ecx - sarl $16,%edx // tstep >>= 16; - movl C(cachewidth),%ebx - sarl $16,%ecx // sstep >>= 16; - imull %ebx,%edx - - addl %ecx,%edx // add in sstep - // (tstep >> 16) * cachewidth + (sstep >> 16); - movl tfracf,%ecx - movl %edx,advancetable+4 // advance base in t - addl %ebx,%edx // ((tstep >> 16) + 1) * cachewidth + - // (sstep >> 16); - shll $16,%ebp // left-justify sstep fractional part - movl sfracf,%ebx - shll $16,%eax // left-justify tstep fractional part - movl %edx,advancetable // advance extra in t - - movl %eax,tstep - movl %ecx,%edx - addl %eax,%edx - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - - jmp *jumptemp // jump to the number-of-pixels handler - -//---------------------------------------- - -LNoSteps: - movb (%esi),%al // load first texel in segment - subl $15,%edi // adjust for hardwired offset - jmp LEndSpan - - -LOnlyOneStep: - subl s,%eax - subl t,%ebx - movl %eax,%ebp - movl %ebx,%edx - jmp LSetEntryvec - -//---------------------------------------- - -.globl Entry2_16, Entry3_16, Entry4_16, Entry5_16 -.globl Entry6_16, Entry7_16, Entry8_16, Entry9_16 -.globl Entry10_16, Entry11_16, Entry12_16, Entry13_16 -.globl Entry14_16, Entry15_16, Entry16_16 - -Entry2_16: - subl $14,%edi // adjust for hardwired offsets - movb (%esi),%al - jmp LEntry2_16 - -//---------------------------------------- - -Entry3_16: - subl $13,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - jmp LEntry3_16 - -//---------------------------------------- - -Entry4_16: - subl $12,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry4_16 - -//---------------------------------------- - -Entry5_16: - subl $11,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry5_16 - -//---------------------------------------- - -Entry6_16: - subl $10,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry6_16 - -//---------------------------------------- - -Entry7_16: - subl $9,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry7_16 - -//---------------------------------------- - -Entry8_16: - subl $8,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry8_16 - -//---------------------------------------- - -Entry9_16: - subl $7,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry9_16 - -//---------------------------------------- - -Entry10_16: - subl $6,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry10_16 - -//---------------------------------------- - -Entry11_16: - subl $5,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry11_16 - -//---------------------------------------- - -Entry12_16: - subl $4,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry12_16 - -//---------------------------------------- - -Entry13_16: - subl $3,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry13_16 - -//---------------------------------------- - -Entry14_16: - subl $2,%edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry14_16 - -//---------------------------------------- - -Entry15_16: - decl %edi // adjust for hardwired offsets - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx - jmp LEntry15_16 - -//---------------------------------------- - -Entry16_16: - addl %eax,%edx - movb (%esi),%al - sbbl %ecx,%ecx - addl %ebp,%ebx - adcl advancetable+4(,%ecx,4),%esi - - addl tstep,%edx - sbbl %ecx,%ecx - movb %al,1(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry15_16: - sbbl %ecx,%ecx - movb %al,2(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry14_16: - sbbl %ecx,%ecx - movb %al,3(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry13_16: - sbbl %ecx,%ecx - movb %al,4(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry12_16: - sbbl %ecx,%ecx - movb %al,5(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry11_16: - sbbl %ecx,%ecx - movb %al,6(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry10_16: - sbbl %ecx,%ecx - movb %al,7(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry9_16: - sbbl %ecx,%ecx - movb %al,8(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry8_16: - sbbl %ecx,%ecx - movb %al,9(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry7_16: - sbbl %ecx,%ecx - movb %al,10(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry6_16: - sbbl %ecx,%ecx - movb %al,11(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry5_16: - sbbl %ecx,%ecx - movb %al,12(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi - addl tstep,%edx -LEntry4_16: - sbbl %ecx,%ecx - movb %al,13(%edi) - addl %ebp,%ebx - movb (%esi),%al - adcl advancetable+4(,%ecx,4),%esi -LEntry3_16: - movb %al,14(%edi) - movb (%esi),%al -LEntry2_16: - -LEndSpan: - -// -// clear s/z, t/z, 1/z from FP stack -// - fstp %st(0) - fstp %st(0) - fstp %st(0) - - movl pspantemp,%ebx // restore spans pointer - movl espan_t_pnext(%ebx),%ebx // point to next span - testl %ebx,%ebx // any more spans? - movb %al,15(%edi) - jnz LSpanLoop // more spans - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - -#endif // id386 -#endif diff --git a/asm/d_parta.s b/asm/d_parta.s deleted file mode 100644 index 8f8e910..0000000 --- a/asm/d_parta.s +++ /dev/null @@ -1,484 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - - -#ifndef NOASM -// -// d_parta.s -// x86 assembly-language 8-bpp particle-drawing code. -// - -#include "asm_i386.h" -#include "asm.h" -#include "d_ifacea.h" -#include "asm_draw.h" - -#if id386 - -//---------------------------------------------------------------------- -// 8-bpp particle drawing code. -//---------------------------------------------------------------------- - -//FIXME: comments, full optimization - -//---------------------------------------------------------------------- -// 8-bpp particle queueing code. -//---------------------------------------------------------------------- - - .text - -#define P 12+4 - - .align 4 -.globl C(D_DrawParticle) -C(D_DrawParticle): - pushl %ebp // preserve caller's stack frame - pushl %edi // preserve register variables - pushl %ebx - - movl P(%esp),%edi - -// FIXME: better FP overlap in general here - -// transform point -// VectorSubtract (p->org, r_origin, local); - flds C(r_origin) - fsubrs pt_org(%edi) - flds pt_org+4(%edi) - fsubs C(r_origin)+4 - flds pt_org+8(%edi) - fsubs C(r_origin)+8 - fxch %st(2) // local[0] | local[1] | local[2] - -// transformed[2] = DotProduct(local, r_ppn); - flds C(r_ppn) // r_ppn[0] | local[0] | local[1] | local[2] - fmul %st(1),%st(0) // dot0 | local[0] | local[1] | local[2] - flds C(r_ppn)+4 // r_ppn[1] | dot0 | local[0] | local[1] | local[2] - fmul %st(3),%st(0) // dot1 | dot0 | local[0] | local[1] | local[2] - flds C(r_ppn)+8 // r_ppn[2] | dot1 | dot0 | local[0] | - // local[1] | local[2] - fmul %st(5),%st(0) // dot2 | dot1 | dot0 | local[0] | local[1] | local[2] - fxch %st(2) // dot0 | dot1 | dot2 | local[0] | local[1] | local[2] - faddp %st(0),%st(1) // dot0 + dot1 | dot2 | local[0] | local[1] | - // local[2] - faddp %st(0),%st(1) // z | local[0] | local[1] | local[2] - fld %st(0) // z | z | local[0] | local[1] | - // local[2] - fdivrs float_1 // 1/z | z | local[0] | local[1] | local[2] - fxch %st(1) // z | 1/z | local[0] | local[1] | local[2] - -// if (transformed[2] < PARTICLE_Z_CLIP) -// return; - fcomps float_particle_z_clip // 1/z | local[0] | local[1] | local[2] - fxch %st(3) // local[2] | local[0] | local[1] | 1/z - - flds C(r_pup) // r_pup[0] | local[2] | local[0] | local[1] | 1/z - fmul %st(2),%st(0) // dot0 | local[2] | local[0] | local[1] | 1/z - flds C(r_pup)+4 // r_pup[1] | dot0 | local[2] | local[0] | - // local[1] | 1/z - - fnstsw %ax - testb $1,%ah - jnz LPop6AndDone - -// transformed[1] = DotProduct(local, r_pup); - fmul %st(4),%st(0) // dot1 | dot0 | local[2] | local[0] | local[1] | 1/z - flds C(r_pup)+8 // r_pup[2] | dot1 | dot0 | local[2] | - // local[0] | local[1] | 1/z - fmul %st(3),%st(0) // dot2 | dot1 | dot0 | local[2] | local[0] | - // local[1] | 1/z - fxch %st(2) // dot0 | dot1 | dot2 | local[2] | local[0] | - // local[1] | 1/z - faddp %st(0),%st(1) // dot0 + dot1 | dot2 | local[2] | local[0] | - // local[1] | 1/z - faddp %st(0),%st(1) // y | local[2] | local[0] | local[1] | 1/z - fxch %st(3) // local[1] | local[2] | local[0] | y | 1/z - -// transformed[0] = DotProduct(local, r_pright); - fmuls C(r_pright)+4 // dot1 | local[2] | local[0] | y | 1/z - fxch %st(2) // local[0] | local[2] | dot1 | y | 1/z - fmuls C(r_pright) // dot0 | local[2] | dot1 | y | 1/z - fxch %st(1) // local[2] | dot0 | dot1 | y | 1/z - fmuls C(r_pright)+8 // dot2 | dot0 | dot1 | y | 1/z - fxch %st(2) // dot1 | dot0 | dot2 | y | 1/z - faddp %st(0),%st(1) // dot1 + dot0 | dot2 | y | 1/z - - faddp %st(0),%st(1) // x | y | 1/z - fxch %st(1) // y | x | 1/z - -// project the point - fmul %st(2),%st(0) // y/z | x | 1/z - fxch %st(1) // x | y/z | 1/z - fmul %st(2),%st(0) // x/z | y/z | 1/z - fxch %st(1) // y/z | x/z | 1/z - fsubrs C(ycenter) // v | x/z | 1/z - fxch %st(1) // x/z | v | 1/z - fadds C(xcenter) // u | v | 1/z -// FIXME: preadjust xcenter and ycenter - fxch %st(1) // v | u | 1/z - fadds float_point5 // v | u | 1/z - fxch %st(1) // u | v | 1/z - fadds float_point5 // u | v | 1/z - fxch %st(2) // 1/z | v | u - fmuls DP_32768 // 1/z * 0x8000 | v | u - fxch %st(2) // u | v | 1/z * 0x8000 - -// FIXME: use Terje's fp->int trick here? -// FIXME: check we're getting proper rounding here - fistpl DP_u // v | 1/z * 0x8000 - fistpl DP_v // 1/z * 0x8000 - - movl DP_u,%eax - movl DP_v,%edx - -// if ((v > d_vrectbottom_particle) || -// (u > d_vrectright_particle) || -// (v < d_vrecty) || -// (u < d_vrectx)) -// { -// continue; -// } - - movl C(d_vrectbottom_particle),%ebx - movl C(d_vrectright_particle),%ecx - cmpl %ebx,%edx - jg LPop1AndDone - cmpl %ecx,%eax - jg LPop1AndDone - movl C(d_vrecty),%ebx - movl C(d_vrectx),%ecx - cmpl %ebx,%edx - jl LPop1AndDone - - cmpl %ecx,%eax - jl LPop1AndDone - - flds pt_color(%edi) // color | 1/z * 0x8000 -// FIXME: use Terje's fast fp->int trick? - fistpl DP_Color // 1/z * 0x8000 - - movl C(d_viewbuffer),%ebx - - addl %eax,%ebx - movl C(d_scantable)(,%edx,4),%edi // point to the pixel - - imull C(d_zrowbytes),%edx // point to the z pixel - - leal (%edx,%eax,2),%edx - movl C(d_pzbuffer),%eax - - fistpl izi - - addl %ebx,%edi - addl %eax,%edx - -// pix = izi >> d_pix_shift; - - movl izi,%eax - movl C(d_pix_shift),%ecx - shrl %cl,%eax - movl izi,%ebp - -// if (pix < d_pix_min) -// pix = d_pix_min; -// else if (pix > d_pix_max) -// pix = d_pix_max; - - movl C(d_pix_min),%ebx - movl C(d_pix_max),%ecx - cmpl %ebx,%eax - jnl LTestPixMax - movl %ebx,%eax - jmp LTestDone - -LTestPixMax: - cmpl %ecx,%eax - jng LTestDone - movl %ecx,%eax -LTestDone: - - movb DP_Color,%ch - - movl C(d_y_aspect_shift),%ebx - testl %ebx,%ebx - jnz LDefault - - cmpl $4,%eax - ja LDefault - -// 2000-07-30 DJGPP compiler warning fix by Norberto Alfredo Bensa start -// jmp DP_EntryTable-4(,%eax,4) - jmp *DP_EntryTable-4(,%eax,4) -// 2000-07-30 DJGPP compiler warning fix by Norberto Alfredo Bensa end - -// 1x1 -.globl DP_1x1 -DP_1x1: - cmpw %bp,(%edx) // just one pixel to do - jg LDone - movw %bp,(%edx) - movb %ch,(%edi) - jmp LDone - -// 2x2 -.globl DP_2x2 -DP_2x2: - pushl %esi - movl C(screenwidth),%ebx - movl C(d_zrowbytes),%esi - - cmpw %bp,(%edx) - jg L2x2_1 - movw %bp,(%edx) - movb %ch,(%edi) -L2x2_1: - cmpw %bp,2(%edx) - jg L2x2_2 - movw %bp,2(%edx) - movb %ch,1(%edi) -L2x2_2: - cmpw %bp,(%edx,%esi,1) - jg L2x2_3 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L2x2_3: - cmpw %bp,2(%edx,%esi,1) - jg L2x2_4 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L2x2_4: - - popl %esi - jmp LDone - -// 3x3 -.globl DP_3x3 -DP_3x3: - pushl %esi - movl C(screenwidth),%ebx - movl C(d_zrowbytes),%esi - - cmpw %bp,(%edx) - jg L3x3_1 - movw %bp,(%edx) - movb %ch,(%edi) -L3x3_1: - cmpw %bp,2(%edx) - jg L3x3_2 - movw %bp,2(%edx) - movb %ch,1(%edi) -L3x3_2: - cmpw %bp,4(%edx) - jg L3x3_3 - movw %bp,4(%edx) - movb %ch,2(%edi) -L3x3_3: - - cmpw %bp,(%edx,%esi,1) - jg L3x3_4 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L3x3_4: - cmpw %bp,2(%edx,%esi,1) - jg L3x3_5 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L3x3_5: - cmpw %bp,4(%edx,%esi,1) - jg L3x3_6 - movw %bp,4(%edx,%esi,1) - movb %ch,2(%edi,%ebx,1) -L3x3_6: - - cmpw %bp,(%edx,%esi,2) - jg L3x3_7 - movw %bp,(%edx,%esi,2) - movb %ch,(%edi,%ebx,2) -L3x3_7: - cmpw %bp,2(%edx,%esi,2) - jg L3x3_8 - movw %bp,2(%edx,%esi,2) - movb %ch,1(%edi,%ebx,2) -L3x3_8: - cmpw %bp,4(%edx,%esi,2) - jg L3x3_9 - movw %bp,4(%edx,%esi,2) - movb %ch,2(%edi,%ebx,2) -L3x3_9: - - popl %esi - jmp LDone - - -// 4x4 -.globl DP_4x4 -DP_4x4: - pushl %esi - movl C(screenwidth),%ebx - movl C(d_zrowbytes),%esi - - cmpw %bp,(%edx) - jg L4x4_1 - movw %bp,(%edx) - movb %ch,(%edi) -L4x4_1: - cmpw %bp,2(%edx) - jg L4x4_2 - movw %bp,2(%edx) - movb %ch,1(%edi) -L4x4_2: - cmpw %bp,4(%edx) - jg L4x4_3 - movw %bp,4(%edx) - movb %ch,2(%edi) -L4x4_3: - cmpw %bp,6(%edx) - jg L4x4_4 - movw %bp,6(%edx) - movb %ch,3(%edi) -L4x4_4: - - cmpw %bp,(%edx,%esi,1) - jg L4x4_5 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L4x4_5: - cmpw %bp,2(%edx,%esi,1) - jg L4x4_6 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L4x4_6: - cmpw %bp,4(%edx,%esi,1) - jg L4x4_7 - movw %bp,4(%edx,%esi,1) - movb %ch,2(%edi,%ebx,1) -L4x4_7: - cmpw %bp,6(%edx,%esi,1) - jg L4x4_8 - movw %bp,6(%edx,%esi,1) - movb %ch,3(%edi,%ebx,1) -L4x4_8: - - leal (%edx,%esi,2),%edx - leal (%edi,%ebx,2),%edi - - cmpw %bp,(%edx) - jg L4x4_9 - movw %bp,(%edx) - movb %ch,(%edi) -L4x4_9: - cmpw %bp,2(%edx) - jg L4x4_10 - movw %bp,2(%edx) - movb %ch,1(%edi) -L4x4_10: - cmpw %bp,4(%edx) - jg L4x4_11 - movw %bp,4(%edx) - movb %ch,2(%edi) -L4x4_11: - cmpw %bp,6(%edx) - jg L4x4_12 - movw %bp,6(%edx) - movb %ch,3(%edi) -L4x4_12: - - cmpw %bp,(%edx,%esi,1) - jg L4x4_13 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L4x4_13: - cmpw %bp,2(%edx,%esi,1) - jg L4x4_14 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L4x4_14: - cmpw %bp,4(%edx,%esi,1) - jg L4x4_15 - movw %bp,4(%edx,%esi,1) - movb %ch,2(%edi,%ebx,1) -L4x4_15: - cmpw %bp,6(%edx,%esi,1) - jg L4x4_16 - movw %bp,6(%edx,%esi,1) - movb %ch,3(%edi,%ebx,1) -L4x4_16: - - popl %esi - jmp LDone - -// default case, handling any size particle -LDefault: - -// count = pix << d_y_aspect_shift; - - movl %eax,%ebx - movl %eax,DP_Pix - movb C(d_y_aspect_shift),%cl - shll %cl,%ebx - -// for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth) -// { -// for (i=0 ; i> 16) + -// (r_sstepx >> 16); - - movl C(r_sstepx),%eax - movl C(r_tstepx),%edx - shll $16,%eax - shll $16,%edx - movl %eax,C(a_sstepxfrac) - movl %edx,C(a_tstepxfrac) - - movl C(r_sstepx),%ecx - movl C(r_tstepx),%eax - sarl $16,%ecx - sarl $16,%eax - imull skinwidth(%esp) - addl %ecx,%eax - movl %eax,C(a_ststepxwhole) - - ret - - -//---------------------------------------------------------------------- -// recursive subdivision affine triangle drawing code -// -// not C-callable because of stdcall return -//---------------------------------------------------------------------- - -#define lp1 4+16 -#define lp2 8+16 -#define lp3 12+16 - -.globl C(D_PolysetRecursiveTriangle) -C(D_PolysetRecursiveTriangle): - pushl %ebp // preserve caller stack frame pointer - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - -// int *temp; -// int d; -// int new[6]; -// int i; -// int z; -// short *zbuf; - movl lp2(%esp),%esi - movl lp1(%esp),%ebx - movl lp3(%esp),%edi - -// d = lp2[0] - lp1[0]; -// if (d < -1 || d > 1) -// goto split; - movl 0(%esi),%eax - - movl 0(%ebx),%edx - movl 4(%esi),%ebp - - subl %edx,%eax - movl 4(%ebx),%ecx - - subl %ecx,%ebp - incl %eax - - cmpl $2,%eax - ja LSplit - -// d = lp2[1] - lp1[1]; -// if (d < -1 || d > 1) -// goto split; - movl 0(%edi),%eax - incl %ebp - - cmpl $2,%ebp - ja LSplit - -// d = lp3[0] - lp2[0]; -// if (d < -1 || d > 1) -// goto split2; - movl 0(%esi),%edx - movl 4(%edi),%ebp - - subl %edx,%eax - movl 4(%esi),%ecx - - subl %ecx,%ebp - incl %eax - - cmpl $2,%eax - ja LSplit2 - -// d = lp3[1] - lp2[1]; -// if (d < -1 || d > 1) -// goto split2; - movl 0(%ebx),%eax - incl %ebp - - cmpl $2,%ebp - ja LSplit2 - -// d = lp1[0] - lp3[0]; -// if (d < -1 || d > 1) -// goto split3; - movl 0(%edi),%edx - movl 4(%ebx),%ebp - - subl %edx,%eax - movl 4(%edi),%ecx - - subl %ecx,%ebp - incl %eax - - incl %ebp - movl %ebx,%edx - - cmpl $2,%eax - ja LSplit3 - -// d = lp1[1] - lp3[1]; -// if (d < -1 || d > 1) -// { -//split3: -// temp = lp1; -// lp3 = lp2; -// lp1 = lp3; -// lp2 = temp; -// goto split; -// } -// -// return; // entire tri is filled -// - cmpl $2,%ebp - jna LDone - -LSplit3: - movl %edi,%ebx - movl %esi,%edi - movl %edx,%esi - jmp LSplit - -//split2: -LSplit2: - -// temp = lp1; -// lp1 = lp2; -// lp2 = lp3; -// lp3 = temp; - movl %ebx,%eax - movl %esi,%ebx - movl %edi,%esi - movl %eax,%edi - -//split: -LSplit: - - subl $24,%esp // allocate space for a new vertex - -//// split this edge -// new[0] = (lp1[0] + lp2[0]) >> 1; -// new[1] = (lp1[1] + lp2[1]) >> 1; -// new[2] = (lp1[2] + lp2[2]) >> 1; -// new[3] = (lp1[3] + lp2[3]) >> 1; -// new[5] = (lp1[5] + lp2[5]) >> 1; - movl 8(%ebx),%eax - - movl 8(%esi),%edx - movl 12(%ebx),%ecx - - addl %edx,%eax - movl 12(%esi),%edx - - sarl $1,%eax - addl %edx,%ecx - - movl %eax,8(%esp) - movl 20(%ebx),%eax - - sarl $1,%ecx - movl 20(%esi),%edx - - movl %ecx,12(%esp) - addl %edx,%eax - - movl 0(%ebx),%ecx - movl 0(%esi),%edx - - sarl $1,%eax - addl %ecx,%edx - - movl %eax,20(%esp) - movl 4(%ebx),%eax - - sarl $1,%edx - movl 4(%esi),%ebp - - movl %edx,0(%esp) - addl %eax,%ebp - - sarl $1,%ebp - movl %ebp,4(%esp) - -//// draw the point if splitting a leading edge -// if (lp2[1] > lp1[1]) -// goto nodraw; - cmpl %eax,4(%esi) - jg LNoDraw - -// if ((lp2[1] == lp1[1]) && (lp2[0] < lp1[0])) -// goto nodraw; - movl 0(%esi),%edx - jnz LDraw - - cmpl %ecx,%edx - jl LNoDraw - -LDraw: - -// z = new[5] >> 16; - movl 20(%esp),%edx - movl 4(%esp),%ecx - - sarl $16,%edx - movl 0(%esp),%ebp - -// zbuf = zspantable[new[1]] + new[0]; - movl C(zspantable)(,%ecx,4),%eax - -// if (z >= *zbuf) -// { - cmpw (%eax,%ebp,2),%dx - jnge LNoDraw - -// int pix; -// -// *zbuf = z; - movw %dx,(%eax,%ebp,2) - -// pix = d_pcolormap[skintable[new[3]>>16][new[2]>>16]]; - movl 12(%esp),%eax - - sarl $16,%eax - movl 8(%esp),%edx - - sarl $16,%edx - subl %ecx,%ecx - - movl C(skintable)(,%eax,4),%eax - movl 4(%esp),%ebp - - movb (%eax,%edx,),%cl - movl C(d_pcolormap),%edx - - movb (%edx,%ecx,),%dl - movl 0(%esp),%ecx - -// d_viewbuffer[d_scantable[new[1]] + new[0]] = pix; - movl C(d_scantable)(,%ebp,4),%eax - addl %eax,%ecx - movl C(d_viewbuffer),%eax - movb %dl,(%eax,%ecx,1) - -// } -// -//nodraw: -LNoDraw: - -//// recursively continue -// D_PolysetRecursiveTriangle (lp3, lp1, new); - pushl %esp - pushl %ebx - pushl %edi - call C(D_PolysetRecursiveTriangle) - -// D_PolysetRecursiveTriangle (lp3, new, lp2); - movl %esp,%ebx - pushl %esi - pushl %ebx - pushl %edi - call C(D_PolysetRecursiveTriangle) - addl $24,%esp - -LDone: - popl %ebx // restore register variables - popl %edi - popl %esi - popl %ebp // restore caller stack frame pointer - ret $12 - - -//---------------------------------------------------------------------- -// 8-bpp horizontal span drawing code for affine polygons, with smooth -// shading and no transparency -//---------------------------------------------------------------------- - -#define pspans 4+8 - -.globl C(D_PolysetAff8Start) -C(D_PolysetAff8Start): - -.globl C(D_PolysetDrawSpans8) -C(D_PolysetDrawSpans8): - pushl %esi // preserve register variables - pushl %ebx - - movl pspans(%esp),%esi // point to the first span descriptor - movl C(r_zistepx),%ecx - - pushl %ebp // preserve caller's stack frame - pushl %edi - - rorl $16,%ecx // put high 16 bits of 1/z step in low word - movl spanpackage_t_count(%esi),%edx - - movl %ecx,lzistepx - -LSpanLoop: - -// lcount = d_aspancount - pspanpackage->count; -// -// errorterm += erroradjustup; -// if (errorterm >= 0) -// { -// d_aspancount += d_countextrastep; -// errorterm -= erroradjustdown; -// } -// else -// { -// d_aspancount += ubasestep; -// } - movl C(d_aspancount),%eax - subl %edx,%eax - - movl C(erroradjustup),%edx - movl C(errorterm),%ebx - addl %edx,%ebx - js LNoTurnover - - movl C(erroradjustdown),%edx - movl C(d_countextrastep),%edi - subl %edx,%ebx - movl C(d_aspancount),%ebp - movl %ebx,C(errorterm) - addl %edi,%ebp - movl %ebp,C(d_aspancount) - jmp LRightEdgeStepped - -LNoTurnover: - movl C(d_aspancount),%edi - movl C(ubasestep),%edx - movl %ebx,C(errorterm) - addl %edx,%edi - movl %edi,C(d_aspancount) - -LRightEdgeStepped: - cmpl $1,%eax - - jl LNextSpan - jz LExactlyOneLong - -// -// set up advancetable -// - movl C(a_ststepxwhole),%ecx - movl C(r_affinetridesc)+atd_skinwidth,%edx - - movl %ecx,advancetable+4 // advance base in t - addl %edx,%ecx - - movl %ecx,advancetable // advance extra in t - movl C(a_tstepxfrac),%ecx - - movw C(r_lstepx),%cx - movl %eax,%edx // count - - movl %ecx,tstep - addl $7,%edx - - shrl $3,%edx // count of full and partial loops - movl spanpackage_t_sfrac(%esi),%ebx - - movw %dx,%bx - movl spanpackage_t_pz(%esi),%ecx - - negl %eax - - movl spanpackage_t_pdest(%esi),%edi - andl $7,%eax // 0->0, 1->7, 2->6, ... , 7->1 - - subl %eax,%edi // compensate for hardwired offsets - subl %eax,%ecx - - subl %eax,%ecx - movl spanpackage_t_tfrac(%esi),%edx - - movw spanpackage_t_light(%esi),%dx - movl spanpackage_t_zi(%esi),%ebp - - rorl $16,%ebp // put high 16 bits of 1/z in low word - pushl %esi - - movl spanpackage_t_ptex(%esi),%esi -// 2000-07-30 DJGPP compiler warning fix by Norberto Alfredo Bensa start -// jmp aff8entryvec_table(,%eax,4) - jmp *aff8entryvec_table(,%eax,4) -// 2000-07-30 DJGPP compiler warning fix by Norberto Alfredo Bensa end - -// %bx = count of full and partial loops -// %ebx high word = sfrac -// %ecx = pz -// %dx = light -// %edx high word = tfrac -// %esi = ptex -// %edi = pdest -// %ebp = 1/z -// tstep low word = C(r_lstepx) -// tstep high word = C(a_tstepxfrac) -// C(a_sstepxfrac) low word = 0 -// C(a_sstepxfrac) high word = C(a_sstepxfrac) - -LDrawLoop: - -// FIXME: do we need to clamp light? We may need at least a buffer bit to -// keep it from poking into tfrac and causing problems - -LDraw8: - cmpw (%ecx),%bp - jl Lp1 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,(%ecx) - movb 0x12345678(%eax),%al -LPatch8: - movb %al,(%edi) -Lp1: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw7: - cmpw 2(%ecx),%bp - jl Lp2 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,2(%ecx) - movb 0x12345678(%eax),%al -LPatch7: - movb %al,1(%edi) -Lp2: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw6: - cmpw 4(%ecx),%bp - jl Lp3 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,4(%ecx) - movb 0x12345678(%eax),%al -LPatch6: - movb %al,2(%edi) -Lp3: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw5: - cmpw 6(%ecx),%bp - jl Lp4 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,6(%ecx) - movb 0x12345678(%eax),%al -LPatch5: - movb %al,3(%edi) -Lp4: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw4: - cmpw 8(%ecx),%bp - jl Lp5 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,8(%ecx) - movb 0x12345678(%eax),%al -LPatch4: - movb %al,4(%edi) -Lp5: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw3: - cmpw 10(%ecx),%bp - jl Lp6 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,10(%ecx) - movb 0x12345678(%eax),%al -LPatch3: - movb %al,5(%edi) -Lp6: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw2: - cmpw 12(%ecx),%bp - jl Lp7 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,12(%ecx) - movb 0x12345678(%eax),%al -LPatch2: - movb %al,6(%edi) -Lp7: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw1: - cmpw 14(%ecx),%bp - jl Lp8 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,14(%ecx) - movb 0x12345678(%eax),%al -LPatch1: - movb %al,7(%edi) -Lp8: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - - addl $8,%edi - addl $16,%ecx - - decw %bx - jnz LDrawLoop - - popl %esi // restore spans pointer -LNextSpan: - addl $(spanpackage_t_size),%esi // point to next span -LNextSpanESISet: - movl spanpackage_t_count(%esi),%edx - cmpl $-999999,%edx // any more spans? - jnz LSpanLoop // yes - - popl %edi - popl %ebp // restore the caller's stack frame - popl %ebx // restore register variables - popl %esi - ret - - -// draw a one-long span - -LExactlyOneLong: - - movl spanpackage_t_pz(%esi),%ecx - movl spanpackage_t_zi(%esi),%ebp - - rorl $16,%ebp // put high 16 bits of 1/z in low word - movl spanpackage_t_ptex(%esi),%ebx - - cmpw (%ecx),%bp - jl LNextSpan - xorl %eax,%eax - movl spanpackage_t_pdest(%esi),%edi - movb spanpackage_t_light+1(%esi),%ah - addl $(spanpackage_t_size),%esi // point to next span - movb (%ebx),%al - movw %bp,(%ecx) - movb 0x12345678(%eax),%al -LPatch9: - movb %al,(%edi) - - jmp LNextSpanESISet - -.globl C(D_PolysetAff8End) -C(D_PolysetAff8End): - - -#define pcolormap 4 - -.globl C(D_Aff8Patch) -C(D_Aff8Patch): - movl pcolormap(%esp),%eax - movl %eax,LPatch1-4 - movl %eax,LPatch2-4 - movl %eax,LPatch3-4 - movl %eax,LPatch4-4 - movl %eax,LPatch5-4 - movl %eax,LPatch6-4 - movl %eax,LPatch7-4 - movl %eax,LPatch8-4 - movl %eax,LPatch9-4 - - ret - - -//---------------------------------------------------------------------- -// Alias model polygon dispatching code, combined with subdivided affine -// triangle drawing code -//---------------------------------------------------------------------- - -.globl C(D_PolysetDraw) -C(D_PolysetDraw): - -// spanpackage_t spans[DPS_MAXSPANS + 1 + -// ((CACHE_SIZE - 1) / sizeof(spanpackage_t)) + 1]; -// // one extra because of cache line pretouching -// -// a_spans = (spanpackage_t *) -// (((long)&spans[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); - subl $(SPAN_SIZE),%esp - movl %esp,%eax - addl $(CACHE_SIZE - 1),%eax - andl $(~(CACHE_SIZE - 1)),%eax - movl %eax,C(a_spans) - -// if (r_affinetridesc.drawtype) -// D_DrawSubdiv (); -// else -// D_DrawNonSubdiv (); - movl C(r_affinetridesc)+atd_drawtype,%eax - testl %eax,%eax - jz C(D_DrawNonSubdiv) - - pushl %ebp // preserve caller stack frame pointer - -// lnumtriangles = r_affinetridesc.numtriangles; - movl C(r_affinetridesc)+atd_numtriangles,%ebp - - pushl %esi // preserve register variables - shll $4,%ebp - - pushl %ebx -// ptri = r_affinetridesc.ptriangles; - movl C(r_affinetridesc)+atd_ptriangles,%ebx - - pushl %edi - -// mtriangle_t *ptri; -// finalvert_t *pfv, *index0, *index1, *index2; -// int i; -// int lnumtriangles; -// int s0, s1, s2; - -// pfv = r_affinetridesc.pfinalverts; - movl C(r_affinetridesc)+atd_pfinalverts,%edi - -// for (i=0 ; iv[1]-index1->v[1]) * -// (index0->v[0]-index2->v[0]) - -// (index0->v[0]-index1->v[0])*(index0->v[1]-index2->v[1])) >= 0) -// { -// continue; -// } -// -// d_pcolormap = &((byte *)acolormap)[index0->v[4] & 0xFF00]; - fildl fv_v+4(%ecx) // i0v1 - fildl fv_v+4(%esi) // i1v1 | i0v1 - fildl fv_v+0(%ecx) // i0v0 | i1v1 | i0v1 - fildl fv_v+0(%edx) // i2v0 | i0v0 | i1v1 | i0v1 - fxch %st(2) // i1v1 | i0v0 | i2v0 | i0v1 - fsubr %st(3),%st(0) // i0v1-i1v1 | i0v0 | i2v0 | i0v1 - fildl fv_v+0(%esi) // i1v0 | i0v1-i1v1 | i0v0 | i2v0 | i0v1 - fxch %st(2) // i0v0 | i0v1-i1v1 | i1v0 | i2v0 | i0v1 - fsub %st(0),%st(3) // i0v0 | i0v1-i1v1 | i1v0 | i0v0-i2v0 | i0v1 - fildl fv_v+4(%edx) // i2v1 | i0v0 | i0v1-i1v1 | i1v0 | i0v0-i2v0| i0v1 - fxch %st(1) // i0v0 | i2v1 | i0v1-i1v1 | i1v0 | i0v0-i2v0| i0v1 - fsubp %st(0),%st(3) // i2v1 | i0v1-i1v1 | i0v0-i1v0 | i0v0-i2v0 | i0v1 - fxch %st(1) // i0v1-i1v1 | i2v1 | i0v0-i1v0 | i0v0-i2v0 | i0v1 - fmulp %st(0),%st(3) // i2v1 | i0v0-i1v0 | i0v1-i1v1*i0v0-i2v0 | i0v1 - fsubrp %st(0),%st(3) // i0v0-i1v0 | i0v1-i1v1*i0v0-i2v0 | i0v1-i2v1 - movl fv_v+16(%ecx),%eax - andl $0xFF00,%eax - fmulp %st(0),%st(2) // i0v1-i1v1*i0v0-i2v0 | i0v0-i1v0*i0v1-i2v1 - addl C(acolormap),%eax - fsubp %st(0),%st(1) // (i0v1-i1v1)*(i0v0-i2v0)-(i0v0-i1v0)*(i0v1-i2v1) - movl %eax,C(d_pcolormap) - fstps Ltemp - movl Ltemp,%eax - subl $0x80000001,%eax - jc Lskip - -// if (ptri[i].facesfront) -// { -// D_PolysetRecursiveTriangle(index0->v, index1->v, index2->v); - movl mtri_facesfront-16(%ebx,%ebp,),%eax - testl %eax,%eax - jz Lfacesback - - pushl %edx - pushl %esi - pushl %ecx - call C(D_PolysetRecursiveTriangle) - - subl $16,%ebp - jnz Llooptop - jmp Ldone2 - -// } -// else -// { -Lfacesback: - -// s0 = index0->v[2]; -// s1 = index1->v[2]; -// s2 = index2->v[2]; - movl fv_v+8(%ecx),%eax - pushl %eax - movl fv_v+8(%esi),%eax - pushl %eax - movl fv_v+8(%edx),%eax - pushl %eax - pushl %ecx - pushl %edx - -// if (index0->flags & ALIAS_ONSEAM) -// index0->v[2] += r_affinetridesc.seamfixupX16; - movl C(r_affinetridesc)+atd_seamfixupX16,%eax - testl $(ALIAS_ONSEAM),fv_flags(%ecx) - jz Lp11 - addl %eax,fv_v+8(%ecx) -Lp11: - -// if (index1->flags & ALIAS_ONSEAM) -// index1->v[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),fv_flags(%esi) - jz Lp12 - addl %eax,fv_v+8(%esi) -Lp12: - -// if (index2->flags & ALIAS_ONSEAM) -// index2->v[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),fv_flags(%edx) - jz Lp13 - addl %eax,fv_v+8(%edx) -Lp13: - -// D_PolysetRecursiveTriangle(index0->v, index1->v, index2->v); - pushl %edx - pushl %esi - pushl %ecx - call C(D_PolysetRecursiveTriangle) - -// index0->v[2] = s0; -// index1->v[2] = s1; -// index2->v[2] = s2; - popl %edx - popl %ecx - popl %eax - movl %eax,fv_v+8(%edx) - popl %eax - movl %eax,fv_v+8(%esi) - popl %eax - movl %eax,fv_v+8(%ecx) - -// } -// } -Lskip: - subl $16,%ebp - jnz Llooptop - -Ldone2: - popl %edi // restore the caller's stack frame - popl %ebx - popl %esi // restore register variables - popl %ebp - - addl $(SPAN_SIZE),%esp - - ret - - -//---------------------------------------------------------------------- -// Alias model triangle left-edge scanning code -//---------------------------------------------------------------------- - -#define height 4+16 - -.globl C(D_PolysetScanLeftEdge) -C(D_PolysetScanLeftEdge): - pushl %ebp // preserve caller stack frame pointer - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - - movl height(%esp),%eax - movl C(d_sfrac),%ecx - andl $0xFFFF,%eax - movl C(d_ptex),%ebx - orl %eax,%ecx - movl C(d_pedgespanpackage),%esi - movl C(d_tfrac),%edx - movl C(d_light),%edi - movl C(d_zi),%ebp - -// %eax: scratch -// %ebx: d_ptex -// %ecx: d_sfrac in high word, count in low word -// %edx: d_tfrac -// %esi: d_pedgespanpackage, errorterm, scratch alternately -// %edi: d_light -// %ebp: d_zi - -// do -// { - -LScanLoop: - -// d_pedgespanpackage->ptex = ptex; -// d_pedgespanpackage->pdest = d_pdest; -// d_pedgespanpackage->pz = d_pz; -// d_pedgespanpackage->count = d_aspancount; -// d_pedgespanpackage->light = d_light; -// d_pedgespanpackage->zi = d_zi; -// d_pedgespanpackage->sfrac = d_sfrac << 16; -// d_pedgespanpackage->tfrac = d_tfrac << 16; - movl %ebx,spanpackage_t_ptex(%esi) - movl C(d_pdest),%eax - movl %eax,spanpackage_t_pdest(%esi) - movl C(d_pz),%eax - movl %eax,spanpackage_t_pz(%esi) - movl C(d_aspancount),%eax - movl %eax,spanpackage_t_count(%esi) - movl %edi,spanpackage_t_light(%esi) - movl %ebp,spanpackage_t_zi(%esi) - movl %ecx,spanpackage_t_sfrac(%esi) - movl %edx,spanpackage_t_tfrac(%esi) - -// pretouch the next cache line - movb spanpackage_t_size(%esi),%al - -// d_pedgespanpackage++; - addl $(spanpackage_t_size),%esi - movl C(erroradjustup),%eax - movl %esi,C(d_pedgespanpackage) - -// errorterm += erroradjustup; - movl C(errorterm),%esi - addl %eax,%esi - movl C(d_pdest),%eax - -// if (errorterm >= 0) -// { - js LNoLeftEdgeTurnover - -// errorterm -= erroradjustdown; -// d_pdest += d_pdestextrastep; - subl C(erroradjustdown),%esi - addl C(d_pdestextrastep),%eax - movl %esi,C(errorterm) - movl %eax,C(d_pdest) - -// d_pz += d_pzextrastep; -// d_aspancount += d_countextrastep; -// d_ptex += d_ptexextrastep; -// d_sfrac += d_sfracextrastep; -// d_ptex += d_sfrac >> 16; -// d_sfrac &= 0xFFFF; -// d_tfrac += d_tfracextrastep; - movl C(d_pz),%eax - movl C(d_aspancount),%esi - addl C(d_pzextrastep),%eax - addl C(d_sfracextrastep),%ecx - adcl C(d_ptexextrastep),%ebx - addl C(d_countextrastep),%esi - movl %eax,C(d_pz) - movl C(d_tfracextrastep),%eax - movl %esi,C(d_aspancount) - addl %eax,%edx - -// if (d_tfrac & 0x10000) -// { - jnc LSkip1 - -// d_ptex += r_affinetridesc.skinwidth; -// d_tfrac &= 0xFFFF; - addl C(r_affinetridesc)+atd_skinwidth,%ebx - -// } - -LSkip1: - -// d_light += d_lightextrastep; -// d_zi += d_ziextrastep; - addl C(d_lightextrastep),%edi - addl C(d_ziextrastep),%ebp - -// } - movl C(d_pedgespanpackage),%esi - decl %ecx - testl $0xFFFF,%ecx - jnz LScanLoop - - popl %ebx - popl %edi - popl %esi - popl %ebp - ret - -// else -// { - -LNoLeftEdgeTurnover: - movl %esi,C(errorterm) - -// d_pdest += d_pdestbasestep; - addl C(d_pdestbasestep),%eax - movl %eax,C(d_pdest) - -// d_pz += d_pzbasestep; -// d_aspancount += ubasestep; -// d_ptex += d_ptexbasestep; -// d_sfrac += d_sfracbasestep; -// d_ptex += d_sfrac >> 16; -// d_sfrac &= 0xFFFF; - movl C(d_pz),%eax - movl C(d_aspancount),%esi - addl C(d_pzbasestep),%eax - addl C(d_sfracbasestep),%ecx - adcl C(d_ptexbasestep),%ebx - addl C(ubasestep),%esi - movl %eax,C(d_pz) - movl %esi,C(d_aspancount) - -// d_tfrac += d_tfracbasestep; - movl C(d_tfracbasestep),%esi - addl %esi,%edx - -// if (d_tfrac & 0x10000) -// { - jnc LSkip2 - -// d_ptex += r_affinetridesc.skinwidth; -// d_tfrac &= 0xFFFF; - addl C(r_affinetridesc)+atd_skinwidth,%ebx - -// } - -LSkip2: - -// d_light += d_lightbasestep; -// d_zi += d_zibasestep; - addl C(d_lightbasestep),%edi - addl C(d_zibasestep),%ebp - -// } -// } while (--height); - movl C(d_pedgespanpackage),%esi - decl %ecx - testl $0xFFFF,%ecx - jnz LScanLoop - - popl %ebx - popl %edi - popl %esi - popl %ebp - ret - - -//---------------------------------------------------------------------- -// Alias model vertex drawing code -//---------------------------------------------------------------------- - -#define fv 4+8 -#define numverts 8+8 - -.globl C(D_PolysetDrawFinalVerts) -C(D_PolysetDrawFinalVerts): - pushl %ebp // preserve caller stack frame pointer - pushl %ebx - -// int i, z; -// short *zbuf; - - movl numverts(%esp),%ecx - movl fv(%esp),%ebx - - pushl %esi // preserve register variables - pushl %edi - -LFVLoop: - -// for (i=0 ; iv[0] < r_refdef.vrectright) && -// (fv->v[1] < r_refdef.vrectbottom)) -// { - movl fv_v+0(%ebx),%eax - movl C(r_refdef)+rd_vrectright,%edx - cmpl %edx,%eax - jge LNextVert - movl fv_v+4(%ebx),%esi - movl C(r_refdef)+rd_vrectbottom,%edx - cmpl %edx,%esi - jge LNextVert - -// zbuf = zspantable[fv->v[1]] + fv->v[0]; - movl C(zspantable)(,%esi,4),%edi - -// z = fv->v[5]>>16; - movl fv_v+20(%ebx),%edx - shrl $16,%edx - -// if (z >= *zbuf) -// { -// int pix; - cmpw (%edi,%eax,2),%dx - jl LNextVert - -// *zbuf = z; - movw %dx,(%edi,%eax,2) - -// pix = skintable[fv->v[3]>>16][fv->v[2]>>16]; - movl fv_v+12(%ebx),%edi - shrl $16,%edi - movl C(skintable)(,%edi,4),%edi - movl fv_v+8(%ebx),%edx - shrl $16,%edx - movb (%edi,%edx),%dl - -// pix = ((byte *)acolormap)[pix + (fv->v[4] & 0xFF00)]; - movl fv_v+16(%ebx),%edi - andl $0xFF00,%edi - andl $0x00FF,%edx - addl %edx,%edi - movl C(acolormap),%edx - movb (%edx,%edi,1),%dl - -// d_viewbuffer[d_scantable[fv->v[1]] + fv->v[0]] = pix; - movl C(d_scantable)(,%esi,4),%edi - movl C(d_viewbuffer),%esi - addl %eax,%edi - movb %dl,(%esi,%edi) - -// } -// } -// } -LNextVert: - addl $(fv_size),%ebx - decl %ecx - jnz LFVLoop - - popl %edi - popl %esi - popl %ebx - popl %ebp - ret - - -//---------------------------------------------------------------------- -// Alias model non-subdivided polygon dispatching code -// -// not C-callable because of stack buffer cleanup -//---------------------------------------------------------------------- - -.globl C(D_DrawNonSubdiv) -C(D_DrawNonSubdiv): - pushl %ebp // preserve caller stack frame pointer - movl C(r_affinetridesc)+atd_numtriangles,%ebp - pushl %ebx - shll $(mtri_shift),%ebp - pushl %esi // preserve register variables - movl C(r_affinetridesc)+atd_ptriangles,%esi - pushl %edi - -// mtriangle_t *ptri; -// finalvert_t *pfv, *index0, *index1, *index2; -// int i; -// int lnumtriangles; - -// pfv = r_affinetridesc.pfinalverts; -// ptri = r_affinetridesc.ptriangles; -// lnumtriangles = r_affinetridesc.numtriangles; - -LNDLoop: - -// for (i=0 ; ivertindex[0]; -// index1 = pfv + ptri->vertindex[1]; -// index2 = pfv + ptri->vertindex[2]; - movl C(r_affinetridesc)+atd_pfinalverts,%edi - movl mtri_vertindex+0-mtri_size(%esi,%ebp,1),%ecx - shll $(fv_shift),%ecx - movl mtri_vertindex+4-mtri_size(%esi,%ebp,1),%edx - shll $(fv_shift),%edx - movl mtri_vertindex+8-mtri_size(%esi,%ebp,1),%ebx - shll $(fv_shift),%ebx - addl %edi,%ecx - addl %edi,%edx - addl %edi,%ebx - -// d_xdenom = (index0->v[1]-index1->v[1]) * -// (index0->v[0]-index2->v[0]) - -// (index0->v[0]-index1->v[0])*(index0->v[1]-index2->v[1]); - movl fv_v+4(%ecx),%eax - movl fv_v+0(%ecx),%esi - subl fv_v+4(%edx),%eax - subl fv_v+0(%ebx),%esi - imull %esi,%eax - movl fv_v+0(%ecx),%esi - movl fv_v+4(%ecx),%edi - subl fv_v+0(%edx),%esi - subl fv_v+4(%ebx),%edi - imull %esi,%edi - subl %edi,%eax - -// if (d_xdenom >= 0) -// { -// continue; - jns LNextTri - -// } - - movl %eax,C(d_xdenom) - fildl C(d_xdenom) - -// r_p0[0] = index0->v[0]; // u -// r_p0[1] = index0->v[1]; // v -// r_p0[2] = index0->v[2]; // s -// r_p0[3] = index0->v[3]; // t -// r_p0[4] = index0->v[4]; // light -// r_p0[5] = index0->v[5]; // iz - movl fv_v+0(%ecx),%eax - movl fv_v+4(%ecx),%esi - movl %eax,C(r_p0)+0 - movl %esi,C(r_p0)+4 - movl fv_v+8(%ecx),%eax - movl fv_v+12(%ecx),%esi - movl %eax,C(r_p0)+8 - movl %esi,C(r_p0)+12 - movl fv_v+16(%ecx),%eax - movl fv_v+20(%ecx),%esi - movl %eax,C(r_p0)+16 - movl %esi,C(r_p0)+20 - - fdivrs float_1 - -// r_p1[0] = index1->v[0]; -// r_p1[1] = index1->v[1]; -// r_p1[2] = index1->v[2]; -// r_p1[3] = index1->v[3]; -// r_p1[4] = index1->v[4]; -// r_p1[5] = index1->v[5]; - movl fv_v+0(%edx),%eax - movl fv_v+4(%edx),%esi - movl %eax,C(r_p1)+0 - movl %esi,C(r_p1)+4 - movl fv_v+8(%edx),%eax - movl fv_v+12(%edx),%esi - movl %eax,C(r_p1)+8 - movl %esi,C(r_p1)+12 - movl fv_v+16(%edx),%eax - movl fv_v+20(%edx),%esi - movl %eax,C(r_p1)+16 - movl %esi,C(r_p1)+20 - -// r_p2[0] = index2->v[0]; -// r_p2[1] = index2->v[1]; -// r_p2[2] = index2->v[2]; -// r_p2[3] = index2->v[3]; -// r_p2[4] = index2->v[4]; -// r_p2[5] = index2->v[5]; - movl fv_v+0(%ebx),%eax - movl fv_v+4(%ebx),%esi - movl %eax,C(r_p2)+0 - movl %esi,C(r_p2)+4 - movl fv_v+8(%ebx),%eax - movl fv_v+12(%ebx),%esi - movl %eax,C(r_p2)+8 - movl %esi,C(r_p2)+12 - movl fv_v+16(%ebx),%eax - movl fv_v+20(%ebx),%esi - movl %eax,C(r_p2)+16 - movl C(r_affinetridesc)+atd_ptriangles,%edi - movl %esi,C(r_p2)+20 - movl mtri_facesfront-mtri_size(%edi,%ebp,1),%eax - -// if (!ptri->facesfront) -// { - testl %eax,%eax - jnz LFacesFront - -// if (index0->flags & ALIAS_ONSEAM) -// r_p0[2] += r_affinetridesc.seamfixupX16; - movl fv_flags(%ecx),%eax - movl fv_flags(%edx),%esi - movl fv_flags(%ebx),%edi - testl $(ALIAS_ONSEAM),%eax - movl C(r_affinetridesc)+atd_seamfixupX16,%eax - jz LOnseamDone0 - addl %eax,C(r_p0)+8 -LOnseamDone0: - -// if (index1->flags & ALIAS_ONSEAM) -// r_p1[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),%esi - jz LOnseamDone1 - addl %eax,C(r_p1)+8 -LOnseamDone1: - -// if (index2->flags & ALIAS_ONSEAM) -// r_p2[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),%edi - jz LOnseamDone2 - addl %eax,C(r_p2)+8 -LOnseamDone2: - -// } - -LFacesFront: - - fstps C(d_xdenom) - -// D_PolysetSetEdgeTable (); -// D_RasterizeAliasPolySmooth (); - call C(D_PolysetSetEdgeTable) - call C(D_RasterizeAliasPolySmooth) - -LNextTri: - movl C(r_affinetridesc)+atd_ptriangles,%esi - subl $16,%ebp - jnz LNDLoop -// } - - popl %edi - popl %esi - popl %ebx - popl %ebp - - addl $(SPAN_SIZE),%esp - - ret - - -#endif // id386 -#endif diff --git a/asm/d_scana.s b/asm/d_scana.s deleted file mode 100644 index df830f8..0000000 --- a/asm/d_scana.s +++ /dev/null @@ -1,98 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_scana.s -// x86 assembly-language turbulent texture mapping code -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - - .data - - .text - -//---------------------------------------------------------------------- -// turbulent texture mapping code -//---------------------------------------------------------------------- - - .align 4 -.globl C(D_DrawTurbulent8Span) -C(D_DrawTurbulent8Span): - pushl %ebp // preserve caller's stack frame pointer - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - - movl C(r_turb_s),%esi - movl C(r_turb_t),%ecx - movl C(r_turb_pdest),%edi - movl C(r_turb_spancount),%ebx - -Llp: - movl %ecx,%eax - movl %esi,%edx - sarl $16,%eax - movl C(r_turb_turb),%ebp - sarl $16,%edx - andl $(CYCLE-1),%eax - andl $(CYCLE-1),%edx - movl (%ebp,%eax,4),%eax - movl (%ebp,%edx,4),%edx - addl %esi,%eax - sarl $16,%eax - addl %ecx,%edx - sarl $16,%edx - andl $(TURB_TEX_SIZE-1),%eax - andl $(TURB_TEX_SIZE-1),%edx - shll $6,%edx - movl C(r_turb_pbase),%ebp - addl %eax,%edx - incl %edi - addl C(r_turb_sstep),%esi - addl C(r_turb_tstep),%ecx - movb (%ebp,%edx,1),%dl - decl %ebx - movb %dl,-1(%edi) - jnz Llp - - movl %edi,C(r_turb_pdest) - - popl %ebx // restore register variables - popl %edi - popl %esi - popl %ebp // restore caller's stack frame pointer - ret - - - - - - - - -#endif // id386 -#endif diff --git a/asm/d_spr8.s b/asm/d_spr8.s deleted file mode 100644 index ec4bb9f..0000000 --- a/asm/d_spr8.s +++ /dev/null @@ -1,902 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_spr8.s -// x86 assembly-language horizontal 8-bpp transparent span-drawing code. -// - -#ifndef NOASM -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" - -#if id386 - -//---------------------------------------------------------------------- -// 8-bpp horizontal span drawing code for polygons, with transparency. -//---------------------------------------------------------------------- - - .text - -// out-of-line, rarely-needed clamping code - -LClampHigh0: - movl C(bbextents),%esi - jmp LClampReentry0 -LClampHighOrLow0: - jg LClampHigh0 - xorl %esi,%esi - jmp LClampReentry0 - -LClampHigh1: - movl C(bbextentt),%edx - jmp LClampReentry1 -LClampHighOrLow1: - jg LClampHigh1 - xorl %edx,%edx - jmp LClampReentry1 - -LClampLow2: - movl $2048,%ebp - jmp LClampReentry2 -LClampHigh2: - movl C(bbextents),%ebp - jmp LClampReentry2 - -LClampLow3: - movl $2048,%ecx - jmp LClampReentry3 -LClampHigh3: - movl C(bbextentt),%ecx - jmp LClampReentry3 - -LClampLow4: - movl $2048,%eax - jmp LClampReentry4 -LClampHigh4: - movl C(bbextents),%eax - jmp LClampReentry4 - -LClampLow5: - movl $2048,%ebx - jmp LClampReentry5 -LClampHigh5: - movl C(bbextentt),%ebx - jmp LClampReentry5 - - -#define pspans 4+16 - - .align 4 -.globl C(D_SpriteDrawSpans) -C(D_SpriteDrawSpans): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// -// set up scaled-by-8 steps, for 8-long segments; also set up cacheblock -// and span list pointers, and 1/z step in 0.32 fixed-point -// -// FIXME: any overlap from rearranging? - flds C(d_sdivzstepu) - fmuls fp_8 - movl C(cacheblock),%edx - flds C(d_tdivzstepu) - fmuls fp_8 - movl pspans(%esp),%ebx // point to the first span descriptor - flds C(d_zistepu) - fmuls fp_8 - movl %edx,pbase // pbase = cacheblock - flds C(d_zistepu) - fmuls fp_64kx64k - fxch %st(3) - fstps sdivz8stepu - fstps zi8stepu - fstps tdivz8stepu - fistpl izistep - movl izistep,%eax - rorl $16,%eax // put upper 16 bits in low word - movl sspan_t_count(%ebx),%ecx - movl %eax,izistep - - cmpl $0,%ecx - jle LNextSpan - -LSpanLoop: - -// -// set up the initial s/z, t/z, and 1/z on the FP stack, and generate the -// initial s and t values -// -// FIXME: pipeline FILD? - fildl sspan_t_v(%ebx) - fildl sspan_t_u(%ebx) - - fld %st(1) // dv | du | dv - fmuls C(d_sdivzstepv) // dv*d_sdivzstepv | du | dv - fld %st(1) // du | dv*d_sdivzstepv | du | dv - fmuls C(d_sdivzstepu) // du*d_sdivzstepu | dv*d_sdivzstepv | du | dv - fld %st(2) // du | du*d_sdivzstepu | dv*d_sdivzstepv | du | dv - fmuls C(d_tdivzstepu) // du*d_tdivzstepu | du*d_sdivzstepu | - // dv*d_sdivzstepv | du | dv - fxch %st(1) // du*d_sdivzstepu | du*d_tdivzstepu | - // dv*d_sdivzstepv | du | dv - faddp %st(0),%st(2) // du*d_tdivzstepu | - // du*d_sdivzstepu + dv*d_sdivzstepv | du | dv - fxch %st(1) // du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fld %st(3) // dv | du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fmuls C(d_tdivzstepv) // dv*d_tdivzstepv | - // du*d_sdivzstepu + dv*d_sdivzstepv | - // du*d_tdivzstepu | du | dv - fxch %st(1) // du*d_sdivzstepu + dv*d_sdivzstepv | - // dv*d_tdivzstepv | du*d_tdivzstepu | du | dv - fadds C(d_sdivzorigin) // sdivz = d_sdivzorigin + dv*d_sdivzstepv + - // du*d_sdivzstepu; stays in %st(2) at end - fxch %st(4) // dv | dv*d_tdivzstepv | du*d_tdivzstepu | du | - // s/z - fmuls C(d_zistepv) // dv*d_zistepv | dv*d_tdivzstepv | - // du*d_tdivzstepu | du | s/z - fxch %st(1) // dv*d_tdivzstepv | dv*d_zistepv | - // du*d_tdivzstepu | du | s/z - faddp %st(0),%st(2) // dv*d_zistepv | - // dv*d_tdivzstepv + du*d_tdivzstepu | du | s/z - fxch %st(2) // du | dv*d_tdivzstepv + du*d_tdivzstepu | - // dv*d_zistepv | s/z - fmuls C(d_zistepu) // du*d_zistepu | - // dv*d_tdivzstepv + du*d_tdivzstepu | - // dv*d_zistepv | s/z - fxch %st(1) // dv*d_tdivzstepv + du*d_tdivzstepu | - // du*d_zistepu | dv*d_zistepv | s/z - fadds C(d_tdivzorigin) // tdivz = d_tdivzorigin + dv*d_tdivzstepv + - // du*d_tdivzstepu; stays in %st(1) at end - fxch %st(2) // dv*d_zistepv | du*d_zistepu | t/z | s/z - faddp %st(0),%st(1) // dv*d_zistepv + du*d_zistepu | t/z | s/z - - flds fp_64k // fp_64k | dv*d_zistepv + du*d_zistepu | t/z | s/z - fxch %st(1) // dv*d_zistepv + du*d_zistepu | fp_64k | t/z | s/z - fadds C(d_ziorigin) // zi = d_ziorigin + dv*d_zistepv + - // du*d_zistepu; stays in %st(0) at end - // 1/z | fp_64k | t/z | s/z - - fld %st(0) // FIXME: get rid of stall on FMUL? - fmuls fp_64kx64k - fxch %st(1) - -// -// calculate and clamp s & t -// - fdivr %st(0),%st(2) // 1/z | z*64k | t/z | s/z - fxch %st(1) - - fistpl izi // 0.32 fixed-point 1/z - movl izi,%ebp - -// -// set pz to point to the first z-buffer pixel in the span -// - rorl $16,%ebp // put upper 16 bits in low word - movl sspan_t_v(%ebx),%eax - movl %ebp,izi - movl sspan_t_u(%ebx),%ebp - imull C(d_zrowbytes) - shll $1,%ebp // a word per pixel - addl C(d_pzbuffer),%eax - addl %ebp,%eax - movl %eax,pz - -// -// point %edi to the first pixel in the span -// - movl C(d_viewbuffer),%ebp - movl sspan_t_v(%ebx),%eax - pushl %ebx // preserve spans pointer - movl C(tadjust),%edx - movl C(sadjust),%esi - movl C(d_scantable)(,%eax,4),%edi // v * screenwidth - addl %ebp,%edi - movl sspan_t_u(%ebx),%ebp - addl %ebp,%edi // pdest = &pdestspan[scans->u]; - -// -// now start the FDIV for the end of the span -// - cmpl $8,%ecx - ja LSetupNotLast1 - - decl %ecx - jz LCleanup1 // if only one pixel, no need to start an FDIV - movl %ecx,spancountminus1 - -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - - fildl spancountminus1 - - flds C(d_tdivzstepu) // _d_tdivzstepu | spancountminus1 - flds C(d_zistepu) // _d_zistepu | _d_tdivzstepu | spancountminus1 - fmul %st(2),%st(0) // _d_zistepu*scm1 | _d_tdivzstepu | scm1 - fxch %st(1) // _d_tdivzstepu | _d_zistepu*scm1 | scm1 - fmul %st(2),%st(0) // _d_tdivzstepu*scm1 | _d_zistepu*scm1 | scm1 - fxch %st(2) // scm1 | _d_zistepu*scm1 | _d_tdivzstepu*scm1 - fmuls C(d_sdivzstepu) // _d_sdivzstepu*scm1 | _d_zistepu*scm1 | - // _d_tdivzstepu*scm1 - fxch %st(1) // _d_zistepu*scm1 | _d_sdivzstepu*scm1 | - // _d_tdivzstepu*scm1 - faddp %st(0),%st(3) // _d_sdivzstepu*scm1 | _d_tdivzstepu*scm1 - fxch %st(1) // _d_tdivzstepu*scm1 | _d_sdivzstepu*scm1 - faddp %st(0),%st(3) // _d_sdivzstepu*scm1 - faddp %st(0),%st(3) - - flds fp_64k - fdiv %st(1),%st(0) // this is what we've gone to all this trouble to - // overlap - jmp LFDIVInFlight1 - -LCleanup1: -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - jmp LFDIVInFlight1 - - .align 4 -LSetupNotLast1: -// finish up the s and t calcs - fxch %st(1) // z*64k | 1/z | t/z | s/z - - fld %st(0) // z*64k | z*64k | 1/z | t/z | s/z - fmul %st(4),%st(0) // s | z*64k | 1/z | t/z | s/z - fxch %st(1) // z*64k | s | 1/z | t/z | s/z - fmul %st(3),%st(0) // t | s | 1/z | t/z | s/z - fxch %st(1) // s | t | 1/z | t/z | s/z - fistpl s // 1/z | t | t/z | s/z - fistpl t // 1/z | t/z | s/z - - fadds zi8stepu - fxch %st(2) - fadds sdivz8stepu - fxch %st(2) - flds tdivz8stepu - faddp %st(0),%st(2) - flds fp_64k - fdiv %st(1),%st(0) // z = 1/1/z - // this is what we've gone to all this trouble to - // overlap -LFDIVInFlight1: - - addl s,%esi - addl t,%edx - movl C(bbextents),%ebx - movl C(bbextentt),%ebp - cmpl %ebx,%esi - ja LClampHighOrLow0 -LClampReentry0: - movl %esi,s - movl pbase,%ebx - shll $16,%esi - cmpl %ebp,%edx - movl %esi,sfracf - ja LClampHighOrLow1 -LClampReentry1: - movl %edx,t - movl s,%esi // sfrac = scans->sfrac; - shll $16,%edx - movl t,%eax // tfrac = scans->tfrac; - sarl $16,%esi - movl %edx,tfracf - -// -// calculate the texture starting address -// - sarl $16,%eax - addl %ebx,%esi - imull C(cachewidth),%eax // (tfrac >> 16) * cachewidth - addl %eax,%esi // psource = pbase + (sfrac >> 16) + - // ((tfrac >> 16) * cachewidth); - -// -// determine whether last span or not -// - cmpl $8,%ecx - jna LLastSegment - -// -// not the last segment; do full 8-wide segment -// -LNotLastSegment: - -// -// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to -// get there -// - -// pick up after the FDIV that was left in flight previously - - fld %st(0) // duplicate it - fmul %st(4),%st(0) // s = s/z * z - fxch %st(1) - fmul %st(3),%st(0) // t = t/z * z - fxch %st(1) - fistpl snext - fistpl tnext - movl snext,%eax - movl tnext,%edx - - subl $8,%ecx // count off this segments' pixels - movl C(sadjust),%ebp - pushl %ecx // remember count of remaining pixels - movl C(tadjust),%ecx - - addl %eax,%ebp - addl %edx,%ecx - - movl C(bbextents),%eax - movl C(bbextentt),%edx - - cmpl $2048,%ebp - jl LClampLow2 - cmpl %eax,%ebp - ja LClampHigh2 -LClampReentry2: - - cmpl $2048,%ecx - jl LClampLow3 - cmpl %edx,%ecx - ja LClampHigh3 -LClampReentry3: - - movl %ebp,snext - movl %ecx,tnext - - subl s,%ebp - subl t,%ecx - -// -// set up advancetable -// - movl %ecx,%eax - movl %ebp,%edx - sarl $19,%edx // sstep >>= 16; - movl C(cachewidth),%ebx - sarl $19,%eax // tstep >>= 16; - jz LIsZero - imull %ebx,%eax // (tstep >> 16) * cachewidth; -LIsZero: - addl %edx,%eax // add in sstep - // (tstep >> 16) * cachewidth + (sstep >> 16); - movl tfracf,%edx - movl %eax,advancetable+4 // advance base in t - addl %ebx,%eax // ((tstep >> 16) + 1) * cachewidth + - // (sstep >> 16); - shll $13,%ebp // left-justify sstep fractional part - movl %ebp,sstep - movl sfracf,%ebx - shll $13,%ecx // left-justify tstep fractional part - movl %eax,advancetable // advance extra in t - movl %ecx,tstep - - movl pz,%ecx - movl izi,%ebp - - cmpw (%ecx),%bp - jl Lp1 - movb (%esi),%al // get first source texel - cmpb $(TRANSPARENT_COLOR),%al - jz Lp1 - movw %bp,(%ecx) - movb %al,(%edi) // store first dest pixel -Lp1: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx // advance tfrac fractional part by tstep frac - - sbbl %eax,%eax // turn tstep carry into -1 (0 if none) - addl sstep,%ebx // advance sfrac fractional part by sstep frac - adcl advancetable+4(,%eax,4),%esi // point to next source texel - - cmpw 2(%ecx),%bp - jl Lp2 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp2 - movw %bp,2(%ecx) - movb %al,1(%edi) -Lp2: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - - cmpw 4(%ecx),%bp - jl Lp3 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp3 - movw %bp,4(%ecx) - movb %al,2(%edi) -Lp3: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - - cmpw 6(%ecx),%bp - jl Lp4 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp4 - movw %bp,6(%ecx) - movb %al,3(%edi) -Lp4: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - - cmpw 8(%ecx),%bp - jl Lp5 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp5 - movw %bp,8(%ecx) - movb %al,4(%edi) -Lp5: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - -// -// start FDIV for end of next segment in flight, so it can overlap -// - popl %eax - cmpl $8,%eax // more than one segment after this? - ja LSetupNotLast2 // yes - - decl %eax - jz LFDIVInFlight2 // if only one pixel, no need to start an FDIV - movl %eax,spancountminus1 - fildl spancountminus1 - - flds C(d_zistepu) // _d_zistepu | spancountminus1 - fmul %st(1),%st(0) // _d_zistepu*scm1 | scm1 - flds C(d_tdivzstepu) // _d_tdivzstepu | _d_zistepu*scm1 | scm1 - fmul %st(2),%st(0) // _d_tdivzstepu*scm1 | _d_zistepu*scm1 | scm1 - fxch %st(1) // _d_zistepu*scm1 | _d_tdivzstepu*scm1 | scm1 - faddp %st(0),%st(3) // _d_tdivzstepu*scm1 | scm1 - fxch %st(1) // scm1 | _d_tdivzstepu*scm1 - fmuls C(d_sdivzstepu) // _d_sdivzstepu*scm1 | _d_tdivzstepu*scm1 - fxch %st(1) // _d_tdivzstepu*scm1 | _d_sdivzstepu*scm1 - faddp %st(0),%st(3) // _d_sdivzstepu*scm1 - flds fp_64k // 64k | _d_sdivzstepu*scm1 - fxch %st(1) // _d_sdivzstepu*scm1 | 64k - faddp %st(0),%st(4) // 64k - - fdiv %st(1),%st(0) // this is what we've gone to all this trouble to - // overlap - jmp LFDIVInFlight2 - - .align 4 -LSetupNotLast2: - fadds zi8stepu - fxch %st(2) - fadds sdivz8stepu - fxch %st(2) - flds tdivz8stepu - faddp %st(0),%st(2) - flds fp_64k - fdiv %st(1),%st(0) // z = 1/1/z - // this is what we've gone to all this trouble to - // overlap -LFDIVInFlight2: - pushl %eax - - cmpw 10(%ecx),%bp - jl Lp6 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp6 - movw %bp,10(%ecx) - movb %al,5(%edi) -Lp6: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - - cmpw 12(%ecx),%bp - jl Lp7 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp7 - movw %bp,12(%ecx) - movb %al,6(%edi) -Lp7: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - - cmpw 14(%ecx),%bp - jl Lp8 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp8 - movw %bp,14(%ecx) - movb %al,7(%edi) -Lp8: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - - addl $8,%edi - addl $16,%ecx - movl %edx,tfracf - movl snext,%edx - movl %ebx,sfracf - movl tnext,%ebx - movl %edx,s - movl %ebx,t - - movl %ecx,pz - movl %ebp,izi - - popl %ecx // retrieve count - -// -// determine whether last span or not -// - cmpl $8,%ecx // are there multiple segments remaining? - ja LNotLastSegment // yes - -// -// last segment of scan -// -LLastSegment: - -// -// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to -// get there. The number of pixels left is variable, and we want to land on the -// last pixel, not step one past it, so we can't run into arithmetic problems -// - testl %ecx,%ecx - jz LNoSteps // just draw the last pixel and we're done - -// pick up after the FDIV that was left in flight previously - - - fld %st(0) // duplicate it - fmul %st(4),%st(0) // s = s/z * z - fxch %st(1) - fmul %st(3),%st(0) // t = t/z * z - fxch %st(1) - fistpl snext - fistpl tnext - - movl C(tadjust),%ebx - movl C(sadjust),%eax - - addl snext,%eax - addl tnext,%ebx - - movl C(bbextents),%ebp - movl C(bbextentt),%edx - - cmpl $2048,%eax - jl LClampLow4 - cmpl %ebp,%eax - ja LClampHigh4 -LClampReentry4: - movl %eax,snext - - cmpl $2048,%ebx - jl LClampLow5 - cmpl %edx,%ebx - ja LClampHigh5 -LClampReentry5: - - cmpl $1,%ecx // don't bother - je LOnlyOneStep // if two pixels in segment, there's only one step, - // of the segment length - subl s,%eax - subl t,%ebx - - addl %eax,%eax // convert to 15.17 format so multiply by 1.31 - addl %ebx,%ebx // reciprocal yields 16.48 - imull reciprocal_table-8(,%ecx,4) // sstep = (snext - s) / (spancount-1) - movl %edx,%ebp - - movl %ebx,%eax - imull reciprocal_table-8(,%ecx,4) // tstep = (tnext - t) / (spancount-1) - -LSetEntryvec: -// -// set up advancetable -// - movl spr8entryvec_table(,%ecx,4),%ebx - movl %edx,%eax - pushl %ebx // entry point into code for RET later - movl %ebp,%ecx - sarl $16,%ecx // sstep >>= 16; - movl C(cachewidth),%ebx - sarl $16,%edx // tstep >>= 16; - jz LIsZeroLast - imull %ebx,%edx // (tstep >> 16) * cachewidth; -LIsZeroLast: - addl %ecx,%edx // add in sstep - // (tstep >> 16) * cachewidth + (sstep >> 16); - movl tfracf,%ecx - movl %edx,advancetable+4 // advance base in t - addl %ebx,%edx // ((tstep >> 16) + 1) * cachewidth + - // (sstep >> 16); - shll $16,%ebp // left-justify sstep fractional part - movl sfracf,%ebx - shll $16,%eax // left-justify tstep fractional part - movl %edx,advancetable // advance extra in t - - movl %eax,tstep - movl %ebp,sstep - movl %ecx,%edx - - movl pz,%ecx - movl izi,%ebp - - ret // jump to the number-of-pixels handler - -//---------------------------------------- - -LNoSteps: - movl pz,%ecx - subl $7,%edi // adjust for hardwired offset - subl $14,%ecx - jmp LEndSpan - - -LOnlyOneStep: - subl s,%eax - subl t,%ebx - movl %eax,%ebp - movl %ebx,%edx - jmp LSetEntryvec - -//---------------------------------------- - -.globl Spr8Entry2_8 -Spr8Entry2_8: - subl $6,%edi // adjust for hardwired offsets - subl $12,%ecx - movb (%esi),%al - jmp LLEntry2_8 - -//---------------------------------------- - -.globl Spr8Entry3_8 -Spr8Entry3_8: - subl $5,%edi // adjust for hardwired offsets - subl $10,%ecx - jmp LLEntry3_8 - -//---------------------------------------- - -.globl Spr8Entry4_8 -Spr8Entry4_8: - subl $4,%edi // adjust for hardwired offsets - subl $8,%ecx - jmp LLEntry4_8 - -//---------------------------------------- - -.globl Spr8Entry5_8 -Spr8Entry5_8: - subl $3,%edi // adjust for hardwired offsets - subl $6,%ecx - jmp LLEntry5_8 - -//---------------------------------------- - -.globl Spr8Entry6_8 -Spr8Entry6_8: - subl $2,%edi // adjust for hardwired offsets - subl $4,%ecx - jmp LLEntry6_8 - -//---------------------------------------- - -.globl Spr8Entry7_8 -Spr8Entry7_8: - decl %edi // adjust for hardwired offsets - subl $2,%ecx - jmp LLEntry7_8 - -//---------------------------------------- - -.globl Spr8Entry8_8 -Spr8Entry8_8: - cmpw (%ecx),%bp - jl Lp9 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp9 - movw %bp,(%ecx) - movb %al,(%edi) -Lp9: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi -LLEntry7_8: - cmpw 2(%ecx),%bp - jl Lp10 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp10 - movw %bp,2(%ecx) - movb %al,1(%edi) -Lp10: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi -LLEntry6_8: - cmpw 4(%ecx),%bp - jl Lp11 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp11 - movw %bp,4(%ecx) - movb %al,2(%edi) -Lp11: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi -LLEntry5_8: - cmpw 6(%ecx),%bp - jl Lp12 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp12 - movw %bp,6(%ecx) - movb %al,3(%edi) -Lp12: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi -LLEntry4_8: - cmpw 8(%ecx),%bp - jl Lp13 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp13 - movw %bp,8(%ecx) - movb %al,4(%edi) -Lp13: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi -LLEntry3_8: - cmpw 10(%ecx),%bp - jl Lp14 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp14 - movw %bp,10(%ecx) - movb %al,5(%edi) -Lp14: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi -LLEntry2_8: - cmpw 12(%ecx),%bp - jl Lp15 - movb (%esi),%al - cmpb $(TRANSPARENT_COLOR),%al - jz Lp15 - movw %bp,12(%ecx) - movb %al,6(%edi) -Lp15: - addl izistep,%ebp - adcl $0,%ebp - addl tstep,%edx - sbbl %eax,%eax - addl sstep,%ebx - adcl advancetable+4(,%eax,4),%esi - -LEndSpan: - cmpw 14(%ecx),%bp - jl Lp16 - movb (%esi),%al // load first texel in segment - cmpb $(TRANSPARENT_COLOR),%al - jz Lp16 - movw %bp,14(%ecx) - movb %al,7(%edi) -Lp16: - -// -// clear s/z, t/z, 1/z from FP stack -// - fstp %st(0) - fstp %st(0) - fstp %st(0) - - popl %ebx // restore spans pointer -LNextSpan: - addl $(sspan_t_size),%ebx // point to next span - movl sspan_t_count(%ebx),%ecx - cmpl $0,%ecx // any more spans? - jg LSpanLoop // yes - jz LNextSpan // yes, but this one's empty - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - -#endif // id386 -#endif diff --git a/asm/d_varsa.s b/asm/d_varsa.s deleted file mode 100644 index 4681882..0000000 --- a/asm/d_varsa.s +++ /dev/null @@ -1,215 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_varsa.s -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - - .data - -//------------------------------------------------------- -// global refresh variables -//------------------------------------------------------- - -// FIXME: put all refresh variables into one contiguous block. Make into one -// big structure, like cl or sv? - - .align 4 -.globl C(d_sdivzstepu) -.globl C(d_tdivzstepu) -.globl C(d_zistepu) -.globl C(d_sdivzstepv) -.globl C(d_tdivzstepv) -.globl C(d_zistepv) -.globl C(d_sdivzorigin) -.globl C(d_tdivzorigin) -.globl C(d_ziorigin) -C(d_sdivzstepu): .single 0 -C(d_tdivzstepu): .single 0 -C(d_zistepu): .single 0 -C(d_sdivzstepv): .single 0 -C(d_tdivzstepv): .single 0 -C(d_zistepv): .single 0 -C(d_sdivzorigin): .single 0 -C(d_tdivzorigin): .single 0 -C(d_ziorigin): .single 0 - -.globl C(sadjust) -.globl C(tadjust) -.globl C(bbextents) -.globl C(bbextentt) -C(sadjust): .long 0 -C(tadjust): .long 0 -C(bbextents): .long 0 -C(bbextentt): .long 0 - -.globl C(cacheblock) -.globl C(d_viewbuffer) -.globl C(cachewidth) -.globl C(d_pzbuffer) -.globl C(d_zrowbytes) -.globl C(d_zwidth) -C(cacheblock): .long 0 -C(cachewidth): .long 0 -C(d_viewbuffer): .long 0 -C(d_pzbuffer): .long 0 -C(d_zrowbytes): .long 0 -C(d_zwidth): .long 0 - - -//------------------------------------------------------- -// ASM-only variables -//------------------------------------------------------- -.globl izi -izi: .long 0 - -.globl pbase, s, t, sfracf, tfracf, snext, tnext -.globl spancountminus1, zi16stepu, sdivz16stepu, tdivz16stepu -.globl zi8stepu, sdivz8stepu, tdivz8stepu, pz -s: .long 0 -t: .long 0 -snext: .long 0 -tnext: .long 0 -sfracf: .long 0 -tfracf: .long 0 -pbase: .long 0 -zi8stepu: .long 0 -sdivz8stepu: .long 0 -tdivz8stepu: .long 0 -zi16stepu: .long 0 -sdivz16stepu: .long 0 -tdivz16stepu: .long 0 -spancountminus1: .long 0 -pz: .long 0 - -.globl izistep -izistep: .long 0 - -//------------------------------------------------------- -// local variables for d_draw16.s -//------------------------------------------------------- - -.globl reciprocal_table_16, entryvec_table_16 -// 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11, 1/12, 1/13, -// 1/14, and 1/15 in 0.32 form -reciprocal_table_16: .long 0x40000000, 0x2aaaaaaa, 0x20000000 - .long 0x19999999, 0x15555555, 0x12492492 - .long 0x10000000, 0xe38e38e, 0xccccccc, 0xba2e8ba - .long 0xaaaaaaa, 0x9d89d89, 0x9249249, 0x8888888 - -#ifndef NeXT - .extern Entry2_16 - .extern Entry3_16 - .extern Entry4_16 - .extern Entry5_16 - .extern Entry6_16 - .extern Entry7_16 - .extern Entry8_16 - .extern Entry9_16 - .extern Entry10_16 - .extern Entry11_16 - .extern Entry12_16 - .extern Entry13_16 - .extern Entry14_16 - .extern Entry15_16 - .extern Entry16_16 -#endif - -entryvec_table_16: .long 0, Entry2_16, Entry3_16, Entry4_16 - .long Entry5_16, Entry6_16, Entry7_16, Entry8_16 - .long Entry9_16, Entry10_16, Entry11_16, Entry12_16 - .long Entry13_16, Entry14_16, Entry15_16, Entry16_16 - -//------------------------------------------------------- -// local variables for d_parta.s -//------------------------------------------------------- -.globl DP_Count, DP_u, DP_v, DP_32768, DP_Color, DP_Pix, DP_EntryTable -DP_Count: .long 0 -DP_u: .long 0 -DP_v: .long 0 -DP_32768: .single 32768.0 -DP_Color: .long 0 -DP_Pix: .long 0 - - -#ifndef NeXT - .extern DP_1x1 - .extern DP_2x2 - .extern DP_3x3 - .extern DP_4x4 -#endif - -DP_EntryTable: .long DP_1x1, DP_2x2, DP_3x3, DP_4x4 - -// -// advancetable is 8 bytes, but points to the middle of that range so negative -// offsets will work -// -.globl advancetable, sstep, tstep, pspantemp, counttemp, jumptemp -advancetable: .long 0, 0 -sstep: .long 0 -tstep: .long 0 - -pspantemp: .long 0 -counttemp: .long 0 -jumptemp: .long 0 - -// 1/2, 1/3, 1/4, 1/5, 1/6, and 1/7 in 0.32 form -.globl reciprocal_table, entryvec_table -reciprocal_table: .long 0x40000000, 0x2aaaaaaa, 0x20000000 - .long 0x19999999, 0x15555555, 0x12492492 - -#ifndef NeXT - .extern Entry2_8 - .extern Entry3_8 - .extern Entry4_8 - .extern Entry5_8 - .extern Entry6_8 - .extern Entry7_8 - .extern Entry8_8 -#endif - -entryvec_table: .long 0, Entry2_8, Entry3_8, Entry4_8 - .long Entry5_8, Entry6_8, Entry7_8, Entry8_8 - -#ifndef NeXT - .extern Spr8Entry2_8 - .extern Spr8Entry3_8 - .extern Spr8Entry4_8 - .extern Spr8Entry5_8 - .extern Spr8Entry6_8 - .extern Spr8Entry7_8 - .extern Spr8Entry8_8 -#endif - -.globl spr8entryvec_table -spr8entryvec_table: .long 0, Spr8Entry2_8, Spr8Entry3_8, Spr8Entry4_8 - .long Spr8Entry5_8, Spr8Entry6_8, Spr8Entry7_8, Spr8Entry8_8 - -#endif // id386 -#endif diff --git a/asm/math.s b/asm/math.s deleted file mode 100644 index 53a08e2..0000000 --- a/asm/math.s +++ /dev/null @@ -1,430 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// math.s -// x86 assembly-language math routines. - -#ifndef NOASM - -#define GLQUAKE 1 // don't include unneeded client defs -#include "asm_i386.h" -#include "asm.h" - - -#if id386 - - .data - - .align 4 -Ljmptab: .long Lcase0, Lcase1, Lcase2, Lcase3 - .long Lcase4, Lcase5, Lcase6, Lcase7 - - .text - -// 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes start -// Disable unused asm code of Quake engine -/* -// TODO: rounding needed? -// stack parameter offset -#define val 4 - -.globl C(Invert24To16) -C(Invert24To16): - - movl val(%esp),%ecx - movl $0x100,%edx // 0x10000000000 as dividend - cmpl %edx,%ecx - jle LOutOfRange - - subl %eax,%eax - divl %ecx - - ret - -LOutOfRange: - movl $0xFFFFFFFF,%eax - ret -*/ -// 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes end - -#ifndef SERVERONLY // no asm in dedicated server // 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes -#define in 4 -#define out 8 - - .align 2 -.globl C(TransformVector) -C(TransformVector): - movl in(%esp),%eax - movl out(%esp),%edx - - flds (%eax) // in[0] - fmuls C(vright) // in[0]*vright[0] - flds (%eax) // in[0] | in[0]*vright[0] - fmuls C(vup) // in[0]*vup[0] | in[0]*vright[0] - flds (%eax) // in[0] | in[0]*vup[0] | in[0]*vright[0] - fmuls C(vpn) // in[0]*vpn[0] | in[0]*vup[0] | in[0]*vright[0] - - flds 4(%eax) // in[1] | ... - fmuls C(vright)+4 // in[1]*vright[1] | ... - flds 4(%eax) // in[1] | in[1]*vright[1] | ... - fmuls C(vup)+4 // in[1]*vup[1] | in[1]*vright[1] | ... - flds 4(%eax) // in[1] | in[1]*vup[1] | in[1]*vright[1] | ... - fmuls C(vpn)+4 // in[1]*vpn[1] | in[1]*vup[1] | in[1]*vright[1] | ... - fxch %st(2) // in[1]*vright[1] | in[1]*vup[1] | in[1]*vpn[1] | ... - - faddp %st(0),%st(5) // in[1]*vup[1] | in[1]*vpn[1] | ... - faddp %st(0),%st(3) // in[1]*vpn[1] | ... - faddp %st(0),%st(1) // vpn_accum | vup_accum | vright_accum - - flds 8(%eax) // in[2] | ... - fmuls C(vright)+8 // in[2]*vright[2] | ... - flds 8(%eax) // in[2] | in[2]*vright[2] | ... - fmuls C(vup)+8 // in[2]*vup[2] | in[2]*vright[2] | ... - flds 8(%eax) // in[2] | in[2]*vup[2] | in[2]*vright[2] | ... - fmuls C(vpn)+8 // in[2]*vpn[2] | in[2]*vup[2] | in[2]*vright[2] | ... - fxch %st(2) // in[2]*vright[2] | in[2]*vup[2] | in[2]*vpn[2] | ... - - faddp %st(0),%st(5) // in[2]*vup[2] | in[2]*vpn[2] | ... - faddp %st(0),%st(3) // in[2]*vpn[2] | ... - faddp %st(0),%st(1) // vpn_accum | vup_accum | vright_accum - - fstps 8(%edx) // out[2] - fstps 4(%edx) // out[1] - fstps (%edx) // out[0] - - ret -#endif // ndef SERVERONLY // 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes - -#define EMINS 4+4 -#define EMAXS 4+8 -#define P 4+12 - - .align 2 -.globl C(BoxOnPlaneSide) -C(BoxOnPlaneSide): - pushl %ebx - - movl P(%esp),%edx - movl EMINS(%esp),%ecx - xorl %eax,%eax - movl EMAXS(%esp),%ebx - movb pl_signbits(%edx),%al - cmpb $8,%al // QW SV was: cmpl $8,%al // 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes - jge Lerror - flds pl_normal(%edx) // p->normal[0] - fld %st(0) // p->normal[0] | p->normal[0] -// 2000-07-30 DJGPP compiler warning fix by Norberto Alfredo Bensa start -// jmp Ljmptab(,%eax,4) - jmp *Ljmptab(,%eax,4) -// 2000-07-30 DJGPP compiler warning fix by Norberto Alfredo Bensa end - - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -Lcase0: - fmuls (%ebx) // p->normal[0]*emaxs[0] | p->normal[0] - flds pl_normal+4(%edx) // p->normal[1] | p->normal[0]*emaxs[0] | - // p->normal[0] - fxch %st(2) // p->normal[0] | p->normal[0]*emaxs[0] | - // p->normal[1] - fmuls (%ecx) // p->normal[0]*emins[0] | - // p->normal[0]*emaxs[0] | p->normal[1] - fxch %st(2) // p->normal[1] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fld %st(0) // p->normal[1] | p->normal[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fmuls 4(%ebx) // p->normal[1]*emaxs[1] | p->normal[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - flds pl_normal+8(%edx) // p->normal[2] | p->normal[1]*emaxs[1] | - // p->normal[1] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fxch %st(2) // p->normal[1] | p->normal[1]*emaxs[1] | - // p->normal[2] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fmuls 4(%ecx) // p->normal[1]*emins[1] | - // p->normal[1]*emaxs[1] | - // p->normal[2] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fxch %st(2) // p->normal[2] | p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fld %st(0) // p->normal[2] | p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fmuls 8(%ebx) // p->normal[2]*emaxs[2] | - // p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fxch %st(5) // p->normal[0]*emins[0] | - // p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - faddp %st(0),%st(3) //p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - fmuls 8(%ecx) //p->normal[2]*emins[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - fxch %st(1) //p->normal[1]*emaxs[1] | - // p->normal[2]*emins[2] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - faddp %st(0),%st(3) //p->normal[2]*emins[2] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0]+p->normal[1]*emaxs[1]| - // p->normal[2]*emaxs[2] - fxch %st(3) //p->normal[2]*emaxs[2] + - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0]+p->normal[1]*emaxs[1]| - // p->normal[2]*emins[2] - faddp %st(0),%st(2) //p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // dist1 | p->normal[2]*emins[2] - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -Lcase1: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ebx) // emaxs[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ecx) // emins[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ebx) // emaxs[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ecx) // emins[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -Lcase2: - fmuls (%ebx) // emaxs[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ecx) // emins[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ebx) // emaxs[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ecx) // emins[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -Lcase3: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ebx) // emaxs[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ecx) // emins[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -Lcase4: - fmuls (%ebx) // emaxs[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ecx) // emins[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ebx) // emaxs[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ecx) // emins[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -Lcase5: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ebx) // emaxs[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ecx) // emins[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -Lcase6: - fmuls (%ebx) // emaxs[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ecx) // emins[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -Lcase7: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - -LSetSides: - -// sides = 0; -// if (dist1 >= p->dist) -// sides = 1; -// if (dist2 < p->dist) -// sides |= 2; - - faddp %st(0),%st(2) // dist1 | dist2 - fcomps pl_dist(%edx) - xorl %ecx,%ecx - fnstsw %ax - fcomps pl_dist(%edx) - andb $1,%ah - xorb $1,%ah - addb %ah,%cl - - fnstsw %ax - andb $1,%ah - addb %ah,%ah - addb %ah,%cl - -// return sides; - - popl %ebx - movl %ecx,%eax // return status - - ret - - -Lerror: - call C(BOPS_Error) - -#endif // id386 -#endif diff --git a/asm/r_aclipa.s b/asm/r_aclipa.s deleted file mode 100644 index 6e0147c..0000000 --- a/asm/r_aclipa.s +++ /dev/null @@ -1,218 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// r_aliasa.s -// x86 assembly-language Alias model transform and project code. -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - - .data -Ltemp0: .long 0 -Ltemp1: .long 0 - - .text - -#define pfv0 8+4 -#define pfv1 8+8 -#define out 8+12 - -.globl C(R_Alias_clip_bottom) -C(R_Alias_clip_bottom): - pushl %esi - pushl %edi - - movl pfv0(%esp),%esi - movl pfv1(%esp),%edi - - movl C(r_refdef)+rd_aliasvrectbottom,%eax - -LDoForwardOrBackward: - - movl fv_v+4(%esi),%edx - movl fv_v+4(%edi),%ecx - - cmpl %ecx,%edx - jl LDoForward - - movl fv_v+4(%esi),%ecx - movl fv_v+4(%edi),%edx - movl pfv0(%esp),%edi - movl pfv1(%esp),%esi - -LDoForward: - - subl %edx,%ecx - subl %edx,%eax - movl %ecx,Ltemp1 - movl %eax,Ltemp0 - fildl Ltemp1 - fildl Ltemp0 - movl out(%esp),%edx - movl $2,%eax - - fdivp %st(0),%st(1) // scale - -LDo3Forward: - fildl fv_v+0(%esi) // fv0v0 | scale - fildl fv_v+0(%edi) // fv1v0 | fv0v0 | scale - fildl fv_v+4(%esi) // fv0v1 | fv1v0 | fv0v0 | scale - fildl fv_v+4(%edi) // fv1v1 | fv0v1 | fv1v0 | fv0v0 | scale - fildl fv_v+8(%esi) // fv0v2 | fv1v1 | fv0v1 | fv1v0 | fv0v0 | scale - fildl fv_v+8(%edi) // fv1v2 | fv0v2 | fv1v1 | fv0v1 | fv1v0 | fv0v0 | - // scale - fxch %st(5) // fv0v0 | fv0v2 | fv1v1 | fv0v1 | fv1v0 | fv1v2 | - // scale - fsubr %st(0),%st(4) // fv0v0 | fv0v2 | fv1v1 | fv0v1 | fv1v0-fv0v0 | - // fv1v2 | scale - fxch %st(3) // fv0v1 | fv0v2 | fv1v1 | fv0v0 | fv1v0-fv0v0 | - // fv1v2 | scale - fsubr %st(0),%st(2) // fv0v1 | fv0v2 | fv1v1-fv0v1 | fv0v0 | - // fv1v0-fv0v0 | fv1v2 | scale - fxch %st(1) // fv0v2 | fv0v1 | fv1v1-fv0v1 | fv0v0 | - // fv1v0-fv0v0 | fv1v2 | scale - fsubr %st(0),%st(5) // fv0v2 | fv0v1 | fv1v1-fv0v1 | fv0v0 | - // fv1v0-fv0v0 | fv1v2-fv0v2 | scale - fxch %st(6) // scale | fv0v1 | fv1v1-fv0v1 | fv0v0 | - // fv1v0-fv0v0 | fv1v2-fv0v2 | fv0v2 - fmul %st(0),%st(4) // scale | fv0v1 | fv1v1-fv0v1 | fv0v0 | - // (fv1v0-fv0v0)*scale | fv1v2-fv0v2 | fv0v2 - addl $12,%edi - fmul %st(0),%st(2) // scale | fv0v1 | (fv1v1-fv0v1)*scale | fv0v0 | - // (fv1v0-fv0v0)*scale | fv1v2-fv0v2 | fv0v2 - addl $12,%esi - addl $12,%edx - fmul %st(0),%st(5) // scale | fv0v1 | (fv1v1-fv0v1)*scale | fv0v0 | - // (fv1v0-fv0v0)*scale | (fv1v2-fv0v2)*scale | - // fv0v2 - fxch %st(3) // fv0v0 | fv0v1 | (fv1v1-fv0v1)*scale | scale | - // (fv1v0-fv0v0)*scale | (fv1v2-fv0v2)*scale | - // fv0v2 - faddp %st(0),%st(4) // fv0v1 | (fv1v1-fv0v1)*scale | scale | - // fv0v0+(fv1v0-fv0v0)*scale | - // (fv1v2-fv0v2)*scale | fv0v2 - faddp %st(0),%st(1) // fv0v1+(fv1v1-fv0v1)*scale | scale | - // fv0v0+(fv1v0-fv0v0)*scale | - // (fv1v2-fv0v2)*scale | fv0v2 - fxch %st(4) // fv0v2 | scale | fv0v0+(fv1v0-fv0v0)*scale | - // (fv1v2-fv0v2)*scale | fv0v1+(fv1v1-fv0v1)*scale - faddp %st(0),%st(3) // scale | fv0v0+(fv1v0-fv0v0)*scale | - // fv0v2+(fv1v2-fv0v2)*scale | - // fv0v1+(fv1v1-fv0v1)*scale - fxch %st(1) // fv0v0+(fv1v0-fv0v0)*scale | scale | - // fv0v2+(fv1v2-fv0v2)*scale | - // fv0v1+(fv1v1-fv0v1)*scale - fadds float_point5 - fxch %st(3) // fv0v1+(fv1v1-fv0v1)*scale | scale | - // fv0v2+(fv1v2-fv0v2)*scale | - // fv0v0+(fv1v0-fv0v0)*scale - fadds float_point5 - fxch %st(2) // fv0v2+(fv1v2-fv0v2)*scale | scale | - // fv0v1+(fv1v1-fv0v1)*scale | - // fv0v0+(fv1v0-fv0v0)*scale - fadds float_point5 - fxch %st(3) // fv0v0+(fv1v0-fv0v0)*scale | scale | - // fv0v1+(fv1v1-fv0v1)*scale | - // fv0v2+(fv1v2-fv0v2)*scale - fistpl fv_v+0-12(%edx) // scale | fv0v1+(fv1v1-fv0v1)*scale | - // fv0v2+(fv1v2-fv0v2)*scale - fxch %st(1) // fv0v1+(fv1v1-fv0v1)*scale | scale | - // fv0v2+(fv1v2-fv0v2)*scale | scale - fistpl fv_v+4-12(%edx) // scale | fv0v2+(fv1v2-fv0v2)*scale - fxch %st(1) // fv0v2+(fv1v2-fv0v2)*sc | scale - fistpl fv_v+8-12(%edx) // scale - - decl %eax - jnz LDo3Forward - - fstp %st(0) - - popl %edi - popl %esi - - ret - - -.globl C(R_Alias_clip_top) -C(R_Alias_clip_top): - pushl %esi - pushl %edi - - movl pfv0(%esp),%esi - movl pfv1(%esp),%edi - - movl C(r_refdef)+rd_aliasvrect+4,%eax - jmp LDoForwardOrBackward - - - -.globl C(R_Alias_clip_right) -C(R_Alias_clip_right): - pushl %esi - pushl %edi - - movl pfv0(%esp),%esi - movl pfv1(%esp),%edi - - movl C(r_refdef)+rd_aliasvrectright,%eax - -LRightLeftEntry: - - - movl fv_v+4(%esi),%edx - movl fv_v+4(%edi),%ecx - - cmpl %ecx,%edx - movl fv_v+0(%esi),%edx - - movl fv_v+0(%edi),%ecx - jl LDoForward2 - - movl fv_v+0(%esi),%ecx - movl fv_v+0(%edi),%edx - movl pfv0(%esp),%edi - movl pfv1(%esp),%esi - -LDoForward2: - - jmp LDoForward - - -.globl C(R_Alias_clip_left) -C(R_Alias_clip_left): - pushl %esi - pushl %edi - - movl pfv0(%esp),%esi - movl pfv1(%esp),%edi - - movl C(r_refdef)+rd_aliasvrect+0,%eax - jmp LRightLeftEntry - - -#endif // id386 -#endif diff --git a/asm/r_aliasa.s b/asm/r_aliasa.s deleted file mode 100644 index c75014d..0000000 --- a/asm/r_aliasa.s +++ /dev/null @@ -1,239 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// r_aliasa.s -// x86 assembly-language Alias model transform and project code. -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386broken - - .data - -Lfloat_1: .single 1.0 -Ltemp: .long 0 -Lcoords: .long 0, 0, 0 - - .text - -#define fv 12+4 -#define pstverts 12+8 - -.globl C(R_AliasTransformAndProjectFinalVerts) -C(R_AliasTransformAndProjectFinalVerts): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - -// int i, temp; -// float lightcos, *plightnormal, zi; -// trivertx_t *pverts; - -// pverts = r_apverts; - movl C(r_apverts),%esi - -// for (i=0 ; iv, aliastransform[2]) + -// aliastransform[2][3]); - movb (%esi),%dl - movb %dl,Lcoords - fildl Lcoords // v[0] - movb 1(%esi),%dl - movb %dl,Lcoords+4 - fildl Lcoords+4 // v[1] | v[0] - movb 2(%esi),%dl - movb %dl,Lcoords+8 - fildl Lcoords+8 // v[2] | v[1] | v[0] - - fld %st(2) // v[0] | v[2] | v[1] | v[0] - fmuls C(aliastransform)+32 // accum | v[2] | v[1] | v[0] - fld %st(2) // v[1] | accum | v[2] | v[1] | v[0] - fmuls C(aliastransform)+36 // accum2 | accum | v[2] | v[1] | v[0] - fxch %st(1) // accum | accum2 | v[2] | v[1] | v[0] - fadds C(aliastransform)+44 // accum | accum2 | v[2] | v[1] | v[0] - fld %st(2) // v[2] | accum | accum2 | v[2] | v[1] | v[0] - fmuls C(aliastransform)+40 // accum3 | accum | accum2 | v[2] | v[1] | - // v[0] - fxch %st(1) // accum | accum3 | accum2 | v[2] | v[1] | v[0] - faddp %st(0),%st(2) // accum3 | accum | v[2] | v[1] | v[0] - movb tv_lightnormalindex(%esi),%dl - movl stv_s(%ebp),%eax - movl %eax,fv_v+8(%edi) - faddp %st(0),%st(1) // z | v[2] | v[1] | v[0] - - movl stv_t(%ebp),%eax - movl %eax,fv_v+12(%edi) - -// // lighting -// plightnormal = r_avertexnormals[pverts->lightnormalindex]; - - fdivrs Lfloat_1 // zi | v[2] | v[1] | v[0] - -// fv->v[2] = pstverts->s; -// fv->v[3] = pstverts->t; -// fv->flags = pstverts->onseam; - movl stv_onseam(%ebp),%eax - movl %eax,fv_flags(%edi) - - movl fv_size(%edi),%eax - movl stv_size(%ebp),%eax - movl 4(%esi),%eax - - leal (%edx,%edx,2),%eax // index*3 - - fxch %st(3) // v[0] | v[2] | v[1] | zi - -// lightcos = DotProduct (plightnormal, r_plightvec); - flds C(r_avertexnormals)(,%eax,4) - fmuls C(r_plightvec) - flds C(r_avertexnormals)+4(,%eax,4) - fmuls C(r_plightvec)+4 - flds C(r_avertexnormals)+8(,%eax,4) - fmuls C(r_plightvec)+8 - fxch %st(1) - faddp %st(0),%st(2) - fld %st(2) // v[0] | laccum | laccum2 | v[0] | v[2] | - // v[1] | zi - fmuls C(aliastransform)+0 // xaccum | laccum | laccum2 | v[0] | v[2] | - // v[1] | zi - fxch %st(2) // laccum2 | laccum | xaccum | v[0] | v[2] | - // v[1] | zi - faddp %st(0),%st(1) // laccum | xaccum | v[0] | v[2] | v[1] | zi - -// temp = r_ambientlight; -// if (lightcos < 0) -// { - fsts Ltemp - movl C(r_ambientlight),%eax - movb Ltemp+3,%dl - testb $0x80,%dl - jz Lsavelight // no need to clamp if only ambient lit, because - // r_ambientlight is preclamped - -// temp += (int)(r_shadelight * lightcos); - fmuls C(r_shadelight) -// FIXME: fast float->int conversion? - fistpl Ltemp - addl Ltemp,%eax - -// // clamp; because we limited the minimum ambient and shading light, we -// // don't have to clamp low light, just bright -// if (temp < 0) -// temp = 0; - jns Lp1 - subl %eax,%eax - -// } - -Lp1: - -// fv->v[4] = temp; -// -// // x, y, and z are scaled down by 1/2**31 in the transform, so 1/z is -// // scaled up by 1/2**31, and the scaling cancels out for x and y in the -// // projection -// fv->v[0] = ((DotProduct(pverts->v, aliastransform[0]) + -// aliastransform[0][3]) * zi) + aliasxcenter; -// fv->v[1] = ((DotProduct(pverts->v, aliastransform[1]) + -// aliastransform[1][3]) * zi) + aliasycenter; -// fv->v[5] = zi; - fxch %st(1) // v[0] | xaccum | v[2] | v[1] | zi - fmuls C(aliastransform)+16 // yaccum | xaccum | v[2] | v[1] | zi - fxch %st(3) // v[1] | xaccum | v[2] | yaccum | zi - fld %st(0) // v[1] | v[1] | xaccum | v[2] | yaccum | zi - fmuls C(aliastransform)+4 // xaccum2 | v[1] | xaccum | v[2] | yaccum |zi - fxch %st(1) // v[1] | xaccum2 | xaccum | v[2] | yaccum |zi - movl %eax,fv_v+16(%edi) - fmuls C(aliastransform)+20 // yaccum2 | xaccum2 | xaccum | v[2] | yaccum| - // zi - fxch %st(2) // xaccum | xaccum2 | yaccum2 | v[2] | yaccum| - // zi - fadds C(aliastransform)+12 // xaccum | xaccum2 | yaccum2 | v[2] | yaccum| - // zi - fxch %st(4) // yaccum | xaccum2 | yaccum2 | v[2] | xaccum| - // zi - fadds C(aliastransform)+28 // yaccum | xaccum2 | yaccum2 | v[2] | xaccum| - // zi - fxch %st(3) // v[2] | xaccum2 | yaccum2 | yaccum | xaccum| - // zi - fld %st(0) // v[2] | v[2] | xaccum2 | yaccum2 | yaccum | - // xaccum | zi - fmuls C(aliastransform)+8 // xaccum3 | v[2] | xaccum2 | yaccum2 |yaccum| - // xaccum | zi - fxch %st(1) // v[2] | xaccum3 | xaccum2 | yaccum2 |yaccum| - // xaccum | zi - fmuls C(aliastransform)+24 // yaccum3 | xaccum3 | xaccum2 | yaccum2 | - // yaccum | xaccum | zi - fxch %st(5) // xaccum | xaccum3 | xaccum2 | yaccum2 | - // yaccum | yaccum3 | zi - faddp %st(0),%st(2) // xaccum3 | xaccum | yaccum2 | yaccum | - // yaccum3 | zi - fxch %st(3) // yaccum | xaccum | yaccum2 | xaccum3 | - // yaccum3 | zi - faddp %st(0),%st(2) // xaccum | yaccum | xaccum3 | yaccum3 | zi - addl $(tv_size),%esi - faddp %st(0),%st(2) // yaccum | x | yaccum3 | zi - faddp %st(0),%st(2) // x | y | zi - addl $(stv_size),%ebp - fmul %st(2),%st(0) // x/z | y | zi - fxch %st(1) // y | x/z | zi - fmul %st(2),%st(0) // y/z | x/z | zi - fxch %st(1) // x/z | y/z | zi - fadds C(aliasxcenter) // u | y/z | zi - fxch %st(1) // y/z | u | zi - fadds C(aliasycenter) // v | u | zi - fxch %st(2) // zi | u | v -// FIXME: fast float->int conversion? - fistpl fv_v+20(%edi) // u | v - fistpl fv_v+0(%edi) // v - fistpl fv_v+4(%edi) - -// } - - addl $(fv_size),%edi - decl %ecx - jnz Lloop - - popl %esi // restore register variables - popl %edi - popl %ebp // restore the caller's stack frame - ret - -Lsavelight: - fstp %st(0) - jmp Lp1 - -#endif // id386 -#endif diff --git a/asm/r_drawa.s b/asm/r_drawa.s deleted file mode 100644 index d9a4dd0..0000000 --- a/asm/r_drawa.s +++ /dev/null @@ -1,840 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// r_drawa.s -// x86 assembly-language edge clipping and emission code -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - -// !!! if these are changed, they must be changed in r_draw.c too !!! -#define FULLY_CLIPPED_CACHED 0x80000000 -#define FRAMECOUNT_MASK 0x7FFFFFFF - - .data - -Ld0: .single 0.0 -Ld1: .single 0.0 -Lstack: .long 0 -Lfp_near_clip: .single NEAR_CLIP -Lceilv0: .long 0 -Lv: .long 0 -Lu0: .long 0 -Lv0: .long 0 -Lzi0: .long 0 - - .text - -//---------------------------------------------------------------------- -// edge clipping code -//---------------------------------------------------------------------- - -#define pv0 4+12 -#define pv1 8+12 -#define clip 12+12 - - .align 4 -.globl C(R_ClipEdge) -C(R_ClipEdge): - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - movl %esp,Lstack // for clearing the stack later - -// float d0, d1, f; -// mvertex_t clipvert; - - movl clip(%esp),%ebx - movl pv0(%esp),%esi - movl pv1(%esp),%edx - -// if (clip) -// { - testl %ebx,%ebx - jz Lemit - -// do -// { - -Lcliploop: - -// d0 = DotProduct (pv0->position, clip->normal) - clip->dist; -// d1 = DotProduct (pv1->position, clip->normal) - clip->dist; - flds mv_position+0(%esi) - fmuls cp_normal+0(%ebx) - flds mv_position+4(%esi) - fmuls cp_normal+4(%ebx) - flds mv_position+8(%esi) - fmuls cp_normal+8(%ebx) - fxch %st(1) - faddp %st(0),%st(2) // d0mul2 | d0add0 - - flds mv_position+0(%edx) - fmuls cp_normal+0(%ebx) - flds mv_position+4(%edx) - fmuls cp_normal+4(%ebx) - flds mv_position+8(%edx) - fmuls cp_normal+8(%ebx) - fxch %st(1) - faddp %st(0),%st(2) // d1mul2 | d1add0 | d0mul2 | d0add0 - fxch %st(3) // d0add0 | d1add0 | d0mul2 | d1mul2 - - faddp %st(0),%st(2) // d1add0 | dot0 | d1mul2 - faddp %st(0),%st(2) // dot0 | dot1 - - fsubs cp_dist(%ebx) // d0 | dot1 - fxch %st(1) // dot1 | d0 - fsubs cp_dist(%ebx) // d1 | d0 - fxch %st(1) - fstps Ld0 - fstps Ld1 - -// if (d0 >= 0) -// { - movl Ld0,%eax - movl Ld1,%ecx - orl %eax,%ecx - js Lp2 - -// both points are unclipped - -Lcontinue: - -// -// R_ClipEdge (&clipvert, pv1, clip->next); -// return; -// } -// } while ((clip = clip->next) != NULL); - movl cp_next(%ebx),%ebx - testl %ebx,%ebx - jnz Lcliploop - -// } - -//// add the edge -// R_EmitEdge (pv0, pv1); -Lemit: - -// -// set integer rounding to ceil mode, set to single precision -// -// FIXME: do away with by manually extracting integers from floats? -// FIXME: set less often - fldcw ceil_cw - -// edge_t *edge, *pcheck; -// int u_check; -// float u, u_step; -// vec3_t local, transformed; -// float *world; -// int v, v2, ceilv0; -// float scale, lzi0, u0, v0; -// int side; - -// if (r_lastvertvalid) -// { - cmpl $0,C(r_lastvertvalid) - jz LCalcFirst - -// u0 = r_u1; -// v0 = r_v1; -// lzi0 = r_lzi1; -// ceilv0 = r_ceilv1; - movl C(r_lzi1),%eax - movl C(r_u1),%ecx - movl %eax,Lzi0 - movl %ecx,Lu0 - movl C(r_v1),%ecx - movl C(r_ceilv1),%eax - movl %ecx,Lv0 - movl %eax,Lceilv0 - jmp LCalcSecond - -// } - -LCalcFirst: - -// else -// { -// world = &pv0->position[0]; - - call LTransformAndProject // v0 | lzi0 | u0 - - fsts Lv0 - fxch %st(2) // u0 | lzi0 | v0 - fstps Lu0 // lzi0 | v0 - fstps Lzi0 // v0 - -// ceilv0 = (int)(v0 - 2000) + 2000; // ceil(v0); - fistpl Lceilv0 - -// } - -LCalcSecond: - -// world = &pv1->position[0]; - movl %edx,%esi - - call LTransformAndProject // v1 | lzi1 | u1 - - flds Lu0 // u0 | v1 | lzi1 | u1 - fxch %st(3) // u1 | v1 | lzi1 | u0 - flds Lzi0 // lzi0 | u1 | v1 | lzi1 | u0 - fxch %st(3) // lzi1 | u1 | v1 | lzi0 | u0 - flds Lv0 // v0 | lzi1 | u1 | v1 | lzi0 | u0 - fxch %st(3) // v1 | lzi1 | u1 | v0 | lzi0 | u0 - -// r_ceilv1 = (int)(r_v1 - 2000) + 2000; // ceil(r_v1); - fistl C(r_ceilv1) - - fldcw single_cw // put back normal floating-point state - - fsts C(r_v1) - fxch %st(4) // lzi0 | lzi1 | u1 | v0 | v1 | u0 - -// if (r_lzi1 > lzi0) -// lzi0 = r_lzi1; - fcom %st(1) - fnstsw %ax - testb $1,%ah - jz LP0 - fstp %st(0) - fld %st(0) -LP0: - - fxch %st(1) // lzi1 | lzi0 | u1 | v0 | v1 | u0 - fstps C(r_lzi1) // lzi0 | u1 | v0 | v1 | u0 - fxch %st(1) - fsts C(r_u1) - fxch %st(1) - -// if (lzi0 > r_nearzi) // for mipmap finding -// r_nearzi = lzi0; - fcoms C(r_nearzi) - fnstsw %ax - testb $0x45,%ah - jnz LP1 - fsts C(r_nearzi) -LP1: - -// // for right edges, all we want is the effect on 1/z -// if (r_nearzionly) -// return; - movl C(r_nearzionly),%eax - testl %eax,%eax - jz LP2 -LPop5AndDone: - movl C(cacheoffset),%eax - movl C(r_framecount),%edx - cmpl $0x7FFFFFFF,%eax - jz LDoPop - andl $(FRAMECOUNT_MASK),%edx - orl $(FULLY_CLIPPED_CACHED),%edx - movl %edx,C(cacheoffset) - -LDoPop: - fstp %st(0) // u1 | v0 | v1 | u0 - fstp %st(0) // v0 | v1 | u0 - fstp %st(0) // v1 | u0 - fstp %st(0) // u0 - fstp %st(0) - jmp Ldone - -LP2: - -// // create the edge -// if (ceilv0 == r_ceilv1) -// return; // horizontal edge - movl Lceilv0,%ebx - movl C(edge_p),%edi - movl C(r_ceilv1),%ecx - movl %edi,%edx - movl C(r_pedge),%esi - addl $(et_size),%edx - cmpl %ecx,%ebx - jz LPop5AndDone - - movl C(r_pedge),%eax - movl %eax,et_owner(%edi) - -// side = ceilv0 > r_ceilv1; -// -// edge->nearzi = lzi0; - fstps et_nearzi(%edi) // u1 | v0 | v1 | u0 - -// if (side == 1) -// { - jc LSide0 - -LSide1: - -// // leading edge (go from p2 to p1) - -// u_step = ((u0 - r_u1) / (v0 - r_v1)); - fsubrp %st(0),%st(3) // v0 | v1 | u0-u1 - fsub %st(1),%st(0) // v0-v1 | v1 | u0-u1 - fdivrp %st(0),%st(2) // v1 | ustep - -// r_emitted = 1; - movl $1,C(r_emitted) - -// edge = edge_p++; - movl %edx,C(edge_p) - -// pretouch next edge - movl (%edx),%eax - -// v2 = ceilv0 - 1; -// v = r_ceilv1; - movl %ecx,%eax - leal -1(%ebx),%ecx - movl %eax,%ebx - -// edge->surfs[0] = 0; -// edge->surfs[1] = surface_p - surfaces; - movl C(surface_p),%eax - movl C(surfaces),%esi - subl %edx,%edx - subl %esi,%eax - shrl $(SURF_T_SHIFT),%eax - movl %edx,et_surfs(%edi) - movl %eax,et_surfs+2(%edi) - - subl %esi,%esi - -// u = r_u1 + ((float)v - r_v1) * u_step; - movl %ebx,Lv - fildl Lv // v | v1 | ustep - fsubp %st(0),%st(1) // v-v1 | ustep - fmul %st(1),%st(0) // (v-v1)*ustep | ustep - fadds C(r_u1) // u | ustep - - jmp LSideDone - -// } - -LSide0: - -// else -// { -// // trailing edge (go from p1 to p2) - -// u_step = ((r_u1 - u0) / (r_v1 - v0)); - fsub %st(3),%st(0) // u1-u0 | v0 | v1 | u0 - fxch %st(2) // v1 | v0 | u1-u0 | u0 - fsub %st(1),%st(0) // v1-v0 | v0 | u1-u0 | u0 - fdivrp %st(0),%st(2) // v0 | ustep | u0 - -// r_emitted = 1; - movl $1,C(r_emitted) - -// edge = edge_p++; - movl %edx,C(edge_p) - -// pretouch next edge - movl (%edx),%eax - -// v = ceilv0; -// v2 = r_ceilv1 - 1; - decl %ecx - -// edge->surfs[0] = surface_p - surfaces; -// edge->surfs[1] = 0; - movl C(surface_p),%eax - movl C(surfaces),%esi - subl %edx,%edx - subl %esi,%eax - shrl $(SURF_T_SHIFT),%eax - movl %edx,et_surfs+2(%edi) - movl %eax,et_surfs(%edi) - - movl $1,%esi - -// u = u0 + ((float)v - v0) * u_step; - movl %ebx,Lv - fildl Lv // v | v0 | ustep | u0 - fsubp %st(0),%st(1) // v-v0 | ustep | u0 - fmul %st(1),%st(0) // (v-v0)*ustep | ustep | u0 - faddp %st(0),%st(2) // ustep | u - fxch %st(1) // u | ustep - -// } - -LSideDone: - -// edge->u_step = u_step*0x100000; -// edge->u = u*0x100000 + 0xFFFFF; - - fmuls fp_1m // u*0x100000 | ustep - fxch %st(1) // ustep | u*0x100000 - fmuls fp_1m // ustep*0x100000 | u*0x100000 - fxch %st(1) // u*0x100000 | ustep*0x100000 - fadds fp_1m_minus_1 // u*0x100000 + 0xFFFFF | ustep*0x100000 - fxch %st(1) // ustep*0x100000 | u*0x100000 + 0xFFFFF - fistpl et_u_step(%edi) // u*0x100000 + 0xFFFFF - fistpl et_u(%edi) - -// // we need to do this to avoid stepping off the edges if a very nearly -// // horizontal edge is less than epsilon above a scan, and numeric error -// // causes it to incorrectly extend to the scan, and the extension of the -// // line goes off the edge of the screen -// // FIXME: is this actually needed? -// if (edge->u < r_refdef.vrect_x_adj_shift20) -// edge->u = r_refdef.vrect_x_adj_shift20; -// if (edge->u > r_refdef.vrectright_adj_shift20) -// edge->u = r_refdef.vrectright_adj_shift20; - movl et_u(%edi),%eax - movl C(r_refdef)+rd_vrect_x_adj_shift20,%edx - cmpl %edx,%eax - jl LP4 - movl C(r_refdef)+rd_vrectright_adj_shift20,%edx - cmpl %edx,%eax - jng LP5 -LP4: - movl %edx,et_u(%edi) - movl %edx,%eax -LP5: - -// // sort the edge in normally -// u_check = edge->u; -// -// if (edge->surfs[0]) -// u_check++; // sort trailers after leaders - addl %esi,%eax - -// if (!newedges[v] || newedges[v]->u >= u_check) -// { - movl C(newedges)(,%ebx,4),%esi - testl %esi,%esi - jz LDoFirst - cmpl %eax,et_u(%esi) - jl LNotFirst -LDoFirst: - -// edge->next = newedges[v]; -// newedges[v] = edge; - movl %esi,et_next(%edi) - movl %edi,C(newedges)(,%ebx,4) - - jmp LSetRemove - -// } - -LNotFirst: - -// else -// { -// pcheck = newedges[v]; -// -// while (pcheck->next && pcheck->next->u < u_check) -// pcheck = pcheck->next; -LFindInsertLoop: - movl %esi,%edx - movl et_next(%esi),%esi - testl %esi,%esi - jz LInsertFound - cmpl %eax,et_u(%esi) - jl LFindInsertLoop - -LInsertFound: - -// edge->next = pcheck->next; -// pcheck->next = edge; - movl %esi,et_next(%edi) - movl %edi,et_next(%edx) - -// } - -LSetRemove: - -// edge->nextremove = removeedges[v2]; -// removeedges[v2] = edge; - movl C(removeedges)(,%ecx,4),%eax - movl %edi,C(removeedges)(,%ecx,4) - movl %eax,et_nextremove(%edi) - -Ldone: - movl Lstack,%esp // clear temporary variables from stack - - popl %ebx // restore register variables - popl %edi - popl %esi - ret - -// at least one point is clipped - -Lp2: - testl %eax,%eax - jns Lp1 - -// else -// { -// // point 0 is clipped - -// if (d1 < 0) -// { - movl Ld1,%eax - testl %eax,%eax - jns Lp3 - -// // both points are clipped -// // we do cache fully clipped edges -// if (!leftclipped) - movl C(r_leftclipped),%eax - movl C(r_pedge),%ecx - testl %eax,%eax - jnz Ldone - -// r_pedge->framecount = r_framecount; - movl C(r_framecount),%eax - andl $(FRAMECOUNT_MASK),%eax - orl $(FULLY_CLIPPED_CACHED),%eax - movl %eax,C(cacheoffset) - -// return; - jmp Ldone - -// } - -Lp1: - -// // point 0 is unclipped -// if (d1 >= 0) -// { -// // both points are unclipped -// continue; - -// // only point 1 is clipped - -// f = d0 / (d0 - d1); - flds Ld0 - flds Ld1 - fsubr %st(1),%st(0) - -// // we don't cache partially clipped edges - movl $0x7FFFFFFF,C(cacheoffset) - - fdivrp %st(0),%st(1) - - subl $(mv_size),%esp // allocate space for clipvert - -// clipvert.position[0] = pv0->position[0] + -// f * (pv1->position[0] - pv0->position[0]); -// clipvert.position[1] = pv0->position[1] + -// f * (pv1->position[1] - pv0->position[1]); -// clipvert.position[2] = pv0->position[2] + -// f * (pv1->position[2] - pv0->position[2]); - flds mv_position+8(%edx) - fsubs mv_position+8(%esi) - flds mv_position+4(%edx) - fsubs mv_position+4(%esi) - flds mv_position+0(%edx) - fsubs mv_position+0(%esi) // 0 | 1 | 2 - -// replace pv1 with the clip point - movl %esp,%edx - movl cp_leftedge(%ebx),%eax - testb %al,%al - - fmul %st(3),%st(0) - fxch %st(1) // 1 | 0 | 2 - fmul %st(3),%st(0) - fxch %st(2) // 2 | 0 | 1 - fmulp %st(0),%st(3) // 0 | 1 | 2 - fadds mv_position+0(%esi) - fxch %st(1) // 1 | 0 | 2 - fadds mv_position+4(%esi) - fxch %st(2) // 2 | 0 | 1 - fadds mv_position+8(%esi) - fxch %st(1) // 0 | 2 | 1 - fstps mv_position+0(%esp) // 2 | 1 - fstps mv_position+8(%esp) // 1 - fstps mv_position+4(%esp) - -// if (clip->leftedge) -// { - jz Ltestright - -// r_leftclipped = true; -// r_leftexit = clipvert; - movl $1,C(r_leftclipped) - movl mv_position+0(%esp),%eax - movl %eax,C(r_leftexit)+mv_position+0 - movl mv_position+4(%esp),%eax - movl %eax,C(r_leftexit)+mv_position+4 - movl mv_position+8(%esp),%eax - movl %eax,C(r_leftexit)+mv_position+8 - - jmp Lcontinue - -// } - -Ltestright: -// else if (clip->rightedge) -// { - testb %ah,%ah - jz Lcontinue - -// r_rightclipped = true; -// r_rightexit = clipvert; - movl $1,C(r_rightclipped) - movl mv_position+0(%esp),%eax - movl %eax,C(r_rightexit)+mv_position+0 - movl mv_position+4(%esp),%eax - movl %eax,C(r_rightexit)+mv_position+4 - movl mv_position+8(%esp),%eax - movl %eax,C(r_rightexit)+mv_position+8 - -// } -// -// R_ClipEdge (pv0, &clipvert, clip->next); -// return; -// } - jmp Lcontinue - -// } - -Lp3: - -// // only point 0 is clipped -// r_lastvertvalid = false; - - movl $0,C(r_lastvertvalid) - -// f = d0 / (d0 - d1); - flds Ld0 - flds Ld1 - fsubr %st(1),%st(0) - -// // we don't cache partially clipped edges - movl $0x7FFFFFFF,C(cacheoffset) - - fdivrp %st(0),%st(1) - - subl $(mv_size),%esp // allocate space for clipvert - -// clipvert.position[0] = pv0->position[0] + -// f * (pv1->position[0] - pv0->position[0]); -// clipvert.position[1] = pv0->position[1] + -// f * (pv1->position[1] - pv0->position[1]); -// clipvert.position[2] = pv0->position[2] + -// f * (pv1->position[2] - pv0->position[2]); - flds mv_position+8(%edx) - fsubs mv_position+8(%esi) - flds mv_position+4(%edx) - fsubs mv_position+4(%esi) - flds mv_position+0(%edx) - fsubs mv_position+0(%esi) // 0 | 1 | 2 - - movl cp_leftedge(%ebx),%eax - testb %al,%al - - fmul %st(3),%st(0) - fxch %st(1) // 1 | 0 | 2 - fmul %st(3),%st(0) - fxch %st(2) // 2 | 0 | 1 - fmulp %st(0),%st(3) // 0 | 1 | 2 - fadds mv_position+0(%esi) - fxch %st(1) // 1 | 0 | 2 - fadds mv_position+4(%esi) - fxch %st(2) // 2 | 0 | 1 - fadds mv_position+8(%esi) - fxch %st(1) // 0 | 2 | 1 - fstps mv_position+0(%esp) // 2 | 1 - fstps mv_position+8(%esp) // 1 - fstps mv_position+4(%esp) - -// replace pv0 with the clip point - movl %esp,%esi - -// if (clip->leftedge) -// { - jz Ltestright2 - -// r_leftclipped = true; -// r_leftenter = clipvert; - movl $1,C(r_leftclipped) - movl mv_position+0(%esp),%eax - movl %eax,C(r_leftenter)+mv_position+0 - movl mv_position+4(%esp),%eax - movl %eax,C(r_leftenter)+mv_position+4 - movl mv_position+8(%esp),%eax - movl %eax,C(r_leftenter)+mv_position+8 - - jmp Lcontinue - -// } - -Ltestright2: -// else if (clip->rightedge) -// { - testb %ah,%ah - jz Lcontinue - -// r_rightclipped = true; -// r_rightenter = clipvert; - movl $1,C(r_rightclipped) - movl mv_position+0(%esp),%eax - movl %eax,C(r_rightenter)+mv_position+0 - movl mv_position+4(%esp),%eax - movl %eax,C(r_rightenter)+mv_position+4 - movl mv_position+8(%esp),%eax - movl %eax,C(r_rightenter)+mv_position+8 - -// } - jmp Lcontinue - -// %esi = vec3_t point to transform and project -// %edx preserved -LTransformAndProject: - -// // transform and project -// VectorSubtract (world, modelorg, local); - flds mv_position+0(%esi) - fsubs C(modelorg)+0 - flds mv_position+4(%esi) - fsubs C(modelorg)+4 - flds mv_position+8(%esi) - fsubs C(modelorg)+8 - fxch %st(2) // local[0] | local[1] | local[2] - -// TransformVector (local, transformed); -// -// if (transformed[2] < NEAR_CLIP) -// transformed[2] = NEAR_CLIP; -// -// lzi0 = 1.0 / transformed[2]; - fld %st(0) // local[0] | local[0] | local[1] | local[2] - fmuls C(vpn)+0 // zm0 | local[0] | local[1] | local[2] - fld %st(1) // local[0] | zm0 | local[0] | local[1] | - // local[2] - fmuls C(vright)+0 // xm0 | zm0 | local[0] | local[1] | local[2] - fxch %st(2) // local[0] | zm0 | xm0 | local[1] | local[2] - fmuls C(vup)+0 // ym0 | zm0 | xm0 | local[1] | local[2] - fld %st(3) // local[1] | ym0 | zm0 | xm0 | local[1] | - // local[2] - fmuls C(vpn)+4 // zm1 | ym0 | zm0 | xm0 | local[1] | - // local[2] - fld %st(4) // local[1] | zm1 | ym0 | zm0 | xm0 | - // local[1] | local[2] - fmuls C(vright)+4 // xm1 | zm1 | ym0 | zm0 | xm0 | - // local[1] | local[2] - fxch %st(5) // local[1] | zm1 | ym0 | zm0 | xm0 | - // xm1 | local[2] - fmuls C(vup)+4 // ym1 | zm1 | ym0 | zm0 | xm0 | - // xm1 | local[2] - fxch %st(1) // zm1 | ym1 | ym0 | zm0 | xm0 | - // xm1 | local[2] - faddp %st(0),%st(3) // ym1 | ym0 | zm2 | xm0 | xm1 | local[2] - fxch %st(3) // xm0 | ym0 | zm2 | ym1 | xm1 | local[2] - faddp %st(0),%st(4) // ym0 | zm2 | ym1 | xm2 | local[2] - faddp %st(0),%st(2) // zm2 | ym2 | xm2 | local[2] - fld %st(3) // local[2] | zm2 | ym2 | xm2 | local[2] - fmuls C(vpn)+8 // zm3 | zm2 | ym2 | xm2 | local[2] - fld %st(4) // local[2] | zm3 | zm2 | ym2 | xm2 | local[2] - fmuls C(vright)+8 // xm3 | zm3 | zm2 | ym2 | xm2 | local[2] - fxch %st(5) // local[2] | zm3 | zm2 | ym2 | xm2 | xm3 - fmuls C(vup)+8 // ym3 | zm3 | zm2 | ym2 | xm2 | xm3 - fxch %st(1) // zm3 | ym3 | zm2 | ym2 | xm2 | xm3 - faddp %st(0),%st(2) // ym3 | zm4 | ym2 | xm2 | xm3 - fxch %st(4) // xm3 | zm4 | ym2 | xm2 | ym3 - faddp %st(0),%st(3) // zm4 | ym2 | xm4 | ym3 - fxch %st(1) // ym2 | zm4 | xm4 | ym3 - faddp %st(0),%st(3) // zm4 | xm4 | ym4 - - fcoms Lfp_near_clip - fnstsw %ax - testb $1,%ah - jz LNoClip - fstp %st(0) - flds Lfp_near_clip - -LNoClip: - - fdivrs float_1 // lzi0 | x | y - fxch %st(1) // x | lzi0 | y - -// // FIXME: build x/yscale into transform? -// scale = xscale * lzi0; -// u0 = (xcenter + scale*transformed[0]); - flds C(xscale) // xscale | x | lzi0 | y - fmul %st(2),%st(0) // scale | x | lzi0 | y - fmulp %st(0),%st(1) // scale*x | lzi0 | y - fadds C(xcenter) // u0 | lzi0 | y - -// if (u0 < r_refdef.fvrectx_adj) -// u0 = r_refdef.fvrectx_adj; -// if (u0 > r_refdef.fvrectright_adj) -// u0 = r_refdef.fvrectright_adj; -// FIXME: use integer compares of floats? - fcoms C(r_refdef)+rd_fvrectx_adj - fnstsw %ax - testb $1,%ah - jz LClampP0 - fstp %st(0) - flds C(r_refdef)+rd_fvrectx_adj -LClampP0: - fcoms C(r_refdef)+rd_fvrectright_adj - fnstsw %ax - testb $0x45,%ah - jnz LClampP1 - fstp %st(0) - flds C(r_refdef)+rd_fvrectright_adj -LClampP1: - - fld %st(1) // lzi0 | u0 | lzi0 | y - -// scale = yscale * lzi0; -// v0 = (ycenter - scale*transformed[1]); - fmuls C(yscale) // scale | u0 | lzi0 | y - fmulp %st(0),%st(3) // u0 | lzi0 | scale*y - fxch %st(2) // scale*y | lzi0 | u0 - fsubrs C(ycenter) // v0 | lzi0 | u0 - -// if (v0 < r_refdef.fvrecty_adj) -// v0 = r_refdef.fvrecty_adj; -// if (v0 > r_refdef.fvrectbottom_adj) -// v0 = r_refdef.fvrectbottom_adj; -// FIXME: use integer compares of floats? - fcoms C(r_refdef)+rd_fvrecty_adj - fnstsw %ax - testb $1,%ah - jz LClampP2 - fstp %st(0) - flds C(r_refdef)+rd_fvrecty_adj -LClampP2: - fcoms C(r_refdef)+rd_fvrectbottom_adj - fnstsw %ax - testb $0x45,%ah - jnz LClampP3 - fstp %st(0) - flds C(r_refdef)+rd_fvrectbottom_adj -LClampP3: - ret - -#endif // id386 -#endif diff --git a/asm/r_edgea.s b/asm/r_edgea.s deleted file mode 100644 index 16d9a9c..0000000 --- a/asm/r_edgea.s +++ /dev/null @@ -1,752 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// r_edgea.s -// x86 assembly-language edge-processing code. -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" - -#if id386broken - - .data -Ltemp: .long 0 -float_1_div_0100000h: .long 0x35800000 // 1.0/(float)0x100000 -float_point_999: .single 0.999 -float_1_point_001: .single 1.001 - - .text - -//-------------------------------------------------------------------- - -#define edgestoadd 4+8 // note odd stack offsets because of interleaving -#define edgelist 8+12 // with pushes - -.globl C(R_EdgeCodeStart) -C(R_EdgeCodeStart): - -.globl C(R_InsertNewEdges) -C(R_InsertNewEdges): - pushl %edi - pushl %esi // preserve register variables - movl edgestoadd(%esp),%edx - pushl %ebx - movl edgelist(%esp),%ecx - -LDoNextEdge: - movl et_u(%edx),%eax - movl %edx,%edi - -LContinueSearch: - movl et_u(%ecx),%ebx - movl et_next(%ecx),%esi - cmpl %ebx,%eax - jle LAddedge - movl et_u(%esi),%ebx - movl et_next(%esi),%ecx - cmpl %ebx,%eax - jle LAddedge2 - movl et_u(%ecx),%ebx - movl et_next(%ecx),%esi - cmpl %ebx,%eax - jle LAddedge - movl et_u(%esi),%ebx - movl et_next(%esi),%ecx - cmpl %ebx,%eax - jg LContinueSearch - -LAddedge2: - movl et_next(%edx),%edx - movl et_prev(%esi),%ebx - movl %esi,et_next(%edi) - movl %ebx,et_prev(%edi) - movl %edi,et_next(%ebx) - movl %edi,et_prev(%esi) - movl %esi,%ecx - - cmpl $0,%edx - jnz LDoNextEdge - jmp LDone - - .align 4 -LAddedge: - movl et_next(%edx),%edx - movl et_prev(%ecx),%ebx - movl %ecx,et_next(%edi) - movl %ebx,et_prev(%edi) - movl %edi,et_next(%ebx) - movl %edi,et_prev(%ecx) - - cmpl $0,%edx - jnz LDoNextEdge - -LDone: - popl %ebx // restore register variables - popl %esi - popl %edi - - ret - -//-------------------------------------------------------------------- - -#define predge 4+4 - -.globl C(R_RemoveEdges) -C(R_RemoveEdges): - pushl %ebx - movl predge(%esp),%eax - -Lre_loop: - movl et_next(%eax),%ecx - movl et_nextremove(%eax),%ebx - movl et_prev(%eax),%edx - testl %ebx,%ebx - movl %edx,et_prev(%ecx) - jz Lre_done - movl %ecx,et_next(%edx) - - movl et_next(%ebx),%ecx - movl et_prev(%ebx),%edx - movl et_nextremove(%ebx),%eax - movl %edx,et_prev(%ecx) - testl %eax,%eax - movl %ecx,et_next(%edx) - jnz Lre_loop - - popl %ebx - ret - -Lre_done: - movl %ecx,et_next(%edx) - popl %ebx - - ret - -//-------------------------------------------------------------------- - -#define pedgelist 4+4 // note odd stack offset because of interleaving - // with pushes - -.globl C(R_StepActiveU) -C(R_StepActiveU): - pushl %edi - movl pedgelist(%esp),%edx - pushl %esi // preserve register variables - pushl %ebx - - movl et_prev(%edx),%esi - -LNewEdge: - movl et_u(%esi),%edi - -LNextEdge: - movl et_u(%edx),%eax - movl et_u_step(%edx),%ebx - addl %ebx,%eax - movl et_next(%edx),%esi - movl %eax,et_u(%edx) - cmpl %edi,%eax - jl LPushBack - - movl et_u(%esi),%edi - movl et_u_step(%esi),%ebx - addl %ebx,%edi - movl et_next(%esi),%edx - movl %edi,et_u(%esi) - cmpl %eax,%edi - jl LPushBack2 - - movl et_u(%edx),%eax - movl et_u_step(%edx),%ebx - addl %ebx,%eax - movl et_next(%edx),%esi - movl %eax,et_u(%edx) - cmpl %edi,%eax - jl LPushBack - - movl et_u(%esi),%edi - movl et_u_step(%esi),%ebx - addl %ebx,%edi - movl et_next(%esi),%edx - movl %edi,et_u(%esi) - cmpl %eax,%edi - jnl LNextEdge - -LPushBack2: - movl %edx,%ebx - movl %edi,%eax - movl %esi,%edx - movl %ebx,%esi - -LPushBack: -// push it back to keep it sorted - movl et_prev(%edx),%ecx - movl et_next(%edx),%ebx - -// done if the -1 in edge_aftertail triggered this - cmpl $(C(edge_aftertail)),%edx - jz LUDone - -// pull the edge out of the edge list - movl et_prev(%ecx),%edi - movl %ecx,et_prev(%esi) - movl %ebx,et_next(%ecx) - -// find out where the edge goes in the edge list -LPushBackLoop: - movl et_prev(%edi),%ecx - movl et_u(%edi),%ebx - cmpl %ebx,%eax - jnl LPushBackFound - - movl et_prev(%ecx),%edi - movl et_u(%ecx),%ebx - cmpl %ebx,%eax - jl LPushBackLoop - - movl %ecx,%edi - -// put the edge back into the edge list -LPushBackFound: - movl et_next(%edi),%ebx - movl %edi,et_prev(%edx) - movl %ebx,et_next(%edx) - movl %edx,et_next(%edi) - movl %edx,et_prev(%ebx) - - movl %esi,%edx - movl et_prev(%esi),%esi - - cmpl $(C(edge_tail)),%edx - jnz LNewEdge - -LUDone: - popl %ebx // restore register variables - popl %esi - popl %edi - - ret - -//-------------------------------------------------------------------- - -#define surf 4 // note this is loaded before any pushes - - .align 4 -TrailingEdge: - movl st_spanstate(%esi),%eax // check for edge inversion - decl %eax - jnz LInverted - - movl %eax,st_spanstate(%esi) - movl st_insubmodel(%esi),%ecx - movl 0x12345678,%edx // surfaces[1].st_next -LPatch0: - movl C(r_bmodelactive),%eax - subl %ecx,%eax - cmpl %esi,%edx - movl %eax,C(r_bmodelactive) - jnz LNoEmit // surface isn't on top, just remove - -// emit a span (current top going away) - movl et_u(%ebx),%eax - shrl $20,%eax // iu = integral pixel u - movl st_last_u(%esi),%edx - movl st_next(%esi),%ecx - cmpl %edx,%eax - jle LNoEmit2 // iu <= surf->last_u, so nothing to emit - - movl %eax,st_last_u(%ecx) // surf->next->last_u = iu; - subl %edx,%eax - movl %edx,espan_t_u(%ebp) // span->u = surf->last_u; - - movl %eax,espan_t_count(%ebp) // span->count = iu - span->u; - movl C(current_iv),%eax - movl %eax,espan_t_v(%ebp) // span->v = current_iv; - movl st_spans(%esi),%eax - movl %eax,espan_t_pnext(%ebp) // span->pnext = surf->spans; - movl %ebp,st_spans(%esi) // surf->spans = span; - addl $(espan_t_size),%ebp - - movl st_next(%esi),%edx // remove the surface from the surface - movl st_prev(%esi),%esi // stack - - movl %edx,st_next(%esi) - movl %esi,st_prev(%edx) - ret - -LNoEmit2: - movl %eax,st_last_u(%ecx) // surf->next->last_u = iu; - movl st_next(%esi),%edx // remove the surface from the surface - movl st_prev(%esi),%esi // stack - - movl %edx,st_next(%esi) - movl %esi,st_prev(%edx) - ret - -LNoEmit: - movl st_next(%esi),%edx // remove the surface from the surface - movl st_prev(%esi),%esi // stack - - movl %edx,st_next(%esi) - movl %esi,st_prev(%edx) - ret - -LInverted: - movl %eax,st_spanstate(%esi) - ret - -//-------------------------------------------------------------------- - -// trailing edge only -Lgs_trailing: - pushl $Lgs_nextedge - jmp TrailingEdge - - -.globl C(R_GenerateSpans) -C(R_GenerateSpans): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// clear active surfaces to just the background surface - movl C(surfaces),%eax - movl C(edge_head_u_shift20),%edx - addl $(st_size),%eax -// %ebp = span_p throughout - movl C(span_p),%ebp - - movl $0,C(r_bmodelactive) - - movl %eax,st_next(%eax) - movl %eax,st_prev(%eax) - movl %edx,st_last_u(%eax) - movl C(edge_head)+et_next,%ebx // edge=edge_head.next - -// generate spans - cmpl $(C(edge_tail)),%ebx // done if empty list - jz Lgs_lastspan - -Lgs_edgeloop: - - movl et_surfs(%ebx),%edi - movl C(surfaces),%eax - movl %edi,%esi - andl $0xFFFF0000,%edi - andl $0xFFFF,%esi - jz Lgs_leading // not a trailing edge - -// it has a left surface, so a surface is going away for this span - shll $(SURF_T_SHIFT),%esi - addl %eax,%esi - testl %edi,%edi - jz Lgs_trailing - -// both leading and trailing - call TrailingEdge - movl C(surfaces),%eax - -// --------------------------------------------------------------- -// handle a leading edge -// --------------------------------------------------------------- - -Lgs_leading: - shrl $16-SURF_T_SHIFT,%edi - movl C(surfaces),%eax - addl %eax,%edi - movl 0x12345678,%esi // surf2 = surfaces[1].next; -LPatch2: - movl st_spanstate(%edi),%edx - movl st_insubmodel(%edi),%eax - testl %eax,%eax - jnz Lbmodel_leading - -// handle a leading non-bmodel edge - -// don't start a span if this is an inverted span, with the end edge preceding -// the start edge (that is, we've already seen the end edge) - testl %edx,%edx - jnz Lxl_done - - -// if (surf->key < surf2->key) -// goto newtop; - incl %edx - movl st_key(%edi),%eax - movl %edx,st_spanstate(%edi) - movl st_key(%esi),%ecx - cmpl %ecx,%eax - jl Lnewtop - -// main sorting loop to search through surface stack until insertion point -// found. Always terminates because background surface is sentinel -// do -// { -// surf2 = surf2->next; -// } while (surf->key >= surf2->key); -Lsortloopnb: - movl st_next(%esi),%esi - movl st_key(%esi),%ecx - cmpl %ecx,%eax - jge Lsortloopnb - - jmp LInsertAndExit - - -// handle a leading bmodel edge - .align 4 -Lbmodel_leading: - -// don't start a span if this is an inverted span, with the end edge preceding -// the start edge (that is, we've already seen the end edge) - testl %edx,%edx - jnz Lxl_done - - movl C(r_bmodelactive),%ecx - incl %edx - incl %ecx - movl %edx,st_spanstate(%edi) - movl %ecx,C(r_bmodelactive) - -// if (surf->key < surf2->key) -// goto newtop; - movl st_key(%edi),%eax - movl st_key(%esi),%ecx - cmpl %ecx,%eax - jl Lnewtop - -// if ((surf->key == surf2->key) && surf->insubmodel) -// { - jz Lzcheck_for_newtop - -// main sorting loop to search through surface stack until insertion point -// found. Always terminates because background surface is sentinel -// do -// { -// surf2 = surf2->next; -// } while (surf->key > surf2->key); -Lsortloop: - movl st_next(%esi),%esi - movl st_key(%esi),%ecx - cmpl %ecx,%eax - jg Lsortloop - - jne LInsertAndExit - -// Do 1/z sorting to see if we've arrived in the right position - movl et_u(%ebx),%eax - subl $0xFFFFF,%eax - movl %eax,Ltemp - fildl Ltemp - - fmuls float_1_div_0100000h // fu = (float)(edge->u - 0xFFFFF) * - // (1.0 / 0x100000); - - fld %st(0) // fu | fu - fmuls st_d_zistepu(%edi) // fu*surf->d_zistepu | fu - flds C(fv) // fv | fu*surf->d_zistepu | fu - fmuls st_d_zistepv(%edi) // fv*surf->d_zistepv | fu*surf->d_zistepu | fu - fxch %st(1) // fu*surf->d_zistepu | fv*surf->d_zistepv | fu - fadds st_d_ziorigin(%edi) // fu*surf->d_zistepu + surf->d_ziorigin | - // fv*surf->d_zistepv | fu - - flds st_d_zistepu(%esi) // surf2->d_zistepu | - // fu*surf->d_zistepu + surf->d_ziorigin | - // fv*surf->d_zistepv | fu - fmul %st(3),%st(0) // fu*surf2->d_zistepu | - // fu*surf->d_zistepu + surf->d_ziorigin | - // fv*surf->d_zistepv | fu - fxch %st(1) // fu*surf->d_zistepu + surf->d_ziorigin | - // fu*surf2->d_zistepu | - // fv*surf->d_zistepv | fu - faddp %st(0),%st(2) // fu*surf2->d_zistepu | newzi | fu - - flds C(fv) // fv | fu*surf2->d_zistepu | newzi | fu - fmuls st_d_zistepv(%esi) // fv*surf2->d_zistepv | - // fu*surf2->d_zistepu | newzi | fu - fld %st(2) // newzi | fv*surf2->d_zistepv | - // fu*surf2->d_zistepu | newzi | fu - fmuls float_point_999 // newzibottom | fv*surf2->d_zistepv | - // fu*surf2->d_zistepu | newzi | fu - - fxch %st(2) // fu*surf2->d_zistepu | fv*surf2->d_zistepv | - // newzibottom | newzi | fu - fadds st_d_ziorigin(%esi) // fu*surf2->d_zistepu + surf2->d_ziorigin | - // fv*surf2->d_zistepv | newzibottom | newzi | - // fu - faddp %st(0),%st(1) // testzi | newzibottom | newzi | fu - fxch %st(1) // newzibottom | testzi | newzi | fu - -// if (newzibottom >= testzi) -// goto Lgotposition; - - fcomp %st(1) // testzi | newzi | fu - - fxch %st(1) // newzi | testzi | fu - fmuls float_1_point_001 // newzitop | testzi | fu - fxch %st(1) // testzi | newzitop | fu - - fnstsw %ax - testb $0x01,%ah - jz Lgotposition_fpop3 - -// if (newzitop >= testzi) -// { - - fcomp %st(1) // newzitop | fu - fnstsw %ax - testb $0x45,%ah - jz Lsortloop_fpop2 - -// if (surf->d_zistepu >= surf2->d_zistepu) -// goto newtop; - - flds st_d_zistepu(%edi) // surf->d_zistepu | newzitop| fu - fcomps st_d_zistepu(%esi) // newzitop | fu - fnstsw %ax - testb $0x01,%ah - jz Lgotposition_fpop2 - - fstp %st(0) // clear the FPstack - fstp %st(0) - movl st_key(%edi),%eax - jmp Lsortloop - - -Lgotposition_fpop3: - fstp %st(0) -Lgotposition_fpop2: - fstp %st(0) - fstp %st(0) - jmp LInsertAndExit - - -// emit a span (obscures current top) - -Lnewtop_fpop3: - fstp %st(0) -Lnewtop_fpop2: - fstp %st(0) - fstp %st(0) - movl st_key(%edi),%eax // reload the sorting key - -Lnewtop: - movl et_u(%ebx),%eax - movl st_last_u(%esi),%edx - shrl $20,%eax // iu = integral pixel u - movl %eax,st_last_u(%edi) // surf->last_u = iu; - cmpl %edx,%eax - jle LInsertAndExit // iu <= surf->last_u, so nothing to emit - - subl %edx,%eax - movl %edx,espan_t_u(%ebp) // span->u = surf->last_u; - - movl %eax,espan_t_count(%ebp) // span->count = iu - span->u; - movl C(current_iv),%eax - movl %eax,espan_t_v(%ebp) // span->v = current_iv; - movl st_spans(%esi),%eax - movl %eax,espan_t_pnext(%ebp) // span->pnext = surf->spans; - movl %ebp,st_spans(%esi) // surf->spans = span; - addl $(espan_t_size),%ebp - -LInsertAndExit: -// insert before surf2 - movl %esi,st_next(%edi) // surf->next = surf2; - movl st_prev(%esi),%eax - movl %eax,st_prev(%edi) // surf->prev = surf2->prev; - movl %edi,st_prev(%esi) // surf2->prev = surf; - movl %edi,st_next(%eax) // surf2->prev->next = surf; - -// --------------------------------------------------------------- -// leading edge done -// --------------------------------------------------------------- - -// --------------------------------------------------------------- -// see if there are any more edges -// --------------------------------------------------------------- - -Lgs_nextedge: - movl et_next(%ebx),%ebx - cmpl $(C(edge_tail)),%ebx - jnz Lgs_edgeloop - -// clean up at the right edge -Lgs_lastspan: - -// now that we've reached the right edge of the screen, we're done with any -// unfinished surfaces, so emit a span for whatever's on top - movl 0x12345678,%esi // surfaces[1].st_next -LPatch3: - movl C(edge_tail_u_shift20),%eax - xorl %ecx,%ecx - movl st_last_u(%esi),%edx - subl %edx,%eax - jle Lgs_resetspanstate - - movl %edx,espan_t_u(%ebp) - movl %eax,espan_t_count(%ebp) - movl C(current_iv),%eax - movl %eax,espan_t_v(%ebp) - movl st_spans(%esi),%eax - movl %eax,espan_t_pnext(%ebp) - movl %ebp,st_spans(%esi) - addl $(espan_t_size),%ebp - -// reset spanstate for all surfaces in the surface stack -Lgs_resetspanstate: - movl %ecx,st_spanstate(%esi) - movl st_next(%esi),%esi - cmpl $0x12345678,%esi // &surfaces[1] -LPatch4: - jnz Lgs_resetspanstate - -// store the final span_p - movl %ebp,C(span_p) - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -// --------------------------------------------------------------- -// 1/z sorting for bmodels in the same leaf -// --------------------------------------------------------------- - .align 4 -Lxl_done: - incl %edx - movl %edx,st_spanstate(%edi) - - jmp Lgs_nextedge - - - .align 4 -Lzcheck_for_newtop: - movl et_u(%ebx),%eax - subl $0xFFFFF,%eax - movl %eax,Ltemp - fildl Ltemp - - fmuls float_1_div_0100000h // fu = (float)(edge->u - 0xFFFFF) * - // (1.0 / 0x100000); - - fld %st(0) // fu | fu - fmuls st_d_zistepu(%edi) // fu*surf->d_zistepu | fu - flds C(fv) // fv | fu*surf->d_zistepu | fu - fmuls st_d_zistepv(%edi) // fv*surf->d_zistepv | fu*surf->d_zistepu | fu - fxch %st(1) // fu*surf->d_zistepu | fv*surf->d_zistepv | fu - fadds st_d_ziorigin(%edi) // fu*surf->d_zistepu + surf->d_ziorigin | - // fv*surf->d_zistepv | fu - - flds st_d_zistepu(%esi) // surf2->d_zistepu | - // fu*surf->d_zistepu + surf->d_ziorigin | - // fv*surf->d_zistepv | fu - fmul %st(3),%st(0) // fu*surf2->d_zistepu | - // fu*surf->d_zistepu + surf->d_ziorigin | - // fv*surf->d_zistepv | fu - fxch %st(1) // fu*surf->d_zistepu + surf->d_ziorigin | - // fu*surf2->d_zistepu | - // fv*surf->d_zistepv | fu - faddp %st(0),%st(2) // fu*surf2->d_zistepu | newzi | fu - - flds C(fv) // fv | fu*surf2->d_zistepu | newzi | fu - fmuls st_d_zistepv(%esi) // fv*surf2->d_zistepv | - // fu*surf2->d_zistepu | newzi | fu - fld %st(2) // newzi | fv*surf2->d_zistepv | - // fu*surf2->d_zistepu | newzi | fu - fmuls float_point_999 // newzibottom | fv*surf2->d_zistepv | - // fu*surf2->d_zistepu | newzi | fu - - fxch %st(2) // fu*surf2->d_zistepu | fv*surf2->d_zistepv | - // newzibottom | newzi | fu - fadds st_d_ziorigin(%esi) // fu*surf2->d_zistepu + surf2->d_ziorigin | - // fv*surf2->d_zistepv | newzibottom | newzi | - // fu - faddp %st(0),%st(1) // testzi | newzibottom | newzi | fu - fxch %st(1) // newzibottom | testzi | newzi | fu - -// if (newzibottom >= testzi) -// goto newtop; - - fcomp %st(1) // testzi | newzi | fu - - fxch %st(1) // newzi | testzi | fu - fmuls float_1_point_001 // newzitop | testzi | fu - fxch %st(1) // testzi | newzitop | fu - - fnstsw %ax - testb $0x01,%ah - jz Lnewtop_fpop3 - -// if (newzitop >= testzi) -// { - - fcomp %st(1) // newzitop | fu - fnstsw %ax - testb $0x45,%ah - jz Lsortloop_fpop2 - -// if (surf->d_zistepu >= surf2->d_zistepu) -// goto newtop; - - flds st_d_zistepu(%edi) // surf->d_zistepu | newzitop | fu - fcomps st_d_zistepu(%esi) // newzitop | fu - fnstsw %ax - testb $0x01,%ah - jz Lnewtop_fpop2 - -Lsortloop_fpop2: - fstp %st(0) // clear the FP stack - fstp %st(0) - movl st_key(%edi),%eax - jmp Lsortloop - - -.globl C(R_EdgeCodeEnd) -C(R_EdgeCodeEnd): - - -//---------------------------------------------------------------------- -// Surface array address code patching routine -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_SurfacePatch) -C(R_SurfacePatch): - - movl C(surfaces),%eax - addl $(st_size),%eax - movl %eax,LPatch4-4 - - addl $(st_next),%eax - movl %eax,LPatch0-4 - movl %eax,LPatch2-4 - movl %eax,LPatch3-4 - - ret - -#endif // id386 -#endif diff --git a/asm/r_varsa.s b/asm/r_varsa.s deleted file mode 100644 index b8b174e..0000000 --- a/asm/r_varsa.s +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// r_varsa.s -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" -#include "d_ifacea.h" - -#if id386 - - .data - -//------------------------------------------------------- -// ASM-only variables -//------------------------------------------------------- -.globl float_1, float_particle_z_clip, float_point5 -.globl float_minus_1, float_0 -float_0: .single 0.0 -float_1: .single 1.0 -float_minus_1: .single -1.0 -float_particle_z_clip: .single PARTICLE_Z_CLIP -float_point5: .single 0.5 - -.globl fp_16, fp_64k, fp_1m, fp_64kx64k -.globl fp_1m_minus_1 -.globl fp_8 -fp_1m: .single 1048576.0 -fp_1m_minus_1: .single 1048575.0 -fp_64k: .single 65536.0 -fp_8: .single 8.0 -fp_16: .single 16.0 -fp_64kx64k: .long 0x4f000000 // (float)0x8000*0x10000 - - -.globl FloatZero, Float2ToThe31nd, FloatMinus2ToThe31nd -FloatZero: .long 0 -Float2ToThe31nd: .long 0x4f000000 -FloatMinus2ToThe31nd: .long 0xcf000000 - -.globl C(r_bmodelactive) -C(r_bmodelactive): .long 0 - -#endif // id386 -#endif diff --git a/asm/snd_mixa.s b/asm/snd_mixa.s deleted file mode 100644 index 264858c..0000000 --- a/asm/snd_mixa.s +++ /dev/null @@ -1,221 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// snd_mixa.s -// x86 assembly-language sound code -// - -#ifndef NOASM - -#define GLQUAKE 1 // don't include unneeded client defs -#include "asm_i386.h" -#include "asm.h" - -#if id386 - - .text - -//---------------------------------------------------------------------- -// 8-bit sound-mixing code -//---------------------------------------------------------------------- - -#define ch 4+16 -#define sc 8+16 -#define count 12+16 - -.globl C(SND_PaintChannelFrom8) -C(SND_PaintChannelFrom8): - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - pushl %ebp - -// int data; -// short *lscale, *rscale; -// unsigned char *sfx; -// int i; - - movl ch(%esp),%ebx - movl sc(%esp),%esi - -// if (ch->leftvol > 255) -// ch->leftvol = 255; -// if (ch->rightvol > 255) -// ch->rightvol = 255; - movl ch_leftvol(%ebx),%eax - movl ch_rightvol(%ebx),%edx - cmpl $255,%eax - jna LLeftSet - movl $255,%eax -LLeftSet: - cmpl $255,%edx - jna LRightSet - movl $255,%edx -LRightSet: - -// lscale = snd_scaletable[ch->leftvol >> 3]; -// rscale = snd_scaletable[ch->rightvol >> 3]; -// sfx = (signed char *)sc->data + ch->pos; -// ch->pos += count; - andl $0xF8,%eax - addl $(sfxc_data),%esi - andl $0xF8,%edx - movl ch_pos(%ebx),%edi - movl count(%esp),%ecx - addl %edi,%esi - shll $7,%eax - addl %ecx,%edi - shll $7,%edx - movl %edi,ch_pos(%ebx) - addl $(C(snd_scaletable)),%eax - addl $(C(snd_scaletable)),%edx - subl %ebx,%ebx - movb -1(%esi,%ecx,1),%bl - - testl $1,%ecx - jz LMix8Loop - - movl (%eax,%ebx,4),%edi - movl (%edx,%ebx,4),%ebp - addl C(paintbuffer)+psp_left-psp_size(,%ecx,psp_size),%edi - addl C(paintbuffer)+psp_right-psp_size(,%ecx,psp_size),%ebp - movl %edi,C(paintbuffer)+psp_left-psp_size(,%ecx,psp_size) - movl %ebp,C(paintbuffer)+psp_right-psp_size(,%ecx,psp_size) - movb -2(%esi,%ecx,1),%bl - - decl %ecx - jz LDone - -// for (i=0 ; i>8; -// if (val > 0x7fff) -// snd_out[i] = 0x7fff; -// else if (val < (short)0x8000) -// snd_out[i] = (short)0x8000; -// else -// snd_out[i] = val; - movl -8(%ebx,%ecx,4),%eax - imull %esi,%eax - sarl $8,%eax - cmpl $0x7FFF,%eax - jg LClampHigh - cmpl $0xFFFF8000,%eax - jnl LClampDone - movl $0xFFFF8000,%eax - jmp LClampDone -LClampHigh: - movl $0x7FFF,%eax -LClampDone: - -// val = (snd_p[i+1]*snd_vol)>>8; -// if (val > 0x7fff) -// snd_out[i+1] = 0x7fff; -// else if (val < (short)0x8000) -// snd_out[i+1] = (short)0x8000; -// else -// snd_out[i+1] = val; - movl -4(%ebx,%ecx,4),%edx - imull %esi,%edx - sarl $8,%edx - cmpl $0x7FFF,%edx - jg LClampHigh2 - cmpl $0xFFFF8000,%edx - jnl LClampDone2 - movl $0xFFFF8000,%edx - jmp LClampDone2 -LClampHigh2: - movl $0x7FFF,%edx -LClampDone2: - shll $16,%edx - andl $0xFFFF,%eax - orl %eax,%edx - movl %edx,-4(%edi,%ecx,2) - -// } - subl $2,%ecx - jnz LWLBLoopTop - -// snd_p += snd_linear_count; - - popl %ebx - popl %edi - popl %esi - - ret - - -#endif // id386 -#endif diff --git a/asm/surf16.s b/asm/surf16.s deleted file mode 100644 index 1f8d27e..0000000 --- a/asm/surf16.s +++ /dev/null @@ -1,174 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// surf16.s -// x86 assembly-language 16 bpp surface block drawing code. -// -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" - -#if id386 - -//---------------------------------------------------------------------- -// Surface block drawer -//---------------------------------------------------------------------- - - .data - -k: .long 0 -loopentry: .long 0 - - .align 4 -blockjumptable16: - .long LEnter2_16 - .long LEnter4_16 - .long 0, LEnter8_16 - .long 0, 0, 0, LEnter16_16 - - - .text - - .align 4 -.globl C(R_Surf16Start) -C(R_Surf16Start): - - .align 4 -.globl C(R_DrawSurfaceBlock16) -C(R_DrawSurfaceBlock16): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - - movl C(blocksize),%eax - movl C(prowdestbase),%edi - movl C(pbasesource),%esi - movl C(sourcesstep),%ebx - movl blockjumptable16-4(,%eax,2),%ecx - movl %eax,k - movl %ecx,loopentry - movl C(lightleft),%edx - movl C(lightright),%ebp - -Lblockloop16: - - subl %edx,%ebp - movb C(blockdivshift),%cl - sarl %cl,%ebp - jns Lp1_16 - testl C(blockdivmask),%ebp - jz Lp1_16 - incl %ebp -Lp1_16: - - subl %eax,%eax - subl %ecx,%ecx // high words must be 0 in loop for addressing - - jmp *loopentry - - .align 4 - -#include "block16.h" - - movl C(pbasesource),%esi - movl C(lightleft),%edx - movl C(lightright),%ebp - movl C(sourcetstep),%eax - movl C(lightrightstep),%ecx - movl C(prowdestbase),%edi - - addl %eax,%esi - addl %ecx,%ebp - - movl C(lightleftstep),%eax - movl C(surfrowbytes),%ecx - - addl %eax,%edx - addl %ecx,%edi - - movl %esi,C(pbasesource) - movl %ebp,C(lightright) - movl k,%eax - movl %edx,C(lightleft) - decl %eax - movl %edi,C(prowdestbase) - movl %eax,k - jnz Lblockloop16 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - -.globl C(R_Surf16End) -C(R_Surf16End): - -//---------------------------------------------------------------------- -// Code patching routines -//---------------------------------------------------------------------- - .data - - .align 4 -LPatchTable16: - .long LBPatch0-4 - .long LBPatch1-4 - .long LBPatch2-4 - .long LBPatch3-4 - .long LBPatch4-4 - .long LBPatch5-4 - .long LBPatch6-4 - .long LBPatch7-4 - .long LBPatch8-4 - .long LBPatch9-4 - .long LBPatch10-4 - .long LBPatch11-4 - .long LBPatch12-4 - .long LBPatch13-4 - .long LBPatch14-4 - .long LBPatch15-4 - - .text - - .align 4 -.globl C(R_Surf16Patch) -C(R_Surf16Patch): - pushl %ebx - - movl C(colormap),%eax - movl $LPatchTable16,%ebx - movl $16,%ecx -LPatchLoop16: - movl (%ebx),%edx - addl $4,%ebx - movl %eax,(%edx) - decl %ecx - jnz LPatchLoop16 - - popl %ebx - - ret - - -#endif // id386 -#endif diff --git a/asm/surf8.s b/asm/surf8.s deleted file mode 100644 index 8410a39..0000000 --- a/asm/surf8.s +++ /dev/null @@ -1,788 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// surf8.s -// x86 assembly-language 8 bpp surface block drawing code. -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" - -#if id386 - - .data - -sb_v: .long 0 - - .text - - .align 4 -.globl C(R_Surf8Start) -C(R_Surf8Start): - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 0 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8_mip0) -C(R_DrawSurfaceBlock8_mip0): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $4,%ecx - orl $0xF0000000,%ebp - - sarl $4,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - andl $0xFFFFF,%ebx - - orl $0xF0000000,%ebx - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - -Lblockloop8_mip0: - movl %ebp,C(lightdelta) - movb 14(%esi),%cl - - sarl $4,%ebp - movb %dh,%bh - - movb 15(%esi),%bl - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch0: - movb 13(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch1: - movb 12(%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - addl %ebp,%edx - movb 0x12345678(%ebx),%ah -LBPatch2: - - movb 11(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch3: - - movb 10(%esi),%cl - movl %eax,12(%edi) - - movb %dh,%bh - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch4: - movb 9(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch5: - movb 8(%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - addl %ebp,%edx - movb 0x12345678(%ebx),%ah -LBPatch6: - - movb 7(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch7: - - movb 6(%esi),%cl - movl %eax,8(%edi) - - movb %dh,%bh - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch8: - movb 5(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch9: - movb 4(%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - addl %ebp,%edx - movb 0x12345678(%ebx),%ah -LBPatch10: - - movb 3(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch11: - - movb 2(%esi),%cl - movl %eax,4(%edi) - - movb %dh,%bh - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch12: - movb 1(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch13: - movb (%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch14: - movl C(lightright),%edx - - movb 0x12345678(%ecx),%al -LBPatch15: - movl C(lightdelta),%ebp - - movl %eax,(%edi) - - addl C(sourcetstep),%esi - addl C(surfrowbytes),%edi - - addl C(lightrightstep),%edx - addl C(lightdeltastep),%ebp - - movl %edx,C(lightright) - jc Lblockloop8_mip0 - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip0 - subl C(r_stepback),%esi -LSkip_mip0: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip0 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 1 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8_mip1) -C(R_DrawSurfaceBlock8_mip1): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $3,%ecx - orl $0x70000000,%ebp - - sarl $3,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - andl $0xFFFFF,%ebx - - orl $0xF0000000,%ebx - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - -Lblockloop8_mip1: - movl %ebp,C(lightdelta) - movb 6(%esi),%cl - - sarl $3,%ebp - movb %dh,%bh - - movb 7(%esi),%bl - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch22: - movb 5(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch23: - movb 4(%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - addl %ebp,%edx - movb 0x12345678(%ebx),%ah -LBPatch24: - - movb 3(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch25: - - movb 2(%esi),%cl - movl %eax,4(%edi) - - movb %dh,%bh - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch26: - movb 1(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch27: - movb (%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch28: - movl C(lightright),%edx - - movb 0x12345678(%ecx),%al -LBPatch29: - movl C(lightdelta),%ebp - - movl %eax,(%edi) - movl C(sourcetstep),%eax - - addl %eax,%esi - movl C(surfrowbytes),%eax - - addl %eax,%edi - movl C(lightrightstep),%eax - - addl %eax,%edx - movl C(lightdeltastep),%eax - - addl %eax,%ebp - movl %edx,C(lightright) - - jc Lblockloop8_mip1 - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip1 - subl C(r_stepback),%esi -LSkip_mip1: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip1 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 2 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8_mip2) -C(R_DrawSurfaceBlock8_mip2): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $2,%ecx - orl $0x30000000,%ebp - - sarl $2,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - - andl $0xFFFFF,%ebx - - orl $0xF0000000,%ebx - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - -Lblockloop8_mip2: - movl %ebp,C(lightdelta) - movb 2(%esi),%cl - - sarl $2,%ebp - movb %dh,%bh - - movb 3(%esi),%bl - addl %ebp,%edx - - movb %dh,%ch - addl %ebp,%edx - - movb 0x12345678(%ebx),%ah -LBPatch18: - movb 1(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch19: - movb (%esi),%cl - - movb %dh,%bh - addl %ebp,%edx - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch20: - movl C(lightright),%edx - - movb 0x12345678(%ecx),%al -LBPatch21: - movl C(lightdelta),%ebp - - movl %eax,(%edi) - movl C(sourcetstep),%eax - - addl %eax,%esi - movl C(surfrowbytes),%eax - - addl %eax,%edi - movl C(lightrightstep),%eax - - addl %eax,%edx - movl C(lightdeltastep),%eax - - addl %eax,%ebp - movl %edx,C(lightright) - - jc Lblockloop8_mip2 - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip2 - subl C(r_stepback),%esi -LSkip_mip2: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip2 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 3 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8_mip3) -C(R_DrawSurfaceBlock8_mip3): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $1,%ecx - - sarl $1,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - andl $0xFFFFF,%ebx - - sarl $1,%ebp - orl $0xF0000000,%ebx - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - - movb 1(%esi),%bl - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movb %dh,%bh - movb (%esi),%cl - - addl %ebp,%edx - movb %dh,%ch - - movb 0x12345678(%ebx),%al -LBPatch16: - movl C(lightright),%edx - - movb %al,1(%edi) - movb 0x12345678(%ecx),%al -LBPatch17: - - movb %al,(%edi) - movl C(sourcetstep),%eax - - addl %eax,%esi - movl C(surfrowbytes),%eax - - addl %eax,%edi - movl C(lightdeltastep),%eax - - movl C(lightdelta),%ebp - movb (%esi),%cl - - addl %eax,%ebp - movl C(lightrightstep),%eax - - sarl $1,%ebp - addl %eax,%edx - - movb %dh,%bh - movb 1(%esi),%bl - - addl %ebp,%edx - movb %dh,%ch - - movb 0x12345678(%ebx),%al -LBPatch30: - movl C(sourcetstep),%edx - - movb %al,1(%edi) - movb 0x12345678(%ecx),%al -LBPatch31: - - movb %al,(%edi) - movl C(surfrowbytes),%ebp - - addl %edx,%esi - addl %ebp,%edi - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip3 - subl C(r_stepback),%esi -LSkip_mip3: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip3 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -.globl C(R_Surf8End) -C(R_Surf8End): - -//---------------------------------------------------------------------- -// Code patching routines -//---------------------------------------------------------------------- - .data - - .align 4 -LPatchTable8: - .long LBPatch0-4 - .long LBPatch1-4 - .long LBPatch2-4 - .long LBPatch3-4 - .long LBPatch4-4 - .long LBPatch5-4 - .long LBPatch6-4 - .long LBPatch7-4 - .long LBPatch8-4 - .long LBPatch9-4 - .long LBPatch10-4 - .long LBPatch11-4 - .long LBPatch12-4 - .long LBPatch13-4 - .long LBPatch14-4 - .long LBPatch15-4 - .long LBPatch16-4 - .long LBPatch17-4 - .long LBPatch18-4 - .long LBPatch19-4 - .long LBPatch20-4 - .long LBPatch21-4 - .long LBPatch22-4 - .long LBPatch23-4 - .long LBPatch24-4 - .long LBPatch25-4 - .long LBPatch26-4 - .long LBPatch27-4 - .long LBPatch28-4 - .long LBPatch29-4 - .long LBPatch30-4 - .long LBPatch31-4 - .text - - .align 4 -.globl C(R_Surf8Patch) -C(R_Surf8Patch): - pushl %ebx - - movl C(colormap),%eax - movl $LPatchTable8,%ebx - movl $32,%ecx -LPatchLoop8: - movl (%ebx),%edx - addl $4,%ebx - movl %eax,(%edx) - decl %ecx - jnz LPatchLoop8 - - popl %ebx - - ret - -#endif // id386 -#endif diff --git a/asm/surf8fst.s b/asm/surf8fst.s deleted file mode 100644 index 50c620c..0000000 --- a/asm/surf8fst.s +++ /dev/null @@ -1,735 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// surf8.s -// x86 assembly-language 8 bpp surface block drawing code. -// - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" -#include "asm_draw.h" - -#if id386 - - .data - -sb_v: .long 0 - - .text - - .align 4 -.globl C(R_Surf8FastStart) -C(R_Surf8FastStart): - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 0 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8Fast_mip0) -C(R_DrawSurfaceBlock8Fast_mip0): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $4,%ecx - orl $0xF0000000,%ebp - - - sarl $4,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - andl $0x0,%ebx - - orl $0xF0000000,%ebx - - - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - -Lblockloop8_mip0: - movl %ebp,C(lightdelta) - movb 14(%esi),%cl - - movb %dh,%bh - - movb 15(%esi),%bl - - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch0: - movb 13(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch1: - movb 12(%esi),%cl - - movb %dh,%bh - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch2: - - movb 11(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch3: - - movb 10(%esi),%cl - movl %eax,12(%edi) - - movb 0x12345678(%ebx),%ah -LBPatch4: - movb 9(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch5: - movb 8(%esi),%cl - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch6: - - movb 7(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch7: - - movb 6(%esi),%cl - movl %eax,8(%edi) - - movb 0x12345678(%ebx),%ah -LBPatch8: - movb 5(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch9: - movb 4(%esi),%cl - - rorl $16,%eax - - movb 0x12345678(%ebx),%ah -LBPatch10: - - movb 3(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch11: - - movb 2(%esi),%cl - movl %eax,4(%edi) - - movb 0x12345678(%ebx),%ah -LBPatch12: - movb 1(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch13: - movb (%esi),%cl - - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch14: - movl C(lightright),%edx - - movb 0x12345678(%ecx),%al -LBPatch15: - movl C(lightdelta),%ebp - - movl %eax,(%edi) - - addl C(sourcetstep),%esi // Comment this out to do super low detail. - addl C(surfrowbytes),%edi - - addl C(lightdeltastep),%ebp - - movl %edx,C(lightleft) - jc Lblockloop8_mip0 - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip0 - subl C(r_stepback),%esi -LSkip_mip0: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip0 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 1 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8Fast_mip1) -C(R_DrawSurfaceBlock8Fast_mip1): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $3,%ecx - orl $0x70000000,%ebp - - - sarl $3,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - andl $0x0,%ebx - - orl $0xF0000000,%ebx - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - -Lblockloop8_mip1: - movl %ebp,C(lightdelta) - movb 6(%esi),%cl - - sarl $3,%ebp - movb %dh,%bh - - movb 7(%esi),%bl - - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch22: - movb 5(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch23: - movb 4(%esi),%cl - - movb %dh,%bh - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch24: - - movb 3(%esi),%bl - movb 0x12345678(%ecx),%al -LBPatch25: - - movb 2(%esi),%cl - movl %eax,4(%edi) - - movb 0x12345678(%ebx),%ah -LBPatch26: - movb 1(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch27: - movb (%esi),%cl - - rorl $16,%eax - - movb 0x12345678(%ebx),%ah -LBPatch28: - movl C(lightright),%edx - - movb 0x12345678(%ecx),%al -LBPatch29: - movl C(lightdelta),%ebp - - movl %eax,(%edi) - movl C(sourcetstep),%eax - - addl %eax,%esi - movl C(surfrowbytes),%eax - - addl %eax,%edi - movl C(lightrightstep),%eax - - addl %eax,%edx - movl C(lightdeltastep),%eax - - addl %eax,%ebp - movl %edx,C(lightleft) - - jc Lblockloop8_mip1 - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip1 - subl C(r_stepback),%esi -LSkip_mip1: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip1 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 2 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8Fast_mip2) -C(R_DrawSurfaceBlock8Fast_mip2): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $2,%ecx - orl $0x30000000,%ebp - - - sarl $2,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - - andl $0x0,%ebx - - orl $0xF0000000,%ebx - - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - -Lblockloop8_mip2: - movl %ebp,C(lightdelta) - movb 2(%esi),%cl - - sarl $2,%ebp - movb %dh,%bh - - movb 3(%esi),%bl - - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch18: - movb 1(%esi),%bl - - movb 0x12345678(%ecx),%al -LBPatch19: - movb (%esi),%cl - - rorl $16,%eax - movb %dh,%ch - - movb 0x12345678(%ebx),%ah -LBPatch20: - movl C(lightright),%edx - - movb 0x12345678(%ecx),%al -LBPatch21: - movl C(lightdelta),%ebp - - movl %eax,(%edi) - movl C(sourcetstep),%eax - - addl %eax,%esi - movl C(surfrowbytes),%eax - - addl %eax,%edi - movl C(lightrightstep),%eax - - addl %eax,%edx - movl C(lightdeltastep),%eax - - addl %eax,%ebp - movl %edx,C(lightleft) - - jc Lblockloop8_mip2 - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip2 - subl C(r_stepback),%esi -LSkip_mip2: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip2 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -//---------------------------------------------------------------------- -// Surface block drawer for mip level 3 -//---------------------------------------------------------------------- - - .align 4 -.globl C(R_DrawSurfaceBlock8Fast_mip3) -C(R_DrawSurfaceBlock8Fast_mip3): - pushl %ebp // preserve caller's stack frame - pushl %edi - pushl %esi // preserve register variables - pushl %ebx - -// for (v=0 ; v> blockdivshift; -// lightrightstep = (lightptr[1] - lightright) >> blockdivshift; -// lightdeltastep = ((lightleftstep - lightrightstep) & 0xFFFFF) | -// 0xF0000000; - movl 4(%ebx),%ecx // lightptr[1] - movl (%ebx),%ebx // lightptr[0] - - subl %eax,%ebx - subl %edx,%ecx - - sarl $1,%ecx - - sarl $1,%ebx - movl %ecx,C(lightrightstep) - - subl %ecx,%ebx - andl $0x0,%ebx - - sarl $1,%ebp - orl $0xF0000000,%ebx - - - - movl %ebx,C(lightdeltastep) - subl %ebx,%ebx // high word must be 0 in loop for addressing - - movb 1(%esi),%bl - subl %ecx,%ecx // high word must be 0 in loop for addressing - - movb %dh,%bh - movb (%esi),%cl - - movb %dh,%ch - - movb 0x12345678(%ebx),%al -LBPatch16: - movl C(lightright),%edx - - movb %al,1(%edi) - movb 0x12345678(%ecx),%al -LBPatch17: - - movb %al,(%edi) - movl C(sourcetstep),%eax - - addl %eax,%esi - movl C(surfrowbytes),%eax - - addl %eax,%edi - movl C(lightdeltastep),%eax - - movl C(lightdelta),%ebp - movb (%esi),%cl - - addl %eax,%ebp - movl C(lightrightstep),%eax - - sarl $1,%ebp - addl %eax,%edx - - movb %dh,%bh - movb 1(%esi),%bl - - movb 0x12345678(%ebx),%al -LBPatch30: - movl C(sourcetstep),%edx - - movb %al,1(%edi) - movb 0x12345678(%ecx),%al -LBPatch31: - - movb %al,(%edi) - movl C(surfrowbytes),%ebp - - addl %edx,%esi - addl %ebp,%edi - -// if (pbasesource >= r_sourcemax) -// pbasesource -= stepback; - - cmpl C(r_sourcemax),%esi - jb LSkip_mip3 - subl C(r_stepback),%esi -LSkip_mip3: - - movl C(r_lightptr),%ebx - decl sb_v - - jnz Lv_loop_mip3 - - popl %ebx // restore register variables - popl %esi - popl %edi - popl %ebp // restore the caller's stack frame - ret - - -.globl C(R_Surf8FastEnd) -C(R_Surf8FastEnd): - -//---------------------------------------------------------------------- -// Code patching routines -//---------------------------------------------------------------------- - .data - - .align 4 -LPatchTable8: - .long LBPatch0-4 - .long LBPatch1-4 - .long LBPatch2-4 - .long LBPatch3-4 - .long LBPatch4-4 - .long LBPatch5-4 - .long LBPatch6-4 - .long LBPatch7-4 - .long LBPatch8-4 - .long LBPatch9-4 - .long LBPatch10-4 - .long LBPatch11-4 - .long LBPatch12-4 - .long LBPatch13-4 - .long LBPatch14-4 - .long LBPatch15-4 - .long LBPatch16-4 - .long LBPatch17-4 - .long LBPatch18-4 - .long LBPatch19-4 - .long LBPatch20-4 - .long LBPatch21-4 - .long LBPatch22-4 - .long LBPatch23-4 - .long LBPatch24-4 - .long LBPatch25-4 - .long LBPatch26-4 - .long LBPatch27-4 - .long LBPatch28-4 - .long LBPatch29-4 - .long LBPatch30-4 - .long LBPatch31-4 - .text - - .align 4 -.globl C(R_Surf8FastPatch) -C(R_Surf8FastPatch): - pushl %ebx - - movl C(colormap),%eax - movl $LPatchTable8,%ebx - movl $32,%ecx -LPatchLoop8: - movl (%ebx),%edx - addl $4,%ebx - movl %eax,(%edx) - decl %ecx - jnz LPatchLoop8 - - popl %ebx - - ret - -#endif // id386 -#endif diff --git a/asm/sys.s b/asm/sys.s deleted file mode 100644 index 732af7d..0000000 --- a/asm/sys.s +++ /dev/null @@ -1,256 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// sys_dosa.s -// x86 assembly-language DOS-dependent routines. - -#ifndef NOASM - -#include "asm_i386.h" -#include "asm.h" - - - .data - - .align 4 -fpenv: - .long 0, 0, 0, 0, 0, 0, 0, 0 - - .text - -.globl C(MaskExceptions) -C(MaskExceptions): - fnstenv fpenv - orl $0x3F,fpenv - fldenv fpenv - - ret - -#if 0 -.globl C(unmaskexceptions) -C(unmaskexceptions): - fnstenv fpenv - andl $0xFFFFFFE0,fpenv - fldenv fpenv - - ret -#endif - - .data - - .align 4 -.globl ceil_cw, single_cw, full_cw, cw, pushed_cw -ceil_cw: .long 0 -single_cw: .long 0 -full_cw: .long 0 -cw: .long 0 -pushed_cw: .long 0 - - .text - -.globl C(Sys_LowFPPrecision) -C(Sys_LowFPPrecision): - fldcw single_cw - - ret - -.globl C(Sys_HighFPPrecision) -C(Sys_HighFPPrecision): - fldcw full_cw - - ret - -.globl C(Sys_PushFPCW_SetHigh) -C(Sys_PushFPCW_SetHigh): - fnstcw pushed_cw - fldcw full_cw - - ret - -.globl C(Sys_PopFPCW) -C(Sys_PopFPCW): - fldcw pushed_cw - - ret - -.globl C(Sys_SetFPCW) -C(Sys_SetFPCW): - fnstcw cw - movl cw,%eax -#if id386 - andb $0xF0,%ah - orb $0x03,%ah // round mode, 64-bit precision -#endif - movl %eax,full_cw - -#if id386 - andb $0xF0,%ah - orb $0x0C,%ah // chop mode, single precision -#endif - movl %eax,single_cw - -#if id386 - andb $0xF0,%ah - orb $0x08,%ah // ceil mode, single precision -#endif - movl %eax,ceil_cw - - ret - - -.intel_syntax noprefix - -.globl C(SetYourBlues) -C(SetYourBlues): - push ax - push dx - - mov dx, 0x3C8 - mov ax, 1 - out dx, al - inc dx - - mov ax, 1 - out dx, al - - mov ax, 5 - out dx, al - - mov ax, 16 - out dx, al - - pop dx - pop ax - ret - - -.globl C(SetYourBrowns) -C(SetYourBrowns): -// Quake startup text mode scheme -// background brown - push ax - push dx - - mov dx, 0x3C8 - mov ax, 1 - out dx, al - inc dx - - mov ax, 14 - out dx, al - - mov ax, 9 - out dx, al - - mov ax, 4 - out dx, al - - pop dx - pop ax - - -// Console-style REALLY background brown, kind of cool - push ax - push dx - - mov dx, 0x3C8 - mov ax, 0 - out dx, al - inc dx - - mov ax, 12 - out dx, al - - mov ax, 7 - out dx, al - - mov ax, 2 - out dx, al - - pop dx - pop ax - -// status grays (are now brown) -/* -push ax - push dx - - mov dx, 0x3C8 - mov ax, 7 - out dx, al - inc dx - - mov ax, 121 - out dx, al - - mov ax, 110 - out dx, al - - mov ax, 22 - out dx, al - - pop dx - pop ax -*/ - -push ax - push dx - - mov dx, 0x3C8 - mov ax, 7 - out dx, al - inc dx - - mov ax, 48 - out dx, al - - mov ax, 48 - out dx, al - - mov ax, 48 - out dx, al - - pop dx - pop ax - -// Title bar - push ax - push dx - - mov dx, 0x3C8 - mov ax, 2 - out dx, al - inc dx - - mov ax, 56 - out dx, al - - mov ax, 48 - out dx, al - - mov ax, 15 - out dx, al - - pop dx - pop ax - - - ret -#endif diff --git a/asm/worlda.s b/asm/worlda.s deleted file mode 100644 index 161d77b..0000000 --- a/asm/worlda.s +++ /dev/null @@ -1,146 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// worlda.s -// x86 assembly-language server testing stuff -// - -#ifndef NOASM - -#define GLQUAKE 1 // don't include unneeded client defs -#include "asm_i386.h" -#include "asm.h" -//#include "d_ifacea.h" //don't include unneeded defs // 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes - -#if id386 - - .data - -Ltemp: .long 0 - - .text - -//---------------------------------------------------------------------- -// hull-point test -//---------------------------------------------------------------------- - -#define hull 4+8 // because only partially pushed -#define num 8+4 // because only partially pushed -#define p 12+12 // because only partially pushed - - .align 4 -.globl C(SV_HullPointContents) -C(SV_HullPointContents): - pushl %edi // preserve register variables - movl num(%esp),%eax - testl %eax,%eax - js Lhquickout - -// float d; -// dclipnode_t *node; -// mplane_t *plane; - - pushl %ebx - movl hull(%esp),%ebx - - pushl %ebp - movl p(%esp),%edx - - movl hu_clipnodes(%ebx),%edi - movl hu_planes(%ebx),%ebp - - subl %ebx,%ebx - pushl %esi - -// %ebx: 0 -// %eax: num -// %edx: p -// %edi: hull->clipnodes -// %ebp: hull->planes - -// while (num >= 0) -// { - -Lhloop: - -// node = hull->clipnodes + num; -// plane = hull->planes + node->planenum; -// !!! if the size of dclipnode_t changes, the scaling of %eax needs to be -// changed !!! - movl nd_planenum(%edi,%eax,8),%ecx - movl nd_children(%edi,%eax,8),%eax - movl %eax,%esi - rorl $16,%eax - leal (%ecx,%ecx,4),%ecx - -// if (plane->type < 3) -// d = p[plane->type] - plane->dist; - movb pl_type(%ebp,%ecx,4),%bl // QW SV was: movl pl_type(%ebp,%ecx,4),%bl // 2001-12-28 Merged assembler files of Quake and QuakeWorld by Maddes - cmpb $3,%bl - jb Lnodot - -// else -// d = DotProduct (plane->normal, p) - plane->dist; - flds pl_normal(%ebp,%ecx,4) - fmuls 0(%edx) - flds pl_normal+4(%ebp,%ecx,4) - fmuls 4(%edx) - flds pl_normal+8(%ebp,%ecx,4) - fmuls 8(%edx) - fxch %st(1) - faddp %st(0),%st(2) - faddp %st(0),%st(1) - fsubs pl_dist(%ebp,%ecx,4) - jmp Lsub - -Lnodot: - flds pl_dist(%ebp,%ecx,4) - fsubrs (%edx,%ebx,4) - -Lsub: - sarl $16,%eax - sarl $16,%esi - -// if (d < 0) -// num = node->children[1]; -// else -// num = node->children[0]; - fstps Ltemp - movl Ltemp,%ecx - sarl $31,%ecx - andl %ecx,%esi - xorl $0xFFFFFFFF,%ecx - andl %ecx,%eax - orl %esi,%eax - jns Lhloop - -// return num; -Lhdone: - popl %esi - popl %ebp - popl %ebx // restore register variables - -Lhquickout: - popl %edi - - ret - -#endif // id386 -#endif diff --git a/engine/cl_bot.c b/engine/cl_bot.c index e51bb22..69a7170 100644 --- a/engine/cl_bot.c +++ b/engine/cl_bot.c @@ -193,12 +193,12 @@ char *PickBotName (int r) else if (r == 4) return "Travis"; else if (r == 5) return "Shawn"; else if (r == 6) return "Steve"; - else if (r == 7) return "Dave"; + else if (r == 7) return "Eukos"; else if (r == 8) return "Croft"; else if (r == 9) return "James"; else if (r == 10) return "Scott"; else if (r == 11) return "Ridley"; - else if (r == 12) return "Mister"; + else if (r == 12) return "Joebama"; else if (r == 13) return "Cobocho"; else if (r == 14) return "Radon"; else if (r == 15) return "Maxwell"; diff --git a/engine/cl_chase.c b/engine/cl_chase.c index 700fb5e..c8ce177 100644 --- a/engine/cl_chase.c +++ b/engine/cl_chase.c @@ -49,7 +49,7 @@ float deathcam_whenidied; // sets to time if died, used for timing deathcam eff float deathcam_whenidiedafter; // used to time the sinks into the floor or the rankings appearing..... vec3_t deathcam_angles; // this'll update chase angles when we're dead so we don't move the // player - so we can rotate the death cam in cl_diecam 3. -int deathcam_yesiamdead; // pretty stupid indicator of dead. +int deathcam_active; // pretty stupid indicator of dead. void Chase_Init_Cvars (void) { @@ -90,7 +90,7 @@ void Chase_Update (void) deest = sv.time - deathcam_whenidied; - if(deathcam_yesiamdead == 4) + if(deathcam_active == 4) { if (deest < 1) { @@ -106,13 +106,13 @@ void Chase_Update (void) } // if can't see player, reset - if(deathcam_yesiamdead) + if(deathcam_active) AngleVectors (deathcam_angles, forward, right, up); else AngleVectors (cl.viewangles, forward, right, up); // calc exact destination - if (deathcam_yesiamdead == 2) // close, nonspinnable + if (deathcam_active == 2) // close, nonspinnable { AngleVectors (cl.viewangles, forward, right, up); for (i=0 ; i<3 ; i++) @@ -120,13 +120,13 @@ void Chase_Update (void) chase_dest[2] = r_refdef.vieworg[2]; dontspinme = 1; } - else if (deathcam_yesiamdead == 3) // spinabble... + else if (deathcam_active == 3) // spinabble... { for (i=0 ; i<3 ; i++) chase_dest[i] = r_refdef.vieworg[i] - forward[i]*150 - right[i]*0; dontspinme = 0; } - else if (deathcam_yesiamdead == 4) // non spinabble... and after a duration it kinda increases.... + else if (deathcam_active == 4) // non spinabble... and after a duration it kinda increases.... { if (deest < 1) deest = 0; @@ -160,28 +160,28 @@ void Chase_Update (void) // The..... style? - if (deathcam_yesiamdead == 1) + if (deathcam_active == 1) { r_refdef.viewangles[YAW] = deathcam_angles[YAW]; r_refdef.viewangles[PITCH] = deathcam_angles[PITCH]; r_refdef.viewangles[ROLL] = deathcam_angles[ROLL]; } // The Q3 style - fixed pitch and yaw - else if (deathcam_yesiamdead == 2) + else if (deathcam_active == 2) { r_refdef.viewangles[YAW] = cl.viewangles[YAW]; r_refdef.viewangles[PITCH] = 0; r_refdef.viewangles[ROLL] = 0; } // The U style - else if (deathcam_yesiamdead == 3) + else if (deathcam_active == 3) { r_refdef.viewangles[YAW] = deathcam_angles[YAW]; r_refdef.viewangles[PITCH] = deathcam_angles[PITCH]; r_refdef.viewangles[ROLL] = deathcam_angles[ROLL]; } // The DX style - else if (deathcam_yesiamdead == 4) + else if (deathcam_active == 4) { if (deest < 1) { diff --git a/engine/cl_input.c b/engine/cl_input.c index a198784..ce9dd4f 100644 --- a/engine/cl_input.c +++ b/engine/cl_input.c @@ -287,7 +287,7 @@ void CL_AdjustAngles (void) } -extern int deathcam_yesiamdead; +extern int deathcam_active; extern vec3_t deathcam_angles; // leilei - deathcam hacks suck! void CL_AdjustAnglesWhenYoureDead (void) @@ -343,8 +343,8 @@ void CL_BaseMove (usercmd_t *cmd) return; - if (deathcam_yesiamdead) - CL_AdjustAnglesWhenYoureDead (); + if (deathcam_active) + CL_AdjustAnglesWhenYoureDead (); else CL_AdjustAngles (); @@ -368,9 +368,7 @@ void CL_BaseMove (usercmd_t *cmd) cmd->forwardmove -= cl_backspeed->value * CL_KeyState (&in_back); } -// -// adjust for speed key -// + // adjust for speed key if (in_speed.state & 1) { cmd->forwardmove *= cl_movespeedkey->value; @@ -408,14 +406,10 @@ void CL_SendMove (usercmd_t *cmd) cl.cmd = *cmd; -// -// send the movement message -// + // send the movement message MSG_WriteByte (&buf, clc_move); - MSG_WriteFloat (&buf, cl.mtime[0]); // so server can get ping times -// 2000-05-01 NVS CLC_move precise aiming by Maddes start if (nvs_current_cclc->value >= 0.50) { for (i=0 ; i<3 ; i++) @@ -425,18 +419,14 @@ void CL_SendMove (usercmd_t *cmd) } else { -// 2000-05-01 NVS CLC_move precise aiming by Maddes end for (i=0 ; i<3 ; i++) MSG_WriteAngle (&buf, cl.viewangles[i]); - } // 2000-05-01 NVS CLC_move precise aiming by Maddes - + } MSG_WriteShort (&buf, cmd->forwardmove); MSG_WriteShort (&buf, cmd->sidemove); MSG_WriteShort (&buf, cmd->upmove); -// -// send button bits -// + // send button bits bits = 0; if ( in_attack.state & 3 ) @@ -447,27 +437,18 @@ void CL_SendMove (usercmd_t *cmd) bits |= 2; in_jump.state &= ~2; -// 1999-10-29 +USE fix by Maddes start if (in_use.state & 3) bits |= 4; in_use.state &= ~2; -// 1999-10-29 +USE fix by Maddes end MSG_WriteByte (&buf, bits); - MSG_WriteByte (&buf, in_impulse); in_impulse = 0; -// -// deliver the message -// if (cls.demoplayback) return; -// -// always dump the first two message, because it may contain leftover inputs -// from the last level -// + // always dump the first two messages, because it may contain leftover inputs from the last level if (++cl.movemessages <= 2) return; diff --git a/engine/cl_main.c b/engine/cl_main.c index 7fb1d4b..dac57c0 100644 --- a/engine/cl_main.c +++ b/engine/cl_main.c @@ -22,10 +22,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "globaldef.h" -// we need to declare some mouse variables here, because the menu system -// references them even when on a unix system. - -// these two are not intended to be set directly cvar_t *cl_name; cvar_t *cl_color; @@ -49,39 +45,26 @@ cvar_t *m_lockup; cvar_t *m_lockdown; cvar_t *cl_showfps; // 2001-11-31 FPS display by QuakeForge/Muff - cvar_t *cl_compatibility; // 2001-12-24 Keeping full backwards compatibility by Maddes -// 2001-09-20 Configurable entity limits by Maddes start cvar_t *cl_entities_min; cvar_t *cl_entities_min_static; cvar_t *cl_entities_min_temp; -// 2001-09-20 Configurable entity limits by Maddes end client_static_t cls; client_state_t cl; -// split.... -client_static_t clssplit; -client_state_t clsplit; -// FIXME: put these on hunk? -efrag_t cl_efrags[MAX_EFRAGS]; -// 2001-09-20 Configurable entity limits by Maddes start -/* -entity_t cl_entities[MAX_EDICTS]; -entity_t cl_static_entities[MAX_STATIC_ENTITIES]; -*/ -entity_t *cl_entities; -entity_t *cl_static_entities; -// 2001-09-20 Configurable entity limits by Maddes end +efrag_t cl_efrags[MAX_EFRAGS]; +entity_t *cl_entities; +entity_t *cl_static_entities; lightstyle_t cl_lightstyle[MAX_LIGHTSTYLES]; -dlight_t cl_dlights[MAX_DLIGHTS]; -shadow_t cl_shadows[MAX_SHADOWS]; -wlight_t cl_wlights[MAX_WLIGHTS]; -flare_t cl_flares[MAX_FLARES]; -int cl_numvisedicts; -entity_t *cl_visedicts[MAX_VISEDICTS]; +dlight_t cl_dlights[MAX_DLIGHTS]; +shadow_t cl_shadows[MAX_SHADOWS]; +wlight_t cl_wlights[MAX_WLIGHTS]; +flare_t cl_flares[MAX_FLARES]; +int cl_numvisedicts; +entity_t *cl_visedicts[MAX_VISEDICTS]; /* ===================== @@ -96,27 +79,24 @@ void CL_ClearState (void) if (!sv.active) Host_ClearMemory (); -// wipe the entire cl structure + // wipe the entire cl structure memset (&cl, 0, sizeof(cl)); - SZ_Clear (&cls.message); -// clear other arrays + // clear other arrays memset (cl_efrags, 0, sizeof(cl_efrags)); -// memset (cl_entities, 0, sizeof(cl_entities)); // 2001-09-20 Configurable entity limits by Maddes memset (cl_dlights, 0, sizeof(cl_dlights)); memset (cl_shadows, 0, sizeof(cl_shadows)); memset (cl_wlights, 0, sizeof(cl_wlights)); memset (cl_lightstyle, 0, sizeof(cl_lightstyle)); -// memset (cl_temp_entities, 0, sizeof(cl_temp_entities)); // 2001-09-20 Configurable entity limits by Maddes memset (cl_beams, 0, sizeof(cl_beams)); -// -// allocate the efrags and chain together into a free list -// + // allocate the efrags and chain together into a free list cl.free_efrags = cl_efrags; + for (i=0 ; iCL by Maddes start if (!sv.active) { Cvar_Set(nvs_current_ssvc, "0"); } Cvar_Set(nvs_current_csvc, "0"); Cvar_Set(nvs_current_cclc, "0"); -// 2001-12-24 Keeping full backwards compatibility by Maddes start + if (!(cl_compatibility->value)) // request, unlike the original Quake executable { -// 2001-12-24 Keeping full backwards compatibility by Maddes end MSG_WriteByte (&cls.message, clc_stringcmd); MSG_WriteString (&cls.message, va("nvs_request %1.2f\n", nvs_current_cclc->maxvalue)); - } // 2001-12-24 Keeping full backwards compatibility by Maddes -// 2000-04-30 NVS HANDSHAKE SRV<->CL by Maddes end + } -// 2001-09-20 Configurable limits by Maddes start -// 2001-09-20 Configurable entity limits by Maddes start cl.max_edicts = 0; cl.max_static_edicts = 0; cl.max_temp_edicts = 0; cl_entities = NULL; cl_static_entities = NULL; cl_temp_entities = NULL; -// 2001-09-20 Configurable entity limits by Maddes end -// 2001-12-24 Keeping full backwards compatibility by Maddes start + if (!(cl_compatibility->value)) // request, unlike the original Quake executable { -// 2001-12-24 Keeping full backwards compatibility by Maddes end MSG_WriteByte (&cls.message, clc_stringcmd); MSG_WriteString (&cls.message, "limit_request\n"); - } // 2001-12-24 Keeping full backwards compatibility by Maddes -// 2001-09-20 Configurable limits by Maddes end + } MSG_WriteByte (&cls.message, clc_stringcmd); MSG_WriteString (&cls.message, "prespawn\n"); @@ -332,50 +298,6 @@ void CL_PrintEntities_f (void) } } - -/* -=============== -SetPal - -Debugging tool, just flashes the screen -=============== -*/ -void SetPal (int i) -{ -#if 0 - static int old; - byte pal[768]; - int c; - - if (i == old) - return; - old = i; - - if (i==0) - VID_SetPalette (host_basepal); - else if (i==1) - { - for (c=0 ; c<768 ; c+=3) - { - pal[c] = 0; - pal[c+1] = 255; - pal[c+2] = 0; - } - VID_SetPalette (pal); - } - else - { - for (c=0 ; c<768 ; c+=3) - { - pal[c] = 0; - pal[c+1] = 0; - pal[c+2] = 255; - } - VID_SetPalette (pal); - } -#endif -} - /* =============== CL_AllocDlight @@ -387,7 +309,6 @@ dlight_t *CL_AllocDlight (int key) int i; dlight_t *dl; -// first look for an exact key match if (key) { dl = cl_dlights; @@ -397,20 +318,17 @@ dlight_t *CL_AllocDlight (int key) { memset (dl, 0, sizeof(*dl)); dl->key = key; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start - // dl->color[0] = dl->color[1] = dl->color[2] = 1.0f; dl->color[0] = dl->color[1] = dl->color[2] = 1; // LordHavoc: .lit support dl->flashcolor[0] = 1.0f; dl->flashcolor[1] = 0.5f; dl->flashcolor[2] = 0.0f; dl->flashcolor[3] = 0.2f; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end return dl; } } } -// then look for anything else + // then look for anything else dl = cl_dlights; for (i=0 ; ikey = key; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start dl->color[0] = dl->color[1] = dl->color[2] = 1; // LordHavoc: .lit support dl->flashcolor[0] = 1.0f; dl->flashcolor[1] = 0.5f; dl->flashcolor[2] = 0.0f; dl->flashcolor[3] = 0.2f; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end return dl; } } @@ -432,22 +348,14 @@ dlight_t *CL_AllocDlight (int key) dl = &cl_dlights[0]; memset (dl, 0, sizeof(*dl)); dl->key = key; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start dl->color[0] = dl->color[1] = dl->color[2] = 1; // LordHavoc: .lit support dl->flashcolor[0] = 1.0f; dl->flashcolor[1] = 0.5f; dl->flashcolor[2] = 0.0f; dl->flashcolor[3] = 0.2f; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end return dl; } - - - - - - /* =============== CL_AllocShadow @@ -459,7 +367,7 @@ CL_AllocShadow shadow_t *CL_AllocShadow (int key) { int i; - shadow_t *dl; //haha still called 'dl' + shadow_t *dl; // first look for an exact key match if (key) @@ -511,7 +419,7 @@ wlight_t *CL_AllocWlight (int key) int i; wlight_t *dl; -// first look for an exact key match + // first look for an exact key match if (key) { dl = cl_wlights; @@ -521,18 +429,13 @@ wlight_t *CL_AllocWlight (int key) { memset (dl, 0, sizeof(*dl)); dl->key = key; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start - // dl->color[0] = dl->color[1] = dl->color[2] = 1.0f; dl->color[0] = dl->color[1] = dl->color[2] = 1; // LordHavoc: .lit support - -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end - Con_Printf("got one\n"); return dl; } } } -// then look for anything else + // then look for anything else dl = cl_wlights; for (i=0 ; ikey = key; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start dl->color[0] = dl->color[1] = dl->color[2] = 1; // LordHavoc: .lit support - -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end - Con_Printf("got two\n"); return dl; } } @@ -552,10 +451,8 @@ wlight_t *CL_AllocWlight (int key) dl = &cl_wlights[0]; memset (dl, 0, sizeof(*dl)); dl->key = key; -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes start dl->color[0] = dl->color[1] = dl->color[2] = 1; // LordHavoc: .lit support -Con_Printf("got three\n"); -// 2001-09-11 Colored lightning by LordHavoc/Sarcazm/Maddes end + return dl; } @@ -597,12 +494,8 @@ void CL_DecayLights (void) if (shd->radius < 0) shd->radius = 0; } - - - } - /* =============== CL_LerpPoint @@ -613,7 +506,7 @@ should be put at. */ float CL_LerpPoint (void) { - float f, frac; + float f, frac; f = cl.mtime[0] - cl.mtime[1]; @@ -624,41 +517,34 @@ float CL_LerpPoint (void) } if (f > 0.1) - { // dropped packet, or start of demo + { cl.mtime[1] = cl.mtime[0] - 0.1; f = 0.1; } frac = (cl.time - cl.mtime[1]) / f; -//Con_Printf ("frac: %f\n",frac); + if (frac < 0) { if (frac < -0.01) - { -SetPal(1); cl.time = cl.mtime[1]; -// Con_Printf ("low frac\n"); - } + frac = 0; } else if (frac > 1) { if (frac > 1.01) - { -SetPal(2); cl.time = cl.mtime[0]; -// Con_Printf ("high frac\n"); - } + frac = 1; } - else - SetPal(0); + return frac; } extern int shadowhack; extern int dyncolor; extern int particleset; -extern int deathcam_yesiamdead; // leilei - deathcam +extern int deathcam_active; // leilei - deathcam extern cvar_t *r_coloredlights; extern cvar_t *r_coloreddyns; /* @@ -666,11 +552,12 @@ extern cvar_t *r_coloreddyns; CL_RelinkEntities =============== */ -extern int particleblood; -extern cvar_t *r_flares; -extern cvar_t *r_flamehack; +extern int particleblood; +extern cvar_t *r_flares; +extern cvar_t *r_flamehack; extern cvar_t *temp1; extern cvar_t *temp2; + void CL_RelinkEntities (void) { entity_t *ent; @@ -686,53 +573,49 @@ void CL_RelinkEntities (void) dlight_t *dl; shadow_t *shd; // leilei - shadows - unsigned int shadpacity; - float shadorigin; + unsigned int shadpacity; + float shadorigin; - float blend; - vec3_t dee; - int iee; + float blend; + vec3_t dee; + int iee; // determine partial update time frac = CL_LerpPoint (); - cl_numvisedicts = 0; - - -// -// interpolate player info -// + // interpolate player info + // for (i=0 ; i<3 ; i++) cl.velocity[i] = cl.mvelocity[1][i] + frac * (cl.mvelocity[0][i] - cl.mvelocity[1][i]); if (cls.demoplayback) { - // interpolate the angles + // interpolate the angles // leilei - unrolled these - { - d = cl.mviewangles[0][0] - cl.mviewangles[1][0]; - if (d > 180) - d -= 360; - else if (d < -180) - d += 360; - cl.viewangles[0] = cl.mviewangles[1][0] + frac*d; + + d = cl.mviewangles[0][0] - cl.mviewangles[1][0]; + if (d > 180) + d -= 360; + else if (d < -180) + d += 360; + cl.viewangles[0] = cl.mviewangles[1][0] + frac*d; - d = cl.mviewangles[0][1] - cl.mviewangles[1][1]; - if (d > 180) - d -= 360; - else if (d < -180) - d += 360; - cl.viewangles[1] = cl.mviewangles[1][1] + frac*d; + d = cl.mviewangles[0][1] - cl.mviewangles[1][1]; + if (d > 180) + d -= 360; + else if (d < -180) + d += 360; + cl.viewangles[1] = cl.mviewangles[1][1] + frac*d; - d = cl.mviewangles[0][2] - cl.mviewangles[1][2]; - if (d > 180) - d -= 360; - else if (d < -180) - d += 360; - cl.viewangles[2] = cl.mviewangles[1][2] + frac*d; - } + d = cl.mviewangles[0][2] - cl.mviewangles[1][2]; + if (d > 180) + d -= 360; + else if (d < -180) + d += 360; + cl.viewangles[2] = cl.mviewangles[1][2] + frac*d; + } bobjrotate = anglemod(100*cl.time); @@ -768,43 +651,41 @@ void CL_RelinkEntities (void) else { // if the delta is large, assume a teleport and don't lerp f = frac; - for (j=0 ; j<3 ; j++) - { + for (j=0 ; j<3 ; j++) + { delta[j] = ent->msg_origins[0][j] - ent->msg_origins[1][j]; + if (delta[j] > 100 || delta[j] < -100) - f = 1; // assume a teleportation, not a motion - } + f = 1; // assume a teleportation, not a motion + } + ent->origin[0] = ent->msg_origins[1][0] + f*delta[0]; + d = ent->msg_angles[0][0] - ent->msg_angles[1][0]; + if (d > 180) + d -= 360; + else if (d < -180) + d += 360; - ent->origin[0] = ent->msg_origins[1][0] + f*delta[0]; + ent->angles[0] = ent->msg_angles[1][0] + f*d; + ent->origin[1] = ent->msg_origins[1][1] + f*delta[1]; - d = ent->msg_angles[0][0] - ent->msg_angles[1][0]; - if (d > 180) - d -= 360; - else if (d < -180) - d += 360; - ent->angles[0] = ent->msg_angles[1][0] + f*d; + d = ent->msg_angles[0][1] - ent->msg_angles[1][1]; + if (d > 180) + d -= 360; + else if (d < -180) + d += 360; - ent->origin[1] = ent->msg_origins[1][1] + f*delta[1]; - - d = ent->msg_angles[0][1] - ent->msg_angles[1][1]; - if (d > 180) - d -= 360; - else if (d < -180) - d += 360; - ent->angles[1] = ent->msg_angles[1][1] + f*d; - - ent->origin[2] = ent->msg_origins[1][2] + f*delta[2]; - - d = ent->msg_angles[0][2] - ent->msg_angles[1][2]; - if (d > 180) - d -= 360; - else if (d < -180) - d += 360; - ent->angles[2] = ent->msg_angles[1][2] + f*d; + ent->angles[1] = ent->msg_angles[1][1] + f*d; + ent->origin[2] = ent->msg_origins[1][2] + f*delta[2]; + d = ent->msg_angles[0][2] - ent->msg_angles[1][2]; + if (d > 180) + d -= 360; + else if (d < -180) + d += 360; + ent->angles[2] = ent->msg_angles[1][2] + f*d; } @@ -981,99 +862,78 @@ void CL_RelinkEntities (void) } -// QC Glows! - if (ent->glowsize) { dl = CL_AllocDlight (i); VectorCopy (ent->origin, dl->origin); - if (dyncolor){ + + if (dyncolor) + { byte *tempcolor; - tempcolor = (byte *)&d_8to24table[ent->glowcolor]; - dl->color[0] = (float)tempcolor[0] * (1.0f / 299.0f); - dl->color[1] = (float)tempcolor[1] * (1.0f / 299.0f); - dl->color[2] = (float)tempcolor[2] * (1.0f / 299.0f); - // if (r_flares->value > 1) - // R_FlareTest(ent->origin, 4, (int)tempcolor[0], (int)tempcolor[1], (int)tempcolor[2], 0, ent); // we moved it to dynamic lights now - } + tempcolor = (byte *)&d_8to24table[ent->glowcolor]; + dl->color[0] = (float)tempcolor[0] * (1.0f / 299.0f); + dl->color[1] = (float)tempcolor[1] * (1.0f / 299.0f); + dl->color[2] = (float)tempcolor[2] * (1.0f / 299.0f); + } dl->radius = ent->glowsize; dl->die = cl.time + 0.01; - } if (ent->model->flags & EF_GIB) - if (particleblood > 2){ + if (particleblood > 2) R_GusherizeCurlyBloodTrail (oldorg, ent->origin, 5); -// if (!ent->gushed){ -// vec3_t eheheh; - - // eheheh[0] = rand() * 1000 - 500; eheheh[1] = rand() * 1000 - 500; eheheh[2] = rand() * 1000 - 500; -// ent->gushed = 1; - - // R_RunParticleEffect(ent->origin, eheheh, 79, 60); - - // R_RunParticleEffect(oldorg, eheheh, 79, 60); -// - // Con_Printf("GUSH!!!!!!!! %s\n", sfx->name); - // } - - } else if (particleblood < 0) ent->effects |= EF_NODRAW; // hide gibs on blood removal mode else - R_RocketTrail (oldorg, ent->origin, 2); + R_RocketTrail (oldorg, ent->origin, 2); else if (ent->model->flags & EF_ZOMGIB) if (particleblood > 2) - R_SpiralBloodTrail (oldorg, ent->origin); // by the way - blood removal code - else // should NEVER REMOVE EF_ZOMGIB ENTITIES - R_RocketTrail (oldorg, ent->origin, 4); // because it is a gameplay element (zombie gib throws) - // instead we can make it appear less graphic by blue gelmap + R_SpiralBloodTrail (oldorg, ent->origin); // by the way - blood removal code + else // should NEVER REMOVE EF_ZOMGIB ENTITIES + R_RocketTrail (oldorg, ent->origin, 4); // because it is a gameplay element (zombie gib throws) + // instead we can make it appear less graphic by blue gelmap else if (ent->model->flags & EF_TRACER) R_RocketTrail (oldorg, ent->origin, 3); else if (ent->model->flags & EF_TRACER2) R_RocketTrail (oldorg, ent->origin, 5); else if (ent->model->flags & EF_ROCKET) { - if (particleset == 2){ - R_RocketTrailSprites (oldorg, ent->origin, 0); - - } + if (particleset == 2) + R_RocketTrailSprites (oldorg, ent->origin, 0); else - { - R_RocketTrail (oldorg, ent->origin, 0); - } + R_RocketTrail (oldorg, ent->origin, 0); + dl = CL_AllocDlight (i); VectorCopy (ent->origin, dl->origin); - if (dyncolor){ + + if (dyncolor) + { dl->color[0] = 1.5f; dl->color[1] = 0.75f; dl->color[2] = 0.25f; // darkplaces values /3 - - } + } dl->radius = 200; - dl->die = cl.time + 0.01; - // if (r_flares->value > 1) - // R_FlareTest(ent->origin, 4, 95, 65, 22, 0, ent); // we moved it to dynamic lights now - + dl->die = cl.time + 0.01; } - else if (ent->model->flags & EF_GRENADE){ + else if (ent->model->flags & EF_GRENADE) + { if (particleset == 2) - R_RocketTrailSprites (oldorg, ent->origin, 1); + R_RocketTrailSprites (oldorg, ent->origin, 1); else - R_RocketTrail (oldorg, ent->origin, 1); + R_RocketTrail (oldorg, ent->origin, 1); } else if (ent->model->flags & EF_TRACER3) - if (particleset == 2) - R_RocketTrailSprites (oldorg, ent->origin, 6); - else - R_RocketTrail (oldorg, ent->origin, 6); + if (particleset == 2) + R_RocketTrailSprites (oldorg, ent->origin, 6); + else + R_RocketTrail (oldorg, ent->origin, 6); ent->forcelink = false; - if (i == cl.viewentity && !chase_active->value && !deathcam_yesiamdead) + if (i == cl.viewentity && !chase_active->value && !deathcam_active) continue; if ( ent->effects & EF_NODRAW ) @@ -1130,9 +990,6 @@ int CL_ReadFromServer (void) CL_RelinkEntities (); CL_UpdateTEnts (); -// -// bring the links up to date -// return 0; } @@ -1150,15 +1007,14 @@ void CL_SendCmd (void) if (cls.signon == SIGNONS) { - // get basic movement from keyboard + // get basic movement from keyboard CL_BaseMove (&cmd); - // allow mice or other external controllers to add to the move + // allow mice or other external controllers to add to the move IN_Move (&cmd); - // send the unreliable message + // send the unreliable message CL_SendMove (&cmd); - } if (cls.demoplayback) @@ -1167,9 +1023,8 @@ void CL_SendCmd (void) return; } -// send the reliable message if (!cls.message.cursize) - return; // no message at all + return; if (!NET_CanSendMessage (cls.netcon)) { @@ -1183,15 +1038,12 @@ void CL_SendCmd (void) SZ_Clear (&cls.message); } -// 2001-12-16 M_LOOK cvar by Heffo/Maddes start void Callback_M_Look (cvar_t *var) { if ( !((in_mlook.state & 1) ^ ((int)m_look->value & 1)) && lookspring->value) V_StartPitchDrift(); } -// 2001-12-16 M_LOOK cvar by Heffo/Maddes end -// 2001-09-18 New cvar system by Maddes (Init) start /* ================= CL_Init_Cvars @@ -1211,10 +1063,8 @@ void CL_Init_Cvars (void) cl_pitchspeed = Cvar_Get ("cl_pitchspeed", "150", CVAR_ORIGINAL); cl_anglespeedkey = Cvar_Get ("cl_anglespeedkey", "1.5", CVAR_ORIGINAL); cl_shownet = Cvar_Get ("cl_shownet", "0", CVAR_ORIGINAL); -// 2001-09-18 New cvar system by Maddes start Cvar_SetRangecheck (cl_shownet, Cvar_RangecheckInt, 0, 2); - Cvar_Set(cl_shownet, cl_shownet->string); // do rangecheck -// 2001-09-18 New cvar system by Maddes end + Cvar_Set(cl_shownet, cl_shownet->string); cl_nolerp = Cvar_Get ("cl_nolerp", "0", CVAR_ORIGINAL); lookspring = Cvar_Get ("lookspring", "0", CVAR_ARCHIVE|CVAR_ORIGINAL); lookstrafe = Cvar_Get ("lookstrafe", "0", CVAR_ARCHIVE|CVAR_ORIGINAL); @@ -1224,7 +1074,6 @@ void CL_Init_Cvars (void) m_yaw = Cvar_Get ("m_yaw", "0.022", CVAR_ARCHIVE|CVAR_ORIGINAL); m_forward = Cvar_Get ("m_forward", "1", CVAR_ARCHIVE|CVAR_ORIGINAL); m_side = Cvar_Get ("m_side", "0.8", CVAR_ARCHIVE|CVAR_ORIGINAL); -// 2001-12-16 M_LOOK cvar by Heffo/Maddes start m_look = Cvar_Get ("m_look", "1", CVAR_ARCHIVE); m_lockup = Cvar_Get ("m_lockup", "-90", CVAR_ARCHIVE); @@ -1232,39 +1081,30 @@ void CL_Init_Cvars (void) Cvar_SetRangecheck (m_look, Cvar_RangecheckBool, 0, 1); Cvar_SetCallback (m_look, Callback_M_Look); - Cvar_Set(m_look, m_look->string); // do rangecheck -// 2001-12-16 M_LOOK cvar by Heffo/Maddes end + Cvar_Set(m_look, m_look->string); -// 2001-11-31 FPS display by QuakeForge/Muff start cl_showfps = Cvar_Get ("cl_showfps", "0", CVAR_NONE); Cvar_SetRangecheck (cl_showfps, Cvar_RangecheckBool, 0, 1); - Cvar_Set(cl_showfps, cl_showfps->string); // do rangecheck -// 2001-11-31 FPS display by QuakeForge/Muff end - -// 2001-12-24 Keeping full backwards compatibility by Maddes start + Cvar_Set(cl_showfps, cl_showfps->string); cl_compatibility = Cvar_Get ("cl_compatibility", "0", CVAR_ARCHIVE); Cvar_SetRangecheck (cl_compatibility, Cvar_RangecheckBool, 0, 1); Cvar_SetDescription (cl_compatibility, "When set to 1, this client will not request enhanced information from the server (server's entity limit, NVS handshake, etc.) and disables enhanced client messages (precise client aiming, etc.). This is necessary for recording demos that shall run on all Quake executables. Also see SV_COMPATIBILITY."); - Cvar_Set(cl_compatibility, cl_compatibility->string); // do rangecheck -// 2001-12-24 Keeping full backwards compatibility by Maddes end - -// 2001-09-20 Configurable entity limits by Maddes start + Cvar_Set(cl_compatibility, cl_compatibility->string); cl_entities_min = Cvar_Get ("cl_entities_min", "0", CVAR_NONE); Cvar_SetRangecheck (cl_entities_min, Cvar_RangecheckInt, MIN_EDICTS, MAX_EDICTS); - Cvar_Set(cl_entities_min, cl_entities_min->string); // do rangecheck + Cvar_Set(cl_entities_min, cl_entities_min->string); cl_entities_min_static = Cvar_Get ("cl_entities_min_static", "0", CVAR_NONE); Cvar_SetRangecheck (cl_entities_min_static, Cvar_RangecheckInt, MIN_STATIC_ENTITIES, MAX_EDICTS); - Cvar_Set(cl_entities_min_static, cl_entities_min_static->string); // do rangecheck + Cvar_Set(cl_entities_min_static, cl_entities_min_static->string); cl_entities_min_temp = Cvar_Get ("cl_entities_min_temp", "0", CVAR_NONE); Cvar_SetRangecheck (cl_entities_min_temp, Cvar_RangecheckInt, MIN_TEMP_ENTITIES, MAX_EDICTS); - Cvar_Set(cl_entities_min_temp, cl_entities_min_temp->string); // do rangecheck -// 2001-09-20 Configurable entity limits by Maddes end + Cvar_Set(cl_entities_min_temp, cl_entities_min_temp->string); cl_sbar = Cvar_Get ("cl_sbar", "1", CVAR_ARCHIVE | CVAR_ORIGINAL); } -// 2001-09-18 New cvar system by Maddes (Init) end + void TheForceLoadLighting (void) { LoadPointLighting(sv.worldmodel->entities); @@ -1282,9 +1122,6 @@ void CL_Init (void) CL_InitInput (); CL_InitTEnts (); -// -// register our commands -// Cmd_AddCommand ("entities", CL_PrintEntities_f); Cmd_AddCommand ("disconnect", CL_Disconnect_f); Cmd_AddCommand ("demo_record", CL_Record_f); diff --git a/engine/console.c b/engine/console.c index 6eaaf8c..5ce80e2 100644 --- a/engine/console.c +++ b/engine/console.c @@ -554,52 +554,33 @@ void Con_DrawInput (void) if (key_dest != key_console && !con_forcedup) return; // don't draw anything -// 2000-01-05 Console typing enhancement by Radix start -/* - text = key_lines[edit_line]; - -// add the cursor frame - text[key_linepos] = 10+((int)(realtime*con_cursorspeed)&1); - -// fill out remainder with spaces - for (i=key_linepos+1 ; i< con_linewidth ; i++) - text[i] = ' '; -*/ text = strcpy(editlinecopy, key_lines[edit_line]); -// fill out remainder with spaces + // fill out remainder with spaces y = strlen(text); for (i = y; i < 256; i++) { text[i] = ' '; } -// add the cursor frame + // add the cursor frame if ((int)(realtime * con_cursorspeed) & 1) // cursor is visible { - text[key_linepos] = 11 + 130 * key_insert; // either solid block or triagle facing right + text[key_linepos] = 11 + 130 * key_insert; } -// 2000-01-05 Console typing enhancement by Radix end -// prestep if horizontally scrolling if (key_linepos >= con_linewidth) text += 1 + key_linepos - con_linewidth; -// draw it y = con_vislines-16; for (i=0 ; i>3; // rows of text to draw y = lines - 16 - (rows<<3); // may start slightly negative -// 2000-01-05 Console scrolling fix by Maddes start if (con_backscroll >= con_current) con_backscroll = con_current - 1; if (con_backscroll >= con_totallines) con_backscroll = con_totallines - 1; if (con_backscroll < 0) con_backscroll = 0; -// 2000-01-05 Console scrolling fix by Maddes end -// 2001-12-15 Avoid automatic console scrolling by Fett start if (con_backscroll) - { sb=1; // reserve line for scrollback indicator - } else - { sb=0; - } -// 2001-12-15 Avoid automatic console scrolling by Fett end -// 2000-01-05 Console scrolling fix by Maddes start -// for (i= con_current - rows + 1 ; i<=con_current ; i++, y+=8 ) -// 2001-12-15 Avoid automatic console scrolling by Fett start -// for (i= con_current - rows; icache); dat = (qpic_t *)pic->cache.data; if (!dat) { - Con_DPrintf ("Draw_CachePic: failed to load %s\n", path); + Con_DPrintf ("[DRAW] Failed to load %s\n", path); return NULL; } @@ -359,12 +338,6 @@ void MakeMy15to8(unsigned char *palette) FILE *f; char s[255]; -// HWND hDlg, hProgress; -// float gamma; -// pal = host_basepal *3; -// -// 8 8 8 encoding -// pal = palette; table = d_8to24table; for (i=0 ; i<256 ; i++) @@ -373,9 +346,6 @@ void MakeMy15to8(unsigned char *palette) g = pal[1]; b = pal[2]; pal += 3; - -// v = (255<<24) + (r<<16) + (g<<8) + (b<<0); -// v = (255<<0) + (r<<8) + (g<<16) + (b<<24); v = (255<<24) + (r<<0) + (g<<8) + (b<<16); *table++ = v; } @@ -393,17 +363,11 @@ void MakeMy15to8(unsigned char *palette) v = (255<<24) + (r<<0) + (g<<8) + (b<<16); *table++ = v; } -// d_8to24table[255] &= 0xffffff; // 255 is transparent // JACK: 3D distance calcs - k is last closest, l is the distance. // FIXME: Precalculate this and cache to disk. - for (i=0; i < (1<<15); i++) { - /* Maps - 000000000000000 - 000000000011111 = Red = 0x1F - 000001111100000 = Blue = 0x03E0 - 111110000000000 = Grn = 0x7C00 - */ + for (i=0; i < (1<<15); i++) + { r = ((i & 0x1F) << 3)+4; g = ((i & 0x03E0) >> 2)+4; b = ((i & 0x7C00) >> 7)+4; @@ -422,11 +386,8 @@ void MakeMy15to8(unsigned char *palette) } } - - -byte *lmmap; +byte *lmmap; // are we done with lookup tables yet? I DONT THINK SO! - // despite the name these are actually gray void IdnitColorColormaps (void) { int levels, brights; @@ -438,14 +399,14 @@ void IdnitColorColormaps (void) { char savename[1024]; char dest[1024]; - range = 2; + range = 2; levels = 16; - brights = 1; // ignore 255 (transparent) + brights = 1; // ignore 255 (transparent) cropped = malloc((levels+256)*256); lump_p = cropped; -// shaded levels + // shaded levels for (l=0;l 1) frac = 1;} // leilei - clamp it out for glsuck - for (c=0 ; c<256-PALBRIGHTS ; c++) + // shaded levels + for (l=0; l 1) + frac = 1; + } + for (c=0 ; c<256-PALBRIGHTS ; c++) { - red = (int)((float)host_basepal[c*3]*frac); - green = (int)((float)host_basepal[c*3+1]*frac); - blue = (int)((float)host_basepal[c*3+2]*frac); + red = (int)((float)host_basepal[c*3]*frac); + green = (int)((float)host_basepal[c*3+1]*frac); + blue = (int)((float)host_basepal[c*3+2]*frac); -// -// note: 254 instead of 255 because 255 is the transparent color, and we -// don't want anything remapping to that -// - *colmap++ = BestColor(red,green,blue, 0, 254); + // note: 254 instead of 255 because 255 is the transparent color, and we + // don't want anything remapping to that + *colmap++ = BestColor(red,green,blue, 0, 254); } + for ( ; c<256 ; c++) { - red = (int)host_basepal[c*3]; - green = (int)host_basepal[c*3+1]; - blue = (int)host_basepal[c*3+2]; + red = (int)host_basepal[c*3]; + green = (int)host_basepal[c*3+1]; + blue = (int)host_basepal[c*3+2]; - *colmap++ = BestColor(red,green,blue, 0, 254); + *colmap++ = BestColor(red,green,blue, 0, 254); } } } @@ -897,11 +859,6 @@ byte menumap[256][16]; // Used for menu backgrounds and simple colormod byte gelmap[256]; // Unused id effect TO be used somehow. made redundant by menumap byte remapmap[256]; // For translating an old palette to new on load -int translate_bsp; -int translate_mdl; -int translate_gfx; -int translate_spr; - float fademap[256]; // Used in generation of certain alpha tables byte coltranslate[256]; // TranslateToCustomPal - used for taking one palette to another without going through a whole 8to24to15to8 thing pixel_t addTable[256][256]; // Additive blending effect @@ -1469,83 +1426,58 @@ void WaterTableGet (void) ooh = (int)r_tranquality->value; - // Use these for now - ae = 0.66; - ay = 0.33; - - // or not. - - ay = r_wateralpha->value; // water surface ae = 1 - ay; // base pixels - { - - - - for (l=0;l<255;l++) + for (l=0;l<255;l++) { for (c=0 ; c<255 ; c++) { - if (oldwaterblend == 1){ // additive - red = host_basepal[c*3] + (host_basepal[l*3] *ay); - green = host_basepal[c*3+1] + (host_basepal[l*3+1] *ay); - blue = host_basepal[c*3+2] + (host_basepal[l*3+2] *ay); + if (oldwaterblend == 1) + { // additive + red = host_basepal[c*3] + (host_basepal[l*3] *ay); + green = host_basepal[c*3+1] + (host_basepal[l*3+1] *ay); + blue = host_basepal[c*3+2] + (host_basepal[l*3+2] *ay); } - else if (oldwaterblend == 2){ // multiplicative - red = host_basepal[c*3] *ae + ((host_basepal[c*3] * (host_basepal[l*3] * 0.05)) * ay); - green = host_basepal[c*3+1] *ae + ((host_basepal[c*3+1]* (host_basepal[l*3+1] * 0.05)) * ay); - blue = host_basepal[c*3+2] *ae + ((host_basepal[c*3+2] * (host_basepal[l*3+2] * 0.05)) * ay); + else if (oldwaterblend == 2) + { // multiplicative + red = host_basepal[c*3] *ae + ((host_basepal[c*3] * (host_basepal[l*3] * 0.05)) * ay); + green = host_basepal[c*3+1] *ae + ((host_basepal[c*3+1]* (host_basepal[l*3+1] * 0.05)) * ay); + blue = host_basepal[c*3+2] *ae + ((host_basepal[c*3+2] * (host_basepal[l*3+2] * 0.05)) * ay); } - else if (oldwaterblend == 4){ // multiplicative - - red = host_basepal[c*3] *ae + ((host_basepal[l*3] * 0.1 * (host_basepal[c*3] * 0.5)) * ay); - green = host_basepal[c*3+1] *ae + ((host_basepal[l*3+1] * 0.1 * (host_basepal[c*3+1] * 0.5)) * ay); - blue = host_basepal[c*3+2] *ae + ((host_basepal[l*3+2] * 0.1 * (host_basepal[c*3+2] * 0.5)) * ay); + else if (oldwaterblend == 4) + { // multiplicative + red = host_basepal[c*3] *ae + ((host_basepal[l*3] * 0.1 * (host_basepal[c*3] * 0.5)) * ay); + green = host_basepal[c*3+1] *ae + ((host_basepal[l*3+1] * 0.1 * (host_basepal[c*3+1] * 0.5)) * ay); + blue = host_basepal[c*3+2] *ae + ((host_basepal[l*3+2] * 0.1 * (host_basepal[c*3+2] * 0.5)) * ay); } - else if (oldwaterblend == 5){ // weird alpha thing - // how it works - goes through each color row from transparent(0) to opaque (16) - // this would also be used for the future (can you say decals?) - red = host_basepal[c*3] *(fademap[l] * ae) + (host_basepal[l*3] * (fademap[l]+0.3 * ay)); - green = host_basepal[c*3+1] *(fademap[l] * ae) + (host_basepal[l*3+1] * (fademap[l]+0.3 * ay)); - blue = host_basepal[c*3+2] * (fademap[l] * ae) + (host_basepal[l*3+2] * (fademap[l]+0.3 * ay)); + else if (oldwaterblend == 5) + { // weird alpha thing + red = host_basepal[c*3] *(fademap[l] * ae) + (host_basepal[l*3] * (fademap[l]+0.3 * ay)); + green = host_basepal[c*3+1] *(fademap[l] * ae) + (host_basepal[l*3+1] * (fademap[l]+0.3 * ay)); + blue = host_basepal[c*3+2] * (fademap[l] * ae) + (host_basepal[l*3+2] * (fademap[l]+0.3 * ay)); } - /* - else if (oldwaterblend == 6){ // like above sort of - red = host_basepal[c*3] *host_basepal[l*3] + (host_basepal[l*3] * host_basepal[c*3]) / 768; - green = host_basepal[c*3+1] *host_basepal[l*3+1] + (host_basepal[l*3+1] * host_basepal[c*3+1]) / 768; - blue = host_basepal[c*3+2] *host_basepal[l*3+2]+ (host_basepal[l*3+2] * host_basepal[c*3+2]) / 768; - } - else if (oldwaterblend == 13){ // weird ass blend, black is black, but is a mix of alpha!? - - - red = host_basepal[c*3] *host_basepal[l*3] + (host_basepal[l*3] * host_basepal[c*3]) / 768; - green = host_basepal[c*3+1] *host_basepal[l*3+1] + (host_basepal[l*3+1] * host_basepal[c*3+1]) / 768; - blue = host_basepal[c*3+2] *host_basepal[l*3+2]+ (host_basepal[l*3+2] * host_basepal[c*3+2]) / 768; - - } - */ else { - red = host_basepal[c*3] *ae + (host_basepal[l*3] * ay); - green = host_basepal[c*3+1] *ae + (host_basepal[l*3+1] * ay); - blue = host_basepal[c*3+2] *ae + (host_basepal[l*3+2] * ay); + red = host_basepal[c*3] *ae + (host_basepal[l*3] * ay); + green = host_basepal[c*3+1] *ae + (host_basepal[l*3+1] * ay); + blue = host_basepal[c*3+2] *ae + (host_basepal[l*3+2] * ay); } + if (red > 255) red = 255; if (green > 255) green = 255; if (blue > 255) blue = 255; if (red < 0) red = 0; if (green < 0) green = 0; if (blue < 0) blue = 0; - if (ooh) waterTable[l][c] = BestColor(red,green,blue, 0, 255); // High quality color tables get best color - - else if (palmap2) waterTable[l][c] = FindColor18(red,green,blue); - else waterTable[l][c] = FindColor(red,green,blue); // Since we do this live we must do this - // fast! or i'll cry. - } - - } + if (ooh) + waterTable[l][c] = BestColor(red,green,blue, 0, 255); // High quality color tables get best color + else if (palmap2) + waterTable[l][c] = FindColor18(red,green,blue); + else + waterTable[l][c] = FindColor(red,green,blue); // Since we do this live we must do this + } } } @@ -1586,29 +1518,20 @@ void Draw_Init (void) for (j=14; j>7; j--) menumap[i][j] = (j * 16) + 15 - r; menumap[i][14] = 14*16 + r; // forward hack for the muzzleflash fire colors - - // and yes, color ramp #15 is left all black. any further is possibly reserved for slow - // hexen 2 style menus which use a translucency table } - - // and no you can't skip it. i'll use it for colored text and other coolities } void RemapMenuMap (void) { - int i, j, l, c, r; -// really for the 16 color mode + int i, j; for (i=0 ; i<256 ; i++) { for (j=0; j<15; j++) - menumap[i][j] = coltranslate[menumap[i][j]]; - + menumap[i][j] = coltranslate[menumap[i][j]]; } - - -}; +} int lilchar = 1; @@ -1736,7 +1659,7 @@ void Draw_Character_Scaled (int x, int y, unsigned int num) col = num&15; source = draw_chars + (row<<10) + (col<<3); - if (y < 0) + if (y < 0) { // clipped drawline = 8 + y; source -= 128*y; @@ -1745,43 +1668,26 @@ void Draw_Character_Scaled (int x, int y, unsigned int num) else drawline = 8; -// if (y < 0) -// { // clipped -// drawline = 8 + y; -// source -= 256*y; -// y = 0; -// } -// else -// drawline = 8; - height = drawline; width = 8; vmax = height * vid.height / (float)vid.vconheight; umax = width * vid.width / (float)vid.vconwidth; - - + byte *dest = vid.conbuffer + (y * vid.height / vid.vconheight) * vid.conrowbytes + (x * vid.width / vid.vconwidth); + + for (v = 0; v < vmax; v++) { - byte *dest = vid.conbuffer + (y * vid.height / vid.vconheight) * vid.conrowbytes - + (x * vid.width / vid.vconwidth); - - for (v = 0; v < vmax; v++) + for (u = 0; u < umax; u++) { - for (u = 0; u < umax; u++) - { - s = u * vid.vconwidth / vid.width - + (v * vid.vconheight / vid.height) * 128; - - if (source[s]) - dest[u] = source[s]; + s = u * vid.vconwidth / vid.width + (v * vid.vconheight / vid.height) * 128; + if (source[s]) + dest[u] = source[s]; - } - - dest += vid.conrowbytes; } - } + dest += vid.conrowbytes; + } } @@ -1866,13 +1772,6 @@ void Draw_Pic (int x, int y, qpic_t *pic) unsigned short *pusdest; int v, u; -/* if (x < 0 || (unsigned)(x + pic->width) > vid.width || y < 0 || - (unsigned)(y + pic->height) > vid.height) - { - Con_Printf("WARNING: Wrong coordinates for pic at %ix%i!\n", x, y); - return; - } -*/ if(x < 0) x = 0; if(y < 0) y = 0; if((x + pic->width) > vid.vconwidth) x = vid.vconwidth - pic->width; @@ -2031,8 +1930,8 @@ void Draw_Pic_Scaled_Two (int x, int y, qpic_t *pic, float scel) void Draw_PicCropped (int x, int y, qpic_t *pic) { - byte *source, tbyte; - int v, u, height; + byte *source, tbyte; + int v, u, height; if ((x < 0) || (x+pic->width > vid.width)) { @@ -2791,7 +2690,6 @@ Call before beginning any disc IO. */ void Draw_BeginDisc (void) { - D_BeginDirectRect (vid.width - 24, 0, draw_disc->data, 24, 24); } @@ -2806,6 +2704,5 @@ Call after completing any disc IO */ void Draw_EndDisc (void) { - D_EndDirectRect (vid.width - 24, 0, 24, 24); } diff --git a/engine/host.c b/engine/host.c index 3c6cc23..13aadc7 100644 --- a/engine/host.c +++ b/engine/host.c @@ -1167,10 +1167,6 @@ void Colormap_Generate(const unsigned char palette[768], unsigned char out_color } } -int translate_bsp; -int translate_mdl; -int translate_gfx; -int translate_spr; byte colorthis; extern byte gfx_fallback_palette[]; @@ -1264,8 +1260,6 @@ void Palette_Init (void) } if (host_basepal != host_otherpal){ - // Make a translation table for converting stuff that uses otherpal to our new pal - translate_bsp = 1; #ifdef EGAHACK InitRemap(host_origpal); //GrabColorMapEGA(); diff --git a/engine/sbar.c b/engine/sbar.c index 909054f..9b50ce7 100644 --- a/engine/sbar.c +++ b/engine/sbar.c @@ -484,16 +484,16 @@ Sbar_DrawScoreboard =============== */ -extern int deathcam_yesiamdead; +extern int deathcam_active; extern float deathcam_whenidied; void Sbar_DrawScoreboard (void) { Sbar_SoloScoreboard (); if (cl.gametype == GAME_DEATHMATCH){ - if (deathcam_yesiamdead && ((sv.time - deathcam_whenidied) > 2)) + if (deathcam_active && ((sv.time - deathcam_whenidied) > 2)) Sbar_DeathmatchOverlay (); - else if (!deathcam_yesiamdead) + else if (!deathcam_active) Sbar_DeathmatchOverlay (); } diff --git a/engine/sv_move.c b/engine/sv_move.c index a9a3847..3779aac 100644 --- a/engine/sv_move.c +++ b/engine/sv_move.c @@ -170,22 +170,22 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) { neworg[2] -= STEPSIZE; trace = SV_Move (neworg, ent->v.mins, ent->v.maxs, end, false, ent); + if (trace.allsolid || trace.startsolid) return false; } if (trace.fraction == 1) { - // if monster had the ground pulled out, go ahead and fall + // if monster had the ground pulled out, go ahead and fall if ( (int)ent->v.flags & FL_PARTIALGROUND ) { VectorAdd (ent->v.origin, move, ent->v.origin); if (relink) SV_LinkEdict (ent, true); + ent->v.flags = (int)ent->v.flags & ~FL_ONGROUND; -// Con_Printf ("fall down\n"); return true; } - return false; // walked off an edge } @@ -206,15 +206,14 @@ qboolean SV_movestep (edict_t *ent, vec3_t move, qboolean relink) } if ( (int)ent->v.flags & FL_PARTIALGROUND ) - { -// Con_Printf ("back on ground\n"); ent->v.flags = (int)ent->v.flags & ~FL_PARTIALGROUND; - } + ent->v.groundentity = EDICT_TO_PROG(trace.ent); -// the move is ok + // the move is ok if (relink) SV_LinkEdict (ent, true); + return true; } @@ -268,8 +267,6 @@ SV_FixCheckBottom */ void SV_FixCheckBottom (edict_t *ent) { -// Con_Printf ("SV_FixCheckBottom\n"); - ent->v.flags = (int)ent->v.flags | FL_PARTIALGROUND; } @@ -284,15 +281,16 @@ SV_NewChaseDir #define DI_NODIR -1 void SV_NewChaseDir (edict_t *actor, edict_t *enemy, float dist) { - float deltax,deltay; - float d[3]; - float tdir, olddir, turnaround; + float deltax,deltay; + float d[3]; + float tdir, olddir, turnaround; olddir = anglemod( (int)(actor->v.ideal_yaw/45)*45 ); turnaround = anglemod(olddir - 180); deltax = enemy->v.origin[0] - actor->v.origin[0]; deltay = enemy->v.origin[1] - actor->v.origin[1]; + if (deltax>10) d[1]= 0; else if (deltax<-10) @@ -326,12 +324,10 @@ void SV_NewChaseDir (edict_t *actor, edict_t *enemy, float dist) d[2]=tdir; } - if (d[1]!=DI_NODIR && d[1]!=turnaround - && SV_StepDirection(actor, d[1], dist)) + if (d[1]!=DI_NODIR && d[1]!=turnaround && SV_StepDirection(actor, d[1], dist)) return; - if (d[2]!=DI_NODIR && d[2]!=turnaround - && SV_StepDirection(actor, d[2], dist)) + if (d[2]!=DI_NODIR && d[2]!=turnaround && SV_StepDirection(actor, d[2], dist)) return; /* there is no direct path to the player, so pick another direction */ @@ -395,9 +391,6 @@ void SV_MoveToGoal (void) { edict_t *ent, *goal; float dist; -#ifdef QUAKE2 - edict_t *enemy; -#endif ent = PROG_TO_EDICT(pr_global_struct->self); goal = PROG_TO_EDICT(ent->v.goalentity); @@ -409,20 +402,12 @@ void SV_MoveToGoal (void) return; } -// if the next step hits the enemy, return immediately -#ifdef QUAKE2 - enemy = PROG_TO_EDICT(ent->v.enemy); - if (enemy != sv.edicts && SV_CloseEnough (ent, enemy, dist) ) -#else + // if the next step hits the enemy, return immediately if ( PROG_TO_EDICT(ent->v.enemy) != sv.edicts && SV_CloseEnough (ent, goal, dist) ) -#endif return; -// bump around... - if ( (rand()&3)==1 || - !SV_StepDirection (ent, ent->v.ideal_yaw, dist)) - { + // bump around... + if ( (rand()&3)==1 || !SV_StepDirection (ent, ent->v.ideal_yaw, dist)) SV_NewChaseDir (ent, goal, dist); - } } diff --git a/engine/sv_user.c b/engine/sv_user.c index 4802e2c..6d9166e 100644 --- a/engine/sv_user.c +++ b/engine/sv_user.c @@ -169,27 +169,7 @@ SV_Accelerate */ cvar_t *sv_maxspeed; cvar_t *sv_accelerate; -#if 0 -void SV_Accelerate (vec3_t wishvel) -{ - int i; - float addspeed, accelspeed; - vec3_t pushvec; - if (wishspeed == 0) - return; - - VectorSubtract (wishvel, velocity, pushvec); - addspeed = VectorNormalize (pushvec); - - accelspeed = sv_accelerate->value*host_frametime*addspeed; - if (accelspeed > addspeed) - accelspeed = addspeed; - - for (i=0 ; i<3 ; i++) - velocity[i] += accelspeed*pushvec[i]; -} -#endif void SV_Accelerate (void) { int i; @@ -394,6 +374,7 @@ void SV_NoclipMove (void) wishvel[2] *= -2; VectorCopy (wishvel, velocity); } + /* =================== SV_ClientThink @@ -402,46 +383,40 @@ the move fields specify an intended velocity in pix/sec the angle fields specify an exact angular motion in degrees =================== */ + extern int aimlock; -extern float aimlockangle = 15; // maximum extremities of aiming in the aimlock -extern float aimlockangled; -extern vec3_t lockedangle; -extern vec3_t deathcam_angles; +extern float aimlockangle = 15; // maximum extremities of aiming in the aimlock +extern float aimlockangled; +extern vec3_t lockedangle; +extern vec3_t deathcam_angles; extern cvar_t *cl_diecam; -vec3_t dangles; -extern int deathcam_yesiamdead; -extern float deathcam_whenidied; -extern float thestandstill; +vec3_t dangles; +extern int deathcam_active; +extern float deathcam_whenidied; +extern float thestandstill; void SV_ClientThink (void) { vec3_t v_angle; - int yeahdead; if (sv_player->v.movetype == MOVETYPE_NONE) return; - if (cl.stats[STAT_HEALTH] <= 0) { - - yeahdead = 1; - - if (!deathcam_yesiamdead){ - + if (cl.stats[STAT_HEALTH] <= 0) + { + if (!deathcam_active) + { deathcam_angles[PITCH] = 50; - // deathcam_angles[YAW] = 20; deathcam_angles[ROLL] = 0; deathcam_whenidied = sv.time; - //Con_Printf("I died at %f. sob.\n", deathcam_whenidied); } if (cl_diecam->value) - deathcam_yesiamdead = cl_diecam->value; + deathcam_active = cl_diecam->value; } else - { - yeahdead = 0; - deathcam_yesiamdead = 0; - } + deathcam_active = 0; + onground = (int)sv_player->v.flags & FL_ONGROUND; @@ -496,28 +471,32 @@ void SV_ClientThink (void) angles = sv_player->v.angles; // leilei - aim lock if (aimlock){ - if ((lockedangle[YAW] + aimlockangle) > 360){ -// Con_Printf("goddamnit.\n"); - if (cl.viewangles[YAW] > (lockedangle[YAW] + aimlockangle > 360)) sv_player->v.angles[YAW] -= 360; - if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; + if ((lockedangle[YAW] + aimlockangle) > 360) + { + if (cl.viewangles[YAW] > (lockedangle[YAW] + aimlockangle > 360)) + sv_player->v.angles[YAW] -= 360; + if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) + cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; } else - if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; - if ((lockedangle[YAW] - aimlockangle) < 0){ - if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle + 360; - if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; - // Con_Printf("mother\n"); + { + if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) + cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; + if ((lockedangle[YAW] - aimlockangle) < 0) + { + if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) + cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle + 360; + if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) + cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; } else - if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; - - // TODO: wrap angle, wrapangle - if (cl.viewangles[PITCH] < lockedangle[PITCH] - aimlockangle) cl.viewangles[PITCH] = lockedangle[PITCH] - aimlockangle; - if (cl.viewangles[PITCH] > lockedangle[PITCH] + aimlockangle) cl.viewangles[PITCH] = lockedangle[PITCH] + aimlockangle; -// if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; -// if (cl.viewangles[YAW] > lockedangle[YAW] + aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] + aimlockangle; - + if (cl.viewangles[YAW] < lockedangle[YAW] - aimlockangle) cl.viewangles[YAW] = lockedangle[YAW] - aimlockangle; + } + if (cl.viewangles[PITCH] < lockedangle[PITCH] - aimlockangle) + cl.viewangles[PITCH] = lockedangle[PITCH] - aimlockangle; + if (cl.viewangles[PITCH] > lockedangle[PITCH] + aimlockangle) + cl.viewangles[PITCH] = lockedangle[PITCH] + aimlockangle; } @@ -529,7 +508,6 @@ void SV_ClientThink (void) { angles[PITCH] = -v_angle[PITCH]/3; angles[YAW] = v_angle[YAW]; - } if ( (int)sv_player->v.flags & FL_WATERJUMP ) @@ -537,9 +515,6 @@ void SV_ClientThink (void) SV_WaterJump (); return; } -// -// walk -// if (sv_player->v.movetype == MOVETYPE_NOCLIP) SV_NoclipMove (); @@ -561,13 +536,11 @@ void SV_ReadClientMove (usercmd_t *move) vec3_t angle; int bits; -// read ping time + // read ping time host_client->ping_times[host_client->num_pings%NUM_PING_TIMES] = sv.time - MSG_ReadFloat (); host_client->num_pings++; -// read current angles -// 2000-05-01 NVS CLC_move precise aiming by Maddes start if (host_client->nvs_cclc >= 0.50) { for (i=0 ; i<3 ; i++) @@ -577,37 +550,28 @@ void SV_ReadClientMove (usercmd_t *move) } else { -// 2000-05-01 NVS CLC_move precise aiming by Maddes end for (i=0 ; i<3 ; i++) angle[i] = MSG_ReadAngle (); - } // 2000-05-01 NVS CLC precise_move aiming by Maddes - + } VectorCopy (angle, host_client->edict->v.v_angle); -// read movement + // read movement move->forwardmove = MSG_ReadShort (); move->sidemove = MSG_ReadShort (); move->upmove = MSG_ReadShort (); -// read buttons + // read buttons bits = MSG_ReadByte (); host_client->edict->v.button0 = bits & 1; -// 1999-10-29 +USE fix by Maddes start + if (!nouse) - { host_client->edict->v.button1 = (bits & 4)>>2; - } -// 1999-10-29 +USE fix by Maddes end + host_client->edict->v.button2 = (bits & 2)>>1; i = MSG_ReadByte (); if (i) host_client->edict->v.impulse = i; - -#ifdef QUAKE2 -// read light level - host_client->edict->v.light_level = MSG_ReadByte (); -#endif } /* @@ -654,21 +618,17 @@ nextmsg: { case -1: goto nextmsg; // end of message - default: Sys_Printf ("SV_ReadClientMessage: unknown command char\n"); return false; - - case clc_nop: -// Sys_Printf ("clc_nop\n"); - break; - case clc_stringcmd: s = MSG_ReadString (); + if (host_client->privileged) ret = 2; else ret = 0; + if (Q_strncasecmp(s, "status", 6) == 0) ret = 1; else if (Q_strncasecmp(s, "god", 3) == 0) @@ -707,22 +667,15 @@ nextmsg: ret = 1; else if (Q_strncasecmp(s, "ban", 3) == 0) ret = 1; -// 2000-01-09 QCExec by FrikaC/Maddes start else if (Q_strncasecmp(s, "qcexec", 6) == 0) ret = 1; -// 2000-01-09 QCExec by FrikaC/Maddes end -// 2000-01-20 Enhanced version command by Maddes start else if (Q_strncasecmp(s, "version", 7) == 0) ret = 1; -// 2000-01-20 Enhanced version command by Maddes end -// 2000-04-30 NVS HANDSHAKE SRV<->CL by Maddes else if (Q_strncasecmp(s, "nvs_request", 11) == 0) ret = 1; -// 2000-04-30 NVS HANDSHAKE SRV<->CL by Maddes -// 2001-09-20 Configurable limits by Maddes start else if (Q_strncasecmp(s, "limit_request", 11) == 0) ret = 1; -// 2001-09-20 Configurable limits by Maddes end + if (ret == 2) Cbuf_InsertText (s); else if (ret == 1) @@ -732,7 +685,6 @@ nextmsg: break; case clc_disconnect: -// Sys_Printf ("SV_ReadClientMessage: client disconnected\n"); return false; case clc_move: diff --git a/engine/view.c b/engine/view.c index 9193e3b..9b2b573 100644 --- a/engine/view.c +++ b/engine/view.c @@ -135,7 +135,7 @@ vec3_t lockedangle; extern cvar_t *cl_diecam; extern float deathcamtime; extern vec3_t deathcam_angles; -extern int deathcam_yesiamdead; +extern int deathcam_active; /* =============== @@ -182,24 +182,15 @@ float V_CalcBob (void) { float bob; float cycle; - int caycle; -// float xyspeed; -// float bspeed; cycle = cl.time - (int)(cl.time/cl_bobcycle->value)*cl_bobcycle->value; cycle /= cl_bobcycle->value; if (cycle < cl_bobup->value) cycle = M_PI * cycle / cl_bobup->value; else cycle = M_PI + M_PI*(cycle-cl_bobup->value)/(1.0 - cl_bobup->value); - caycle =1; -// bob is proportional to velocity in the xy plane -// (don't count Z, or jumping messes it up) bob = sqrt(cl.velocity[0]*cl.velocity[0] + cl.velocity[1]*cl.velocity[1]) * cl_bob->value; - //bob = sqrt(cl.velocity[0]*cl.velocity[0] + cl.velocity[1]*cl.velocity[1]); - - if (!cl_bobmodel->value){ @@ -752,12 +743,10 @@ void V_UpdatePalette (void) byte *basepal, *newpal; byte pal[768]; int r,g,b,s; - float sat, cont, gamma; + float sat, cont; qboolean force, forcetwo, forcethree; - - gamma = v_gamma->value; sat = v_saturation->value; cont = v_contrast->value; foralphashift = r_alphashift->value; @@ -903,10 +892,7 @@ void V_UpdatePalette (void) } shiftalpha = ((int)cl.cshifts[j].percent); -// if (!foralphashift) VID_SetPalette (pal); -// else -// V_CalcAlphaShift(); } @@ -985,11 +971,6 @@ void CalcGunAngle (void) cl.viewent.angles[ROLL] -= v_idlescale->value * sin(cl.time*v_iroll_cycle->value) * v_iroll_level->value; cl.viewent.angles[PITCH] -= v_idlescale->value * sin(cl.time*v_ipitch_cycle->value) * v_ipitch_level->value; cl.viewent.angles[YAW] -= v_idlescale->value * sin(cl.time*v_iyaw_cycle->value) * v_iyaw_level->value; - -// cl.viewent.angles[PITCH] -= bob * sin(cl.time*v_ipitch_cycle->value) * v_ipitch_level->value; -// cl.viewent.angles[YAW] -= bob * sin(cl.time*v_iyaw_cycle->value) * v_iyaw_level->value; - - } /* @@ -1275,7 +1256,7 @@ static void V_CalcRefdef(void) else oldz = ent->origin[2]; - if (chase_active->value || deathcam_yesiamdead) + if (chase_active->value || deathcam_active) Chase_Update (); @@ -1302,9 +1283,7 @@ void V_CalcRefdef (void) { entity_t *ent, *view; int i; - vec3_t desiredaim; - float s; -// struct model_s oldmodel; // Was to be used for cl_gundraw 4 (show old model holstering first) + float s; float t; vec3_t forward, right, up; vec3_t angles; @@ -1334,7 +1313,7 @@ void V_CalcRefdef (void) ent->angles[PITCH] = -cl.viewangles[PITCH]; bob = V_CalcBob (); - if (chase_active->value || deathcam_yesiamdead) + if (chase_active->value || deathcam_active) skipbob = 1; // don't bob in the chase cam... // refresh position @@ -1850,10 +1829,11 @@ if (cl.stats[STAT_HEALTH] >= 1){ V_AddIdle (); // leilei - moved it way down here. - if (chase_active->value || deathcam_yesiamdead) + if (chase_active->value || deathcam_active) Chase_Update (); + if (skipbob) - skipbob = 0; + skipbob = 0; } @@ -1876,29 +1856,26 @@ void V_CalcRefdefOld (void) V_DriftPitch (); -// ent is the player model (visible when out of body) + // ent is the player model (visible when out of body) ent = &cl_entities[cl.viewentity]; -// view is the weapon model (only visible from inside body) + // view is the weapon model (only visible from inside body) view = &cl.viewent; -// transform the view offset by the model's matrix to get the offset from -// model origin for the view - ent->angles[YAW] = cl.viewangles[YAW]; // the model should face - // the view dir - ent->angles[PITCH] = -cl.viewangles[PITCH]; // the model should face - // the view dir - + // transform the view offset by the model's matrix to get the offset from + // model origin for the view + ent->angles[YAW] = cl.viewangles[YAW]; + ent->angles[PITCH] = -cl.viewangles[PITCH]; bob = V_CalcBob (); -// refresh position + // refresh position VectorCopy (ent->origin, r_refdef.vieworg); r_refdef.vieworg[2] += cl.viewheight + bob; -// never let it sit exactly on a node line, because a water plane can -// dissapear when viewed with the eye exactly on it. -// the server protocol only specifies to 1/16 pixel, so add 1/32 in each axis + // never let it sit exactly on a node line, because a water plane can + // dissapear when viewed with the eye exactly on it. + // the server protocol only specifies to 1/16 pixel, so add 1/32 in each axis r_refdef.vieworg[0] += 1.0/32; r_refdef.vieworg[1] += 1.0/32; r_refdef.vieworg[2] += 1.0/32; @@ -1907,9 +1884,9 @@ void V_CalcRefdefOld (void) V_CalcViewRoll (); V_AddIdle (); -// offsets + // offsets angles[PITCH] = -ent->angles[PITCH]; // because entity pitches are - // actually backward + // actually backward angles[YAW] = ent->angles[YAW]; angles[ROLL] = ent->angles[ROLL]; @@ -1920,53 +1897,49 @@ void V_CalcRefdefOld (void) + scr_ofsy->value*right[i] + scr_ofsz->value*up[i]; - V_BoundOffsets (); -// set up gun position + // set up gun position VectorCopy (cl.viewangles, view->angles); - CalcGunAngle (); VectorCopy (ent->origin, view->origin); view->origin[2] += cl.viewheight; for (i=0 ; i<3 ; i++) - { view->origin[i] += forward[i]*bob*0.4; -// view->origin[i] += right[i]*bob*0.4; -// view->origin[i] += up[i]*bob*0.8; - } + view->origin[2] += bob + 1; view->model = cl.model_precache[cl.stats[STAT_WEAPON]]; view->frame = cl.stats[STAT_WEAPONFRAME]; view->colormap = vid.colormap; -// set up the refresh position + // set up the refresh position VectorAdd (r_refdef.viewangles, cl.punchangle, r_refdef.viewangles); -// smooth out stair step ups -if (cl.onground && ent->origin[2] - oldz > 0) -{ - float steptime; + // smooth out stair step ups + if (cl.onground && ent->origin[2] - oldz > 0) + { + float steptime; - steptime = cl.time - cl.oldtime; - if (steptime < 0) -//FIXME I_Error ("steptime < 0"); - steptime = 0; + steptime = cl.time - cl.oldtime; + if (steptime < 0) + steptime = 0; - oldz += steptime * 80; - if (oldz > ent->origin[2]) - oldz = ent->origin[2]; - if (ent->origin[2] - oldz > 12) - oldz = ent->origin[2] - 12; - r_refdef.vieworg[2] += oldz - ent->origin[2]; - view->origin[2] += oldz - ent->origin[2]; -} + oldz += steptime * 80; + + if (oldz > ent->origin[2]) + oldz = ent->origin[2]; + if (ent->origin[2] - oldz > 12) + oldz = ent->origin[2] - 12; + + r_refdef.vieworg[2] += oldz - ent->origin[2]; + view->origin[2] += oldz - ent->origin[2]; + } else oldz = ent->origin[2]; - if (chase_active->value || deathcam_yesiamdead) + if (chase_active->value || deathcam_active) Chase_Update (); @@ -1994,7 +1967,7 @@ void V_RenderView (void) if (con_forcedup) return; -// don't allow cheats in multiplayer + // don't allow cheats in multiplayer if (cl.maxclients > 1) { Cvar_Set (scr_ofsx, "0"); @@ -2003,75 +1976,58 @@ void V_RenderView (void) } #ifdef VMTOC - V_CalcRefdef (); + V_CalcRefdef (); #else - // wat... - - // leilei - some crosshair. - - if (aimlock){ - AngleVectors (cl.viewangles, forward, right, up); - forward[0] *= 566; - forward[1] *= 566; - forward[2] *= 566; - // D_DrawSparkTrans(r_refdef.vieworg,r_refdef.vieworg,15, 0); - } - + if (aimlock) + { + AngleVectors (cl.viewangles, forward, right, up); + forward[0] *= 566; + forward[1] *= 566; + forward[2] *= 566; + } if (cl.intermission) - { // intermission / finale rendering V_CalcIntermissionRefdef (); - } else { - if (!cl.paused /* && (sv.maxclients > 1 || key_dest == key_game) */ ) + if (!cl.paused) if (cl_oldview->value) - V_CalcRefdefOld (); - else - V_CalcRefdef (); - - - + V_CalcRefdefOld (); + else + V_CalcRefdef (); } #endif - -#ifndef GLQUAKE - R_PushShadows (); // this is used and msvc is a paranoid liar for warning about it being unused - -#endif - - + R_PushShadows (); R_PushDlights (); -// R_PushWlights (); - // leilei - aim lock -if (aimlock){ - r_refdef.viewangles[0] = lockedangle[0]; - r_refdef.viewangles[1] = lockedangle[1]; -// r_refdef.viewangles[2] = lockedangle[2]; + + if (aimlock) + { + r_refdef.viewangles[0] = lockedangle[0]; + r_refdef.viewangles[1] = lockedangle[1]; } - R_RenderView (); -#ifndef GLQUAKE - if (crosshair->value && !deathcam_yesiamdead){ - vec3_t crossthere; - if (aimlock){ + R_RenderView (); + + if (crosshair->value && !deathcam_active) + { + vec3_t crossthere; + + if (aimlock) + { crossthere[0] = r_refdef.viewangles[0] - lockedangle[0]; crossthere[1] = r_refdef.viewangles[1] - lockedangle[1]; -// crossthere[2] = r_refdef.viewangles[2] - lockedangle[2]; - } - else - { - crossthere[0] = 0; - crossthere[1] = 0; - crossthere[2] = 0; - } - - Draw_Character (scr_vrect.x + scr_vrect.width/2 + cl_crossx->value + crossthere[0],scr_vrect.y + scr_vrect.height/2 + cl_crossy->value+ crossthere[1], '+'); } -#endif - + else + { + crossthere[0] = 0; + crossthere[1] = 0; + crossthere[2] = 0; + } + + Draw_Character (scr_vrect.x + scr_vrect.width/2 + cl_crossx->value + crossthere[0],scr_vrect.y + scr_vrect.height/2 + cl_crossy->value+ crossthere[1], '+'); + } } //============================================================================ diff --git a/icon.xpm b/icon.xpm index 4c20c01..64107b5 100644 --- a/icon.xpm +++ b/icon.xpm @@ -1,62 +1,62 @@ /* XPM */ static char * icon_xpm[] = { "48 48 11 1", -" c #000000", -". c #EEEEEC", +" c None", +". c #000000", "+ c #204A87", -"@ c #888A85", +"@ c #555753", "# c #3465A4", -"$ c #BABDB6", -"% c #729FCF", -"& c #555753", -"* c #D3D7CF", -"= c #4E9A06", -"- c #E9B96E", -" ", -" ", -" ", -" ", -" ", -" .++++++++++ ..+++++++++++ ", -" .++++++++++ @.++++++++++++ ", -" .++++++++++ ..++++++++++++ ", -" .+#+#+#+#+# @.#+#+#+#+#+#+# ", -" .#+#+#+#+#+ ..+#+#+#+#+#+#+ ", -" .+#+#+#+#+# @.+#+#+#+#+#+#+# ", -" .########## ..############## ", -" .########## $.############### ", -" .########## ..############### ", -" .#%###%#%#% @.#%#%#%###%#%#%## ", -" .########## ..################ ", -" .+%+%+%+%+% $.%+%+%+%#%#%+%+%+% ", -" .%###%###%# .##%###%.##%###%### ", -" .@%&%&%&%&% $.&%&%&%&.&%&%&%%%&% ", -" .%@%@%@%@%@ .@%@%@%@ .%@%@%@%@%@ ", -" .%%@%%%@%%% *.%@%%%@% .@%%%@%%%@% ", -" .%@%@%@%@%@ &.%@%@%@% .%@%@%@%@%@ ", -" .$$$$$$$$$$ *.$$$$$$$ .$$$$$$$$$$ ", -" .$$$$$$$$$$ &.$$$$$$$ .$$$$$$$$$$ ", -" .$*$*$*$*$* *.*$*$*$* .$*$*$*$*$* ", -" .=*=*=*=*=* &.=*=*=*= .=*=*=*=*=* ", -" .*=*=*=*=*= *.*=*=*=* .*=*=*=*=*= ", -" .********** &.*=***** .=********* ", -" .********** ..******* .********** ", -" .**********@.******* .********** ", -" .**********..***.*.. ...*....-.. ", -" .**********.******* .********** ", -" .*=*=*=*=*=.=*=*=*= .*=*=*=*=*= ", -" .$$$$$$$$$$$$$$$$$ .$$$$$$$$$$ ", -" .$=$=$=$=$=$=$=$= .$=$=$=$=$= ", -" .=*=*=*=*=*=*=*=* .=*=*=*=*=* ", -" .==$===$===$===$ .$===$===$= ", -" .=$=$=$=$=$=$=$= .=$=$=$=$=$ ", -" .@===@===@===@= .==@===@=== ", -" .=@=@=@=@=@=@=@ .=@=@=@=@=@ ", -" .============= .========== ", -" .=&=&=&=&=&=&= .=&=&=&=&=& ", -" .====&======= .==&===&=== ", -" .============ .========== ", -" .=========== .========== ", -" ", -" ", -" "}; +"$ c #4E9A06", +"% c #888A85", +"& c #729FCF", +"* c #BABDB6", +"= c #D3D7CF", +"- c #EEEEEC", +"................................................", +"................................................", +"................................................", +"................................................", +"................................................", +".....-++++++++++.............--+++++++++++......", +".....-++++++++++............%-++++++++++++......", +".....-++++++++++............--++++++++++++......", +".....-+#+#+#+#+#...........%-#+#+#+#+#+#+#......", +".....-#+#+#+#+#+...........--+#+#+#+#+#+#+......", +".....-+#+#+#+#+#..........%-+#+#+#+#+#+#+#......", +".....-##########..........--##############......", +".....-##########.........*-###############......", +".....-##########.........--###############......", +".....-#&###&#&#&........%-#&#&#&###&#&#&##......", +".....-##########........--################......", +".....-+&+&+&+&+&.......*-&+&+&+&#&#&+&+&+&......", +".....-&###&###&#.......-##&###&-##&###&###......", +".....-%&@&@&@&@&......*-@&@&@&@-@&@&@&&&@&......", +".....-&%&%&%&%&%......-%&%&%&%.-&%&%&%&%&%......", +".....-&&%&&&%&&&.....=-&%&&&%&.-%&&&%&&&%&......", +".....-&%&%&%&%&%....@-&%&%&%&..-&%&%&%&%&%......", +".....-**********....=-*******..-**********......", +".....-**********...@-*******...-**********......", +".....-*=*=*=*=*=...=-=*=*=*=...-*=*=*=*=*=......", +".....-$=$=$=$=$=..@-$=$=$=$....-$=$=$=$=$=......", +".....-=$=$=$=$=$..=-=$=$=$=....-=$=$=$=$=$......", +".....-==========.@-=======.....-==========......", +".....-==========.--=======.....-==========......", +".....-==========%-=======......-==========......", +".....-==========--=======......-==========......", +".....-==================.......-==========......", +".....-=$=$=$=$=$=$=$=$=$.......-=$=$=$=$=$......", +".....-*****************........-**********......", +".....-*$*$*$*$*$*$*$*$.........-*$*$*$*$*$......", +".....-$=$=$=$=$=$=$=$=.........-$=$=$=$=$=......", +".....-$$*$$$*$$$*$$$*..........-*$$$*$$$*$......", +".....-$*$*$*$*$*$*$*$..........-$*$*$*$*$*......", +".....-%$$$%$$$%$$$%$...........-$$%$$$%$$$......", +".....-$%$%$%$%$%$%$%...........-$%$%$%$%$%......", +".....-$$$$$$$$$$$$$............-$$$$$$$$$$......", +".....-$@$@$@$@$@$@$............-$@$@$@$@$@......", +".....-$$$$@$$$$$$$.............-$$@$$$@$$$......", +".....-$$$$$$$$$$$$.............-$$$$$$$$$$......", +".....-$$$$$$$$$$$..............-$$$$$$$$$$......", +"................................................", +"................................................", +"................................................"}; diff --git a/include/common.h b/include/common.h index 290fc55..f48dfb8 100644 --- a/include/common.h +++ b/include/common.h @@ -324,19 +324,4 @@ typedef enum { pt_static, pt_grav, pt_slowgrav, pt_fire, pt_explode, pt_explode2, pt_blob, pt_blob2, pt_fastgrav, pt_smoke, pt_decel, pt_blood, pt_add, pt_staticfade, pt_addfade,pt_staticfadeadd, pt_slowgravaddfade, pt_bloodsplatten, pt_bloodsplat, pt_blooddrip, pt_bloodrun, pt_bloodfloor, pt_trail, pt_spark, pt_snow, pt_fire6, pt_decal, pt_flare, pt_flare_will_die, pt_sparkvel, pt_drip } ptype_t; - -extern struct entity_s; -/* - -typedef struct -{ - vec3_t origin; - float radius; - vec3_t color; - struct model_t *model; - struct entity_t *owner; -} flare_t; - - */ - -void TheForceLoadLighting (void); // gotta try to call this somewhere that works. \ No newline at end of file +void TheForceLoadLighting (void); // gotta try to call this somewhere that works. diff --git a/include/globaldef.h b/include/globaldef.h index f077291..79652b4 100644 --- a/include/globaldef.h +++ b/include/globaldef.h @@ -36,16 +36,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define INTERPOL7 // other interpolation again (still buggy)*WIP* -// ----------------------------------------- -// Audio Features -// ----------------------------------------- - -int inthedos; -//#define NOASM - -#define EFFINGMOUSE // disables "Enhance Pointer Precision" - // a definite MUST for debugging - // ----------------------------------------- // Gameplay Features // ----------------------------------------- @@ -64,7 +54,7 @@ int Nehahrademcompatibility; // LordHavoc: to allow playback of the early Nehah int dpprotocol; #define DPPROTOCOLS -#define VERSION 0.6 +#define VERSION 0.7 #define PROTOCOL_STOCK 0 // old 1.09 #define PROTOCOL_QUAKEDP 1 // dp105 @@ -106,15 +96,9 @@ int dpprotocol; #define VID_UnlockBuffer() #endif -#if defined __i386__ && !defined NOASM // && !defined __sun__ - #define id386 1 - #define id386poly 0 - #define id386rgb 0 -#else - #define id386 0 - #define id386poly 0 - #define id386rgb 0 -#endif +#define id386 0 +#define id386poly 0 +#define id386rgb 0 #if id386 #define UNALIGNED_OK 1 // set to 0 if unaligned accesses are not supported diff --git a/renderer/d_polyse.c b/renderer/d_polyse.c index d27f253..fe677ba 100644 --- a/renderer/d_polyse.c +++ b/renderer/d_polyse.c @@ -323,10 +323,6 @@ void D_DrawNonSubdiv (void) } D_PolysetSetEdgeTable (); - - /* if (r_filter->value) - D_RasterizeAliasPolySmooth (); - else*/ D_RasterizeAliasPolySmooth (); } } @@ -751,7 +747,6 @@ void D_PolysetDrawSpans8 (spanpackage_t *pspanpackage) #endif // !id386 extern vec3_t lightcolor; - extern byte gelmap[256]; extern byte bumpmap[256]; extern pixel_t transTable[256][256]; @@ -784,14 +779,11 @@ extern int kernel[2][2][2]; void D_PolysetDrawSpans8RGB_C_Filter (spanpackage_t *pspanpackage) { byte *lpdest; - byte *lpbuf; byte *lptex; int lcount; int lsfrac, ltfrac; int llight; int llightrgb[3]; - int colme[3]; - int rgb; int lzi; short *lpz; unsigned char *pix24; // leilei - colored lighting @@ -954,17 +946,13 @@ void D_PolysetDrawSpans8RGB_C (spanpackage_t *pspanpackage) { int lcount; byte *lpdest; - byte *lpbuf; byte *lptex; int forg; // leilei - fog int lsfrac, ltfrac; int llight; int llightrgb[3]; - int colme[3]; - int rgb; int lzi; - int lzf; // leilei - fog - float zf; // leilei - fog + // leilei - fog short *lpz; unsigned char *pix24; // leilei - colored lighting int trans[3]; @@ -1153,7 +1141,6 @@ void D_PolysetDrawSpans8_C (spanpackage_t *pspanpackage) { int lcount; byte *lpdest; - byte *lpbuf; byte *lptex; int forg; // leilei - fog int lsfrac, ltfrac; @@ -1162,25 +1149,14 @@ void D_PolysetDrawSpans8_C (spanpackage_t *pspanpackage) int llightd; int llightrgb[3]; int llightrgbd[3]; - int colme[3]; - int rgb; int lzi; short *lpz; unsigned char *pix24; // leilei - colored lighting int trans[3]; int shad = 0; // leilei - shade offset - float bhad = 1; - int ta, te, tv; - int dith, det; // leilei - shading dither + int det; // leilei - shading dither int dodith, doshine; - int s, t; - int s2, t2; -#if 0 // for now - if (coloredmethod == 1){ - D_PolysetDrawSpans8_Low_C (pspanpackage); - return; - } -#endif + dodith = r_shadedither->value; doshine = r_shinygrays->value; if (currententity->effects & EF_NODRAW || currententity->leifect) @@ -1290,9 +1266,6 @@ void D_PolysetDrawSpans8_C (spanpackage_t *pspanpackage) // Shine crap if ((doshine == 2)&& *lptex < 16){ - int ti; - - llightrgb[0] &= 0xAF00; llightrgb[1] &= 0xAF00; llightrgb[2] &= 0xAF00; @@ -1473,29 +1446,25 @@ void D_PolysetDrawSpans8_Low_C (spanpackage_t *pspanpackage) { int lcount; byte *lpdest; - byte *lpbuf; byte *lptex; int forg; // leilei - fog - int lsfrac, ltfrac; + int lsfrac, ltfrac; - int llight; - int llightd; - int llightrgb[3]; - int llightrgbd[3]; - int colme[3]; - int rgb; - int lzi; + int llight; + int llightd; + int llightrgb[3]; + int llightrgbd[3]; + int lzi; short *lpz; unsigned char *pix24; // leilei - colored lighting int trans[3]; - int shad = 0; // leilei - shade offset - float bhad = 1; - int ta, te, tv; - int dith, det; // leilei - shading dither - int dodith, doshine; - int s, t; + int shad = 0; // leilei - shade offset + int det; // leilei - shading dither + int dodith, doshine; + dodith = r_shadedither->value; doshine = r_shinygrays->value; + if (currententity->effects & EF_NODRAW || currententity->leifect) return; // haha don't do it det = 0; @@ -1522,9 +1491,6 @@ void D_PolysetDrawSpans8_Low_C (spanpackage_t *pspanpackage) lpz = pspanpackage->pz; lsfrac = pspanpackage->sfrac; ltfrac = pspanpackage->tfrac; - - s = lsfrac; - t = ltfrac; det++; if (det > 3) @@ -1596,7 +1562,6 @@ void D_PolysetDrawSpans8_Low_C (spanpackage_t *pspanpackage) // metal shine... // Shine crap if ((doshine == 2)&& *lptex < 16){ - int ti; llightrgb[0] &= 0xAF00; llightrgb[1] &= 0xAF00; llightrgb[2] &= 0xAF00; @@ -1764,14 +1729,11 @@ void D_PolysetDrawSpans8_C_Dither (spanpackage_t *pspanpackage) { int lcount; byte *lpdest; - byte *lpbuf; byte *lptex; int lsfrac, ltfrac; int llight; int llightrgb[3]; - int colme[3]; - int rgb; int lzi; short *lpz; unsigned char *pix24; // leilei - colored lighting @@ -1958,23 +1920,20 @@ void D_PolysetDrawSpans8_C_Filter (spanpackage_t *pspanpackage) { int lcount; byte *lpdest; - byte *lpbuf; byte *lptex; int lsfrac, ltfrac; int llight; int llightrgb[3]; - int colme[3]; - int rgb; - int n; int lzi; short *lpz; unsigned char *pix24; // leilei - colored lighting - unsigned char *dix24; // leilei - colored dithering + int trans[3]; if (currententity->effects & EF_NODRAW || currententity->leifect) - return; // haha don't do it + return; // haha don't do it + do { lcount = d_aspancount - pspanpackage->count; @@ -1986,9 +1945,7 @@ void D_PolysetDrawSpans8_C_Filter (spanpackage_t *pspanpackage) errorterm -= erroradjustdown; } else - { d_aspancount += ubasestep; - } if (lcount) { @@ -2008,69 +1965,49 @@ void D_PolysetDrawSpans8_C_Filter (spanpackage_t *pspanpackage) { if ((lzi >> 16) >= *lpz) { - /* int idiths = lsfrac; - { - int idiths = s; - int iditht = t; + + int idiths = lsfrac; int iditht = lsfrac; + int X = (lsfrac + d_aspancount) & 1; + int Y = (ltfrac)&1; - int X = (pspan->u + spancount) & 1; - int Y = (pspan->v)&1; + idiths += kernel[X][Y][0]; + iditht += kernel[X][Y][1]; - idiths += kernel[X][Y][0]; - iditht += kernel[X][Y][1]; - - idiths = idiths >> 16; - idiths = idiths ? idiths -1 : idiths; - - - iditht = iditht >> 16; - iditht = iditht ? iditht -1 : iditht; - *pdest++ = *(pbase + idiths + iditht * cachewidth); - - -*/ - { - int idiths = lsfrac; int iditht = lsfrac; - int X = (lsfrac + d_aspancount) & 1; - int Y = (ltfrac)&1; - - idiths += kernel[X][Y][0]; - iditht += kernel[X][Y][1]; - - idiths = idiths >> 16; - idiths = idiths ? idiths -1 : idiths; + idiths = idiths >> 16; + idiths = idiths ? idiths -1 : idiths; - iditht = iditht >> 16; - iditht = iditht ? iditht -1 : iditht; + iditht = iditht >> 16; + iditht = iditht ? iditht -1 : iditht; - pix24 = (unsigned char *)&d_8to24table[((byte *)acolormap)[*lptex + + idiths + iditht + (8192 & 0xFF00)]]; + pix24 = (unsigned char *)&d_8to24table[((byte *)acolormap)[*lptex + + idiths + iditht + (8192 & 0xFF00)]]; // TODO FIXME: colored light vectors similar to dp105/q3 - trans[0] = (pix24[0] * (16384 - llightrgb[0])) >> 15; - trans[1] = (pix24[1] * (16384 - llightrgb[1])) >> 15; - trans[2] = (pix24[2] * (16384 - llightrgb[2])) >> 15; + trans[0] = (pix24[0] * (16384 - llightrgb[0])) >> 15; + trans[1] = (pix24[1] * (16384 - llightrgb[1])) >> 15; + trans[2] = (pix24[2] * (16384 - llightrgb[2])) >> 15; - if (trans[0] < 0) trans[0] = 0; if (trans[1] < 0) trans[1] = 0; if (trans[2] < 0) trans[2] = 0; - if (trans[0] > 63) trans[0] = 63; if (trans[1] > 63) trans[1] = 63; if (trans[2] > 63) trans[2] = 63; - - // 18-Bit lighting - Vanilla Blending - //*lpdest = *(lptex + idiths + iditht); - *lpdest = palmap2[trans[0]][trans[1]][trans[2]]; - *lpz = lzi >> 16; + if (trans[0] < 0) trans[0] = 0; if (trans[1] < 0) trans[1] = 0; if (trans[2] < 0) trans[2] = 0; + if (trans[0] > 63) trans[0] = 63; if (trans[1] > 63) trans[1] = 63; if (trans[2] > 63) trans[2] = 63; + *lpdest = palmap2[trans[0]][trans[1]][trans[2]]; + *lpz = lzi >> 16; - } + } + lpdest++; lzi += r_zistepx; lpz++; llight += r_lstepx; - if(coloredlights){ - llightrgb[0] += r_lrstepx; - llightrgb[1] += r_lgstepx; - llightrgb[2] += r_lbstepx; + + if(coloredlights) + { + llightrgb[0] += r_lrstepx; + llightrgb[1] += r_lgstepx; + llightrgb[2] += r_lbstepx; } + lptex += a_ststepxwhole; lsfrac += a_sstepxfrac; lptex += lsfrac >> 16; @@ -2082,6 +2019,7 @@ void D_PolysetDrawSpans8_C_Filter (spanpackage_t *pspanpackage) lptex += r_affinetridesc.skinwidth; ltfrac &= 0xFFFF; } + } while (--lcount); } @@ -2425,22 +2363,7 @@ void D_RasterizeAliasPolySmooth (void) originalcount = a_spans[initialrightheight].count; a_spans[initialrightheight].count = -999999; // mark end of the spanpackages - // eukara - not sure what is going on here - #ifdef dithermodelhack - if (coloredlights == 2) - D_PolysetDrawSpans8_C (a_spans); - else - #endif - - if (coloredlights) - { - if (r_filter->value) - D_PolysetDrawSpans8_C (a_spans); - else - D_PolysetDrawSpans8_C (a_spans); - } - else - D_PolysetDrawSpans8_C (a_spans); + D_PolysetDrawSpans8_C (a_spans); // scan out the bottom part of the right edge, if it exists if (pedgetable->numrightedges == 2) @@ -2464,21 +2387,7 @@ void D_RasterizeAliasPolySmooth (void) d_countextrastep = ubasestep + 1; a_spans[initialrightheight + height].count = -999999; // mark end of the spanpackages - #ifdef dithermodelhack - if (coloredlights == 2) - D_PolysetDrawSpans8_C (pstart); - else - #endif - - if (coloredlights) - { - if (r_filter->value) - D_PolysetDrawSpans8_C (pstart); - else - D_PolysetDrawSpans8_C (pstart); - } - else - D_PolysetDrawSpans8_C (pstart); + D_PolysetDrawSpans8_C (pstart); } } /* @@ -2489,12 +2398,12 @@ D_RasterizeAliasPolySmoothFilter void D_RasterizeAliasPolySmoothFilter (void) { - int initialleftheight, initialrightheight; - int *plefttop, *prighttop, *pleftbottom, *prightbottom; - int working_lstepx, originalcount; - int working_lrstepx; - int working_lgstepx; - int working_lbstepx; + int initialleftheight, initialrightheight; + int *plefttop, *prighttop, *pleftbottom, *prightbottom; + int working_lstepx, originalcount; + int working_lrstepx; + int working_lgstepx; + int working_lbstepx; plefttop = pedgetable->pleftedgevert0; prighttop = pedgetable->prightedgevert0; @@ -2748,10 +2657,7 @@ void D_RasterizeAliasPolySmoothFilter (void) originalcount = a_spans[initialrightheight].count; a_spans[initialrightheight].count = -999999; // mark end of the spanpackages - if (coloredlights) - D_PolysetDrawSpans8_C (a_spans); - else - D_PolysetDrawSpans8_C (a_spans); + D_PolysetDrawSpans8_C (a_spans); // scan out the bottom part of the right edge, if it exists if (pedgetable->numrightedges == 2) @@ -2775,13 +2681,7 @@ void D_RasterizeAliasPolySmoothFilter (void) d_countextrastep = ubasestep + 1; a_spans[initialrightheight + height].count = -999999; // mark end of the spanpackages - if (coloredlights) - D_PolysetDrawSpans8_C (pstart); - else - D_PolysetDrawSpans8_C (pstart); - -// D_PolysetDrawSpans8_C (pstart); -// D_PolysetDrawSpans8_C (pstart); + D_PolysetDrawSpans8_C (pstart); } } @@ -2794,14 +2694,10 @@ D_PolysetSetEdgeTable void D_PolysetSetEdgeTable (void) { int edgetableindex; - edgetableindex = 0; // assume the vertices are already in // top to bottom order - -// -// determine which edges are right & left, and the order in which -// to rasterize them -// + // determine which edges are right & left, and the order in which + // to rasterize them if (r_p0[1] >= r_p1[1]) { if (r_p0[1] == r_p1[1]) @@ -2889,35 +2785,3 @@ split: D_PolysetRecursiveDrawLine (lp1, new); D_PolysetRecursiveDrawLine (new, lp2); } -/* -void D_PolysetRecursiveTriangle2 (int *lp1, int *lp2, int *lp3) -{ - int d; - int new[4]; - - d = lp2[0] - lp1[0]; - if (d < -1 || d > 1) - goto split; - d = lp2[1] - lp1[1]; - if (d < -1 || d > 1) - goto split; - return; - -split: -// split this edge - new[0] = (lp1[0] + lp2[0]) >> 1; - new[1] = (lp1[1] + lp2[1]) >> 1; - new[5] = (lp1[5] + lp2[5]) >> 1; - new[2] = (lp1[2] + lp2[2]) >> 1; - new[3] = (lp1[3] + lp2[3]) >> 1; - new[4] = (lp1[4] + lp2[4]) >> 1; - - - - D_PolysetRecursiveDrawLine (new, lp3); - -// recursively continue - D_PolysetRecursiveTriangle (lp1, new, lp3); - D_PolysetRecursiveTriangle (new, lp2, lp3); -} -*/ diff --git a/renderer/d_surf.c b/renderer/d_surf.c index da01679..24f483c 100644 --- a/renderer/d_surf.c +++ b/renderer/d_surf.c @@ -318,21 +318,17 @@ surfcache_t *D_CacheSurface (msurface_t *surface, int miplevel) merp = 1; -if (truecolor) - merp = 4; + if (truecolor) + merp = 4; -// -// allocate memory if needed -// + // allocate memory if needed if (!cache) // if a texture just animated, don't reallocate it { + if (coloredlights == 2 || truecolor) + cache = D_SCAlloc (r_drawsurf.surfwidth, merp, r_drawsurf.surfwidth * r_drawsurf.surfheight * 2); // leilei - DITHERDITHER + else + cache = D_SCAlloc (r_drawsurf.surfwidth, 1, r_drawsurf.surfwidth * r_drawsurf.surfheight * 2); // leilei - also increased this. -if (coloredlights == 2 || truecolor) - cache = D_SCAlloc (r_drawsurf.surfwidth, merp, r_drawsurf.surfwidth * r_drawsurf.surfheight * 2); // leilei - DITHERDITHER -else if (inthedos) - cache = D_SCAlloc (r_drawsurf.surfwidth, 1, r_drawsurf.surfwidth * r_drawsurf.surfheight); // leilei - can't go as high in dos :( -else - cache = D_SCAlloc (r_drawsurf.surfwidth, 1, r_drawsurf.surfwidth * r_drawsurf.surfheight * 2); // leilei - also increased this. surface->cachespots[miplevel] = cache; cache->owner = &surface->cachespots[miplevel]; cache->mipscale = surfscale; diff --git a/renderer/r_main.c b/renderer/r_main.c index d468082..7544bc8 100644 --- a/renderer/r_main.c +++ b/renderer/r_main.c @@ -954,7 +954,7 @@ R_DrawEntitiesOnList extern vec3_t lightcolor; // used by model rendering extern cvar_t *r_shading; extern cvar_t *temp1; -extern int deathcam_yesiamdead; +extern int deathcam_active; void R_DrawEntitiesOnList (void) { int i, j; @@ -987,7 +987,7 @@ void R_DrawEntitiesOnList (void) if (currententity == &cl_entities[cl.viewentity]) // 2000-01-09 ChaseCam fix by FrikaC start { - if (!chase_active->value && !deathcam_yesiamdead) + if (!chase_active->value && !deathcam_active) { // 2000-01-09 ChaseCam fix by FrikaC end continue; // don't draw the player @@ -1233,19 +1233,10 @@ void R_DrawViewModel (void) if (!r_drawviewmodel->value) return; - -// 2000-01-09 ChaseCam fix by FrikaC start - if (chase_active->value || deathcam_yesiamdead) - { + if (chase_active->value || deathcam_active) return; - } -// 2000-01-09 ChaseCam fix by FrikaC end - - - if (!r_muzzlehack->value && cl.items & IT_INVISIBILITY) return; - if (cl.stats[STAT_HEALTH] <= 0) return; diff --git a/renderer/r_part.c b/renderer/r_part.c index 394c57c..709e274 100644 --- a/renderer/r_part.c +++ b/renderer/r_part.c @@ -115,9 +115,7 @@ void R_InitFlares (void) r_numflares = ABSOLUTE_MIN_PARTICLES; } else - { r_numflares = 256; - } flares = (flare_t *) Hunk_AllocName (r_numparticles * sizeof(flare_t), "flares"); @@ -201,17 +199,14 @@ void R_EntityFireParticles (entity_t *ent, vec3_t org, float sizefix) int i, g; particle_t *p; float angle; - float sp, sy, cp, cy, sr, cr; // 2001-12-10 Reduced compiler warnings by Jeff Ford - vec3_t forward, right; + float sp, sy, cp, cy; // 2001-12-10 Reduced compiler warnings by Jeff Ford + vec3_t forward; float dist; float langth; - int moed; langth = 5; dist = 1; // count = 50; // 2001-12-10 Reduced compiler warnings by Jeff Ford - - moed = 1; if (!avelocities[0][0]) { for (i=0 ; iorigin); // if not moving, go to the still fire effect -// return; -// } + dec = 1; while (len > 0) { @@ -615,9 +591,6 @@ void R_ParticleExplosionSpritey (vec3_t org) { int i, j; particle_t *p; - flare_t *f; - - for (i=0 ; i<2 ; i++) { @@ -682,51 +655,6 @@ void R_ParticleExplosionSpritey (vec3_t org) // p->vel[2] = (rand()%356)-128; } } - - // then the flare. - - - - -// else - - /* - if (!free_flares) - return; - - f = free_flares; - free_flares = f->next; - f->next = active_flares; - active_flares = f; - f->frame = 12; - f->scale = 0.2; - f->scalexvel = 6; - p->scaleyvel = 0; - f->blend = 3; - f->polor = 79; -// f->alpha = 1.2f; - f->die = cl.time + 0.3; - f->alphavel = -1.9f; - f->angles[2] = 0; - f->anglevel[2] = 0; - f->sprtype = 5; - for (j=0 ; j<3 ; j++) - { - f->org[j] = org[j]; - f->vel[j] = 0; - } - - - { - trace_t tarce; - tarce = Particle_TraceLine(org, r_refdef.vieworg); - if(tarce.fraction < 1) - f->alpha = 0; - else - f->alpha = 1; - - } - */ } extern cvar_t *r_particletrails; @@ -739,7 +667,7 @@ R_ParticleTrail */ void R_ParticleTrail (vec3_t org, vec3_t veloc, int trl, float tim, int coll, float alf, int blend) { - int i, j; + int j; particle_t *p; @@ -918,9 +846,8 @@ void R_ParticleExplosion2 (vec3_t org, int colorStart, int colorLength) void R_ParticleBloodSpewism (vec3_t org, int much) { - int i, j; - vec3_t fe; - int colorMod = 0; + int i, j; + vec3_t fe; for (i=1; i 1 && (color > 63) && (color < 80) && count != 1024){ - int o, m, f, g; + int o; vec3_t shoo, ting, tha, tway; // Blood Spurt of some sort. @@ -1066,19 +993,18 @@ void R_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count) } o = (particleblood * 0.3)* count; - m = o; - - for (j=0 ; j<3 ; j++) - { - shoo[j] = dir[j] + (rand()%5)-2.5 * -1; - ting[j] = dir[j] + (rand()%5)-2.5; - tha[j] = dir[j] + (rand()%5)-2.5; - tway[j] = dir[j] + (rand()%5)-2.5; - } + + for (j=0 ; j<3 ; j++) + { + shoo[j] = dir[j] + (rand()%5)-2.5 * -1; + ting[j] = dir[j] + (rand()%5)-2.5; + tha[j] = dir[j] + (rand()%5)-2.5; + tway[j] = dir[j] + (rand()%5)-2.5; + } for (i=-3 ; i trace.fraction) { bestfrac = trace.fraction; - // besthitent = hitent; - VectorCopy(trace.endpos, bestorg); VectorCopy(trace.plane.normal, bestnormal); } } - - - if (bestfrac < 1) // it's time to create. + + if (bestfrac < 1) // it's time to create. { - steer[0] = bestnormal[0]; steer[1] = bestnormal[1]; steer[2] = bestnormal[2]; - //steer[2] *= -1; - //org[0] = bestorg[0]; // don't return orgies if we don't want them - //org[1] = bestorg[1]; - //org[2] = bestorg[2]; vectoangles(steer, steer); - } } - - int R_GimmeTheColorOfThisWall (vec3_t org) { - int i, j; - particle_t *p; - int nexte = 1; - int count = 1; + int i; int color; trace_t trace; - float bestfrac, bestorg[3], bestnormal[3]; + float bestfrac; float org2[3]; - float fraccy = 0; - vec3_t heer; - vec3_t nermal; - vec3_t teer; - - int besthitent = 0, hitent; int maxdist = 9; bestfrac = 10; - //decframe = 4; - for (i = 0;i < 32;i++) + for (i = 0;i < 32;i++) { org2[0] = rand()%4 - rand()%2; org2[1] = rand()%4 - rand()%2; @@ -1618,8 +1508,7 @@ int R_GimmeTheColorOfThisWall (vec3_t org) bestfrac = trace.fraction; } } - - + if (bestfrac < 1) // it's time to create. { color = trace.color; @@ -1632,8 +1521,6 @@ void R_FlareInstant (vec3_t org, int decframe, int colr, int colg, int colb, int { int i, j; particle_t *p; - int nexte = 1; - int count = 1; int gmcol; @@ -1697,13 +1584,10 @@ void R_FlareTest (vec3_t org, int decframe, int colr, int colg, int colb, float { int i, j; flare_t *p; - int nexte = 1; int count = 1; int gmcol; int ownin; - int gonnadie = 0; float initialalpha; - trace_t tarce; if (!r_flares->value) return; // don't draw flares if we don't want flares. @@ -2672,7 +2556,6 @@ void R_ParticleTrail2 (vec3_t start, vec3_t end, int type, int blend, int color, int j; particle_t *p; int dec; - static int tracercount; int thetrail; thetrail = r_particletrails->value; @@ -2730,14 +2613,9 @@ void R_ParticleBeam (vec3_t start, vec3_t end, int thecol) { vec3_t vec; float len; - int j; + int j; particle_t *p; - int dec; - static int tracercount; - int wat; - //int thecol; - - + int dec; VectorSubtract (end, start, vec); len = VectorNormalize (vec); @@ -2752,37 +2630,19 @@ void R_ParticleBeam (vec3_t start, vec3_t end, int thecol) p = free_particles; free_particles = p->next; p->next = active_particles; -// p->owner = NULL; active_particles = p; p->frame = 0; VectorCopy (vec3_origin, p->vel); p->die = cl.time; - - // wat = rand()&2; - { - /* if (wat == 2){ // Outer Glow - p->polor = thecol; - p->type = pt_staticfadeadd; - p->die = cl.time + 2; - p->alpha = 0.6; - p->alphavel = -0.7; - for (j=0 ; j<3 ; j++) - p->org[j] = start[j] + ((rand()%4)-2); - } - else */ - { // Inner Line - p->polor = thecol; - p->type = pt_staticfadeadd; - p->die = cl.time + 0.01; - p->alpha = 1; - - p->alphavel = -0.9; - for (j=0 ; j<3 ; j++) - p->org[j] = start[j]; - } - } - + p->polor = thecol; + p->type = pt_staticfadeadd; + p->die = cl.time + 0.01; + p->alpha = 1; + p->alphavel = -0.9; + for (j=0 ; j<3 ; j++) + p->org[j] = start[j]; + VectorAdd (start, vec, start); } } @@ -2793,11 +2653,9 @@ void R_BeamBeam (vec3_t start, vec3_t end, int thecol, float thesize) { vec3_t vec; float len; - int j; + int j; particle_t *p; - int dec; - static int tracercount; - //int thecol; + int dec; vec3_t angel; @@ -2828,22 +2686,17 @@ void R_BeamBeam (vec3_t start, vec3_t end, int thecol, float thesize) p->angles[0] = angel[0] + 90; p->angles[1] = angel[1]; p->angles[2] = angel[2]; - //p->angles[0] = 0; - //p->angles[1] = 0; - //p->angles[2] = 0; p->scale = 0.03f; - { - p->polor = thecol; - p->type = pt_staticfadeadd; - p->die = cl.time + 0.01; - p->alpha = 1; - - p->alphavel = -0.9; - for (j=0 ; j<3 ; j++) - p->org[j] = start[j]; - } + + p->polor = thecol; + p->type = pt_staticfadeadd; + p->die = cl.time + 0.01; + p->alpha = 1; + p->alphavel = -0.9; + for (j=0 ; j<3 ; j++) + p->org[j] = start[j]; VectorAdd (start, vec, start); } @@ -3140,22 +2993,10 @@ void R_DrawParticles (void) vec3_t below; qboolean in_solid; -#ifdef GLQUAKE - vec3_t up, right; - float scale; - GL_Bind(particletexture); - glEnable (GL_BLEND); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glBegin (GL_TRIANGLES); - - VectorScale (vup, 8.5, up); - VectorScale (vright, 8.5, right); - -#else VectorScale (vright, xscaleshrink, r_pright); VectorScale (vup, yscaleshrink, r_pup); VectorCopy (vpn, r_ppn); -#endif + frametime = cl.time - cl.oldtime; time3 = frametime * 15; time2 = frametime * 10; // 15; @@ -3193,46 +3034,12 @@ void R_DrawParticles (void) } break; } - /* if (particletypeonly == 1 && p->sprtype == 5) - { - model_t *hello; - if ((p->model = Mod_ForName("particle.spr", false))) - { - currentparticle = p; - VectorCopy(p->org, r_entorigin); - VectorSubtract(r_origin, r_entorigin, modelorg); - R_DrawSprite2(); - return; - } - - }*/ -#ifdef GLQUAKE - // hack a scale up to keep particles from disapearing - scale = (p->org[0] - r_origin[0])*vpn[0] + (p->org[1] - r_origin[1])*vpn[1] - + (p->org[2] - r_origin[2])*vpn[2]; - if (scale < 20) - scale = 1; - else - scale = 1 + scale * 0.004; - glColor3ubv ((byte *)&d_8to24table[(int)p->polor]); - glTexCoord2f (0,0); - glVertex3fv (p->org); - glTexCoord2f (1,0); - glVertex3f (p->org[0] + up[0]*scale, p->org[1] + up[1]*scale, p->org[2] + up[2]*scale); - glTexCoord2f (0,1); - glVertex3f (p->org[0] + right[0]*scale, p->org[1] + right[1]*scale, p->org[2] + right[2]*scale); -#else if (p->blend == 5) p->blend = 1; if (p->sprtype == 5) p->sprtype = 4; - // if (p->stickable == 2){ - // VectorCopy(p->vstuck1, p->org); -// - // } - if (particleset == 1){ p->frame = 3; // glquake style particle hack p->anglevel[2] = 0; @@ -3249,106 +3056,7 @@ void R_DrawParticles (void) // COLOR PRECALCULATE -/* - // LIT PARTICLES -if (p->lit){ - int la, ra, ga, ba; - float lightvec[3]; - float rlightvec[3]; - float glightvec[3]; - float blightvec[3]; - float rlightvec2[3]; - float glightvec2[3]; - float blightvec2[3]; - vec3_t dist; - float add; - float radd; - float gadd; - float badd; - int lnum; - dlight_t *dl; - vec3_t t; - vec3_t ar; - vec3_t ag; - vec3_t ab; - la = R_LightPoint(p->org); - - - - // add dynamic lights - for (lnum=0 ; lnumradius) - continue; - if (dl->die < cl.time) - continue; - if (dl->unmark) // leilei - skip world light - continue; - - VectorSubtract (p->org, dl->origin, dist); - add = dl->radius - Length(dist); - radd = dl->radius * dl->color[0] - Length(dist) ; - gadd = dl->radius * dl->color[1] - Length(dist) ; - badd = dl->radius * dl->color[2] - Length(dist) ; - - if (add > 0) - { - float scale = 1.0-(Length(dist)/dl->radius); - scale *= scale; // scale ^ 2 - la += add*(scale); - ra += radd*(scale); - ga += gadd*(scale); - ba += badd*(scale); - - - } - - if (radd > 0) - { - float scale = 1.0-(Length(dist)/dl->radius); - scale *= scale; // scale ^ 2 - ra += radd*(scale); - VectorScale (dist, scale, dist); - - - } - - if (gadd > 0) - { - float scale = 1.0-(Length(dist)/dl->radius); - scale *= scale; // scale ^ 2 - ga += gadd*(scale); - VectorScale (dist, scale, dist); - - } - - if (badd > 0) - { - float scale = 1.0-(Length(dist)/dl->radius); - scale *= scale; // scale ^ 2 - ba += badd*(scale); - VectorScale (dist, scale, dist); - - } - } - la *= -64; la += 16300; - if (la < 0) la = 0; - polor = ((byte *)host_colormap)[p->polor + (la & 0xFF00)]; - - - - - - - - } -else -*/ polor = p->polor; - - - // FOGGED PARTICLES if (foguse){ @@ -3398,14 +3106,13 @@ else } -#endif// PARTICLE COLLISION CODE FROM HEXEN II! (It used to be for snow now it's for everything!) + // BEIGN // leilei - particle sprites if (p->frame && r_particlesprite->value && !particletypeonly) { - model_t *hello; if ((p->model = Mod_ForName("particle.spr", false))) { currentparticle = p; @@ -3513,19 +3220,6 @@ else p->scaleyvel = 0.0f; if (p->scale > 3) p->die = -1; // leilei - too much blood... - // does this actually work??? - { - trace_t trace; - vec3_t nah; - vec3_t there; - VectorAdd(p->org, p->vel, there); - VectorAdd(p->org, p->vel, there); - VectorAdd(p->org, p->vel, there); - VectorAdd(p->org, p->vel, there); - VectorAdd(p->org, p->vel, there); - - - } whare[0] = p->org[0]; whare[1] = p->org[1]; whare[2] = p->org[2] - 6; @@ -4229,16 +3923,9 @@ void R_TestFlares (void) int liftoff; int amiseen; - -#ifndef GLQUAKE VectorScale (vright, xscaleshrink, r_pright); VectorScale (vup, yscaleshrink, r_pup); VectorCopy (vpn, r_ppn); -#else -// VectorScale (vright, xscale, r_pright); -// VectorScale (vup, yscale, r_pup); -// VectorCopy (vpn, r_ppn); -#endif for ( ;; ) { diff --git a/video/vid_gdk.c b/video/vid_gdk.c index 1b93ab5..978163f 100644 --- a/video/vid_gdk.c +++ b/video/vid_gdk.c @@ -50,7 +50,7 @@ static float mouse_x, mouse_y; static float old_mouse_x, old_mouse_y; static qboolean mouse_enabled; cvar_t *m_filter; -extern int deathcam_yesiamdead; +extern int deathcam_active; extern vec3_t deathcam_angles; GtkWidget *x_win; @@ -556,7 +556,7 @@ void IN_Move (usercmd_t *cmd) mouse_y *= sensitivity->value; } - if (deathcam_yesiamdead) + if (deathcam_active) { tangles[0] = deathcam_angles[0]; tangles[1] = deathcam_angles[1]; @@ -580,7 +580,7 @@ void IN_Move (usercmd_t *cmd) if ( ((in_mlook.state & 1) ^ ((int)m_look->value & 1)) && !(in_strafe.state & 1)) { tangles[PITCH] += m_pitch->value * mouse_y; - if (!deathcam_yesiamdead) + if (!deathcam_active) { if (tangles[PITCH] > m_lockdown->value) tangles[PITCH] = m_lockdown->value; @@ -597,7 +597,7 @@ void IN_Move (usercmd_t *cmd) } - if (deathcam_yesiamdead) + if (deathcam_active) { deathcam_angles[0] = tangles[0]; deathcam_angles[1] = tangles[1]; diff --git a/video/vid_x11.c b/video/vid_x11.c index 721318f..64adf12 100644 --- a/video/vid_x11.c +++ b/video/vid_x11.c @@ -57,7 +57,7 @@ int p_mouse_x; int p_mouse_y; int ignorenext; int bits_per_pixel; -extern int deathcam_yesiamdead; // eukara - deathcam +extern int deathcam_active; // eukara - deathcam typedef struct { @@ -1271,7 +1271,7 @@ void IN_Move (usercmd_t *cmd) mouse_x *= sensitivity->value; mouse_y *= sensitivity->value; - if (deathcam_yesiamdead){ + if (deathcam_active){ tangles[0] = deathcam_angles[0]; tangles[1] = deathcam_angles[1]; tangles[2] = deathcam_angles[2]; } else{ @@ -1287,7 +1287,7 @@ void IN_Move (usercmd_t *cmd) if ( ((in_mlook.state & 1) ^ ((int)m_look->value & 1)) && !(in_strafe.state & 1)) { // 2001-12-16 M_LOOK cvar by Heffo/Maddes tangles[PITCH] += m_pitch->value * mouse_y; - if (!deathcam_yesiamdead){ + if (!deathcam_active){ if (tangles[PITCH] > m_lockdown->value) // eukara - was cl.viewangles, not tangles tangles[PITCH] = m_lockdown->value; // ditto for the next few lines if (tangles[PITCH] < m_lockup->value) @@ -1300,7 +1300,7 @@ void IN_Move (usercmd_t *cmd) } - if (deathcam_yesiamdead){ + if (deathcam_active){ deathcam_angles[0] = tangles[0]; deathcam_angles[1] = tangles[1]; deathcam_angles[2] = tangles[2]; } else{