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

📄 vof.cpp

📁 djgpp bt878 capture for DOS
💻 CPP
字号:
#include "vof.h"

/*******************************************************************************
    Start the Odd Risc Program.
    both_fields == TRUE - Enable both fields.
                == FALSE - Enable odd field only.
*******************************************************************************/
void VIDEO_ODD_FIELD::RunRisc( int both_fields )
{
    DWORD value1;
    DWORD value2;
    
    WriteLocalDWORD( 0x100, 0x000C0000 );
    
    value1 = ReadLocalDWORD( 0x10C ) & 0xFFFFFFFC;
    if( both_fields == TRUE )
        value2 = ReadLocalDWORD( 0x0DC ) | 0x03;
    else
        value2 = ReadLocalDWORD( 0x0DC ) | 0x02;
    
    WriteLocalDWORD( 0x114, RiscDMA->GetPhysicalAddress()); /* RISC STARTING ADDRESS */
    WriteLocalDWORD( 0x10C, value1 | 0x01 );    /* FIFO ENABLE */
    WriteLocalDWORD( 0x0DC, value2 );           /* CAPTURE CONTROL */
    WriteLocalDWORD( 0x10C, value1 | 0x03);     /* RISC/FIFO ENABLE */
}

/*******************************************************************************
    Halt the Odd/Both Risc Program.
    both_fields == TRUE - Halt both fields.
                == FALSE - Halt odd field only.
*******************************************************************************/
int VIDEO_ODD_FIELD::HaltRisc( int both_fields )
{
    DWORD value1;
    DWORD value2;
    
    value1 = ReadLocalDWORD( 0x10C ) & 0xFFFFFFFC;
    if( both_fields == TRUE )
        value2 = ReadLocalDWORD( 0x0DC ) & 0xFFFFFFFC;
    else
        value2 = ReadLocalDWORD( 0x0DC ) & 0xFFFFFFFD;
    
    WriteLocalDWORD( 0x10C, value1 | 0x01);     /* RISC/FIFO ENABLE */
    WriteLocalDWORD( 0x0DC, value2 );           /* CAPTURE CONTROL */
    WriteLocalDWORD( 0x10C, value1 | 0x00 );    /* FIFO ENABLE */
}

/*******************************************************************************
    Set the Odd Vertical Delay (O_VDELAY).
*******************************************************************************/
void VIDEO_ODD_FIELD::SetVDelay( int vdelay )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x08C );
    value = ( value & 0x3F ) | ( ( vdelay & 0x300 ) >> 2);
    WriteLocalDWORD( 0x08C, value );    // MSB
    
    WriteLocalDWORD( 0x090, vdelay&0xFF );  // LSB
}

/*******************************************************************************
    Get the Odd Vertical Delay (O_VDELAY).
*******************************************************************************/
int VIDEO_ODD_FIELD::GetVDelay( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x08C ) & 0xC0) << 2;  // MSB
    value |= ReadLocalDWORD( 0x090 ) & 0xFF;        // LSB

    return value;   
}
        
/*******************************************************************************
    Set the Odd Vertical Active (O_VACTIVE).
*******************************************************************************/
void VIDEO_ODD_FIELD::SetVActive( int vactive )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x8C );
    value = ( value & 0xCF ) | ( ( vactive & 0x300 ) >> 4);
    WriteLocalDWORD( 0x08C, value );    // MSB
    
    WriteLocalDWORD( 0x094, vactive&0xFF ); // LSB
}

/*******************************************************************************
    Get the Odd Vertical Active (O_VACTIVE).
*******************************************************************************/
int VIDEO_ODD_FIELD::GetVActive( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x08C ) & 0x30) << 4;  // MSB
    value |= ReadLocalDWORD( 0x094 ) & 0xFF;        // LSB

    return value;   
}
                
/*******************************************************************************
    Set the Odd Horizontal Delay (O_HDELAY).
*******************************************************************************/
void VIDEO_ODD_FIELD::SetHDelay( int hdelay )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x08C );
    value = ( value & 0xF3 ) | ( ( hdelay & 0x300 ) >> 6);
    WriteLocalDWORD( 0x08C, value );    // MSB
    
    WriteLocalDWORD( 0x098, hdelay&0xFF );  // LSB
}

/*******************************************************************************
    Get the Odd Horizontal Delay (O_HDELAY).
*******************************************************************************/
int VIDEO_ODD_FIELD::GetHDelay( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x08C ) & 0x0C) << 6;  // MSB
    value |= ReadLocalDWORD( 0x098 ) & 0xFF;        // LSB

    return value;   
}
                
/*******************************************************************************
    Set the Odd Horizontal Active (O_HACTIVE).
*******************************************************************************/
void VIDEO_ODD_FIELD::SetHActive( int hactive )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x08C );
    value = ( value & 0xFC ) | ( ( hactive & 0x300 ) >> 8);
    WriteLocalDWORD( 0x08C, value );    // MSB
    
    WriteLocalDWORD( 0x09C, hactive&0xFF ); // LSB
}

/*******************************************************************************
    Set the Odd Horizontal Active (O_HACTIVE).
*******************************************************************************/
int VIDEO_ODD_FIELD::GetHActive( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x08C ) & 0x03) << 8;  // MSB
    value |= ReadLocalDWORD( 0x09C ) & 0xFF;        // LSB

    return value;   
}
                
