1 /* 2 Copyright (C) 1996-1997 Id Software, Inc. 3 4 This program is free software; you can redistribute it and/or 5 modify it under the terms of the GNU General Public License 6 as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 13 See the GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 // 21 // d_scana.s 22 // x86 assembly-language turbulent texture mapping code 23 // 24 25 #include "asm_i386.h" 26 #include "quakeasm.h" 27 #include "asm_draw.h" 28 #include "d_ifacea.h" 29 30 #if id386 31 32 .data 33 34 .text 35 36 //---------------------------------------------------------------------- 37 // turbulent texture mapping code 38 //---------------------------------------------------------------------- 39 40 .align 4 41 .globl C(D_DrawTurbulent8Span) 42 C(D_DrawTurbulent8Span): 43 pushl %ebp // preserve caller's stack frame pointer 44 pushl %esi // preserve register variables 45 pushl %edi 46 pushl %ebx 47 48 movl C(r_turb_s),%esi 49 movl C(r_turb_t),%ecx 50 movl C(r_turb_pdest),%edi 51 movl C(r_turb_spancount),%ebx 52 53 Llp: 54 movl %ecx,%eax 55 movl %esi,%edx 56 sarl $16,%eax 57 movl C(r_turb_turb),%ebp 58 sarl $16,%edx 59 andl $(CYCLE-1),%eax 60 andl $(CYCLE-1),%edx 61 movl (%ebp,%eax,4),%eax 62 movl (%ebp,%edx,4),%edx 63 addl %esi,%eax 64 sarl $16,%eax 65 addl %ecx,%edx 66 sarl $16,%edx 67 andl $(TURB_TEX_SIZE-1),%eax 68 andl $(TURB_TEX_SIZE-1),%edx 69 shll $6,%edx 70 movl C(r_turb_pbase),%ebp 71 addl %eax,%edx 72 incl %edi 73 addl C(r_turb_sstep),%esi 74 addl C(r_turb_tstep),%ecx 75 movb (%ebp,%edx,1),%dl 76 decl %ebx 77 movb %dl,-1(%edi) 78 jnz Llp 79 80 movl %edi,C(r_turb_pdest) 81 82 popl %ebx // restore register variables 83 popl %edi 84 popl %esi 85 popl %ebp // restore caller's stack frame pointer 86 ret 87 88 #endif // id386 89 90