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

📄 2xsaimmx.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 INC
📖 第 1 页 / 共 3 页
字号:
    mov ebx, [ebp+srcPitch]    mov ecx, [ebp+width]    ; eax now points to colorE    sub eax, ebx; Main Loop.Loop:   push ecx    ;-----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    ;---------------------------------;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    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 __DJGPP__    movq [fs:edx], mm5    movq [fs:edx+8], mm6%else    movq [es:edx], mm5    movq [es: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 mm1, [Mask2]    movq [Mask1], mm7    movq [Mask2], mm1.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 __DJGPP__    movq [fs:edx], mm0    movq [fs:edx+8], mm1%else    movq [es:edx], mm0    movq [es: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;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------NEWSYM Init_2xSaIMMX; 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 end1Bits555:    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 end1Bits565:    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 end1end1:    pop edx    mov esp, ebp    pop ebp    ret;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------;-------------------------------------------------------------------------SECTION .data;Some constantscolorMask     dd 0xF7DEF7DE, 0xF7DEF7DElowPixelMask  dd 0x08210821, 0x08210821qcolorMask    dd 0xE79CE79C, 0xE79CE79CqlowpixelMask dd 0x18631863, 0x18631863FALSE         dd 0x00000000, 0x00000000TRUE          dd 0xffffffff, 0xffffffffONE           dd 0x00010001, 0x00010001SECTION .bssACPixel       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 + -