📄 yuvrgb16.c
字号:
{
asm mov Pixels,8
LoopLine:
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 loop LoopLine240
asm jnz LoopLine
_EBP+=976; //All Y, U, V Line len=0x480;
}
static void Align20(void)
{
asm nop
asm nop
}
void PASCAL near Draw40Pixel32K(void)
{
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
}
static void Align21(void)
{
asm nop
}
void PASCAL near Over32K1(void)
{
Draw40Pixel32K();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
__emit__(0x66,0x33,0xFF);
_AX=0x4F05;_BX=0;_DX=BankSize;
geninterrupt(0x10); //Some handbook VGA system will change DX
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
asm mov Pixels,6
LoopLine:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine
_EBP+=976; //All Y, U, V Line len=0x480;
}
static void Align22(void)
{
asm nop
asm nop
}
void PASCAL near Over32K2(void)
{
asm mov Pixels,3
LoopLine:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
__emit__(0x66,0x33,0xFF);
_AX=0x4F05;_BX=0;_DX=BankSize;
asm add dx,dx
geninterrupt(0x10); //Some handbook VGA system will change DX
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
asm mov Pixels,4
LoopLine1:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine1
_EBP+=976; //All Y, U, V Line len=0x480;
}
static void Align23(void)
{
}
void PASCAL near Over32K3(void)
{
asm mov Pixels,4
LoopLine:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
__emit__(0x66,0x33,0xFF);
_AX=0x4F05;_BX=0;_DX=BankSize;
asm add dx,dx
asm add dx,BankSize
geninterrupt(0x10); //Some handbook VGA system will change DX
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
asm mov Pixels,3
LoopLine1:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine1
_EBP+=976; //All Y, U, V Line len=0x480;
}
static void Align24(void)
{
}
void PASCAL near Over32K4(void)
{
asm mov Pixels,6
LoopLine:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnly();
__emit__(0x66,0x33,0xFF);
_AX=0x4F05;_BX=0;_DX=BankSize;
asm shl dx,2
geninterrupt(0x10); //Some handbook VGA system will change DX
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1LineOnly();
FastYUV2RGB15BitsDouble1LineOnlyDeletePixel();//Delete one pixel
Draw40Pixel32K();
_EBP+=976; //All Y, U, V Line len=0x480;
}
void Decode5Lines32K(void)
{
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
DecodeOneLine32KMixDouble(); //Two lines mix to one line
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static void Align25(void)
{
asm nop
asm nop
}
void First32KOver(void)
{//Draw 5 Line
DecodeOneLine32KDouble();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800; //1 line had draw
_EBP-=0x480;
Over32K1();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800; //1 line had draw
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
DecodeOneLine32KMixDouble(); //Two lines mix to one line
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static void Align26(void)
{
}
void Second32KOver(void)
{//Draw 5 Line
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
Over32K2();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800; //1 line had draw
_EBP-=0x480;
DecodeOneLine32KDouble();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800; //1 line had draw
DecodeOneLine32KMixDouble(); //Two lines mix to one line
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static void Align27(void)
{
}
void Third32KOver(void)
{//Draw 5 Line
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
DecodeOneLine32KDouble();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800; //1 line had draw
_EBP-=0x480;
Over32K3();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=800; //1 line had draw
DecodeOneLine32KMixDouble(); //Two lines mix to one line
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
}
static void Align28(void)
{
}
void PASCAL near Over32K4Mix(void)
{
asm mov Pixels,6
LoopLine:
Draw40Pixel32K();
asm dec Pixels //asm loop LoopLine240
asm jnz LoopLine
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1Line();
__emit__(0x66,0x33,0xFF);
_AX=0x4F05;_BX=0;_DX=BankSize;
asm shl dx,2
geninterrupt(0x10); //Some handbook VGA system will change DX
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
FastYUV2RGB15BitsDouble1Line();
FastYUV2RGB15BitsDouble1LineDeletePixel();//Delete one pixel
Draw40Pixel32K();
_EBP+=976; //All Y, U, V Line len=0x480;
}
void Fouth32KOver(void)
{//Draw 5 Line
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
DecodeTwoLine32KDouble();
__emit__(0x66,0x81,0xC6,0xA0,0x07,0x00,0x00);//_ESI+=(800+0x480);
__emit__(0x66,0x81,0xC7,0x00,0x05,0x00,0x00);//_EDI+=1280; //2 line had draw
Over32K4Mix();
__emit__(0x66,0x81,0xC6,0x20,0x03,0x00,0x00);//_ESI+=(800);
}
DWORD lStride; //Video Memory Line width.
static void Align29(void)
{
asm nop
asm nop
}
void PASCAL near Draw640x240Banking32K(void)
{ //Only for VESA 640x480 -> 640x240 banking VGA
_AX=0x4F05;
_BX=0;_DX=0;
geninterrupt(0x10); //Some handbook VGA system will change DX
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;
////// First 50 Lines /////////
Line=25;
MoveVideoData2401:
DecodeTwoLine32KDouble();
_ESI+=(800+0x480);_EDI+=1280; //2 line had draw
asm dec Line
asm jnz near ptr MoveVideoData2401
/////// Next Line ///////
DecodeOneLine32KDouble();_ESI+=800; //1 line had draw
_EBP-=0x480;
Over32K1(); _ESI+=800;// Full 64K
////// 2nd 50 Lines /////////
Line=25;
MoveVideoData2402:
DecodeTwoLine32KDouble();
_ESI+=(800+0x480);_EDI+=1280; //2 line had draw
asm dec Line
asm jnz near ptr MoveVideoData2402
/////// Next Line ///////
Over32K2();_ESI+=800;// Full 64K
_EBP-=0x480;
DecodeOneLine32KDouble();_ESI+=800;
////// 3rd 48 Lines /////////
Line=24;
MoveVideoData2403:
DecodeTwoLine32KDouble();
_ESI+=(800+0x480);_EDI+=1280; //2 line had draw
asm dec Line
asm jnz near ptr MoveVideoData2403
/////// Next Line ///////
DecodeOneLine32KDouble();_ESI+=800;
_EBP-=0x480;
Over32K3(); _ESI+=800;// Full 64K
////// 4th 50 Lines /////////
Line=25;
MoveVideoData2404:
DecodeTwoLine32KDouble();
_ESI+=(800+0x480);_EDI+=1280; //2 line had draw
asm dec Line
asm jnz near ptr MoveVideoData2404
/////// Next Line ///////
Over32K4();_ESI+=800;// Full 64K
_EBP-=0x480;
DecodeOneLine32KDouble();_ESI+=800;
////// First 34 Lines /////////
Line=17;
MoveVideoData240:
DecodeTwoLine32KDouble();
_ESI+=(800+0x480);_EDI+=1280; //2 line had draw
asm dec Line
asm jnz near ptr MoveVideoData240
}
else {// 288 - > 240 6/5 delete 1 lines.
/////////////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=10;
Draw50Lines288:
Decode5Lines32K();
asm dec Line
asm jnz near ptr Draw50Lines288
First32KOver(); //First 64K
Line=9;
Draw45Lines2881:
Decode5Lines32K();
asm dec Line
asm jnz near ptr Draw45Lines2881
Second32KOver(); //2nd 64K
Line=9;
Draw45Lines2882:
Decode5Lines32K();
asm dec Line
asm jnz near ptr Draw45Lines2882
Third32KOver();
Line=9;
Draw45Lines2883:
Decode5Lines32K();
asm dec Line
asm jnz near ptr Draw45Lines2883
Fouth32KOver();
Line=7;
Draw35Lines288:
Decode5Lines32K();
asm dec Line
asm jnz near ptr Draw35Lines288
}
_AX=0; //return 0;
}
static void Align30(void)
{
asm nop
}
void PASCAL near BuildYVURGB15DoubleColor(void)
{ //for 320x240 32K Color in memory
asm mov es,OffScrSel;
asm xor di,di
Counter=0;
if(DeleteLine==5)
{
/////////////352x240/////////////
_DX=LinearSelSurface;
__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=LinearOffSurface;
Line=120;
MoveVideoData240:
////// 352 bytes 32 times.
Pixels=8;
LoopLine240:
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 loop LoopLine240
asm jnz LoopLine240
_EBP+=976;
_ESI+=(800+0x480); //2 line had draw
_EDI+=lStride;
_EDI+=1280; //640*2
_EDI+=lStride;
asm dec Line
asm jnz near ptr MoveVideoData240
}
else {// 288 - > 240 6/5 delete 1 lines.
/////////////352x288/////////
_DX=LinearSelSurface;
__emit__(0x26,0x66,0x8B,0x75,0x04);//asm mov esi,es:[di+4]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -