📄 copyvid.inc
字号:
; 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 + -