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

📄 main.cpp

📁 PC燒錄BIOS的源程序
💻 CPP
字号:
//main function

#include "FlashInf.h"
#include "Chipset.h"
#include "SelectRM.h"
#include "Memory.h"
#include "FlashDet.h"
#include "ROMType.h"
#include "Tools.h"
#include "file.h"
#include "profile.h"

#include <string.h>
#include <stdio.h>
#include <dos.h>

int main()
{
	char Buffer[128];
	CHIPSETINFO MyChipSet;
	XMSINFO XMSInfo;
	FLASHCHIPINFO FlashInfo;
	LONGINT ROMBase = 0;
	LONGINT FlashSize, FlashBase, MaxBlock, OldBIOS, NewBIOS;
	LONGINT TempBuf;
	LONGINT X;
	BYTE BIOSBlk[32768];

	if(GetChipSetInfo(&MyChipSet))
	{
		printf("\nNorth Info: %04X %04X %04X : %s" , MyChipSet.NorthId,MyChipSet.NorthMan ,MyChipSet.NorthRev, MyChipSet.NorthInfo);
		printf("\nSouth Info: %04X %04X %04X : %s" , MyChipSet.SouthId,MyChipSet.SouthMan ,MyChipSet.SouthRev, MyChipSet.SouthInfo);
		printf("\nChipInfo is: %s\n", MyChipSet.ChipInfo);
	}
	else
	{
		printf("Get PCI info Error");
		return 0;
	}

	if(!InitializeMem(&XMSInfo))
	{
		printf("Initialize Memory Error\n");
		return 0;
	}

	if(!FlatRealOn())
	{
		printf("Enter Flat Real Mode Error \n");
		return 0;
	}
	else
	{
		printf("Enter Flat Real Mode ok \n");

	}

	if(XMSInfo.XMSBlockLeft == -2)
	{
		printf("Can't Find XMS Manager , Allocate Mem in High\n");
	}

	if(!AllocateHiMem(&XMSInfo))
	{
		printf("Allocate HiMem Error \n");
		return 0;
	}

	{
		printf("Memory Information: \n");
		sprintf(Buffer , "Mem Pos:%08lX ,Left:%08lX\n" ,
		XMSInfo.XMSBlockPos , XMSInfo.XMSBlockLeft);
		printf(Buffer);
	}
	printf("Enable Rom with ChipSet Information\n");
	ROMEnable(&MyChipSet , TRUE);

	FlashDetect(&FlashInfo, &ROMBase);
	{
		printf("Flash ROM Chip: %s %s\n", FlashInfo.Manuf, FlashInfo.Name);
		printf("Organisation: ");
		sprintf(Buffer, "ROMBase: %08lX\n", ROMBase);
		printf(Buffer);
	}

	ROMType( &FlashInfo, ROMBase, &(XMSInfo.XMSBlockLeft) , &(XMSInfo.XMSBlockPos), &FlashSize, &FlashBase, &MaxBlock, &OldBIOS, &NewBIOS, &TempBuf);
	{
		printf("FlashSize: %08lX\n", FlashSize);
		printf("FlashBase: %08lX\n", FlashBase);
		printf("MaxBlock: %08lX\n", MaxBlock);
		printf("NewBIOS: %08lX\n", NewBIOS);
		printf("OldBIOS: %08lX\n", OldBIOS);
//		printf("TempBuf: %08lX\n", TempBuf);
	}
	//Backup BIOS Image
	LONGINT OldSeg, OldOfs;
	OldSeg = LONGINT( FP_SEG( &FlashBase ) );
	OldOfs = LONGINT( FP_OFF( &FlashBase ) );
	MoveLinBlockD( FlashBase, OldBIOS, FlashSize );

	//Save BIOS to file: \backup.bin
	FILE *fBIOS;
	fBIOS = fopen(BIOS_FILE_NAME, "wb");
	if ( fBIOS == NULL )
	{
		printf("Cannot open file: backup.bin.\n");
		return 1;
	}
	X = 0;
	while( X < FlashSize )
	{
		LONGINT Block, BlockSeg, BlockOfs;
		BlockSeg = LONGINT( FP_SEG( BIOSBlk ) );
		BlockOfs = LONGINT( FP_OFF( BIOSBlk ) );
		Block = (BlockSeg << 4) + BlockOfs;
//		MoveLinBlockD( X + OldBIOS, LONGINT( Seg( BIOSblk ) ) << 4 + LONGINT( Ofs( BIOSBlk ) ), 32768 );
		MoveLinBlockD( X + OldBIOS, Block, 32768 );
//		BlockWrite( BIOS_FILE_NAME, BIOSBlk, 32768 );
		fwrite( &BIOSBlk, sizeof(BIOSBlk), 1, fBIOS );
		X += 32768;

	}
	fclose(fBIOS);


	printf("Closing ...");
	///debug Code
	FlatRealOff();
	CloseXMSMemory(&XMSInfo);
	///debug Code

	return 0;
}

⌨️ 快捷键说明

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