『第 2 楼』:
使用 LLM 解释/回答一下
我是这样做的
1.首先读取128字节的BIOS数据(出厂设置),程序如下:
#include "stdio.h"
#include "dos.h"
#include "conio.h"
void main()
{
unsigned char cmos[128];
FILE *fp;
int i,j;
for(i=0;i<16;i++){
for(j=0;j<8;j++){
outportb(0x70,i*8+j);
cmos[i*8+j]=inportb(0x71);
printf("%02X ",cmos[i*8+j]);
}
printf("\n");
}
printf("----End----");
/* 将显示的数据存入文件CMOS.DAT */
/* fp=fopen("CMOS.DAT","wb");
fwrite(&cmos[0],1,128,fp);
fclose(fp); */
getch();
}
2.将以上所示代码写入下面的cmos[128]数组,下面程序将比较现在CMOS设置,与默认设置是否相同,如不同,则将CMOS[128]写如BIOS中,然后重新启动计算机.
/*重新启动计算机*/
void far Restart(void)
{
__emit__(0XEA,0X00,0X00,0XFF,0XFF);
}
void main()
{
int i,err_flag;
unsigned char ch;
/* 我的计算机默认CMOS数据,改为你的*/
static unsigned char cmos[128]={0X15,0X01,0X02,0X38,0X14,0X13,0XF1,0X20,0X97,0X07,0X26,0X02,0X50,0X80,0X00,0X00,
0X00,0XC0,0X00,0X02,0X07,0X80,0X02,0XC0,0XFF,0X2F,0X2F,0X50,0XDD,0X5D,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0XF2,
0XC0,0XFF,0X20,0X80,0X1F,0XDF,0X3F,0XD7,0X43,0X02,0X07,0X07,0XB0,0XCD,0XE9,0X11,
0X56,0X9F,0XA0,0X6C,0XFD,0XFF,0XDB,0XF7,0X07,0X1C,0XF8,0X0D,0X40,0X04,0XE2,0X44,
0XDD,0X87,0X00,0X60,0X17,0XF7,0X01,0XA0,0XDF,0X78,0X00,0X00,0XE0,0X3F,0XFF,0XFE,
0X77,0XBF,0XF3,0XEF,0XFF,0X7F,0XFF,0X2F,0XF4,0X01,0X08,0XFF,0XFF,0XF3,0X01,0X20,
0X2F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XEF,0XFF,0XFF,0X1E,0X35,0XF7};
/*====== Read cmos ======*/
for(i=16,err_flag=0;i<128;i++){
/*CMOS数据比较,下面的比较是我所需要的,可根据具体需要改变*/
if((i==0X3C)||(i==0X3E)||(i==0X40)||(i==0X44)||(i==0X4B)||(i==0X4C)||(i==0X4D)||(i==0X54)){
outportb(0X70,i);
ch=inportb(0X71);
if(ch!=cmos[i]) { err_flag=1; break; }
}
}
if(err_flag){
for(i=16;i<128;i++){
outportb(0X70,i);
outportb(0X71,cmos[i]);
}
Restart();
}
}
=============================================
附:我的主板我所需要的CMOS数据分析.你可改变BIOS设置,来得到CMOS数据的变化
BIOS版本:Award Modular BIOS v4.51PG
起始字节:0
注:共128字节,后128字节与前128字节内容相同
偏移量 功能 数值 选项
第 60 字节低4位 Boot Sequence 0 A,C,SCSI
1 C,A,SCSI
2 C,CDROM,A
3 CDROM,C,A
4 D,A,SCSI
5 E,A,SCSI
6 F,A,SCSI
7 SCSI,A,C
8 SCSI,C,A
9 C only
A LS/ZIP,C
第 60 字节高4位 Quick Power On Self Test A Disabled
B Enabled
第 62 字节低4位 Halt On 8 All Error
9 No Error
A All,But Keyboard
第 64 字节高4位 Flat Panel Resolution 5 640X480
6 800X600
- 1024X768
第 68 字节低4位 USB Controller C Disabled
D Enabled
第 75 字节高4位 Onboard Serial Port1 0 Disabled
1 3F8/IRQ4
2 2F8/IRQ3
3 3E8/IRQ4
4 2E8/IRQ3
5 Auto
第 76 字节低4位 Onboard Serial Port2 0 Disabled
1 3F8/IRQ4
2 2F8/IRQ3
3 3E8/IRQ4
4 2E8/IRQ3
5 Auto
第 77 字节 Onboard Parallel Port 04 Disabled
-- 3BC/IRQ7
-- 378/IRQ7
-- 278/IRQ5
第 84 字节高4位 Display Status 1 Both
5 CRT
- LCD
|