⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2xsaimmx.asm

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
         pxor mm7, mm7         pand mm2, mm4         pcmpeqw mm3, mm7         por mm1, mm2         pand mm0, mm3         por mm0, mm1         punpcklwd mm5, mm0         punpckhwd mm6, mm0%ifdef FAR_POINTER         movq [fs:edx], mm5         movq [fs:edx+8], mm6%else	 movq [edx], mm5         movq [edx+8], mm6%endif;------------------------------------------------;        Create the Nextline;------------------------------------------------;3       ;if ((colorA == colorD) && (colorB != colorC) && (colorA == colorG) && (colorC == colorO)         movq mm0, [eax+ebx+colorA]        ;mm0 and mm1 contain colorA         movq mm2, [eax+ebx+ebx+colorC]        ;mm2 and mm3 contain colorC         movq mm1, mm0         movq mm3, mm2         push eax         add eax, ebx         pcmpeqw mm0, [eax+ebx+colorD]         pcmpeqw mm1, [eax+colorG]         pcmpeqw mm2, [eax+ebx+ebx+colorO]         pcmpeqw mm3, [eax+colorB]         pop eax         pand mm0, mm1         pxor mm1, mm1         pand mm0, mm2         pcmpeqw mm3, mm1         pand mm0, mm3                 ;result in mm0         ;if ((colorA == colorB) && (colorG != colorC) && (colorA == colorH) && (colorC == colorM)         movq mm4, [eax+ebx+colorA]        ;mm4 and mm5 contain colorA         movq mm6, [eax+ebx+ebx+colorC]        ;mm6 and mm7 contain colorC         movq mm5, mm4         movq mm7, mm6         push eax         add eax, ebx         pcmpeqw mm4, [eax+ebx+colorH]         pcmpeqw mm5, [eax+colorB]         pcmpeqw mm6, [eax+ebx+ebx+colorM]         pcmpeqw mm7, [eax+colorG]         pop eax         pand mm4, mm5         pxor mm5, mm5         pand mm4, mm6         pcmpeqw mm7, mm5         pand mm4, mm7                 ;result in mm4         por mm0, mm4                  ;combine the masks         movq [Mask1], mm0         ;--------------------------------------------;4         ;if ((colorB == colorC) && (colorA != colorD) && (colorC == colorH) && (colorA == colorF)         movq mm0, [eax+ebx+ebx+colorC]        ;mm0 and mm1 contain colorC         movq mm2, [eax+ebx+colorA]        ;mm2 and mm3 contain colorA         movq mm1, mm0         movq mm3, mm2         pcmpeqw mm0, [eax+ebx+colorB]         pcmpeqw mm1, [eax+ebx+ebx+colorH]         pcmpeqw mm2, [eax+colorF]         pcmpeqw mm3, [eax+ebx+ebx+colorD]         pand mm0, mm1         pxor mm1, mm1         pand mm0, mm2         pcmpeqw mm3, mm1         pand mm0, mm3                 ;result in mm0         ;if ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI)         movq mm4, [eax+ebx+ebx+colorC]        ;mm4 and mm5 contain colorC         movq mm6, [eax+ebx+colorA]        ;mm6 and mm7 contain colorA         movq mm5, mm4         movq mm7, mm6         pcmpeqw mm4, [eax+ebx+ebx+colorD]         pcmpeqw mm5, [eax+ebx+colorG]         pcmpeqw mm6, [eax+colorI]         pcmpeqw mm7, [eax+ebx+ebx+colorH]         pand mm4, mm5         pxor mm5, mm5         pand mm4, mm6         pcmpeqw mm7, mm5         pand mm4, mm7                 ;result in mm4         por mm0, mm4                  ;combine the masks         movq [Mask2], mm0         ;----------------------------------------------;interpolate colorA and colorC         movq mm0, [eax+ebx+colorA]         movq mm1, [eax+ebx+ebx+colorC]         movq mm2, mm0         movq mm3, mm1         pand mm0, [colorMask]         pand mm1, [colorMask]         psrlw mm0, 1         psrlw mm1, 1         pand mm3, [lowPixelMask]         paddw mm0, mm1         pand mm3, mm2         paddw mm0, mm3                ;mm0 contains the interpolated values         ;-------------         ;assemble the pixels         movq mm1, [eax+ebx+colorA]         movq mm2, [eax+ebx+ebx+colorC]         movq mm3, [Mask1]         movq mm4, [Mask2]         pand mm1, mm3         pand mm2, mm4         por mm3, mm4         pxor mm7, mm7         por mm1, mm2         pcmpeqw mm3, mm7         pand mm0, mm3         por mm0, mm1         movq [ACPixel], mm0;////////////////////////////////; Decide which "branch" to take;--------------------------------         movq mm0, [eax+ebx+colorA]         movq mm1, [eax+ebx+colorB]         movq mm6, mm0         movq mm7, mm1         pcmpeqw mm0, [eax+ebx+ebx+colorD]         pcmpeqw mm1, [eax+ebx+ebx+colorC]         pcmpeqw mm6, mm7         movq mm2, mm0         movq mm3, mm0         pand mm0, mm1       ;colorA == colorD && colorB == colorC         pxor mm7, mm7         pcmpeqw mm2, mm7         pand mm6, mm0         pand mm2, mm1       ;colorA != colorD && colorB == colorC         pcmpeqw mm1, mm7         pand mm1, mm3       ;colorA == colorD && colorB != colorC         pxor mm0, mm6         por mm1, mm6         movq mm7, mm0         movq [Mask2], mm2         packsswb mm7, mm7         movq [Mask1], mm1         movd ecx, mm7         test ecx, ecx         jz near .SKIP_GUESS;---------------------------------------------; Map of the pixels:                    I|E F|J;                                       G|A B|K;                                       H|C D|L;                                       M|N O|P         movq mm6, mm0         movq mm4, [eax+ebx+colorA]         movq mm5, [eax+ebx+colorB]         pxor mm7, mm7         pand mm6, [ONE]         movq mm0, [eax+colorE]         movq mm1, [eax+ebx+colorG]         movq mm2, mm0         movq mm3, mm1         pcmpeqw mm0, mm4         pcmpeqw mm1, mm4         pcmpeqw mm2, mm5         pcmpeqw mm3, mm5         pand mm0, mm6         pand mm1, mm6         pand mm2, mm6         pand mm3, mm6         paddw mm0, mm1         paddw mm2, mm3         pxor mm3, mm3         pcmpgtw mm0, mm6         pcmpgtw mm2, mm6         pcmpeqw mm0, mm3         pcmpeqw mm2, mm3         pand mm0, mm6         pand mm2, mm6         paddw mm7, mm0         psubw mm7, mm2         movq mm0, [eax+colorF]         movq mm1, [eax+ebx+colorK]         movq mm2, mm0         movq mm3, mm1         pcmpeqw mm0, mm4         pcmpeqw mm1, mm4         pcmpeqw mm2, mm5         pcmpeqw mm3, mm5         pand mm0, mm6         pand mm1, mm6         pand mm2, mm6         pand mm3, mm6         paddw mm0, mm1         paddw mm2, mm3         pxor mm3, mm3         pcmpgtw mm0, mm6         pcmpgtw mm2, mm6         pcmpeqw mm0, mm3         pcmpeqw mm2, mm3         pand mm0, mm6         pand mm2, mm6         paddw mm7, mm0         psubw mm7, mm2         push eax         add eax, ebx         movq mm0, [eax+ebx+colorH]         movq mm1, [eax+ebx+ebx+colorN]         movq mm2, mm0         movq mm3, mm1         pcmpeqw mm0, mm4         pcmpeqw mm1, mm4         pcmpeqw mm2, mm5         pcmpeqw mm3, mm5         pand mm0, mm6         pand mm1, mm6         pand mm2, mm6         pand mm3, mm6         paddw mm0, mm1         paddw mm2, mm3         pxor mm3, mm3         pcmpgtw mm0, mm6         pcmpgtw mm2, mm6         pcmpeqw mm0, mm3         pcmpeqw mm2, mm3         pand mm0, mm6         pand mm2, mm6         paddw mm7, mm0         psubw mm7, mm2         movq mm0, [eax+ebx+colorL]         movq mm1, [eax+ebx+ebx+colorO]         movq mm2, mm0         movq mm3, mm1         pcmpeqw mm0, mm4         pcmpeqw mm1, mm4         pcmpeqw mm2, mm5         pcmpeqw mm3, mm5         pand mm0, mm6         pand mm1, mm6         pand mm2, mm6         pand mm3, mm6         paddw mm0, mm1         paddw mm2, mm3         pxor mm3, mm3         pcmpgtw mm0, mm6         pcmpgtw mm2, mm6         pcmpeqw mm0, mm3         pcmpeqw mm2, mm3         pand mm0, mm6         pand mm2, mm6         paddw mm7, mm0         psubw mm7, mm2         pop eax         movq mm1, mm7         pxor mm0, mm0         pcmpgtw mm7, mm0         pcmpgtw mm0, mm1         por mm7, [Mask1]         por mm0, [Mask2]         movq [Mask1], mm7         movq [Mask2], mm0.SKIP_GUESS:         ;----------------------------         ;interpolate A, B, C and D         movq mm0, [eax+ebx+colorA]         movq mm1, [eax+ebx+colorB]         movq mm4, mm0         movq mm2, [eax+ebx+ebx+colorC]         movq mm5, mm1         movq mm3, [qcolorMask]         movq mm6, mm2         movq mm7, [qlowpixelMask]         pand mm0, mm3         pand mm1, mm3         pand mm2, mm3         pand mm3, [eax+ebx+ebx+colorD]         psrlw mm0, 2         pand mm4, mm7         psrlw mm1, 2         pand mm5, mm7         psrlw mm2, 2         pand mm6, mm7         psrlw mm3, 2         pand mm7, [eax+ebx+ebx+colorD]         paddw mm0, mm1         paddw mm2, mm3         paddw mm4, mm5         paddw mm6, mm7         paddw mm4, mm6         paddw mm0, mm2         psrlw mm4, 2         pand mm4, [qlowpixelMask]         paddw mm0, mm4      ;mm0 contains the interpolated value of A, B, C and D;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\         ;assemble the pixels         movq mm1, [Mask1]         movq mm2, [Mask2]         movq mm4, [eax+ebx+colorA]         movq mm5, [eax+ebx+colorB]         pand mm4, mm1         pand mm5, mm2         pxor mm7, mm7         por mm1, mm2         por mm4, mm5         pcmpeqw mm1, mm7         pand mm0, mm1         por mm4, mm0        ;mm4 contains the diagonal pixels         movq mm0, [ACPixel]         movq mm1, mm0         punpcklwd mm0, mm4         punpckhwd mm1, mm4         push edx         add edx, [ebp+dstPitch]%ifdef FAR_POINTER         movq [fs:edx], mm0         movq [fs:edx+8], mm1%else         movq [edx], mm0         movq [edx+8], mm1%endif         pop edx.SKIP_PROCESS:         mov ecx, [ebp+deltaPtr]         add ecx, 8         mov [ebp+deltaPtr], ecx         add edx, 16         add eax, 8         pop ecx         sub ecx, 4         cmp ecx, 0         jg  near .Loop; Restore some stuff         popad         mov esp, ebp         pop ebp         emms         ret;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------%ifdef __DJGPP___Init_2xSaIMMX:%elseInit_2xSaIMMX:%endif; Store some stuff	 push ebp	 mov ebp, esp         push edx;Damn thing doesn't work;	 mov eax,1;	 cpuid;	 test edx, 0x00800000     ;test bit 23;	 jz end2 ;bit not set => no MMX detected	 mov eax, [ebp+8]         ;PixelFormat	 cmp eax, 555	 jz Bits555	 cmp eax, 565	 jz Bits565end2:	 mov eax, 1	 jmp endBits555:         mov edx, 0x7BDE7BDE         mov eax, colorMask         mov [eax], edx         mov [eax+4], edx         mov edx, 0x04210421         mov eax, lowPixelMask         mov [eax], edx         mov [eax+4], edx         mov edx, 0x739C739C         mov eax, qcolorMask         mov [eax], edx         mov [eax+4], edx         mov edx, 0x0C630C63         mov eax, qlowpixelMask         mov [eax], edx         mov [eax+4], edx         mov eax, 0         jmp endBits565:         mov edx, 0xF7DEF7DE         mov eax, colorMask         mov [eax], edx         mov [eax+4], edx         mov edx, 0x08210821         mov eax, lowPixelMask         mov [eax], edx         mov [eax+4], edx         mov edx, 0xE79CE79C         mov eax, qcolorMask         mov [eax], edx         mov [eax+4], edx         mov edx, 0x18631863         mov eax, qlowpixelMask         mov [eax], edx         mov [eax+4], edx         mov eax, 0         jmp endend:	         pop edx	 mov esp, ebp	 pop ebp	 ret;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------	SECTION .data ALIGN = 32;Some constantscolorMask     dd 0xF7DEF7DE,0xF7DEF7DElowPixelMask  dd 0x08210821,0x08210821qcolorMask    dd 0xE79CE79C,0xE79CE79CqlowpixelMask dd 0x18631863,0x18631863darkenMask    dd 0xC718C718,0xC718C718GreenMask     dd 0x07E007E0,0x07E007E0RedBlueMask   dd 0xF81FF81F,0xF81FF81FFALSE         dd 0x00000000,0x00000000TRUE          dd 0xffffffff,0xffffffffONE           dd 0x00010001,0x00010001        SECTION .bss ALIGN = 32ACPixel       resb 8Mask1         resb 8Mask2         resb 8I56Pixel      resb 8I23Pixel      resb 8I5556Pixel    resb 8I2223Pixel    resb 8I5666Pixel    resb 8I2333Pixel    resb 8Mask26        resb 8Mask35        resb 8Mask26b       resb 8Mask35b       resb 8product1a     resb 8product1b     resb 8product2a     resb 8product2b     resb 8final1a       resb 8final1b       resb 8final2a       resb 8final2b       resb 8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -