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

📄 2xsaimmx.asm

📁 SFC游戏模拟器 snes9x 1.43 的原代码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
         pcmpeqw mm0, mm5         pcmpeqw mm1, mm5         pcmpeqw mm2, mm5         pcmpeqw mm3, mm5         pand mm0, mm1         pand mm2, mm3         por mm0, mm2         pand mm0, [Mask26]         movq [Mask26b], mm0         ;--------------------         movq mm0, mm4         movq mm1, mm5         movq mm2, mm0         pcmpeqw mm2, mm1         pcmpeqw mm0, mm6         pcmpeqw mm1, mm7         pand mm0, mm1         pand mm2, mm0         pxor mm0, mm2         movq mm7, mm0         ;------------------         packsswb mm7, mm7         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+color5]         movq mm5, [eax+ebx+color6]         pxor mm7, mm7         pand mm6, [ONE]         movq mm0, [eax+colorB1]         movq mm1, [eax+ebx+color4]         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+colorB2]         movq mm1, [eax+ebx+colorS2]         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+color1]         movq mm1, [eax+ebx+ebx+colorA1]         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+colorS1]         movq mm1, [eax+ebx+ebx+colorA2]         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, [Mask35]         por mm0, [Mask26]         movq [Mask35], mm7         movq [Mask26], mm0.SKIP_GUESS:         ;Start the ASSEMBLY !!!         movq mm4, [Mask35]         movq mm5, [Mask26]         movq mm6, [Mask35b]         movq mm7, [Mask26b]         movq mm0, [eax+ebx+color5]         movq mm1, [eax+ebx+color6]         movq mm2, [eax+ebx+ebx+color2]         movq mm3, [eax+ebx+ebx+color3]         pcmpeqw mm0, mm2         pcmpeqw mm1, mm3         movq mm2, mm4         movq mm3, mm5         por mm0, mm1         por mm2, mm3         pand mm2, mm0         pxor mm0, mm2         movq mm3, mm0         movq mm2, mm0         pxor mm0, mm0         por mm2, mm4         pxor mm4, mm6         por mm2, mm5         pxor mm5, mm7         pcmpeqw mm2, mm0         ;----------------         movq mm0, [eax+ebx+color5]         movq mm1, mm3         por mm1, mm4         por mm1, mm6         pand mm0, mm1         movq mm1, mm5         pand mm1, [I56Pixel]         por mm0, mm1         movq mm1, mm7         pand mm1, [product1b]         por mm0, mm1         movq mm1, mm2         pand mm1, [product1a]         por mm0, mm1         movq [final1a], mm0         movq mm0, [eax+ebx+color6]         movq mm1, mm3         por mm1, mm5         por mm1, mm7         pand mm0, mm1         movq mm1, mm4         pand mm1, [I56Pixel]         por mm0, mm1         movq mm1, mm6         pand mm1, [product1a]         por mm0, mm1         movq mm1, mm2         pand mm1, [product1b]         por mm0, mm1         movq [final1b], mm0         movq mm0, [eax+ebx+ebx+color2]         movq mm1, mm3         por mm1, mm5         por mm1, mm7         pand mm0, mm1         movq mm1, mm4         pand mm1, [I23Pixel]         por mm0, mm1         movq mm1, mm6         pand mm1, [product2b]         por mm0, mm1         movq mm1, mm2         pand mm1, [product2a]         por mm0, mm1         movq [final2a], mm0         movq mm0, [eax+ebx+ebx+color3]         movq mm1, mm3         por mm1, mm4         por mm1, mm6         pand mm0, mm1         movq mm1, mm5         pand mm1, [I23Pixel]         por mm0, mm1         movq mm1, mm7         pand mm1, [product2a]         por mm0, mm1         movq mm1, mm2         pand mm1, [product2b]         por mm0, mm1         movq [final2b], mm0         movq mm0, [final1a]         movq mm2, [final1b]         movq mm1, mm0         movq mm4, [final2a]         movq mm6, [final2b]         movq mm5, mm4         punpcklwd mm0, mm2         punpckhwd mm1, mm2         punpcklwd mm4, mm6         punpckhwd mm5, mm6%ifdef FAR_POINTER         movq [fs:edx], mm0         movq [fs:edx+8], mm1         push edx         add edx, [ebp+dstPitch]         movq [fs:edx], mm4         movq [fs:edx+8], mm5         pop edx%else         movq [edx], mm0         movq [edx+8], mm1         push edx         add edx, [ebp+dstPitch]         movq [edx], mm4         movq [edx+8], mm5         pop edx%endif.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;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;This is version 0.50colorI   equ -2colorE   equ 0colorF   equ 2colorJ   equ 4colorG   equ -2colorA   equ 0colorB   equ 2colorK   equ 4colorH   equ -2colorC   equ 0colorD   equ 2colorL   equ 4colorM   equ -2colorN   equ 0colorO   equ 2colorP   equ 4%ifdef __DJGPP____2xSaILine:%else_2xSaILine:%endif; Store some stuff	 push ebp	 mov ebp, esp         pushad; Prepare the destination%ifdef FAR_POINTER         ; Set the selector         mov eax, [ebp+dstSegment]         mov fs, ax%endif         mov edx, [ebp+dstOffset]         ; edx points to the screen; Prepare the source         ; eax points to colorA         mov eax, [ebp+srcPtr]         mov ebx, [ebp+srcPitch]         mov ecx, [ebp+width]         ; eax now points to colorE         sub eax, ebx; Main Loop.Loop:   push ecx	 cmp byte [snes9x_clear_change_log], 0	 jnz near .SKIP_DELTA_TEST	         ;-----Check Delta------------------         mov ecx, [ebp+deltaPtr]         movq mm0, [eax+colorI]         movq mm1, [eax+colorJ]         movq mm2, [eax+ebx+colorG]         movq mm3, [eax+ebx+colorK]         movq mm4, [eax+ebx+ebx+colorH]         movq mm5, [eax+ebx+ebx+colorL]         push eax         add eax, ebx         movq mm6, [eax+ebx+ebx+colorM]         movq mm7, [eax+ebx+ebx+colorP]         pop eax         pcmpeqw mm0, [ecx+2+colorI]         pcmpeqw mm1, [ecx+2+colorK]         pcmpeqw mm2, [ecx+ebx+2+colorG]         pcmpeqw mm3, [ecx+ebx+2+colorK]         pcmpeqw mm4, [ecx+ebx+ebx+2+colorH]         pcmpeqw mm5, [ecx+ebx+ebx+2+colorL]         add ecx, ebx         pcmpeqw mm6, [ecx+ebx+ebx+2+colorM]         pcmpeqw mm7, [ecx+ebx+ebx+2+colorP]         sub ecx, ebx         pand mm0, mm1         pand mm2, mm3         pand mm4, mm5         pand mm6, mm7         pand mm0, mm2         pand mm4, mm6         pxor mm7, mm7         pand mm0, mm4         movq mm6, [eax+colorI]         pcmpeqw mm7, mm0         movq [ecx+2+colorI], mm6         packsswb mm7, mm7         movd ecx, mm7         test ecx, ecx         jz near .SKIP_PROCESS         ;End Delta.SKIP_DELTA_TEST:	         ;---------------------------------;1         ;if ((colorA == colorD) && (colorB != colorC) && (colorA == colorE) && (colorB == colorL)         movq mm0, [eax+ebx+colorA]        ;mm0 and mm1 contain colorA         movq mm2, [eax+ebx+colorB]        ;mm2 and mm3 contain colorB         movq mm1, mm0         movq mm3, mm2         pcmpeqw mm0, [eax+ebx+ebx+colorD]         pcmpeqw mm1, [eax+colorE]         pcmpeqw mm2, [eax+ebx+ebx+colorL]         pcmpeqw mm3, [eax+ebx+ebx+colorC]         pand mm0, mm1         pxor mm1, mm1         pand mm0, mm2         pcmpeqw mm3, mm1         pand mm0, mm3                 ;result in mm0         ;if ((colorA == colorC) && (colorB != colorE) && (colorA == colorF) && (colorB == colorJ)         movq mm4, [eax+ebx+colorA]        ;mm4 and mm5 contain colorA         movq mm6, [eax+ebx+colorB]        ;mm6 and mm7 contain colorB         movq mm5, mm4         movq mm7, mm6         pcmpeqw mm4, [eax+ebx+ebx+colorC]         pcmpeqw mm5, [eax+colorF]         pcmpeqw mm6, [eax+colorJ]         pcmpeqw mm7, [eax+colorE]         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         ;--------------------------------------------;2         ;if ((colorB == colorC) && (colorA != colorD) && (colorB == colorF) && (colorA == colorH)         movq mm0, [eax+ebx+colorB]        ;mm0 and mm1 contain colorB         movq mm2, [eax+ebx+colorA]        ;mm2 and mm3 contain colorA         movq mm1, mm0         movq mm3, mm2         pcmpeqw mm0, [eax+ebx+ebx+colorC]         pcmpeqw mm1, [eax+colorF]         pcmpeqw mm2, [eax+ebx+ebx+colorH]         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 ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI)         movq mm4, [eax+ebx+colorB]        ;mm4 and mm5 contain colorB         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+colorE]         pcmpeqw mm6, [eax+colorI]         pcmpeqw mm7, [eax+colorF]         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 colorB         movq mm0, [eax+ebx+colorA]         movq mm1, [eax+ebx+colorB]         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+colorB]         movq mm3, [Mask1]         movq mm5, mm1         movq mm4, [Mask2]         movq mm6, mm1         pand mm1, mm3         por mm3, mm4

⌨️ 快捷键说明

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