/*******************************************************************************
    Set the Odd Horizontal Scaling (O_HSCALE).
*******************************************************************************/
void VIDEO_ODD_FIELD::SetHScale( int hscale )
{
    WriteLocalDWORD( 0x0A0, (hscale>>8)&0xFF ); // MSB
    WriteLocalDWORD( 0x0A4, hscale&0xFF );  // LSB
}

/*******************************************************************************
    Get the Odd Horizontal Scaling (O_HSCALE).
*******************************************************************************/
int VIDEO_ODD_FIELD::GetHScale( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0A0 ) & 0xFF) << 8;  // MSB
    value |= ReadLocalDWORD( 0x0A4 ) & 0xFF;        // LSB

    return value;   
}
                
/*******************************************************************************
    Set the Odd Vertical Scaling (O_VSCALE).
*******************************************************************************/
void VIDEO_ODD_FIELD::SetVScale( int vscale )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x0CC );
    value = ( value & 0xE0 ) | ( ( vscale & 0x1F00 ) >> 8);
    WriteLocalDWORD( 0x0CC, value );    // MSB
    
    WriteLocalDWORD( 0x0D0, vscale&0xFF );  // LSB
}

/*******************************************************************************
    Get the Odd Vertical Scaling (O_VSCALE).
*******************************************************************************/
int VIDEO_ODD_FIELD::GetVScale( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0CC ) & 0x1F) << 8;  // MSB
    value |= ReadLocalDWORD( 0x0D0 ) & 0xFF;        // LSB

    return value;   
}

/*******************************************************************************
    Turn the Odd Luma Comb Filter on/off
    on = 1;
    off = 0;
*******************************************************************************/
void VIDEO_ODD_FIELD::SetLumaComb( int ycomb )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x0CC ) & 0x7F;
    value = value | ( (ycomb&1) << 7 );
    
    WriteLocalDWORD( 0xCC, value );
}

/*******************************************************************************
    Get the current Odd Luma Comb Filter setting.
*******************************************************************************/
int VIDEO_ODD_FIELD::GetLumaComb( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0CC ) & 0x80);

    return( (value) ? On : Off );
}

/*******************************************************************************
    Turn the Odd Chroma Comb Filter on/off
    on = 1;
    off = 0;
*******************************************************************************/
void VIDEO_ODD_FIELD::SetChromaComb( int ccomb )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x0CC ) & 0xBF;
    value = value | ( (ccomb&1) << 6 );
    
    WriteLocalDWORD( 0xCC, value );
}

/*******************************************************************************
    Get the current Odd Luma Comb Filter setting.
*******************************************************************************/
int VIDEO_ODD_FIELD::GetChromaComb( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0CC ) & 0x40);

    return( (value) ? On : Off );
}


/*******************************************************************************
    Set Odd Field as Interlaced.
    0 = Non-Interlaced;
    1 = Interlaced;
*******************************************************************************/
void VIDEO_ODD_FIELD::SetInterlaced( int interlaced )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x0CC ) & 0xDF;
    value = value | ( (interlaced&1) << 5 );
    
    WriteLocalDWORD( 0xCC, value );
}

/*******************************************************************************
    Get Odd Field Interlaced setting.
    0 = Non-Interlaced;
    1 = Interlaced;
*******************************************************************************/
int VIDEO_ODD_FIELD::GetInterlaced( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0CC ) & 0x20);

    return( (value) ? Interlaced : NonInterlaced );
}

/*******************************************************************************
    Set Odd Field Horizontal Low-Pass Filter.
*******************************************************************************/
void VIDEO_ODD_FIELD::SetHorizontalFilter( int hfilter )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x0C0 ) & 0xF3;
    value = value | ( (hfilter&3) << 2 );
    
    WriteLocalDWORD( 0xC0, value );
}

/*******************************************************************************
    Get current Odd Field Horizontal Low-Pass Filter setting.
*******************************************************************************/
int VIDEO_ODD_FIELD::GetHorizontalFilter( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0C0 ) & 0x0C) >> 2;

    return( value );
}
        
/*******************************************************************************
    Set Odd Field Vertical Scaling Filter.
*******************************************************************************/
void VIDEO_ODD_FIELD::SetVerticalFilter( int vfilter )
{
    DWORD value;
    
    value = ReadLocalDWORD( 0x0EC ) & 0xFC;
    value = value | (vfilter&3);
    
    WriteLocalDWORD( 0x0EC, value );
}

/*******************************************************************************
    Get current Odd Field Vertical Scaling Filter setting.
*******************************************************************************/
int VIDEO_ODD_FIELD::GetVerticalFilter( void )
{
    DWORD value;
    
    value = (ReadLocalDWORD( 0x0EC ) & 0x03);

    return( value );
}
        
/*******************************************************************************
    Set the Output color format for the Odd Field.
*******************************************************************************/
void VIDEO_ODD_FIELD::SetColorFormat( int color_format )
{
    DWORD value;

    value = ReadLocalDWORD( 0x0D4 ) & 0x0F;

    value = value | ((color_format&0xF) << 4);

    WriteLocalDWORD( 0x0D4, value );
}

/*******************************************************************************
    Get the Output color format for the Odd Field.
*******************************************************************************/
int VIDEO_ODD_FIELD::GetColorFormat( void )
{
    DWORD value;

    value = (ReadLocalDWORD( 0x0D4 ) & 0xF0) >> 4;

    return( value );
}


⌨️ 快捷键说明

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