📄 main.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 + -