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

📄 copyvid.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 INC
📖 第 1 页 / 共 5 页
字号:
;    dec dl;    jnz .loopabhq;    pop es;    ret%endifNEWSYM ConvertToAFormat    cmp byte[GUIOn],1    je .nonewgfx    cmp byte[newengen],0    je .nonewgfx    ret.nonewgfx    mov eax,[vesa2_clbitng2]    mov ebx,eax    and eax,11111111110000001111111111000000b    and ebx,00000000000111110000000000011111b    or eax,ebx    mov [vesavaland],eax    mov [vesavaland+4],eax    mov esi,[vidbuffer]    add esi,16*2+256*2+32*2    mov dl,[resolutn]    dec dl    dec dl    cmp byte[MMXSupport],1    je near .mmxconv.crgbloop    mov ecx,128.crgbloop2    mov eax,[esi]    mov ebx,eax    and eax,11111111110000001111111111000000b    and ebx,00000000000111110000000000011111b    shr eax,1    or ebx,eax    mov [esi],ebx    add esi,4    dec ecx    jnz .crgbloop2    add esi,64    dec dl    jnz .crgbloop    jmp .nocopyvesa2r.mmxconv.crgbloopm    mov ecx,64    movq mm6,[mmxvalanda]    movq mm7,[mmxvalandb].crgbloop2m    movq mm0,[esi]    movq mm1,mm0    pand mm0,mm6    pand mm1,mm7    psrlw mm0,1    por mm0,mm1    movq [esi],mm0    add esi,8    dec ecx    jnz .crgbloop2m    add esi,64    dec dl    jnz .crgbloopm    emms.nocopyvesa2r    retNEWSYM UnConvertToAFormat    mov esi,[vidbuffer]    add esi,16*2+256*2+32*2    mov dl,[resolutn]    dec dl    dec dl.crgbloop    mov ecx,128.crgbloop2    mov eax,[esi]    mov ebx,eax    and eax,01111111111000000111111111100000b    and ebx,00000000000111110000000000011111b    shl eax,1    or ebx,eax    mov [esi],ebx    add esi,4    dec ecx    jnz .crgbloop2    add esi,64    dec dl    jnz .crgbloop    ret%ifdef __MSDOS__NEWSYM copyvesa2320x480x16b    cmp byte[curblank],40h    jne .startcopy    ret.startcopy;    mov eax,[vesa2_clbitng2];    mov [vesavaland],eax;    mov [vesavaland+4],eax;    cmp byte[vesa2red10],1;    jne .nocopyvesa2r;    call ConvertToAFormat;.nocopyvesa2r    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,320*2*2+32*2    cmp word[resolutn],224    jne .res239    add edi,8*320*2.res239    add edi,[VidStartDraw]    add esi,16*2+256*2+16*2+16*2    xor eax,eax    mov dl,[resolutn]    dec dl    dec dl    cmp byte[ScreenScale],1    je near .fullscreen    FilterTest .interpolate    cmp byte[scanlines],1    je near .scanlines    cmp byte[scanlines],3    je near .halfscanlines    cmp byte[scanlines],2    je near .quartscanlines    cmp byte[MMXSupport],1    je .loopb.loopa    mov ecx,256/4*2    rep movsd    sub esi,256*2    add edi,32*2+32*2    mov ecx,256/4*2    rep movsd    add esi,16*2+16*2    add edi,32*2+32*2    dec dl    jnz .loopa    jmp .done.loopb    mov ecx,256/16*2    MMXStuff    sub esi,256*2    add edi,32*2+32*2    mov ecx,256/16*2    MMXStuff    add esi,16*2+16*2    add edi,32*2+32*2    dec dl    jnz .loopb    emms    jmp .done.scanlines    cmp byte[MMXSupport],1    je .sloopb.sloopa    mov ecx,256/4*2    rep movsd    add esi,16*2+16*2    add edi,32*2+320*2+32*2    dec dl    jnz .sloopa    jmp .done.sloopb    mov ecx,256/16*2    MMXStuff    add esi,16*2+16*2    add edi,32*2+320*2+32*2    dec dl    jnz .sloopb    emms    jmp .done.halfscanlines    ;cmp byte[MMXSupport]    ;je near .hsloopb.hsloopa    mov ecx,256/4*2    rep movsd    sub esi,256*2    add edi,32*2+32*2    mov ecx,256/2.hsloopa2    mov ax,[esi]    mov bx,[esi+2]    shr ax,byte 1    shr bx,byte 1    and ax,7befh    and bx,7befh    mov [es:edi],ax    mov [es:edi+2],bx    add esi,byte 4    add edi,byte 4    dec ecx    jnz .hsloopa2    add esi,16*2+16*2    add edi,32*2+32*2    dec dl    jnz .hsloopa    jmp .done.quartscanlines    ;cmp byte[MMXSupport],1    ;je .qsloopb.qsloopa    mov ecx,256/4*2    rep movsd    sub esi,256*2    add edi,32*2+32*2    mov ecx,256/2.qsloopa2    push ecx    push edx    mov ax,[esi]    mov bx,[esi+2]    mov cx,ax    mov dx,bx    shr cx,byte 2    shr dx,byte 2    and cx,39e7h    and dx,39e7h    sub ax,cx    sub bx,dx    mov [es:edi],ax    mov [es:edi+2],bx    pop edx    pop ecx    add esi,byte 4    add edi,byte 4    dec ecx    jnz .qsloopa2    add esi,16*2+16*2    add edi,32*2+32*2    dec dl    jnz .qsloopa    jmp .done.fullscreen    sub edi,32*2    cmp byte[scanlines],1    je .fsloopa2    cmp byte[scanlines],3    je .fsloopa3    cmp byte[scanlines],2    je .fsloopa4.fsloopa    mov ecx,256/4    call .fsloopb    sub esi,256*2    mov ecx,256/4    call .fsloopb    add esi,16*2+16*2    dec dl    jnz .fsloopa    jmp .done.fsloopa2    mov ecx,256/4    call .fsloopb    add esi,16*2+16*2    add edi,320*2    dec dl    jnz .fsloopa2    jmp .done.fsloopa3    mov ecx,256/4    call .fsloopb    sub esi,256*2    mov ecx,256/4    call .fsloopb2    add esi,16*2+16*2    dec dl    jnz .fsloopa3    jmp .done.fsloopa4    mov ecx,256/4    call .fsloopb    sub esi,256*2    mov ecx,256/4    call .fsloopb3    add esi,16*2+16*2    dec dl    jnz .fsloopa4    jmp .done.fsloopb    mov eax,[esi]    mov [es:edi],ax    mov [es:edi+2],eax    add esi,byte 4    add edi,byte 6    movsd    dec ecx    jnz .fsloopb    ret.fsloopb2    mov ax,[esi]    mov bx,[esi+2]    shr ax,byte 1    shr bx,byte 1    and ax,7befh    and bx,7befh    mov [es:edi],ax    mov [es:edi+2],ax    mov [es:edi+4],bx    add esi,byte 4    add edi,byte 6    mov ax,[esi]    mov bx,[esi+2]    shr ax,byte 1    shr bx,byte 1    and ax,7befh    and bx,7befh    mov [es:edi],ax    mov [es:edi+2],bx    add esi,byte 4    add edi,byte 4    dec ecx    jnz .fsloopb2    ret.fsloopb3    push ecx    push edx    mov ax,[esi]    mov bx,[esi+2]    mov cx,ax    mov dx,bx    shr cx,byte 2    shr dx,byte 2    and cx,39e7h    and dx,39e7h    sub ax,cx    sub bx,dx    mov [es:edi],ax    mov [es:edi+2],ax    mov [es:edi+4],bx    add esi,byte 4    add edi,byte 6    mov ax,[esi]    mov bx,[esi+2]    mov cx,ax    mov dx,bx    shr cx,byte 2    shr dx,byte 2    and cx,39e7h    and dx,39e7h    sub ax,cx    sub bx,dx    mov [es:edi],ax    mov [es:edi+2],bx    add esi,byte 4    add edi,byte 4    pop edx    pop ecx    dec ecx    jnz .fsloopb3    ret.interpolate    cmp byte[scanlines],1    je near .inloopa2.inloopa    SSInterpLineH    sub esi,256*2    add edi,32*2+32*2    SSInterpLineH    add esi,16*2+16*2    add edi,32*2+32*2    dec dl    jnz near .inloopa    jmp .done.inloopa2    SSInterpLineH    add esi,16*2+16*2    add edi,32*2+320*2+32*2    dec dl    jnz .inloopa2.done    pop es    ret;*******************************************************; Copy VESA2 640x480x16b Copies buffer to 640x480x16bVB2;*******************************************************%macro copya640x480 0    mov [es:edi],dx    mov [es:edi+2],dx    mov [es:edi+640*2],dx    mov [es:edi+640*2+2],dx%endmacro%macro copyb640x480 0    mov [es:edi+4],dx    mov [es:edi+6],dx    mov [es:edi+640*2+4],dx    mov [es:edi+640*2+6],dx%endmacro%macro copya640x480sl 0    mov [es:edi],dx    mov [es:edi+2],dx%endmacro%macro copyb640x480sl 0    mov [es:edi+4],dx    mov [es:edi+6],dx%endmacro%macro precheckvesa12 1    cmp edx,%1    ja %%a    mov ecx,edx%%a%endmacro%macro postcheckvesa12 4    cmp edx,%3    ja %%a    call VESA12Bankswitch    mov ecx,%3    sub ecx,edx    add edx,%4    or ecx,ecx    jz %%a    jmp %1%%a    sub edx,%3    sub edx,%2    jg %%nobankswitch    add edx,%4    call VESA12Bankswitch%%nobankswitch%endmacro;NEWSYM copyvesa12640x480x16bgui;    cmp byte[curblank],40h;    jne .startcopy;    ret;.startcopy;    push es;    mov word[bankpos],0;    call VESA12Bankswitch;    mov ax,[selcA000];    mov es,ax;    mov esi,[vidbuffer];    mov edi,32*2*2           ; Draw @ Y from 9 to 247;    cmp word[resolutn],224;    jne .res239;    mov edi,8*320*2*2+32*2*2;.res239;    add esi,16+256+32;    xor eax,eax;    mov dl,[resolutn];    sub dl,2;    mov [lineleft],dl;    mov edx,65536;    sub edx,edi;    shr edx,2;    cmp byte[smallscreenon],1;    je near .smallscreen;    cmp byte[scanlines],1;    je near .scanlines;.loopa;    mov ecx,256;    xor eax,eax;    precheckvesa12 256;.a;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .a;    postcheckvesa12 .a,64,256,16384;    sub esi,256;    add edi,128*2;    mov ecx,256;    xor eax,eax;    precheckvesa12 256;.a2;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .a2;    postcheckvesa12 .a2,64,256,16384;    add esi,32;    add edi,128*2;    dec byte[lineleft];    jnz near .loopa;    pop es;    ret;;.scanlines;.loopa2;    mov ecx,256;    xor eax,eax;    precheckvesa12 256;.ab;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .ab;    postcheckvesa12 .ab,64+320,256,16384;    add esi,32;    add edi,128*2+640*2;    dec byte[lineleft];    jnz near .loopa2;    pop es;    ret;;.smallscreen;    add edx,edx;.loopa3;    mov ecx,256;    xor eax,eax;    precheckvesa12 256;.ac;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    inc esi;    add edi,byte 2;    dec ecx;    jnz .ac;    postcheckvesa12 .ac,128+256,256,32768;    add esi,32;    add edi,128*2+256*2;    dec byte[lineleft];    jnz near .loopa3;    pop es;    retVESA12Bankswitch:    pushad    mov ax,4F05h    mov bx,0    mov dx,[bankpos]    int 10h    mov ax,[granadd]    add word[bankpos],ax    popad    sub edi,65536    ret;NEWSYM copyvesa2640x480x16bgui;    je near smallscreen640x480x16bgui.fullscreen;    cmp byte[curblank],40h;    jne .startcopy;    ret;.startcopy;    push es;    mov ax,[vesa2selec];    mov es,ax;    mov esi,[vidbuffer];    mov edi,32*2*2           ; Draw @ Y from 9 to 247;    cmp word[resolutn],224;    jne .res239;    mov edi,8*320*2*2+32*2*2;.res239;    add edi,[VidStartDraw];    add esi,16+256+32;    xor eax,eax;    mov dl,[resolutn];    sub dl,2;    cmp byte[scanlines],3;    je near .halfscanlines;    cmp byte[scanlines],2;    je near .quarterscanlines;    cmp byte[scanlines],1;    je near .scanlines;.loopa;    mov ecx,256;    xor eax,eax;.a;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .a;    sub esi,256;    add edi,128*2;    mov ecx,256;    xor eax,eax;.a2;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .a2;    add esi,32;    add edi,128*2;    dec dl;    jnz .loopa;    pop es;    ret;;.scanlines;.loopab;    mov ecx,256;    xor eax,eax;.ab;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .ab;.returnb;    add esi,32;    add edi,128*2+640*2;    dec dl;    jnz .loopab;    pop es;    ret;;.halfscanlines;.loopabh;    mov ecx,256;    xor eax,eax;.abh;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .abh;    add edi,128*2;    mov ecx,256;    sub esi,256;.abh2;    mov al,[esi];    mov bx,[GUICPC+eax*2];    shl ebx,16;    mov bx,[GUICPC+eax*2];    and ebx,[vesa2_clbitng2];    shr ebx,1;    mov [es:edi],ebx;    inc esi;    add edi,4;    dec ecx;    jnz .abh2;    add esi,32;    add edi,128*2;    dec dl;    jnz .loopabh;    pop es;    ret;;.quarterscanlines;.loopabhq;    mov ecx,256;    xor eax,eax;.abhq;    mov al,[esi];    mov bx,[GUICPC+eax*2];    mov [es:edi],bx;    mov [es:edi+2],bx;    inc esi;    add edi,4;    dec ecx;    jnz .abhq;    add edi,128*2;    mov ecx,256;    sub esi,256;.abh2q;    mov al,[esi];    mov bx,[GUICPC+eax*2];    shl ebx,16;    mov bx,[GUICPC+eax*2];    and ebx,[vesa2_clbitng2];    shr ebx,1;    mov eax,ebx;    and eax,[vesa2_clbitng2];    shr eax,1;    add ebx,eax;    mov [es:edi],ebx;    xor eax,eax;    inc esi;    add edi,4;    dec ecx;    jnz .abh2q;    add esi,32;    add edi,128*2;    dec dl;    jnz .loopabhq;    pop es;    ret;;NEWSYM smallscreen640x480x16bgui;    cmp byte[curblank],40h;    jne .startcopy;    ret;.startcopy;    push es;    mov ax,[vesa2selec];    mov es,ax;    mov esi,[vidbuffer];    mov edi,32*2*2           ; Draw @ Y from 9 to 247;    cmp word[resolutn],224;    jne .res239;    mov edi,8*640*2+32*2*2;.res239;    add edi,[VidSta

⌨️ 快捷键说明

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