中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-02 04:59
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 如何用DOS恢复BIOS出厂设置 查看 4,356 回复 17
楼 主 如何用DOS恢复BIOS出厂设置 发表于 2007-09-22 11:13 ·  中国 江苏 苏州 联通
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
当机器出现一些莫名其妙的问题时,将BIOS恢复到出厂设置经常会有很好的效果,那么请问有没有没办法自动恢复BIOS的出厂设置呢?请高手指教
2 发表于 2007-09-22 12:02 ·  中国 河北 唐山 联通
初级用户
积分 62
发帖 28
注册 2007-07-03 11:20
18年会员
UID 93017
性别 男
状态 离线
我是这样做的
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
3 发表于 2007-09-22 20:06 ·  中国 江苏 苏州 联通
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
大哥,实在太谢谢你了
但是小弟的知识太差子,不明白你给我的代码要怎么用,我只是想单纯的去恢复到出厂设置不用去比较的,请大哥再帮我想想.
也说是我当我执行完后就能恢复,不用比较,再次谢谢
4 发表于 2007-09-23 08:08 ·  中国 河北 唐山 联通
初级用户
积分 62
发帖 28
注册 2007-07-03 11:20
18年会员
UID 93017
性别 男
状态 离线
这个压缩包里有两个可执行文件:
RCMOS.EXE 读CMOS数据,它将生成存有CMOS数据的CMOS.DAT文件
WCMOS.EXE 将CMOS.DAT中的数据写回到CMOS

注意:RCMOS只执行一次,目的是备份正常的CMOS配置
以后,当需要恢复时,仅需执行WCMOS

这两个程序在我的计算机上调试通过!
=========================================
另,还是希望楼主研究研究我上次回复的东东,如果研究好的话,在AUTOEXEC.BAT中调用编译好的程序,它将自动识别,从此不用人工干预.
附件
读写CMOS.rar (12.29 KiB, 下载次数: 64)
5 发表于 2007-09-23 08:11 ·  中国 河北 唐山 联通
初级用户
积分 62
发帖 28
注册 2007-07-03 11:20
18年会员
UID 93017
性别 男
状态 离线
Originally posted by kinglin at 2007-9-23 08:08 AM:
这个压缩包里有两个可执行文件:
RCMOS.EXE 读CMOS数据,它将生成存有CMOS数据的CMOS.DAT文件
WCMOS.EXE 将CMOS.DAT中的数据写回到CMOS

注意:RCMOS只执行一次,目 ...


===此程序只适用于DOS===
因为重新启动函数在Windows系统下,不能正常运行
6 发表于 2007-09-23 11:33 ·  中国 江苏 苏州 昆山市 电信
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
谢谢,我一定会的。二楼的兄弟在吗,能不能聊聊呀

[ Last edited by w909525 on 2007-9-23 at 11:40 AM ]
7 发表于 2007-09-23 13:33 ·  中国 江苏 苏州 昆山市 电信
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
我还有个问题请指教,如果我把BIOS程序备份出来变成ROM或BIN档,请问我要怎么样才能读出你说的那些字节呢,或者可以在WINWOS下直接用工具读到,谢谢
还有你哪个程序是用C写的吗
8 发表于 2007-09-24 09:10 ·  中国 河北 唐山 联通
初级用户
积分 62
发帖 28
注册 2007-07-03 11:20
18年会员
UID 93017
性别 男
状态 离线
在ROM或BIN中如何得到这些字节,我也没研究过.上面的程序是用C编的,是直接读写端口.你到这个网站看看是否对你有帮助.
http://www.bios.net.cn/
9 发表于 2007-09-24 18:01 ·  中国 江苏 苏州 联通
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
再请教个问题,就是我用你给我的写CMOS的程序,我发现只要执行它即时没有任何文件就能恢复到出厂设置,不知道这样做行不行,
10 发表于 2007-09-24 21:19 ·  中国 江苏 苏州 联通
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
樓上的在嗎
11 发表于 2007-09-29 20:02 ·  中国 辽宁 大连 联通
新手上路
积分 17
发帖 8
注册 2007-09-29 09:47
18年会员
UID 98539
性别 男
状态 离线
太难了
12 发表于 2007-09-30 10:01 ·  中国 黑龙江 哈尔滨 电信
初级用户
★★
积分 160
发帖 73
注册 2007-09-13 13:37
18年会员
UID 97268
性别 男
状态 离线
基本的硬件操作。适用于什么情况下呢?
如果lz只是要恢复bios默认值,你的主板还能启动的话,那么拔主板电池就够了啊。
13 发表于 2007-10-02 12:29 ·  中国 江苏 苏州 联通
初级用户
积分 98
发帖 34
注册 2007-03-09 08:18
19年会员
UID 81178
性别 男
状态 离线
楼上说的对呀,关键是我不想那么做,呵呵,
14 发表于 2007-10-15 15:20 ·  中国 江苏 苏州 联通
新手上路
积分 13
发帖 7
注册 2007-09-26 22:45
18年会员
UID 98359
性别 男
状态 离线
可以用RTC。EXE 自动还原BIOS出厂设置
由于不知道怎么上传,所以就没有上传
15 Windows! 发表于 2007-10-15 16:02 ·  中国 江苏 苏州 联通
新手上路
积分 6
发帖 4
注册 2007-10-15 14:34
18年会员
UID 99805
性别 男
状态 离线
直接进CMOS 按F5 -->Enter-->F10就行了,为什么搞的那么复杂啊!
论坛跳转: