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

📄 copyvid.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 INC
📖 第 1 页 / 共 5 页
字号:
.startcopy    ; video memory selector    push es    mov ax,[selcA000]    mov es,ax    mov esi,[vidbuffer]    ; center on output screen    mov edi,256    cmp word[resolutn],224    jne .res239    mov edi,8*256+256.res239    ; address of first source line to copy    add esi,(16+256+16)+16    mov bl,[resolutn]    sub bl,2    jmp copymodeqloop;********************************************************; CopyModeQ 256       Copies buffer into chained 256x256;********************************************************NEWSYM copymodeq256    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    ; video memory selector    push es    mov ax,[selcA000]    mov es,ax    mov esi,[vidbuffer]    ; center on output screen    mov edi,8*256+256    cmp word[resolutn],224    jne .res239    mov edi,16*256+256.res239    ; address of first source line to copy    add esi,(16+256+16)+16    mov bl,[resolutn]    sub bl,2;edi = offset in output of first line;esi = address of first line to be copied;bl = number of lines to copy*dlcopymodeqloop:    cmp byte[MMXSupport],1    je near .loopb.loopa    mov ecx,256/4    rep movsd    add esi,16+16    dec bl    jnz .loopa    jmp .done.loopb    mov ecx,256/16    MMXStuff    add esi,16+16    dec bl    jnz .loopb    emms.done    pop es    ret;*******************************************************; Copy VESA2 320x240x8b  Copies buffer to 320x240x8bVBE2;*******************************************************;     Input:    AX   = 4F07h   VBE Set/Get Display Start Control;               BH   = 00h          Reserved and must be 00h;               BL   = 00h          Set Display Start;                    = 01h          Get Display Start;                    = 80h          Set Display Start during Vertical;     Retrace;               CX   =         First Displayed Pixel In Scan Line;                              (Set Display Start only);               DX   =         First Displayed Scan Line (Set Display Start;     only)NEWSYM copyvesa2320x240x8b    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,320+32    cmp word[resolutn],224    jne .res239    add edi,8*320.res239    add edi,[VidStartDraw]    add esi,16+256+16+16    xor eax,eax    mov dl,[resolutn]    dec dl    dec dl    cmp byte[ScreenScale],1    je .fullscreen    cmp byte[MMXSupport],1    je near .loopb.loopa    mov ecx,256/4    rep movsd    add esi,16+16    add edi,32+32    dec dl    jnz .loopa    jmp .done.loopb    mov ecx,256/16    MMXStuff    add esi,16+16    add edi,32+32    dec dl    jnz .loopb    emms    jmp .done.fullscreen    sub edi,32.fsloopa    mov ecx,256/4    jmp .fsloopb.fsloopb    mov eax,[esi]    mov [es:edi],al    mov [es:edi+1],eax    add esi,byte 4    add edi,byte 5    dec ecx    jnz .fsloopb    add esi,16+16    dec dl    jnz .fsloopa.done    pop es    ret;*******************************************************; Copy VESA2 320x480x8b  Copies buffer to 320x480x8bVBE2;*******************************************************;NEWSYM copyvesa2320x480x8bgui;    jmp copyvesa2320x480x8b;    mov byte[CurrentGUIOn],1;    jmp copyvesa2320x480x8b.noguiNEWSYM copyvesa2320x480x8b;    mov byte[CurrentGUIOn],0; .nogui    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,320*2+32    cmp word[resolutn],224    jne .res239    add edi,8*320.res239    add edi,[VidStartDraw]    add esi,16+256+16+16    xor eax,eax    mov dl,[resolutn]    dec dl    dec dl    cmp byte[ScreenScale],1    je near .fullscreen    cmp byte[scanlines],1    je near .scanlines;    cmp byte[GUIOn],1;    je .loopa;    cmp byte[f3menuen],1;    je .loopa;    cmp byte[ForceNewGfxOff],1;    je .loopa;    cmp byte[newengen],1;    je near copyvesa2320x480x8ng    cmp byte[MMXSupport],1    je .loopb.loopa    mov ecx,256/4    rep movsd    sub esi,256    add edi,32+32    mov ecx,256/4    rep movsd    add esi,16+16    add edi,32+32    dec dl    jnz .loopa    jmp .done.loopb    mov ecx,256/16    MMXStuff    sub esi,256    add edi,32+32    mov ecx,256/16    MMXStuff    add esi,16+16    add edi,32+32    dec dl    jnz .loopb    emms    jmp .done.scanlines    cmp byte[MMXSupport],1    je .sloopb.sloopa    mov ecx,256/4    rep movsd    add esi,16+16    add edi,32+320+32    dec dl    jnz .sloopa    jmp .done.sloopb    mov ecx,256/16    MMXStuff    add esi,16+16    add edi,32+320+32    dec dl    jnz .sloopb    emms    jmp .done.fullscreen    sub edi,32    cmp byte[scanlines],1    je .fsloopb.fsloopa    mov ecx,256/4    call .fsloopc    sub esi,256    mov ecx,256/4    call .fsloopc    add esi,16+16    dec dl    jnz .fsloopa    jmp .done.fsloopb    mov ecx,256/4    call .fsloopc    add esi,16+16    add edi,320    dec dl    jnz .fsloopb    jmp .done.fsloopc    mov eax,[esi]    mov [es:edi],al    mov [es:edi+1],eax    add esi,byte 4    add edi,byte 5    dec ecx    jnz .fsloopc    ret.done    pop es    ret;copyvesa2320x480x8ng:;    jmp .mode7hires;    mov ebx,1;.loopa;    cmp dword[ignor512],0;    je .ignore;    test byte[intrlng+ebx],01h;    jnz near .interlaced;.ignore;    cmp byte[Mode7HiRes],0;    je .nomode7hires;    test byte[mosenng+ebx],1;    jz .yesmode7hires;    cmp byte[mosszng+ebx],0;    jne .nomode7hires;.yesmode7hires;    test byte[intrlng+ebx],40h;    jnz .nomode7hires;    cmp byte[BGMA+ebx],7;    jne .nomode7hires;    cmp byte[BGMA+ebx+1],7;    je near .mode7hires;.nomode7hires;    mov ecx,64;.a;    mov eax,[esi];    mov [es:edi],eax;    add esi,4;    add edi,4;    dec ecx;    jnz .a;    mov ecx,64;    add edi,64;    sub esi,256;.a2r;    mov eax,[esi];    mov [es:edi],eax;    add esi,4;    add edi,4;    dec ecx;    jnz .a2r;.returnloop;    add esi,32;    add edi,64;    inc ebx;    dec dl;    jnz near .loopa;    pop es;    ret;;.mode7hires;    mov ecx,64;.a7;    mov eax,[esi];    mov [es:edi],eax;    add esi,4;    add edi,4;    dec ecx;    jnz .a7;    mov ecx,64;    add edi,64;    add esi,75036-256;.a2r7;    mov eax,[esi];    mov [es:edi],eax;    add esi,4;    add edi,4;    dec ecx;    jnz .a2r7;    sub esi,75036;    jmp .returnloop;;.interlaced;    test byte[cfield],1;    jz .b;    add edi,320;.b;    mov ecx,64;.ai;    mov eax,[esi];    mov [es:edi],eax;    add esi,4;    add edi,4;    dec ecx;    jnz .ai;    test byte[cfield],1;    jnz .bi;    add edi,320;.bi;    jmp .returnloop;*******************************************************; Copy VESA2 800x600x8b  Copies buffer to 800x600x8bVBE2;*******************************************************NEWSYM copyvesa2800x600x8b    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,60*800+144    cmp word[resolutn],224    jne .res239    add edi,8*800.res239    add edi,[VidStartDraw]    add esi,16+256+16+16    xor eax,eax    mov dl,[resolutn]    dec dl    dec dl    cmp byte[smallscreenon],1    je near .smallscreen    cmp byte[scanlines],1    je .loopa2.loopa    mov ecx,256/2    call .loopa3    sub esi,256    add edi,144+144    mov ecx,256/2    call .loopa3    add esi,16+16    add edi,144+144    dec dl    jnz .loopa    jmp .done.loopa2    mov ecx,256/2    call .loopa3    add esi,16+16    add edi,144+800+144    dec dl    jnz .loopa2    jmp .done.loopa3    mov al,[esi]    mov bl,[esi+1]    mov ah,al    mov bh,bl    mov [es:edi],ax    mov [es:edi+2],bx    add esi,byte 2    add edi,byte 4    dec ecx    jnz .loopa3    ret.smallscreen    add edi,120*800+128    cmp byte[MMXSupport],1    je .ssloopb.ssloopa    mov ecx,256/4    rep movsd    add esi,16+16    add edi,272+272    dec dl    jnz .ssloopa    jmp .done.ssloopb    mov ecx,256/16    MMXStuff    add esi,16+16    add edi,272+272    dec dl    jnz .ssloopb    jmp .done.done    pop es    ret;*********************************************************; Copy VESA2 800x600x16b  Copies buffer to 800x600x16bVBE2;*********************************************************NEWSYM copyvesa2800x600x16b    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,60*800*2+144*2    cmp word[resolutn],224    jne .res239    add edi,8*800*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[smallscreenon],1    je near .smallscreen    FilterTest .interpolate    cmp byte[scanlines],1    je .loopa2.loopa    mov ecx,256/2    call .loopa3    sub esi,256*2    add edi,144*2+144*2    mov ecx,256/2    call .loopa3    add esi,16*2+16*2    add edi,144*2+144*2    dec dl    jnz .loopa    jmp .done.loopa2    mov ecx,256/2    call .loopa3    add esi,16*2+16*2    add edi,144*2+800*2+144*2    dec dl    jnz .loopa2    jmp .done.loopa3    mov ax,[esi]    mov bx,[esi+2]    mov [es:edi],ax    mov [es:edi+2],ax    mov [es:edi+4],bx    mov [es:edi+6],bx    add esi,byte 4    add edi,byte 8    dec ecx    jnz .loopa3    ret.smallscreen    add edi,120*800*2+128*2    cmp byte[MMXSupport],1    je .ssloopb.ssloopa    mov ecx,256/4*2    rep movsd    add esi,16*2+16*2    add edi,272*2+272*2    dec dl    jnz .ssloopa    jmp .done.ssloopb    mov ecx,256/16*2    MMXStuff    add esi,16*2+16*2    add edi,272*2+272*2    dec dl    jnz .ssloopb    jmp .done.interpolate    mov ecx,256    SSInterpFull 800    add esi,16*2+16*2    add edi,144*2+800*2+144*2    dec dl    jnz near .interpolate.done    pop es    ret;*******************************************************; Copy VESA2 640x400x8b  Copies buffer to 640x400x8bVBE2;*******************************************************NEWSYM copyvesa2640x400x8b    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,640+20*640+64    cmp word[resolutn],224    jne .res239    add edi,12*640.res239    add edi,[VidStartDraw]    add esi,16+256+16+16    xor eax,eax    mov dl,[resolutn]    dec dl    dec dl    cmp byte[ScreenScale],1    je near .fullscreen    cmp byte[smallscreenon],1    je near .smallscreen.loopa    mov ecx,256    call .loopa2    sub esi,256    add edi,64+64    mov ecx,256    call .loopa2    add esi,16+16    add edi,64+64    dec dl    jz near .done    mov ecx,256    call .loopa2    add esi,16+16    add edi,64+64    dec dl    jnz .loopa    jmp .done.loopa2    mov al,[esi+1]    xor ebx,ebx    mov ah,al    mov bl,[esi]    shl eax,16    mov bh,bl    add esi,byte 2    add eax,ebx    mov [es:edi],eax    sub ecx,byte 2    lea edi,[edi+4]    jnz .loopa2    ret.smallscreen    add edi,60*640+128    cmp byte[MMXSupport],1    je .ssloopb.ssloopa    mov ecx,256/4    rep movsd    add esi,16+16    add edi,192+192    dec dl    jnz .ssloopa    jmp .done.ssloopb    mov ecx,256/16    MMXStuff    add esi,16+16    add edi,192+192    dec dl    jnz .ssloopb    emms    jmp .done.fullscreen    sub edi,64.fsloopa    mov ecx,256/4    call .fsloopb    add esi,16+16    mov ecx,256/4    call .fsloopb    sub esi,256    mov ecx,256/4    dec dl    jz near .done    call .fsloopb    add esi,16+16    dec dl    jnz .fsloopa    jmp .done.fsloopb    mov ebx,1    call .fsloopc    sub esi,byte 1    mov ebx,4    call .fsloopc    dec ecx    jnz .fsloopb    ret.fsloopc    mov al,[esi]    mov [es:edi],al    inc esi    mov [es:edi+1],al    add edi,byte 2    dec ebx    jnz .fsloopc    ret.done    pop es    retNEWSYM copyvesa2640x400x16b    cmp byte[curblank],40h    jne .startcopy    ret.startcopy    push es    mov ax,[vesa2selec]    mov es,ax    mov esi,[vidbuffer]    mov edi,640*2+20*640*2+64*2    cmp word[resolutn],224    jne .res239    add edi,12*640*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    cmp byte[smallscreenon],1    je near .smallscreen.loopa    mov ecx,256    call .loopa2    add esi,16*2+16*2

⌨️ 快捷键说明

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