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

📄 main.cpp

📁 djgpp bt878 capture for DOS
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/segments.h>
#include "virt_mem.h"
#include "pci.h"
#include "dma.h"
#include "devlist.h"
#include "vidfield.h"
#include "pcivideo.h"
#include "vesa.h"
#include "textout.h"
#include <pc.h>


int main()
{
    DEVICE_LIST list;
    PCI_VIDEO* pci_vid[4];
    VIDEO_VESA vesa;
    int num;
    int i;
    int int_stat, int_mask;
    DWORD value;
    int video;
    int buffer1, buffer2;
    
    num = list.GetDeviceCount();
    
    if(num == 0) {
        printf("Brooktree PCI devices not found!\n");
        return 0;
    }

    printf("Found %d devices\n", num);

    for(i=0; i<num; i++) {
        printf("Device %i  Bus = %d  Function = %d\n",
            list.GetFunctionNumber(i) >> 3,
            list.GetBusNumber(i),
            list.GetFunctionNumber(i) & 7);
    }
      
    for(i=0; i<num; i++) {
        pci_vid[i] = new PCI_VIDEO(list.GetFunctionNumber(i), list.GetBusNumber(i));
    }
    
    DMA_BUFFER mem1(0x36000);
    DMA_BUFFER mem2(0x36000);
    
    pci_vid[0]->Reset();
    pci_vid[0]->SetVideoInput( VideoInputComposite );
    pci_vid[0]->SetVideoFormat( VideoFormatPAL );
    
    pci_vid[0]->SetSaturation( 160 );
    pci_vid[0]->SetBrightness( 5 );
    pci_vid[0]->SetContrast( 80 );
    pci_vid[0]->SetWhiteCrush( On );
    pci_vid[0]->SetGammaCorrection( Off ); 
    
    pci_vid[0]->CreateRisc384x288(mem1.GetPhysicalAddress(), mem1.GetPhysicalAddress(), 16);

    pci_vid[0]->Scale384x288x16();
    pci_vid[0]->RunRisc();

    vesa.SetMode(0x4114);
    video = vesa.GetVideoBuffer();
    buffer1 = mem1.GetVirtualAddress();
    buffer2 = mem2.GetVirtualAddress();
   
    video = video + 800*150*2 + 400;

   char irq_status[30] = "0x00000000";
   SetTextColor(RGB(255, 255, 128));
   
   FILE *f;

    f = fopen("C:\\dump.txt","wb");
    
    while( !kbhit() )
    {
        
        value = pci_vid[0]->GetInterruptStatus();

        if((value & 0x00000800) /*&& (value & 0x10000000)*/) {
            for(i=0; i<288; i++)
            {
                memcpyMMX(video + 1600*i, buffer1 + 768*i, 768);
                //sprintf(irq_status, "status = 0x%08X", value);
                DrawText(vesa.GetVideoBuffer(), 200, 20, irq_status);
                //pci_vid[0]->SetInterruptStatus(value);
            }
        }
    }
   /*
    for(i=0; i<0x121; i+=4)
    {
        fprintf(f, "0x%08X\r\n", pci_vid[0]->ReadLocalDWORD(i));
    } 
   */
    fprintf(f, "mem1: virtual addr = 0x%08X    phys addr = 0x%08X\r\n",
        mem1.GetVirtualAddress(), mem1.GetPhysicalAddress());
    fprintf(f, "mem2: virtual addr = 0x%08X    phys addr = 0x%08X\r\n",
        mem2.GetVirtualAddress(), mem2.GetPhysicalAddress());
    pci_vid[0]->HaltRisc();

    fclose(f);
    
    for(i=0; i<num; i++) {
        delete pci_vid[i];
    }
    return 0;
}

⌨️ 快捷键说明

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