📄 yuvrgb16.c
字号:
__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
__emit__(0x26,0x8E,0x6D,0x10);//asm mov gs,es:[di+0x10] //GS-> Video data
asm mov es,dx
_EDI=LinearOffSurface;
Line=144;//=288/2
MoveVideoData288:
asm inc Counter
asm cmp Counter,3
asm je DeleteLine288
////// 352 bytes 32 times.
Pixels=8; //Draw 2 lines
LoopLine288Delete:
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble();
FastYUV2RGB15BitsDoubleDeletePixel();//Delete one pixel
asm dec Pixels
asm jnz LoopLine288Delete
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw
_EDI+=lStride;
_EDI+=1280; //2 line had draw
_EDI+=lStride;
asm dec Line
asm jnz near ptr MoveVideoData288
goto RETURN;
DeleteLine288://Draw 1 lines
Counter=0;
Pixels=8;
LoopLine288:
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
asm dec Pixels
asm jnz LoopLine288
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw only one
_EDI+=lStride;
asm dec Line
asm jz RETURN
asm jmp MoveVideoData288
}
RETURN:
_AX=0; //return 0;
}
static void Align31(void)
{
}
void PASCAL near Draw640x240Banking32KLinear(void)
{ //Only for VESA 640x480 -> 640x240 Linear VGA Primary DCI
// LPDCIOFFSCREEN DCISurfaceScreenPtr;
DCIRVAL (CALLBACK *EndAccess)(LPVOID); //EndAccess Fn
// DCISurfaceScreenPtr=&DCISurfaceScreen;
EndAccess=DCISurfaceScreen.dciInfo.EndAccess;
if(DCISurfaceScreen.dciInfo.BeginAccess!=NULL)
(*DCISurfaceScreen.dciInfo.BeginAccess)(DCISurfaceScreenPtr,&VideoRc);
//Build in memory 320x240 15Bits video data
asm push bp
BuildYVURGB15DoubleColor(); //Linear = Buffer for 320x240 15bits.
asm pop bp
//Draw Primary on linear video memory
if(EndAccess!=NULL)
(*EndAccess)(DCISurfaceScreenPtr);
}
////////////////////// 320 X 240 Banking //////////////////////
////////////////////// S3 86 banking //////////////////////////
static void Align32(void)
{
asm nop
asm nop
}
void PASCAL near DrawYVU16S3BankingColor(void)
{ //Only for 320x200 64K Color S3 86
asm mov es,OffScrSel;
asm xor di,di
Counter=0;
if(DeleteLine==5)
{
/////////////352x240/////////////
_DX=A000Buffer;
__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
__emit__(0x26,0x8E,0x6D,0x10);//asm mov gs,es:[di+0x10] //GS-> Video data
asm mov es,dx
_EDI=0;
Line=120;
MoveVideoData240:
asm inc Counter
asm cmp Counter,2
asm je DeleteLine240
////// 352 bytes 32 times.
if(Counter==3) Counter=0;
Pixels=8;
LoopLine240:
FastYUV2RGB16Bits();
FastYUV2RGB16Bits();//Full 64K data here
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
FastYUV2RGB16Bits();
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
FastYUV2RGB16Bits();
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine240
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw
_EDI+=640;
asm dec Line
asm jnz near ptr MoveVideoData240
goto RETURN;
Banking1:
/////////Select Bank 1 ///////////
_AX=0x4F05;
_BX=0;
_DX=BankSize;//Select Bank 1
geninterrupt(0x10);
_EDI=0;
goto Banking1Next;
//////////////////////////////////
DeleteLine240:
Pixels=8;
LoopLine240Delete:
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1Line();
if(_EDI==65536) goto Banking1;
Banking1Next:
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine240Delete
_EBP+=976;
_ESI+=(800+0x480);//2 line had draw only one
asm dec Line
asm jz NextRet240
asm jmp MoveVideoData240
asm jmp MoveVideoData240
NextRet240:
}
else {// 288 - > 200 36/25 delete 11 lines.
TimesColor=0;
/////////////352x288/////////
_DX=A000Buffer;
__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
__emit__(0x26,0x8E,0x6D,0x10);//asm mov gs,es:[di+0x10] //GS-> Video data
asm mov es,dx
_EDI=0;
Line=144;//=288/2
MoveVideoData288:
asm inc TimesColor
if(TimesColor>18) TimesColor=1;
asm inc Counter
asm cmp Counter,1
asm je NoDeleteLine288
////// 352 bytes 32 times.
if(TimesColor>12 || Counter>=3) Counter=0;
Pixels=8; //Draw 1 lines
LoopLine288Delete:
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1Line();
if(_EDI==65536) goto Banking1L288;
Banking1Next288:
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB16Bits1Line();
FastYUV2RGB16Bits1LineDeletePixel();//Delete one pixel
asm dec Pixels
asm jnz LoopLine288Delete
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw only one
asm dec Line
asm jnz near ptr MoveVideoData288
goto RETURN;
Banking1L288:
/////////Select Bank 1 ///////////
_AX=0x4F05;
_BX=0;
_DX=BankSize;//Select Bank 1
geninterrupt(0x10);
_EDI=0;
goto Banking1Next288;
NoDeleteLine288://Draw 2 lines
Pixels=8;
LoopLine288:
FastYUV2RGB16Bits();
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
FastYUV2RGB16Bits();
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
FastYUV2RGB16Bits();
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
FastYUV2RGB16Bits();
FastYUV2RGB16BitsDeletePixel();//Delete one pixel
asm dec Pixels
asm jnz LoopLine288
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw
_EDI+=640; //2 line had draw
asm dec Line
asm jz RETURN
asm jmp MoveVideoData288
}
RETURN:
_AX=0; //return 0;
}
static void Align33(void)
{
asm nop
}
void PASCAL near DrawS3BankColor(void)
{ //Only for S3 86 320x200 banking VGA
/////// Set Bank 0 //////////////
_AX=0x4F05;
_BX=0;
_DX=0;//Select Bank 0
geninterrupt(0x10);
DrawYVU16S3BankingColor(); //Linear = Buffer for 320x200 16bits.
}
static void Align34(void)
{
asm nop
asm nop
}
void PASCAL near Draw32KColorBanking(void)
{ //Only for 320x200 32K Color banking
asm mov es,OffScrSel;
asm xor di,di
Counter=0;
if(DeleteLine==5)
{
/////////////352x240/////////////
_DX=A000Buffer;
__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
__emit__(0x26,0x8E,0x6D,0x10);//asm mov gs,es:[di+0x10] //GS-> Video data
asm mov es,dx
_EDI=0;
Line=120;
MoveVideoData240:
asm inc Counter
asm cmp Counter,2
asm je DeleteLine240
////// 352 bytes 32 times.
if(Counter==3) Counter=0;
Pixels=8;
LoopLine240:
FastYUV2RGB15Bits();
FastYUV2RGB15Bits();//Full 64K data here
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
FastYUV2RGB15Bits();
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
FastYUV2RGB15Bits();
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine240
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw
_EDI+=640;
asm dec Line
asm jnz near ptr MoveVideoData240
goto RETURN;
Banking1:
/////////Select Bank 1 ///////////
_AX=0x4F05;
_BX=0;
_DX=BankSize;//Select Bank 1
geninterrupt(0x10);
_EDI=0;
goto Banking1Next;
//////////////////////////////////
DeleteLine240:
Pixels=8;
LoopLine240Delete:
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1Line();
if(_EDI==65536) goto Banking1;
Banking1Next:
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine240Delete
_EBP+=976;
_ESI+=(800+0x480);//2 line had draw only one
asm dec Line
asm jz NextRet240
asm jmp MoveVideoData240
asm jmp MoveVideoData240
NextRet240:
}
else {// 288 - > 200 36/25 delete 11 lines.
TimesColor=0;
/////////////352x288/////////
_DX=A000Buffer;
__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
__emit__(0x26,0x66,0x8B,0x6D,0x08);//asm mov ebp,es:[di+8]
__emit__(0x26,0x8E,0x6D,0x10);//asm mov gs,es:[di+0x10] //GS-> Video data
asm mov es,dx
_EDI=0;
Line=144;//=288/2
MoveVideoData288:
asm inc TimesColor
if(TimesColor>18) TimesColor=1;
asm inc Counter
asm cmp Counter,1
asm je NoDeleteLine288
////// 352 bytes 32 times.
if(TimesColor>12 || Counter>=3) Counter=0;
Pixels=8; //Draw 1 lines
LoopLine288Delete:
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1Line();
if(_EDI==65536) goto Banking1L288;
Banking1Next288:
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
FastYUV2RGB15Bits1Line();
FastYUV2RGB15Bits1LineDeletePixel();//Delete one pixel
asm dec Pixels
asm jnz LoopLine288Delete
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw only one
asm dec Line
asm jnz near ptr MoveVideoData288
goto RETURN;
Banking1L288:
/////////Select Bank 1 ///////////
_AX=0x4F05;
_BX=0;
_DX=BankSize;//Select Bank 1
geninterrupt(0x10);
_EDI=0;
goto Banking1Next288;
NoDeleteLine288://Draw 2 lines
Pixels=8;
LoopLine288:
FastYUV2RGB15Bits();
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
FastYUV2RGB15Bits();
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
FastYUV2RGB15Bits();
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
FastYUV2RGB15Bits();
FastYUV2RGB15BitsDeletePixel();//Delete one pixel
asm dec Pixels
asm jnz LoopLine288
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw
_EDI+=640; //2 line had draw
asm dec Line
asm jz RETURN
asm jmp MoveVideoData288
}
RETURN:
_AX=0; //return 0;
}
static void Align35(void)
{
asm nop
}
void PASCAL near Draw15BitsBanking(void)
{ //Only for 320x200 32K banking VGA
/////// Set Bank 0 //////////////
_AX=0x4F05;
_BX=0;
_DX=0;//Select Bank 0
geninterrupt(0x10);
Draw32KColorBanking(); //Linear = Buffer for 320x200 15bits.
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -