无忧启动论坛

标题: [原创] 硬盘无法启动,无光、软驱,没关系!不死系统让你电脑维护不耽误! [打印本页]

作者: 老毛桃    时间: 2006-5-18 22:04
标题: [原创] 硬盘无法启动,无光、软驱,没关系!不死系统让你电脑维护不耽误!
  前些时候在系统维护区看到一个《清理 BIOS 垃圾,提高系统启动速度》的帖子。非常感兴趣,回去自己抽时间试验了一下,其实感觉启动速度提高并不明显。在失望之余,我又看到了 fujianabc 大侠在此帖的回复,说是在 BIOS 中加入一个 freedos。不怕各路大侠笑话,老毛桃确是第一次听说可以将 freedos 放入 BIOS 中。于是开始怕怕地想自己搞一搞。在 fujianabc 提供的链接中间接的找到了 freedos 的 rom 版下载地址 http://rayer.ic.cz/romos/romose.htm ,好在这个 E 文网站自己还大致能够看懂。于是就一不做,二不休,干起来了。
  先是将这个 romos.bin(64kb 的那个)下载下来,再准备好其他的工具,如 CBROM(老毛桃用的是 CBROM 2.19 版),WinFlash(Windows 下刷新/备份 BIOS 的工具)。具体操作步骤如下:
1.备份 BIOS,以防万一
  先运行 WinFlash,将当前的主板 BIOS 被分为一个文件,比如 I815_BAK.BIN。然后要制作 BIOS 应急恢复盘,就是在一张 Win98 启动软盘中添加上 BIOS 的自动恢复功能。具体方法:
(1)制作一张干净的 Win98 启动软盘,里面只保留 IO.SYS、MSDOS.SYS、COMMAND.COM 等着几个最基本的文件,然后将这个 I815_BAK.BIn 放到软盘的根目录下,再将 AWDFLASH.EXE(DOS 下的 AWARD BIOS 刷新工具)也放到软盘根目录,然后在软盘根目录中建立 AUTOEXEC.BAT 文件,内容如下:
AWDFLASH I815_BAK.BIN /PY /SN /SB /R

  这样,万一修改的 BIOS 出了问题,刷新后无法启动,可以找来一台软驱,放入这张软盘,重新启动机器就可以自动恢复原来的 BIOS 了,切忌 /SB 参数一定要用上,这样的话刷新 BIOS 时不会更新 BIOS 的 BootBlock 部分,至少刷坏了后,主板还能够启动软驱和 ISA 的显卡。(ISA 显卡难求,软驱应该好找吧)
2.清理 BIOS 垃圾,腾出 64KB 空间
  将 I815_BAK.BIN 做一个副本让我们来对其编辑,比如命名为 I815_DOS.BIN。先运行 CBROM219.EXE I815_DOS.BIN /D。用来查看一下当前 BIOS 的空间占用情况,发现剩余空间已经只剩 56.12k。[UploadFile=01_1147960986.jpg]
  由于老毛桃的 I815 主板集成了 i752 显卡,因此会看到一个 VGA 模块,另外还有一个 VRS 模块,将这两个模块去掉后就可以腾出 64kb 的空间了。
  依次运行 CBROM219.EXE I815_DOS.BIN /VGA Release 和 CBROM219.EXE I815_DOS.BIN /VRS 就可以将这两个模块去掉了,
[UploadFile=02_1147960996.jpg]
  我们再运行一次 CBROM219.EXE I815_DOS.BIN /D。此时我们会发现剩余空间已经增大到了 85.18kb。
[UploadFile=03_1147961000.jpg]
3.加入 freedos 到 BIOS 文件中
  既然有了足够的空间,我们就可以将这个 freedos 加进 BIOS 中了。
  运行 CBROM219.EXE I815_DOS.BIN /ISA romos.bin,
  我们就会看到新添加进去的 freedos 模块了。
[UploadFile=04_1147961091.jpg]
4.刷新新的 BIOS 文件
  将新的 BIOS 文件刷入当前主板中。这一步同样使用 WinFlash 就可以实现。不多说了
[UploadFile=05_1147961094.jpg]
  让我们来看看刷新后的效果吧,重新启动后,在自检跳过的第一个画面后,会出现 Press [ScrollLock] to boot ROMOS ! 这样的提示。
[UploadFile=06_1147961098.jpg]
  赶紧按下键盘上的 ScrollLock 键,自检会在列出设备清单以后出现 freedos 的加载画面,一行黄色的“Welcome to ROMOS ver. 1.02 by Martin Rehak (c) 2001-2006; rayer@seznam.cz”。
[UploadFile=07_1147961165.jpg]
  很短的时间就启动完成了。
[UploadFile=08_1147961169.jpg]
  OK 了,至此,我们在 BIOS 中加入 freedos 微型操作系统(算是操作系统吗?嘿嘿!)的操作大功告成,只要你的硬盘上存在一个 FAT32 的分区,而且上面有一些比如 FDISK.COM、FORMAT.COM、DISKGEN.EXE、GHOST.EXE 等 DOS 下能够运行的程序的话,放心的运行它吧。你可以这样运行你的 GHOST 来恢复你的系统盘数据,也可以这样来分区、格式化,甚至还能够来安装操作系统。怎么样,是不是很爽?最重要的,即使你的光驱、软驱都没有了,硬盘的启动信息丢了无法启动了,也没有关系,启动到 freedos,运行 GHOST.EXE,搞定!
  在此特地感谢 fujianabc 给了我重要的提示和 freedos for rom 的下载连接。另外还要感谢一下《清理BIOS垃圾,提高系统启动速度》这一帖的楼主——鼎元,让我产生了灵感,嘿嘿!
  相关工具下载:
RomosTools.part1.rar (195.31 KB, 下载次数: 4665) RomosTools.part2.rar (136.42 KB, 下载次数: 4213)
  另外需要说明一下,老毛桃的主板 BIOS 是 AWARD 的,至于 AMI 的,由于没有条件测试,就没有做。压缩包中还附有一个可以添加到 BIOS 中的 GRUB,操作方法大同小异,但因为老毛桃对 Grub 接触不多,不大了解,所以没有做过,有兴趣的朋友可以试试看,在这方面,fujianabc、天风、lxl1638 等等都是一等一的高手哦,可以向他们请教!

[ 本帖最后由 老毛桃 于 2006-5-22 10:40 PM 编辑 ]
作者: dgxhls    时间: 2006-5-18 22:10
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
天才啊,学习了。
作者: 老毛桃    时间: 2006-5-19 00:12
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
下面引用由打狗协会理事2006/05/18 10:10pm 发表的内容:
天才啊,学习了。
天才?
活活,太抬举了。
其实只要大胆就可以了,希望对广大的本本用户有帮助,因为超薄本本大都是外接光软驱,很不方便
作者: dgxhls    时间: 2006-5-19 00:20
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
确实如此。
作者: fujianabc    时间: 2006-5-19 17:18
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
补充一下,在这个freedos中还带有一个图形界面的文件管理器,输入mm.com就能进入,不过是捷克文的,看着头大。
楼主如有兴趣,可以手动修改这个freedos镜像,方法:
用winhex先截去romos.bin的前1005字节,并把此文件头保存成一个文件,剩余部分就是一个64K的磁盘镜像,可以用winimage打开并修改。改完之后,用copy /b把先前截下的文件头与磁盘镜像再次合并即可。
作者: oneyes    时间: 2006-5-19 20:10
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
刷bios让我欢喜让我忧,以前为了恢复功能刷捷波的bios,顺便修改了超级密码,图片的东西,不过中间出错就比较麻烦
现在很多主板的刷bios方法很特别(比如映泰的主板就很难刷,我个人认为,玩这些东西要有思想准备:不怕死机,有后备bios,方便维修,有高手指导........
作者: wang6610    时间: 2006-5-19 20:14
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
纠正一个错误:
/SN 是不保存原BIOS文件。
/SB 才是跳过更新BootBlock
作者: wang6610    时间: 2006-5-19 20:21
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
下面引用由fujianabc2006/05/19 05:18pm 发表的内容:
补充一下,在这个freedos中还带有一个图形界面的文件管理器,输入mm.com就能进入,不过是捷克文的,看着头大。
楼主如有兴趣,可以手动修改这个freedos镜像,方法:
用winhex先截去romos.bin的前1005字节,并把 ...
我用它结和TuboY的东东给朋友作了个一键恢复。。。
作者: 老毛桃    时间: 2006-5-19 20:42
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
下面引用由wang66102006/05/19 08:14pm 发表的内容:
纠正一个错误:
/SN 是不保存原BIOS文件。
/SB 才是跳过更新BootBlock
感谢王兄指出错误,老毛桃打错了,已纠正。
作者: 老毛桃    时间: 2006-5-19 21:23
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
下面引用由fujianabc2006/05/19 05:18pm 发表的内容:
补充一下,在这个freedos中还带有一个图形界面的文件管理器,输入mm.com就能进入,不过是捷克文的,看着头大。
[UploadFile=1_1148044966.jpg]
我刷新 BIOS 后的第一件事就是到 B: 中找可执行文件了,运行了 mm.com,是弹出这样的界面吗?不过这是在 Windows 下的截图了。上班没有带 DC,而且工作的电脑不敢乱动,只有家里的才敢折腾。
下面引用由fujianabc2006/05/19 05:18pm 发表的内容:
楼主如有兴趣,可以手动修改这个freedos镜像,方法:
用winhex先截去romos.bin的前1005字节,并把此文件头保存成一个文件,剩余部分就是一个64K的磁盘镜像,可以用winimage打开并修改。改完之后,用copy /b把先前截下的文件头与磁盘镜像再次合并即可。
这个我试过了,好像不管是用 WinHEX 还是用 UE,截去前 1005 个字节后,好像剩下的保存后无法被 WinImage 识别为一个磁盘镜像哦!怎么回事?我操作有问题吗?
还有哦,直接用 WinImage 打开这个 romos.bin 是可以的,可浏览到里面的文件内容。
[UploadFile=3_1148044972.jpg]
直接另存为然后加上那个 1005 的头,行吗?个人感觉不妥
作者: 老毛桃    时间: 2006-5-19 21:38
标题: 硬盘无法启动,无光、软驱,没关系!电脑维护不耽误!
[这个贴子最后由老毛桃在 2006/05/19 11:53pm 第 1 次编辑]
下面引用由fujianabc2006/05/19 05:18pm 发表的内容:
楼主如有兴趣,可以手动修改这个freedos镜像,方法:
用winhex先截去romos.bin的前1005字节,并把此文件头保存成一个文件,剩余部分就是一个64K的磁盘镜像,可以用winimage打开并修改。改完之后,用copy /b把先前截下的文件头与磁盘镜像再次合并即可。
下面引用由老毛桃2006/05/19 09:23pm 发表的内容:
这个我试过了,好像不管是用 WinHEX 还是用 UE,截去前 1005 个字节后,好像剩下的保存后无法被 WinImage 识别为一个磁盘镜像哦!怎么回事?我操作有问题吗?
还有哦,直接用 WinImage 打开这个 romos.bin 是可 ...
我用 WinImage 直接打开这个 romos.bin,然后不做任何修改另存为一个文件,得到大小为 64560,大小相差 976 个字节,因此我将原 romos.bin 文件的头部去掉了 976 个字节,剩余的保存,发现是可以用 WinImage 打开的,而如果截去 977 个字节,则不行,那这个 976 个字节是不是就应该是你所说的那 1005 字节的文件头呢?
作者: 老毛桃    时间: 2006-5-20 23:18
标题: (论坛转换,部分回复丢了,这是 colorskywei 的回复)
楼主好!
   我的主板是soltek的75DRV4. BIOS 是 AWARD 的,可是按照楼主的方法添加模块后,目录下会多出一个bios.rom文件.将修改后的bios刷进去重启直接进系统,根本没有提示画面.我怀疑刷新失败,可是将bios导出后运行cbrom /d 检查发现是修改后的.不知是何缘故?还望楼主帮忙看看.75drv442是原bios,75drv4是修改后的.请楼主帮我改一下然后发给我试试.我的Email:colorskywei@sina.com

作者: 老毛桃    时间: 2006-5-20 23:20
标题: (论坛转换,部分回复丢了,这是 fujianabc 的回复)
那个捷克文的文件管理器就是这样的。

winimage的确能直接打开此文件,但是直接打开修改之后保存,会丢失文件头,这样刷进bios就不能启动了。
至于是否是1005字节,这倒不一定,可能镜像稍有些差别(我也忘了我手中的镜像是何时下载的),你可以用EB 3C 90来确定,它是磁盘镜像引导扇区的前三字节的16进制,截去EB前所有字节后得到的就是一个磁盘镜像了。

作者: 老毛桃    时间: 2006-5-20 23:24
下面引用由colorskywei2006/05/20 10:38am 发表的内容:
楼主好!
   我的主板是soltek的75DRV4. BIOS 是 AWARD 的,可是按照楼主的方法添加模块后,目录下会多出一个bios.rom文件.将修改后的bios刷进去重启直接进系统,根本没有提示画面.我怀疑刷新失败,可是将bios导出后 ...

我将 freedos 的镜像重新作了修改,现在的体积缩小到了 58.95kb,自动加载 himem.sys 和 硬盘 UDMA 驱动,我想以后即使你用它来引导,安装 Windows,也可以直接运行 smartdrv 了(无 himem.sys 是无法运行 smartdrv 的)
1.rar (200 KB, 下载次数: 1217) 2.rar (2.92 KB, 下载次数: 947)

我又重新作了一个,将 smartdrv.exe 直接放进去了,这样会更方便些。镜像为 64.9kb。
本来还做了个支持光驱驱动的,可惜你的 BIOS 空间已经放不下了,所以作罢。我将那个光驱驱动的 romos 也传给你,你自己试试看能不能修改吧。


===================================================
注意下面的压缩包跟上面的不同,建议使用下面的[attach]9[/attach][attach]10[/attach]

[ 本帖最后由 老毛桃 于 2006-5-22 08:24 PM 编辑 ]

75drv_SM.part1.rar

195.31 KB, 下载次数: 976, 下载积分: 无忧币 -2

75drv_SM.part2.rar

13.77 KB, 下载次数: 806, 下载积分: 无忧币 -2


作者: 老毛桃    时间: 2006-5-20 23:26
下面引用由fujianabc2006/05/20 11:19am 发表的内容:
winimage的确能直接打开此文件,但是直接打开修改之后保存,会丢失文件头,这样刷进bios就不能启动了。
至于是否是1005字节,这倒不一定,可能镜像稍有些差别(我也忘了我手中的镜像是何时下载的),你可以用EB  ...

呵呵,谢谢了,其实我昨天就已经搞定了。

我昨天就是靠这个方法得到文件头的大小为 976 字节的。

另外,我对镜像做了一点修改,去掉了这个没用的捷克文图形界面,加入了 himem.sys,并且设置为启动加载硬盘的 UDMA 驱动,这样的话,运行 smartdrv.exe 后安装操作系统的话,硬盘速度会提高很多哦!

1.jpg (49.05 KB, 下载次数: 353)

1.jpg

作者: 老毛桃    时间: 2006-5-20 23:26
今天又做了支持 himem.sys 和 smartdrv 直接运行的 romos,另外作了一个支持光驱驱动的,两个 romos 还没来得及回家试试,现在虚拟机中运行了一下,似乎可以。

不过支持光驱的那个不知道 romos 能不能真正读取 CDFS 格式的光盘文件,待回家再试试看吧。
作者: 天风    时间: 2006-5-20 23:36
呵呵,早玩过了,想不到楼主对这个有兴趣了!

还有个为BIOS没有USB启动项的ROMUSB.BIN文件呢,你也可以测试一下!
作者: 老毛桃    时间: 2006-5-20 23:54
原帖由 天风 于 2006-5-20 11:36 PM 发表
呵呵,早玩过了,想不到楼主对这个有兴趣了!

还有个为BIOS没有USB启动项的ROMUSB.BIN文件呢,你也可以测试一下!

啊?是真的吗?

我找到那个 ROMDUSB 镜像了,可惜不大会用
作者: fujianabc    时间: 2006-5-21 10:50
原帖由 天风 于 2006-5-20 11:36 PM 发表
呵呵,早玩过了,想不到楼主对这个有兴趣了!

还有个为BIOS没有USB启动项的ROMUSB.BIN文件呢,你也可以测试一下!

你那个usb启动的romusb.bin就是先加载usb驱动,然后执行loadlin.exe,它只能启动u盘上的linux内核。
作者: laozhang1    时间: 2006-5-21 15:29
楼主啊,我刷新后没有提示.主版是微星K7N2,传上原来的BIOS文件,麻烦帮我看看,谢谢.


---------可能是主版BIOS没有ISA模块.PCI的不会弄,还是算了.

[ 本帖最后由 laozhang1 于 2006-5-22 01:22 AM 编辑 ]

bak.part1.rar

117.19 KB, 下载次数: 272, 下载积分: 无忧币 -2

bak.part2.rar

108.5 KB, 下载次数: 315, 下载积分: 无忧币 -2


作者: 老头子    时间: 2006-5-21 17:50
高啊实在是高!!!!!!!!!!!
作者: sansa520    时间: 2006-5-22 13:19
俺只有学习的份了
作者: bovpn    时间: 2006-5-22 15:06
唉 我害怕刷坏bios啊^_^
作者: addict    时间: 2006-5-22 15:49
鄙视看帖不回的人
作者: TCLSHX    时间: 2006-5-22 16:57
不敢弄,以后再说.
作者: 老毛桃    时间: 2006-5-22 18:38
原帖由 fujianabc 于 2006-5-21 10:50 发表

你那个usb启动的romusb.bin就是先加载usb驱动,然后执行loadlin.exe,它只能启动u盘上的linux内核。

是的,我在家试过了,只是我没有这些,所以测试到了等待界面就停了,也没兴趣再搞下去了。。。
作者: 老毛桃    时间: 2006-5-22 20:26
原帖由 laozhang1 于 2006-5-21 15:29 发表
楼主啊,我刷新后没有提示.主版是微星K7N2,传上原来的BIOS文件,麻烦帮我看看,谢谢.


---------可能是主版BIOS没有ISA模块.PCI的不会弄,还是算了.

我看了一下你的 BIOS 文件,剩余空间很小嘛,

主板是这样的吗?
似乎是集成了网卡哦


[ 本帖最后由 老毛桃 于 2006-5-22 08:30 PM 编辑 ]
作者: laozhang1    时间: 2006-5-22 21:01
是的,没什么空间,不过我干掉了VGA和PCI,空间就刚刚好,但没有提示,不知道是不是干掉了PCI的缘故.
作者: 老毛桃    时间: 2006-5-22 21:24
原帖由 laozhang1 于 2006-5-22 21:01 发表
是的,没什么空间,不过我干掉了VGA和PCI,空间就刚刚好,但没有提示,不知道是不是干掉了PCI的缘故.

干掉 PCI 可能会引起你的集成网卡无法正常工作

bak.part1.rar

195.31 KB, 下载次数: 244, 下载积分: 无忧币 -2

bak.part2.rar

27.48 KB, 下载次数: 276, 下载积分: 无忧币 -2


作者: laozhang1    时间: 2006-5-22 21:41
先谢了,试试再来
作者: laozhang1    时间: 2006-5-22 21:51
试了,还是不可以,没有Press [ScrollLock] to boot ROMOS ! 这样的提示
可能是主版没有ISA插槽,BIOS没有ISA模块的缘故.去掉PCI不影响集成网卡上网.
谢了.
作者: 老毛桃    时间: 2006-5-22 22:31
原帖由 laozhang1 于 2006-5-22 21:51 发表
试了,还是不可以,没有Press  to boot ROMOS ! 这样的提示
可能是主版没有ISA插槽,BIOS没有ISA模块的缘故.去掉PCI不影响集成网卡上网.
谢了.

别着急,也许你的芯片组已经不支持 ISA 了。再试试这样吧

[ 本帖最后由 老毛桃 于 2006-5-22 10:32 PM 编辑 ]

bak.part1.rar

195.31 KB, 下载次数: 329, 下载积分: 无忧币 -2

bak.part2.rar

27.48 KB, 下载次数: 309, 下载积分: 无忧币 -2


作者: laozhang1    时间: 2006-5-22 23:08
又麻烦你,真是不好意思,还是没有提示.
作者: 老毛桃    时间: 2006-5-22 23:17
原帖由 laozhang1 于 2006-5-22 23:08 发表
又麻烦你,真是不好意思,还是没有提示.

没关系,
这个是从官方下载的那个 ROMOS,我没有进行任何编辑和修改,如果再不行,我就没有办法了。

bak.part1.rar

195.31 KB, 下载次数: 414, 下载积分: 无忧币 -2

bak.part2.rar

25.19 KB, 下载次数: 401, 下载积分: 无忧币 -2


作者: laozhang1    时间: 2006-5-22 23:27
我也不试了,估计还是不行,我咋晚试过了,那个网站我也看过了,可能要填写网卡,中断,之类的,反正麻烦,总之,我不懂英文,是没什么办法的了,还是谢谢你.
作者: addict    时间: 2006-5-24 19:45
请问,在VMWARE 的虚拟环境下整这个东西,会不会影响真正的物理BIOS???

请指教..

谢谢..
作者: 老毛桃    时间: 2006-5-24 20:01
原帖由 addict 于 2006-5-24 19:45 发表
请问,在VMWARE 的虚拟环境下整这个东西,会不会影响真正的物理BIOS???

请指教..

谢谢..

不会影响,但是我想可能无法成功操作
作者: addict    时间: 2006-5-25 03:54
那就是说,无法复制修改BIOS在VMWARE下。
谢谢老毛桃。
顺便提一下,我这儿有个毛老大。哈哈。
作者: fujianabc    时间: 2006-5-25 10:52
原帖由 老毛桃 于 2006-5-24 08:01 PM 发表

不会影响,但是我想可能无法成功操作

在vmware下肯定可以操作的,最早玩这个东西就是先改了vmware的bios来进行测试的,vmware中玩过romos之后,才决定刷到真机bios里去的。具体怎样刷vmware的bios,我也不是很清楚,只有天风老大改过,我得到一个修改之后的vmware的bios。

详见此帖:
http://www.znpc.net/bbs/viewthread.php?tid=584
作者: addict    时间: 2006-5-25 14:22
原帖由 fujianabc 于 2006-5-25 10:52 AM 发表

在vmware下肯定可以操作的,最早玩这个东西就是先改了vmware的bios来进行测试的,vmware中玩过romos之后,才决定刷到真机bios里去的。具体怎样刷vmware的bios,我也不是很清楚,只有天风老大改过,我得到一个修 ...



谢谢.
不知道天风老大能不能给个相关下载或连接......
作者: 老毛桃    时间: 2006-5-25 16:21
原帖由 fujianabc 于 2006-5-25 10:52 发表

在vmware下肯定可以操作的,最早玩这个东西就是先改了vmware的bios来进行测试的,vmware中玩过romos之后,才决定刷到真机bios里去的。具体怎样刷vmware的bios,我也不是很清楚,只有天风老大改过,我得到一个修 ...

啊?原来这样啊,我一直使用 VPC,没有用过 VMWare,也看过修改 VMWare 的 BIOS 的相关帖子,只是没有太在意,呵呵,学习一下了
作者: 老毛桃    时间: 2006-5-25 16:25
原帖由 addict 于 2006-5-25 14:22 发表
谢谢.
不知道天风老大能不能给个相关下载或连接......

哈哈,才发现,原来我已经下载过 Grub for ROM,里面有使用说明,你自己看看吧

grub4rom.part1.rar

195.31 KB, 下载次数: 793, 下载积分: 无忧币 -2

grub4rom.part2.rar

133.04 KB, 下载次数: 740, 下载积分: 无忧币 -2


作者: addict    时间: 2006-5-26 11:24
Thanks a lot
有毛的老桃....
作者: fxbwyqd    时间: 2006-5-26 21:56
现在很多主板的刷bios方法很特别(比如映泰的主板就很难刷,我个人认为,玩这些东西要有思想准备:不怕死机,有后备bios,方便维修,有高手指导........
作者: cqcbc    时间: 2006-5-27 07:11
方法很高明,就是自己不熟悉,只好等旁边有高手时动手。
作者: 红尘劲打拼    时间: 2006-5-27 22:04
菜鸟路过~汗,我要学的东西太多了,我想拜师父~!~
作者: 老毛桃    时间: 2006-5-29 09:47
原帖由 tom135 于 2006-5-29 08:15 发表
毛哥,压缩包有密码呀,密码是多少?

不好意思,忘了说了,我的 WinRAR 默认设置有密码

密码是:maotao (小写)

1.JPG (106.2 KB, 下载次数: 187)

1.JPG

作者: erikoyang    时间: 2006-5-29 10:15
强人~!
作者: bbqcat    时间: 2006-6-22 14:29
感谢提供,支持一下!
作者: AJLENG    时间: 2006-6-22 15:12
怎样把主题加入我的BLOG?贴子一时看不完,想饭后再看~
作者: 老毛桃    时间: 2006-6-22 16:43
原帖由 AJLENG 于 2006-6-22 15:12 发表
怎样把主题加入我的BLOG?贴子一时看不完,想饭后再看~

点击这个链接就可以了

http://bbs.wuyou.net/misc.php?action=blog&tid=64686
作者: 我是横刀    时间: 2006-6-23 08:38
谢谢楼主的分享
作者: xry0610    时间: 2006-6-23 15:58
桃兄高实在是高
作者: 6618    时间: 2006-6-23 16:53
今晚有空,准备拿我刚买不到1年的杂牌815主板开刀——反正我以前都曾成功修改过815主板的LOGO。
作者: richzhang    时间: 2006-6-23 22:28
学习学习.......
作者: 6618    时间: 2006-6-24 10:11
原帖由 6618 于 2006-6-23 04:53 PM 发表
今晚有空,准备拿我刚买不到1年的杂牌815主板开刀——反正我以前都曾成功修改过815主板的LOGO。

抱着有始有终的原则,现在反馈一下在家刷主板的结果:

结果是,我家的815主板拒绝我的“开刀”!——不给刷。
不管在WINDOWS下还是在虚拟内存的98的MSDOS下都刷不进去。
在98和XP下都显示UNKNOWN FLASH ,在DOS下则显示“BIOS的尺寸不相匹配。
相关图片如下:

[ 本帖最后由 6618 于 2006-6-24 10:23 AM 编辑 ]

3.JPG (51.67 KB, 下载次数: 233)

3.JPG

6.jpg (48.5 KB, 下载次数: 196)

6.jpg

作者: 6618    时间: 2006-6-24 10:19
就算是把用AWDFLASH备份出来的815BAK.BIN刷回去也是刷不进去,AWDFLASH拒绝刷这一BIOS,为什么会这样呢?我想是因为这块815主板是2005年3月的BIOS,而不管是WINDOWS或DOS下刷BIOS的程序都比这个主板要早,它不能认识或相关数据有差异的原因,AWDFLASH就是拒绝刷这块主板的BIOS。看来有机会上这生产这块杂牌主板的商家的网页去看看再说了。

[ 本帖最后由 6618 于 2006-6-24 10:28 AM 编辑 ]
作者: 6618    时间: 2006-6-24 10:27
CBROM则能修改这个BIOS,相关图片如下:

2.JPG (65.71 KB, 下载次数: 221)

2.JPG

4.JPG (65.72 KB, 下载次数: 206)

4.JPG

作者: 老毛桃    时间: 2006-6-24 10:43
原帖由 6618 于 2006-6-24 10:19 发表
就算是把用AWDFLASH备份出来的815BAK.BIN刷回去也是刷不进去,AWDFLASH拒绝刷这一BIOS,为什么会这样呢?我想是因为这块815主板是2005年3月的BIOS,而不管是WINDOWS或DOS下刷BIOS的程序都比这个主板要早,它不能认 ...

不大可能啊,我怎么刷都没有关系的,你的主板有没有 BIOS 防擦写功能?我的是在 WinXP 下刷的,也是块杂牌主板
作者: 6618    时间: 2006-6-24 10:45
我2004年的时候曾刷过以前的815主板(那块主板2005年的时候已坏了)的LOGO,还把捷波的恢复精灵刷了进去,我想我刷BIOS的操作是无误的。既然刷不了,也就作罢了。虽然失败了,但还是回顾了一下刷BIOS的过程,温故知新了一下。
同时,因为用CBROM腾出64K的BIOS空间是以去掉集成显卡i815.vga为代价的,也就是说如果我的独立显卡坏掉了,我想用集成在主板上的显卡时,由于已给CBROM清掉,是用不了的,需要清掉ROMOS.bin再刷回i815.vga个集成显卡才能用,万一由于时间较长,备份的主板BIOS弄丢了就只能上商家的页网下载一个完全同型号的主板刷回去才能用集成的显卡了。基于这一原因,刷不了我也就不想再深究了。
最后,多谢老毛桃的分享,在动手操作的过程中明白了更多的东东——尽管是以失败告终的——哈哈哈。
作者: 6618    时间: 2006-6-24 10:52
原帖由 老毛桃 于 2006-6-24 10:43 AM 发表

不大可能啊,我怎么刷都没有关系的,你的主板有没有 BIOS 防擦写功能?我的是在 WinXP 下刷的,也是块杂牌主板

有没有 BIOS 防擦写功能?这个我倒没去想也没想到,我只想到是因为我的BIOS是2005年3月的,而刷BIOS的AWDFLASH都是2005年以前的,而且拒绝刷的提示是UNKNOWN  FLASH,并没提示写保护。
看来今晚回家看看主板的说明书(我还看没过这块主板的说明书)才能定夺,现在我在网吧。

另,你的主板的BIOS是2001年的,我以前刷2001年的主板BIOS也是怎么刷都没关系的。

[ 本帖最后由 6618 于 2006-6-24 11:17 AM 编辑 ]
作者: 6618    时间: 2006-6-24 11:10
如果仔细看这一帖,是能学到一些东西的,此帖加精,同时强调一下刷BIOS是存在一定的风险的,不要乱刷。

[ 本帖最后由 6618 于 2006-6-24 11:11 AM 编辑 ]
作者: 双响炮    时间: 2006-6-25 00:32
强,桃
作者: wang6610    时间: 2006-6-25 11:28
原帖由 6618 于 2006-6-24 10:19 AM 发表
就算是把用AWDFLASH备份出来的815BAK.BIN刷回去也是刷不进去,AWDFLASH拒绝刷这一BIOS,为什么会这样呢?我想是因为这块815主板是2005年3月的BIOS,而不管是WINDOWS或DOS下刷BIOS的程序都比这个主板要早,它不能认 ...



写不进我估计5种可能:

          1。cmos中有bios防写开关
          2。主板有防写跳线
          3。bios芯片坏
          4。AWDFLASH版本错误
          5。为防CIH病毒把BIOS写引脚折断或掰出
                      etc.

[ 本帖最后由 wang6610 于 2006-6-25 11:30 AM 编辑 ]
作者: 6618    时间: 2006-6-26 09:12
原帖由 wang6610 于 2006-6-25 11:28 AM 发表



写不进我估计5种可能:

          1。cmos中有bios防写开关
          2。主板有防写跳线
          3。bios芯片坏
          4。AWDFLASH版本错误
          5。为防CIH病毒把BIOS写引脚折断或掰出 ...


昨天我下载了AWDFLASH的最新AWDFLASH8.66DOS版,是2006年出的,同样刷不进去,同样是这样的错误。现在只存在种可能了:
    2。主板有防写跳线
昨晚我看了一下主板的说明书,写得相当简单,并没提及BIOS的防写问题,在主板的BIOS升级部分提到要注意的是DOS下不能在EMM386环境中运行AWDFLASH,否则会出错,也并没提到BIOS的防写问题。而该主板的主页也没提供刷BIOS的工具下载,这是一块“信洋主板”——深圳出的。这个问题暂时搁着,有新的情况6618再来反馈。

[ 本帖最后由 6618 于 2006-6-26 09:48 AM 编辑 ]
作者: 6618    时间: 2006-6-26 09:35
我的这块815主板是2005年12月买的,这个时间,要买一块新的815品牌主板已不可能,所以买了这一块杂牌主板。这次刷BIOS发现给杂牌主板撞了一下腰,看下图:

[ 本帖最后由 6618 于 2006-6-26 09:36 AM 编辑 ]

1.JPG (56.98 KB, 下载次数: 148)

1.JPG

2.JPG (41.76 KB, 下载次数: 181)

2.JPG

作者: 老毛桃    时间: 2006-6-26 09:56
6618 莫急,你可以试试用 Everest 检测你的主板,我的杂牌主板的 BIOS 就是在 Everest 的检测结果中找到了 BIOS 的官方更新网址。

这是我在办公电脑上的截图,看看能否帮你找到你的杂牌主板的 BIOS 更新

Snap1.jpg (246.99 KB, 下载次数: 139)

Snap1.jpg

作者: 6618    时间: 2006-6-26 10:00
原帖由 6618 于 2006-6-26 09:12 AM 发表

昨天我下载了AWDFLASH的最新AWDFLASH8.66DOS版,是2006年出的,同样刷不进去,同样是这样的错误。现在只存在种可能了:
    2。主板有防写跳线
昨晚我看了一下主板的说明书,写得相当简单,并没提及BIOS的防写问题,在主板的BIOS升级部分提到要注意的是DOS下不能在EMM386环境中运行AWDFLASH,否则会出错,也并没提到BIOS的防写问题。而该主板的主页也没提供刷BIOS的工具下载,这是一块“信洋主板”——深圳出的。这个问题暂时搁着,有新的情况6618再来反馈。

找到了该公司的电话,一个男的接的,他说该主板的BIOS已锁死了的,防刷写,不存在主板防写跳线问题。

[ 本帖最后由 6618 于 2006-6-26 10:02 AM 编辑 ]
作者: 6618    时间: 2006-6-26 10:05
原帖由 老毛桃 于 2006-6-26 09:56 AM 发表
6618 莫急,你可以试试用 Everest 检测你的主板,我的杂牌主板的 BIOS 就是在 Everest 的检测结果中找到了 BIOS 的官方更新网址。

这是我在办公电脑上的截图,看看能否帮你找到你的杂牌主板的 BIOS 更新


谢谢老毛桃,我试试,但该主板公司的一个男的说该主板已锁死,防刷写,也不知是真是假,估计99.999%都是真的,因为用它本身备份的BIOS也刷不进去。
作者: izank    时间: 2006-6-27 00:12
强人啊,支持你的工作
作者: jarryson    时间: 2006-7-19 00:33
才看到 不好意思

给你顶起来!
作者: secowu    时间: 2006-7-19 08:34
呵呵,有道理。。。。
适合超THIN机子用啦
作者: Robertzao    时间: 2006-7-29 09:44
不是高手不要乱刷!:lol
AMI的我想刷,可是没板子.:lol
845的不小的行吗!:lol
作者: zchcc    时间: 2006-8-2 10:02
我用了你的方法~成功了~但是这个DOS不是很好用~
很多东东都不能正常加载~

另外您帖子附件里还带了一个Grub4Rom.bin
我想问下,可以把Grub刷进BIOS中么??怎么用啊?
我刷进去了~可是启动的时候没什么提示~跟没刷前一样~
作者: bdfcy    时间: 2006-8-2 12:29
现在才看到这帖,强!
作者: 老毛桃    时间: 2006-8-2 14:42
原帖由 zchcc 于 2006-8-2 10:02 发表
我用了你的方法~成功了~但是这个DOS不是很好用~
很多东东都不能正常加载~

另外您帖子附件里还带了一个Grub4Rom.bin
我想问下,可以把Grub刷进BIOS中么??怎么用啊?
我刷进去了~可是启动的时候没什么提示~跟没 ...

就是将这个 Grub4Rom.BIN 代替原来 64KB 的那个 Romos.BIN 刷进你主板的 BIOS,启动时也会出现要求你按下 Scroll Lock 激活的选项。
作者: mutouqq    时间: 2006-8-3 09:00
长见识,非常支持
作者: lintel    时间: 2006-8-4 13:26
原帖由 6618 于 2006-6-26 10:05 AM 发表


谢谢老毛桃,我试试,但该主板公司的一个男的说该主板已锁死,防刷写,也不知是真是假,估计99.999%都是真的,因为用它本身备份的BIOS也刷不进去。

既然BIOS芯片以锁死,为何不换一块,我这里有好多块,要的话给你,反正没有用到:lol,
所谓的锁死是断开了BIOS写入的引脚,你可以试试接上,不过不太可能.找一块BIOS芯片,用热拔插法写入就行了:D
我试过了,能成功,预祝你成功:P
作者: lintel    时间: 2006-8-4 13:30
毛桃兄弟,如果我将这些模块用在其他非AWARD BIOS上,行得通吗?比如:AMI BIOS ,AST BIOS等.
还有VMware的BIOS是PHOENIX BIOS,可是不知道怎么改,说明一下好吗?:P
作者: 老毛桃    时间: 2006-8-4 16:11
原帖由 lintel 于 2006-8-4 13:26 发表

既然BIOS芯片以锁死,为何不换一块,我这里有好多块,要的话给你,反正没有用到:lol,
所谓的锁死是断开了BIOS写入的引脚,你可以试试接上,不过不太可能.找一块BIOS芯片,用热拔插法写入就行了:D
我试过了,能成功,预 ...

嗯,有理
原帖由 lintel 于 2006-8-4 13:30 发表
毛桃兄弟,如果我将这些模块用在其他非AWARD BIOS上,行得通吗?比如:AMI BIOS ,AST BIOS等.
还有VMware的BIOS是PHOENIX BIOS,可是不知道怎么改,说明一下好吗?:P

这个我没有测试过,也没有条件测试,有兴趣的朋友不妨试试看。
作者: bendon    时间: 2006-8-4 21:35
强贴。。。终于看完了。。。
值得一学。。。。
本人是菜鸟。。。刚发现这个论坛。。。
发现不懂的东西很多。。。
正在学习中。。。
希望高手有机会能指点指点。。。
作者: 任我行之狂风    时间: 2006-8-5 23:07
晕,差距太大了,看到我头都大了……

看来活到老,学到老,一点没错!
作者: lenghai    时间: 2006-8-6 14:53
晕,难度超级
作者: fljiangdh    时间: 2006-8-6 15:17
老毛是干什么的?
太强!!!!!!!!!!!!!!!!!
作者: 8戒    时间: 2006-8-12 15:26
I服了U!:victory:
活这么大,第一次看见把OS装到BIOS中去滴!

作者: 安情    时间: 2006-8-12 16:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: wang6610    时间: 2006-8-12 16:12
原帖由 安情 于 2006-8-12 04:05 PM 发表
810的主板可以不可以不刷掉集成显卡vga.显卡要用.刷别的,行吗,像810这种集成的主板,还能刷别的什么吗?



把你的bios文件发上,我帮你看看!
作者: 安情    时间: 2006-8-12 16:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 安情    时间: 2006-8-12 16:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: fujianabc    时间: 2006-8-12 16:52
原帖由 安情 于 2006-8-12 04:27 PM 发表
没软驱,用u盘或光驱能不能代替刷新失败后自动恢复bios吗?不能吧?

一般不行,bios刷新失败后,只有用软驱才有可能启动。
作者: wang6610    时间: 2006-8-12 17:11
AMI的BIOS大家就不要测试了。

[ 本帖最后由 wang6610 于 2006-8-13 09:24 PM 编辑 ]
作者: 安情    时间: 2006-8-12 18:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: lhtlht    时间: 2006-8-13 18:24
学习一下!
作者: 安情    时间: 2006-8-13 18:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: sdlws    时间: 2006-8-17 10:41
高,太高了,看不动,不过顶了
作者: lintel    时间: 2006-8-18 15:48
以下是Romos的原码:各位懂单片机的兄弟可以看看.我们也可以做一个!
做一个无忧专版的!:D





;*****************************************************************************
;*                           .-= The ROMOS Project =-.                             *
;* ROM Operating System 1.02 by Martin 瀍h爇 (C) 2001-2006; [email]rayer@seznam.cz[/email]  *
;* Started: 27.3.2001                                                             *
;* Last updated: 18.3.2006                                                     *
;* Tested on: Award BIOS 4.51PG (Octek Rhino II ZX), 6.00PG (Abit BX133-Raid)*
;* Compile with NASM (286 code), recommended segment to load: D000h             *
;* Now able to boot FreeDOS from virtual ROMDISK image, see incbin at EOF    *
;*****************************************************************************

;%define MAKE_DEBUG_COM          ;compile as executable *.COM file / zkompiluje spustitelny *.COM soubor
;%define MAKE_PCI_MODULE         ;create PCI ROM module instead ISA ROM module (needed for new BIOSes) / vytvori ROM jako PCI modul misto ISA modulu (nektere nove BIOSy uz nepodporuji ISA)
ROM_IMAGE_SIZE        EQU 64                ;size of ROM image in kB / velikost ROM image v kB
ROMDISK_DRIVE        EQU 1                ;0=A: 1=B: 80h=C: ... emulated drive / emulovana jednotka
ROMDISK_CYLS        EQU 7                ;number of cylinders of emulated drive [1-255] / pocet cylindru emulovane jednotky
ROMDISK_HEADS        EQU 1                ;number of heads of emulated drive [1-255] / pocet hlav emulovane jednotky
ROMDISK_SECPT        EQU 18                ;sectors per track of emulated drive [1-63] / pocet sektoru na stopu emulovane jednotky
BS_DRIVE_OFFSET EQU 24h         ;offset in bootsector where boot dive number is stored / pozice v bootsektoru, kde je cislo jednotky
BS_SEGMENT        EQU 0                ;address to load bootsector / adresa spousteni bootsectoru
BS_OFFSET        EQU 7C00h
ROMOS_MSG_DELAY EQU 30                ;delay of MSG1 show in 55ms ticks / doba zobrazeni MSG1 v 55ms ticich
ROMOS_HOTKEY        EQU 00010000b        ;mask for ScrollLock key / maska pro klavesu ScrollLock
;ROMOS_HOTKEY         EQU 00100000b         ;mask for NumLock key / maska pro klavesu NumLock
NEW_SS                EQU 04000h        ;address of new stack (4000:xxxx should be free for Award BIOS)
NEW_SP                EQU 0FFFFh        ;adresa noveho zasobniku (oblast 4000:xxxx by mela byt v Award BIOSu volna)
INT19H                EQU 19h*4        ;address in IVT for store INT 19h vector / misto v IVT pro ulozeni vektoru INT 19h
OLD_INT13H        EQU 85h*4        ;address for permanent store of old INT 13h vector - INT 85h / misto pro trvale ulozeni puvodniho vektrou INT 13h
                                ;INT 84h a 85h shuld be free, change it if collide / INT 84h a 85h by melo byt volne, v pripade kolize zmenit
%ifdef MAKE_DEBUG_COM
        ORG        100h                ;use if compiling .COM file / pouzij pri kompilaci .COM souboru
%else
        ORG        0h                ;use if compiling ROM image / pouzij pri kompilaci ROM image
        DW        0AA55h                ;ROM header signature / ROM hlavicka
        DB        ROM_IMAGE_SIZE*2;ROM size in 512B blocks, minimum 8 blocks / velikost ROM v 512B blocich, minimum 8 bloku
%endif
        JMP        BEGIN                ;jump to begin of code / skok na zacatek kodu
        DB        'CHKSUM=',0        ;reserved Byte for checksum / rezerva na korekci checksumu

%ifdef MAKE_PCI_MODULE                ;need to insert additional PCI headers / je potreba vlozit pridavne hlavicky PCI
        TIMES        18h-($-$$) DB 0 ;padding zeros to offset 18h / zarovnani nulami na offset 18h
        DW        PCIHDR                ;pointer to PCI Header / ukazatel na hlavicku PCI (musi byt na offsetu 18h)
        DW        PNPHDR                ;pointer to PnP Expansion Header / ukazatel na hlavicku PnP (musi byt na offsetu 20h)

PCIHDR: DB        'PCIR'                ;PCI data structure signature / hlavicka PCI data structury
        DW        10ECh                ;vendor ID (must match real PCI device) / ID vyrobce (musi odpovidat existujicimu PCI zarizeni)
        DW        8029h                ;device ID (must match real PCI device) / ID zarizeni (musi odpovidat existujicimu PCI zarizeni)
        DW        0                ;pointer to vital product data (0=none) / ukazatel na vital product data (0=nic)
        DW        24                ;PCI data structure length [B] / velikost PCI data structury [B]
        DB        0                ;PCI data structure revision (0=PCI 2.1)/ revize PCI data structury (0=PCI 2.1)
        DB        2,0,0                ;PCI device class code (2=notwork ctrl., 0=eth.) / trida PCI zarizeni (musi odpovidat existujicimu PCI zarizeni)
        DW        ROM_IMAGE_SIZE*2;ROM size in 512B blocks / velikost ROM v 512B blocich
        DW        0                ;revision level of code / revize kodu
        DB        0                ;code type (0=x86 PC-AT) / typ kodu (0=x86 PC-AT kompatabilni)
        DB        80h                ;last image indicator/indikuje posledni image v ROM
        DW        0                ;reserved

PNPHDR: DB        '$PnP'                ;PnP data structure signature / hlavicka PnP data structury (PnP BIOS spec. 1.0a str. 17)
        DB        1                ;PnP structure revision / revize PnP struktury
        DB        2                ;PnP structure length (in 16B blocks) / velikost PnP struktury v 16B blocich
        DW        0                ;offset to next header (0-none) / offset na dalsi hlavicku
        DB        0                ;reserved
        DB        33h                ;PnP structure checksum / kontrolni soucet PnP struktury
        DD        0                ;device identifier / identifikator zarizeni
        DW        0                ;pointer to manufacturer string / ukazatel na retezec vyrobce
        DW        0                ;pointer to productname string / ukazatel na retezec zarizeni
        DB        2,0,0                ;device class code (2=notwork ctrl., 0=eth.) / trida PCI zarizeni (musi odpovidat existujicimu PCI zarizeni)
        DB        64h                ;device indicators (64h - shadowable,cacheable,not only for boot,IPL device)
        DW        0                ;boot connection vector (0-none)
        DW        0                ;disconnect vector (0-none)
        DW        0                ;bootstrap entry vector (0-none)
        DW        0                ;reserved
        DW        0                ;static resource info vector (0-none)
%endif

;************** Constants / Konstanty *****************************************
MSG1        DB        'Press [ScrollLock] to boot ROMOS !',0
%ifdef MAKE_PCI_MODULE
MSG2        DB        'Welcome to ROMOS ver. 1.02 PCI by Martin Rehak',0
%else
MSG2        DB        'Welcome to ROMOS ver. 1.02 by Martin Rehak (C) 2001-2006; [email]rayer@seznam.cz[/email]',0
%endif
MSG3        DB        'ROMOS has installed virtual ROM DISK drive.',0
MSG4        DB        'Bootsector loaded at ',0
MSG5        DB        'Booting!',0

;************** Subroutines / Procedury ***************************************
DELAY:                                ;pause, put number of 55ms idle ticks in AH / pauza, do AH vloz pocet 55ms idle tiku
        STI                        ;enable interrupts otherwise timer will not be updated / povol preruseni, jinak se neaktualizuje casovac
        PUSH        AX                ;store / uloz AX
        PUSH        ES                ;store / uloz ES
        PUSHF
        PUSH        BYTE 0                ;segment of timer / segment casovace 0000 (opcode 6A 00 misto 68 00 00)
        POP        ES                ;ikdyz jsme pushli jen Byte, popne se cely Word (vyssi Byte je vzdy 0)
        ADD        AH,[ES:046Ch]        ;add ticks to required delay / k pozadovane pauze pricti aktualni pocet tiku z adresy casovace 046C
@DLY1:        CMP        AH,[ES:046Ch]        ;compare current and required value / rovnaji se pozadovane a aktualni ?
        JNE        @DLY1                ;if not then repeat / kdyz ne, opakuj
        POPF
        POP        ES                ;restore ES / obnov ES
        POP        AX                ;restore AX / obnov AX
        RET                        ;return / navrat

;*****************************************************************************
GOTOXY: PUSH        AX                ;set cursor [x,y] position given in [DL,DH] / nastavi kurzor na pozici [x,y] danou [DL,DH]
        PUSH        BX                ;[0,0] is top-left corner / [0,0] je levy horni roh
        MOV        AH,2                ;function number 2 / funkce cislo 2
        MOV        BH,0                ;videopage / videostranka
        INT        10h                ;execute / proved
        POP        BX
        POP        AX
        RET                        ;return / navrat

;*****************************************************************************
WHEREXY:
        PUSH        AX                ;get cursor [x,y] position into [DL,DH] / precte pozici kurzoru [x,y] do [DL,DH]
        PUSH        BX
        PUSH        CX
        MOV        AH,3                ;function number 3 / funkce cislo 3
        MOV        BH,0                ;videopage / videostranka
        INT        10h                ;execute / proved
        POP        CX                ;waste information about cursor size / zahod informaci o velikosti kurzoru
        POP        BX
        POP        AX
        RET                        ;return / navrat

;*****************************************************************************
WRITE:        PUSHA                        ;write zero-terminated string from CS:IP pointer / vypis 0-ukoncene vety z CS:SI atributem v BL
        PUSHF                        ;with every character repeated BH-times (low 7bit) / a opakovanim jednotlivych znaku BH-krat
        PUSH        BX                ;and write CRLF if MSB of BH is 1 / a odradkuj pokud MSB BH je 1
        CALL        WHEREXY         ;read cursor position to [DL,DH] / precti pozici kurzoru [DL,DH]
        MOV        AH,9                ;function write char 9h (BH=scr_num, AL=char, CX=repeat, BL=attrib) / funkce na vypis znaku 9h
        XOR        CX,CX                ;set CH=0, CL=0
        XCHG        CL,BH                ;repeat char. BH-times CH=0, CL=BH, BH=0 / opakovani znaku BH-krat
        AND        CL,7Fh                ;set MSB=0, accept only 7-bit value / snuluj MSB, akceptujeme pouze 7-bit hodnotu
@WRI1:        MOV        AL,[CS:SI]        ;load char. from zero-terminated string / nacti znak z retezce ukonceneho 0
        CMP        AL,0                ;if it is 0 / je-li konec - 0
        JE        @WRI2                ;then end / tak konec
        INT        10h                ;execute / proved
        INC        SI                ;increment string index / inkrementuj index znaku ve vete
        INC        DL                ;increment X-cursor position / inkrementuj X-ovou pozizi kurzoru
        CALL        GOTOXY                ;set cursor to [DL,DH] (need to do myself) / nastav kurzor na [DL,DH] (musim to delat rucne)
        JMP        SHORT @WRI1        ;repeat / opakuj
@WRI2:        POP        BX                ;restore BX / obnov BX
        CMP        BH,80h                ;if BH<80h (MSB=0) skip / pokud je BH<80h (MSB=0)
        JS        @WRI3                ;jump to end / preskoc na konec
        POPF                        ;else write newline / jinak odradkuj
        POPA                        ;restore regs because WCRLF store them again / obnov registry protoze WCRLF je opet uklada
WCRLF:        PUSHA                        ;write CRLF = newline / vypis CRLF = novy radek
        PUSHF                        ;this subfunc. can be called out of WRITE func. / tato podfunkce muze byt volana i mimo fci WRITE
        MOV        AX,0E0Dh        ;function 0E - write char as TTY, CR / funkce 0E - pis TTY znak, znak CR
        XOR        BL,BL                ;paper color=0 / barva papiru=0
        INT        10h                ;execute / proved
        MOV        AL,0Ah                ;char LF / znak LF
        INT        10h                ;execute / proved

@WRI3:        POPF                        ;restore flags (2B) / obnov flagy
        POPA                        ;restore regs DI,SI,BP,SP,BX,DX,CX,AX (16B)
        RET                        ;return / navrat

;*****************************************************************************
WHEXPTR:PUSH        AX                ;write hexa pointer DX:CX / vypis hexa pointer DX:CX
        PUSH        BX                ;store AX,BX / uloz AX,BX
        CALL        WHEXW                ;write segment from DX / vypis segment z DX
        XCHG        DX,CX                ;swap CX-DX / prohod CX-DX
        XOR        BL,BL                ;paper color=0 / barva papiru=0
        MOV        AX,0E3Ah        ;write char : / vypis znak :
        INT        10h                ;via BIOS / pres BIOS
        CALL        WHEXW                ;write offset from DX / vypis offset z DX
        XCHG        DX,CX                ;swap back CX-DX / prohod CX-DX tak jak byly puvodne
        POP        BX                ;restore BX,AX / obnov BX,AX
        POP        AX
        RET                        ;return / navrat

;*****************************************************************************
WHEXW:        XCHG        DH,DL                ;write hexa word from DX / vypis hexa word z DX
        CALL        WHEXB                ;call WHEXB to write upper Byte / zavolej WHEXB na vypis horniho Byte
        XCHG        DH,DL                ;swap DH,DL / prohod DH,DL
        CALL        WHEXB                ;call WHEXB to write lower Byte / zavolej WHEXB na vypis dolniho Byte
        RET                        ;return / navrat

;*****************************************************************************
WHEXB:        PUSH        AX                ;write hexa Byte from DL / vypis hexa Byte z DL
        PUSH        DX
        PUSHF
        MOV        DH,DL
        AND        DL,00Fh         ;mask lower digit / vymaskuj dolni cislici
        AND        DH,0F0h         ;mask upper digit / vymaskuj horni cislici
        ROR        DH,4                ;shift upper digit 4bits right / posun horni cislici o 4 bity vpravo
        CALL        @WHB1                ;write upper digit / vytiskni horni cislici
        MOV        DH,DL
        CALL        @WHB1                ;write lower digit / vytiskni dolni cislici
        POPF
        POP        DX
        POP        AX
        RET
@WHB1:        CMP        DH,0Ah                ;compare if the digit is lower than 10 / porovnej, je-li cislo mensi nez 10 (0Ah)
        JC        @WHB2                ;if not then skip / neni-li preskoc dal
        ADD        DH,7                ;if yes then add 7 to get proper ASCII code / je-li, pricti 7 (rozdil ASCII kodu 'A' a '9'+1)
@WHB2:        ADD        DH,'0'                ;add ASCII code of '0' / pricti ASCII kod '0'
        MOV        AH,0Eh                ;write char / vypis znak
        MOV        AL,DH                ;from AL / z AL
        INT        10h                ;via BIOS / pres BIOS
        RET                        ;return / navrat

;*****************************************************************************
WREGS:        PUSHA                        ;write register dump line and CRLF / vypis na radku registry a odradkuj
        PUSH        DS                ;prepare all regs to stack / priprav vsechny registry do zasobniku
        PUSH        ES                ;AX,CX,DX,BX,SP,BP,SI,DI, DS,ES,SS,CS, F
        PUSH        SS
        PUSH        CS
        PUSHF

        MOV        CX,9                ;loop counter-9x repeat / pocitadlo smycky-9x oparuj
        MOV        SI,REGSTR        ;prepare reg name / priprav jmeno registru
        MOV        BP,SP                ;set BP=SP for indexing stored regs / priprav BP=SP pro indexaci ulozenych registru
@WREGS1:MOV        BX,0107h        ;seda barva, opakovani 1x
        CALL        WRITE                ;write reg name / vypis jmeno registru
        MOV        AX,0E3Dh        ;write char function, char '=' / funkce vypisu znaku, znak '='
        XOR        BL,BL                ;paper color=0 / barva papiru=0
        INT        10h                ;write '=' via BIOS / vypis '=' pres BIOS
        MOV        DX,[SS:BP]        ;load reg from stack to DX / nacti registr ze zasobniku do DX
        CALL        WHEXW                ;write DX hexa value / vypis hexa hodnotu DX
        MOV        AL,' '                ;write char ' ' / vypis znak ' '
        INT        10h                ;via BIOS / pres BIOS
        INC        BP                ;go up through the stack data / jdi v zasobniku na dalsi registr
        INC        BP
        INC        SI                ;reg name pointer+=3 / nastav pointer na dalsi jmeno registru (+3)
        INC        SI
        INC        SI
        LOOP        @WREGS1         ;repeat until CX is nonzero / opakuj dokud je CX nenulove
        CALL        WCRLF                ;newline / odradkuj

        POPF                        ;restore regs and flag / obnov registry a flag
        POP        DS                ;POP DS instead CS because it crashed under BOCHS
        POP        SS                ;anyway CS was not changed during this routine
        POP        ES
        POP        DS
        POPA
        RET                        ;return / navrat
REGSTR        DB        'F',0,0         ;strings with regs names / retezce s nazvy registru
        DB        'CS',0
        DB        'SS',0
        DB        'ES',0
        DB        'DS',0
        DB        'DI',0
        DB        'SI',0
        DB        'BP',0
        DB        'SP',0

;************** New INT 13h handler emulating virtual ROM disk, now supports functions 2,3,8
;************** Nova obsluha INT 13h emulujici virtualni ROM disk, nyni podporuje sluzby 2,3,8
NEW_INT13H:                        ;INT XX do CLI, PUSH F,CS,IP (6B) / INT XX provadi CLI, PUSH F,CS,IP (6B)
        PUSHF                        ;store flags (2B) / uloz flagy (2B)
        CMP        DL,ROMDISK_DRIVE;related to our disk ? / tyka se to naseho disku?
        JE        @NEW_INT13H_HUB ;if yes continue below else / pokud ano, pokracuj nize, jinak
        POPF                        ;restore flags (2B) and / obnov flagy (2B) a
        JMP        0:OLD_INT13H-1        ;jump to old INT 13h handler using FAR JMP / skoc na puvodni preruseni INT 13h pomoci FAR JMP

@NEW_INT13H_HUB:                ;subfunction hub / rozcestnik podfunkci
        PUSHA                        ;store regs AX,CX,DX,BX,SP,BP,SI,DI (16B) / uloz registry...
        PUSH        DS                ;store DS (2B) / uloz DS (2B)
        CMP        AH,02h                ;function ?= 2h - read sectors / sluzba ?= 2h - cti sektory
        JE        @NEW_INT13H_02H
        CMP        AH,03h                ;function ?= 3h - write sectors / sluzba ?= 3h - pis sektory
        JE        @NEW_INT13H_03H
        CMP        AH,08h                ;function ?= 8h - get drive params / sluzba ?= 8h - vrat parametry disku
        JE        @NEW_INT13H_08H
        CMP        AH,15h                ;function ?= 15h - get disk type / sluzba ?= 15h - vrat typ disku
        JE        @NEW_INT13H_15H
        ADD        AH,'A'                ;infoflag of unhandled function (cislo 0=A, 1=B,...) / priznak neobslouzeni funkce
        JMP        @NEW_INT13HEND1 ;other? jump to end and let me know / jina? preskoc na konec a dej o tom vedet

@NEW_INT13H_02H:                ;INT 13h: AH=func, DL=drive, DH=H, CH=C, CL=S,
        PUSH        AX                ;          AL=S-CNT, ES:BX=buffer of calling program
        MOV        DI,BX                ;prepare destination address ES:BX->ES:DI / priprav cilovou adresu...
        XOR        SI,SI                ;we prepare linear address to SI step by step / do SI si postupne pripravime linearni adresu
        AND        CL,03Fh         ;number of sector is only 6-bit / cislo sektoru je jen 6-bitove (cyl<=80 u FD)
        DEC        CL                ;BIOS numbers the sectors from starting 1, we need from 0 / BIOS cisluje sektory o 1, my potebujem od 0
        MOV        AX,ROMDISK_SECPT;SI=LINSEC=NH*NS*C + NS*H + (S-1)
        MUL        DH                ;AX*DH->AX (NS*H)
        ADD        SI,AX                ;add to SI (SI=NS*H) / pricti do SI
        MOV        AX,ROMDISK_HEADS;there's no check of CHS validity / neprovadi se zadna kontrola parametru CHS
        MOV        BL,ROMDISK_SECPT;so when CHS overflow it returns invalid data from memory / takze pri prekroceni adr. rozs. vraci nesmyslna data
        MUL        BL                ;AX*BL->AX (NH*NS)
        MUL        CH                ;AX*CH->AX (NH*NS*C)
        ADD        SI,AX                ;add to SI (SI=NS*H + NH*NS*C) / pricti do SI
        XOR        CH,CH                ;prepare S to CX / priprav S v CX
        ADD        SI,CX                ;add to SI (SI=NH*NS*C + NS*H + (S-1)) / pricti do SI
        SHL        SI,9                ;recalc from sectors to Bytes (SI*512) / prepocti SI ze sektoru na Byty
        ADD        SI,IMG_BEGIN        ;prepare source offset (and add offset to image) / priprav zdrojovy offset (jeste pricti offset na image)
        PUSH        CS                ;prepare source segment / priprav zdrojovy segment
        POP        DS                ;set DS=CS (ROM segment with disk image / segment ROM s image disku)
        POP        CX                ;restore number of required sectors to CX / vyber pocet ctenych sektoru do CX
        SHL        CX,9                ;recalc number of sectors to number of Bytes (S-CNT*512) / prepocitej pocet sektoru na Byty
        REP        MOVSB                ;copy until CX is nonzero / kopiruj dokud CX neni nulove
        JMP        @NEW_INT13HEND        ;end without calling original INT 13h handler / konec bez volani puvodni obsluhy INT 13h

@NEW_INT13H_03H:                ;ROM disk is read-only so return errorcode AH=3 / ROM disk je read-only, takze vrat chybu AH=3
        MOV        BP,SP                ;set BP=SP / nastav BP=SP
        MOV        AX,[SS:BP+24]        ;precti ze zasobniku FLAG (adr=2+16+2+2+2 objem dat v zasob. nad F)
        OR        AX,1                ;nahod bit CARRY          (SP->DS,ALL,F,IP,CS ^)
        MOV        [SS:BP+24],AX        ;zapis ho zpet
        MOV        [SS:BP+17],BYTE 3 ;nastav AH v zasobniku na kod chyby 3 (adr=16+2-1=DS+ALL)
        JMP        @NEW_INT13HEND        ;end without calling original INT 13h handler / konec bez volani puvodni obsluhy INT 13h

@NEW_INT13H_08H:                ;return CHS info about ROM disk geometry / vrat informace CHS o geometrii ROM disku
        MOV        BP,SP                ;set BP=SP / nastav BP=SP
        MOV        CH,ROMDISK_CYLS ;set CH to number of cylinders / nastav CH na pocet cylindru
        MOV        CL,ROMDISK_SECPT;set CL to number of sectors per track / nastav CL na pocet sektoru/stopu
        MOV        [SS:BP+13],BYTE ROMDISK_HEADS ;nastav DH v zasob. - hlavy (adr=2+16-2-2-1=DS+ALL-AX-CX-DL)
        MOV        [SS:BP+14],CX        ;nastav CX v zasobniku (adr=2+16-2-2=DS+ALL-AX-CX)
        JMP        @NEW_INT13HEND        ;end without calling original INT 13h handler / konec bez volani puvodni obsluhy INT 13h

@NEW_INT13H_15H:                ;ROM disk is like nonchangeable diskette drive / ROM disk je jako nevymenna disketova jednotka
        MOV        BP,SP                ;set BP=SP / nastav BP=SP
        MOV        [SS:BP+17],BYTE 1 ;nastav AH v zasobniku na kod chyby 0 (adr=16+2-1=DS+ALL)
        MOV        [SS:BP+14],WORD 0 ;set CX=0 (total drive sectors high word to 0) / nastav vyssi slovo poctu sektoru na 0
        MOV        [SS:BP+12],WORD ROMDISK_CYLS*ROMDISK_HEADS*ROMDISK_SECPT ;set DX=total drive sectors / nastav DX=celkovy pocet sektoru
        JMP        @NEW_INT13HEND        ;end without calling original INT 13h handler / konec bez volani puvodni obsluhy INT 13h

@NEW_INT13HEND:                 ;INT 13h watcher (work in textmode only / funguje jen v textovem modu)
        MOV        AH,'*'                ;flag of hanled function / priznak obslouzeni funkce
@NEW_INT13HEND1:
        PUSH        WORD 0B800h
        POP        DS                ;set DS=B800h (segment of textmode VRAM on VGA / segment textove VRAM u VGA)
        MOV        [DS:79*2],AH        ;write flag character to top-right corner from AH / do praveho horniho rohu obrazovky vykresli znak z AH
        POP        DS                ;restore DS (2B) / obnov DS (2B)
        POPA                        ;restore regs DI,SI,BP,SP,BX,DX,CX,AX (16B) / obnov registry...
        POPF                        ;restore flags (2B) / obnov flagy (2B)
        IRET                        ;return from an interrupt do POP IP,CS,F (6B) / navrat z preruseni provadi...

;*****************************************************************************
INSTALL_NEW_INT13H:                ;install new INT 13h handler / nainstaluj novou obsluhu INT 13h
        PUSHA                        ;and write message about vector change + CRLF / a vypise hlaseni o zmene vektoru a odradkuje
        PUSH        ES                ;store ES / uloz ES
        PUSH        BYTE 0                ;push 00
        POP        ES                ;pop 0000 (ES=0) / vynuluj ES
        MOV        SI,13h*4        ;set SI at INT 13h IVT position / nastav SI na pozici vektoru INT 13h v IVT
        MOV        DI,OLD_INT13H        ;set DI at free INT 85h IVT position / nastav DI na volnou pozici vektoru INT 85h v IVT
        MOV        CX,[ES:SI]        ;load original offset of INT 13h handler from IVT to CX / nacti do CX offset puvodni obsluhy INT 13h z IVT
        MOV        [ES:DI],CX        ;store it to other safe place in IVT / uloz ho na jine bezpecne misto v IVT
        MOV        DX,[ES:SI+2]        ;load original segment of INT 13h handler from IVT to DX / nacti do DX segment puvodni obsluhy INT 13h z IVT
        MOV        [ES:DI+2],DX        ;store it to other safe place in IVT / uloz ho na jine bezpecne misto v IVT
        MOV        [ES:DI-1],BYTE 0EAh        ;opcode FAR JMP (dynamically modified instruction / dynamicky menena instrukce)
        MOV        [ES:SI],WORD NEW_INT13H ;set offset of new INT 13h handler / nastav offset nove obsluhy INT 13h
        MOV        [ES:SI+2],CS        ;set segment of new INT 13h handler (current-ROM) / nastav segment nove obsluhy INT 13h (aktualni-ROM)
        MOV        SI,IINTSTR        ;write hook INT 13h vector message / vypis zpravu o zmene vektoru INT 13h
        MOV        BX,0107h        ;grey color, 1-times / seda barva, opakovani 1x
        CALL        WRITE
        CALL        WHEXPTR         ;write original vector DX:CX / vypis puvodni vektor DX:CX
        MOV        SI,AROWSTR
        CALL        WRITE                ;write / vypis ' -> '
        MOV        DX,CS
        MOV        CX,WORD NEW_INT13H
        CALL        WHEXPTR         ;write new vector DX:CX (CS:NEW_INT13H) / vypis novy vektor DX:CX
        CALL        WCRLF                ;newline / odradkuj
        POP        ES
        POPA                        ;restore regs DI,SI,BP,SP,BX,DX,CX,AX (16B) / obnov registry...
        RET                        ;return / navrat
IINTSTR DB        'INT13h vector has been hooked ',0
AROWSTR DB        ' -> ',0

;************** Initial code - modify carefully! / Pocatecni kod, upravujte s max. opatrnosti!
BEGIN:        PUSHF                        ;store flags (2B) / uloz flagy (2B)
        PUSHA                        ;store regs AX,CX,DX,BX,SP,BP,SI,DI (16B) / uloz registry...
        PUSH        ES                ;store ES / uloz ES
        PUSH        DS                ;store DS / uloz DS
        MOV        AX,SS                ;set AX=original SS / nastav AX=puvodni SS
        PUSH        NEW_SS                ;set new bigger stack (BIOS use default SS=0 SP=0Dxx - small) / nastav novy vetsi zasobnik...
        POP        SS                ;segment
        MOV        BX,NEW_SP        ;offset
        XCHG        BX,SP                ;set BX=original SP / nastav BX=puvodni SP
        PUSH        AX                ;store configuration of original stack - SS / uloz konfiguraci stareho zasobniku - SS
        PUSH        BX                ;store configuration of original stack - SP / uloz konfiguraci stareho zasobniku - SP
;TEST FOR 1ST RUN-ROMSCAN/2ND RUN-INT19H CALL
        PUSH        BYTE 0                ;push 00
        POP        ES                ;pop 0000 (ES=0, segment of IVT) / nastav ES=0, segment IVT
        CMP        [ES:INT19H],WORD BEGIN ;compare if offset match the BEGIN label / porovnej, shoduje-li se offset s labelem BEGIN
        JNE        RUN1ST                ;if not it means that's 1st run-ROMSCAN / pokud ne, znamena to, ze bezime poprve-ROMSCAN
        MOV        AX,CS                ;set AX=CS (cannot compare CS directly / CS nelze primo porovnavat)
        CMP        [ES:INT19H+2],AX;compare if segment match the current CS segment / porovnej, shoduje-li se segment s aktualnim CS
        JNE        RUN1ST                ;if not it means that's 1st run-ROMSCAN / pokud ne, znamena to, ze bezime poprve-ROMSCAN
        JMP        BOOT                ;else continue next phase at BOOT label / jinak pokracuj v dalsi fazi na labelu BOOT
;ASK FOR BOOT ROMOS
RUN1ST: CALL        WCRLF                ;newline / odradkuj
        MOV        SI,MSG1         ;prompt to press HotKey / vyzva ke stisku HotKey
        MOV        BX,810Fh        ;white color, 1-times + CRLF / bila barva, opakovani 1x a odradkuj
        CALL        WRITE                ;write message / vypis hlasku
        MOV        AH,ROMOS_MSG_DELAY ;wait / pockej
        CALL        DELAY
;TEST FOR SCROLLOCK                ;test if HotKey was pressed / otestuj, jestli je stisknuty HotKey
        PUSH        BYTE 0                ;push 00
        POP        ES                ;pop 0000 (ES=0, segment of keyboard flags / segment flagu klavesnice)
        MOV        AL,[ES:0417h]        ;offset of keyboard flags / offset flagu klavesnice 0417h
        MOV        AH,AL                ;store loaded value to AH / schovej si nactenou hodnotu do AH
        AND        AL,ROMOS_HOTKEY ;mask the HotKey / vymaskuj HotKey
        CMP        AL,ROMOS_HOTKEY ;if it is turned on then / je-li zaply,
        JE        EXIT_AND_HOOK_INT19H ;end and hook INT 19h else / skonci a hookni INT 19h, jinak
        MOV        [CS:0],ES        ;erase 55AAxx (ES=0) ROM header, then BIOS will free this area for UMB / smaz hlavicku ROM 55AAxx (ES=0)...
        JMP        EXIT                ;end without hook of INT 19h / skonci bez hooknuti INT 19h

;************** Terminating and restoring, returning controll back to BIOS ***
;************** Ukonceni, obnoveni stavu a predani rizeni zpet BIOSu *********
EXIT_AND_HOOK_INT19H:
;here you can place a code which should be executed on 1st run-during ROMSCAN
;zde je jeste mozno pridat kod, ktery se ma provest pri prvnim spusteni-ROMSCAN
        MOV        AL,ROMOS_HOTKEY ;load HotKey bit mask / nacti bitovou masku HotKey
        NOT        AL                ;negate HotKey bit mask / zneguj bitovou masku HotKey
        AND        AH,AL                ;turn off the HotKey / zhasni HotKey
        MOV        [ES:0417h],AH        ;write keyboard flag (ES=0, see above) / zapis flag klavesnice
;HOOK INT 19h
        MOV        [ES:INT19H],WORD BEGIN ;put ROM module address here ,/ vlozime tam adresu ROM modulu,
        MOV        [ES:INT19H+2],CS;offset first, then segment / napred offset a pak segment
EXIT:
        POP        BX                ;get BX=original SP / nacti BX=puvodni SP
        POP        SS                ;restore SS=original SS / obnov SS=puvodni SS
        MOV        SP,BX                ;restore SP=original SP / obnov SP=puvodni SP
        POP        DS                ;restore DS (2B) / obnov DS (2B)
        POP        ES                ;restore ES (2B) / obnov ES (2B)
        POPA                        ;restore regs DI,SI,BP,SP,BX,DX,CX,AX (16B) / obnov registry...
        POPF                        ;restore flags (2B) / obnov flagy (2B)

%ifdef MAKE_DEBUG_COM
        INT        20h                ;use if compiling *.COM file / pouzij pri kompilaci .COM souboru
%else
        RETF                        ;CBh - FAR RET
%endif

;************** Here you can place your code without risks - it can be skipped when booting
;************** Zde uz je mozno psat kod bez obav, lze ho pri bootu preskocit
BOOT:                                ;this code is executed after POST is finished / tento kod se uz provadi po ukonceni POST
                                ;when INT 19h is invoked ROM area is write protected / pri volani INT19h, ROM pamet je zamcena pro zapis
        CALL        WCRLF                ;newline / odradkuj
        MOV        SI,MSG2
        MOV        BX,810Eh        ;yellow color, 1-times + CRLF / zluta barva, opakovani 1x a odradkuj
        CALL        WRITE                ;write welcome message / vypis welcome
        MOV        AH,20                ;20*55ms delay / pauza
        CALL        DELAY

        CALL        INSTALL_NEW_INT13H ;install new INT 13h handler / nainstaluj novou obsluhu INT 13h
        CALL        DELAY                ;for accessing virtual ROM disk / pro pristup k virtual ROM disku

        MOV        SI,MSG3
        MOV        BX,8107h        ;grey color, 1-times + CRLF / seda barva, opakovani 1x a odradkuj
        CALL        WRITE                ;write isntall ROMDISK message / vypis isntall ROMDISK
        CALL        DELAY

        CALL        WCRLF                ;newline / odradkuj
        CALL        WREGS                ;write registers dump / vypis registry
        CALL        DELAY

        MOV        SI,MSG4
        MOV        BX,0107h        ;grey color, 1-times / seda barva, opakovani 1x
        CALL        WRITE                ;write Bootsector loaded at message / vypis Bootsector loaded at
        MOV        DX,BS_SEGMENT        ;prepare segment to DX / priprav segment do DX
        MOV        CX,BS_OFFSET        ;prepare offset to CX / priprav offset do CX
        CALL        WHEXPTR         ;write pointer / vypis pointer
        CALL        WCRLF                ;newline / odradkuj

        MOV        SI,MSG5
        MOV        BX,810Fh        ;white color, 1-times + CRLF / bila barva, opakovani 1x a odradkuj
        CALL        WRITE                ;write Booting! message / vypis Booting!
        MOV        AH,10                ;10*55ms delay / pauza
        CALL        DELAY

;************** Copy bootsector from virtual ROM disk at starting address ****
;************** Prekopiruje bootsector z virtual ROM disku na spousteci adresu
        PUSH        BYTE 0                ;push 00
        POP        ES                ;pop 0000 (ES=0, segment BIOS data)
        MOV        SI,0410h        ;prepare address of equipment Byte (INT11h) / priprav adresu Bytu vybaveni (INT11h)
        MOV        AL,[ES:SI]        ;two top bits means number of drives-1 / horni dva bity udavaji pocet mechanik-1
        MOV        AH,BYTE ROMDISK_DRIVE ;so: any=00, A:=00, A:+B:=01 / tedy: zadna=00, A:=00, A:+B:=01
        CMP        AH,1                ;if we have to emulate B: drive / pokud mame emulovat jednotku B:
        JNE        SKIP_DRVNUPD        ;else leave / jinak nech bejt
        OR        AL,01000000b        ;number of drives is needed to be increased / je potreba zvysit pocet mechanik
        MOV        [ES:SI],AL        ;write updated equipment Byte / zapis aktualizovany Byte vybaveni
SKIP_DRVNUPD:
        PUSH        WORD BS_SEGMENT ;prepare destination segment for bootsector / priprav cilovy segment pro nahrani bootsectoru
        POP        ES                ;set ES=BS_SEGMENT / nastav ES=BS_SEGMENT
        MOV        DI,BS_OFFSET        ;prepare destination offset for bootsector / priprav cilovy offset pro nahrani bootsectoru
        PUSH        CS                ;prepare source segment / priprav zdrojovy segment
        POP        DS                ;set DS=CS / nastav DS=CS
        MOV        SI,IMG_BEGIN        ;prepare source offset - beginning of the ROMDISK image / priprav zdrojovy offset-zacatek ROMDISK image
        MOV        CX,512                ;1 sector=512B
        REP        MOVSB                ;copy until CX is nonzero / kopiruj dokud CX neni nulove
        MOV        [ES:BS_OFFSET+BS_DRIVE_OFFSET], BYTE ROMDISK_DRIVE ;patch bootsector by drive number / patch bootsectoru podle c. drive
        MOV        DL,BYTE ROMDISK_DRIVE ;set bootdrive for bootsector / nastav bootdrive pro bootsector
        JMP        BS_SEGMENT:BS_OFFSET  ;jump to beginning of bootsector copy / skoc na zacatek kopie bootsectoru


;************** Include VIRTUAL ROMDISK image / Vloz VIRTUAL ROMDISK image
IMG_BEGIN                        ;append binary file of romdisk image at the end / nakonec pripoj binarni soubor image disku
        incbin "romdisk.img"        ;FAT12 (1x), C:7, H:1, S:18, S/CL:1, ROOTE:16
;         incbin "romdusb.img"         ;FAT12 (1x), C:7, H:1, S:18, S/CL:1, ROOTE:16
;         incbin "romd15kb.img"         ;FAT12 (1x), C:7, H:1, S:18, S/CL:1, ROOTE:16
IMG_END
TIMES ROM_IMAGE_SIZE*1024-($-$$) db 0 ;zero padding to required length / zarovnani nulami na danou velikost
END

;************** Block diagram ************************************************
;                                (BEGIN)
;                        ___________|____________
;                       |store regs, old stack...|
;                        ~~~~~~~~~~~|~~~~~~~~~~~~
;                          _________|_________
;    ___________________/'    running 1st?   `\
;   |  go to BOOT    Y `\ (called by ROMSCAN) /'
;   |                         ~~~~~~~~N~|~~~~~~~~~~
;   |                                   | RUN1ST:
;   |                         __________|___________
;   |                        |display HotKey message|
;   |                         ~~~~~~~~~~|~~~~~~~~~~~
;   |                              _____|_____
;   |                            /' was HotKey`\_________________________________
;   |                           `\        pressed?  /' Y        go to EXIT_AND_HOOK_INT19H  |
;   |                             ~~~~~~|~N~~~~                                    |
;   |                         __________|___________                             |
;   |                        |delete 55AA ROM header|                            |
;   |                         ~~~~~~~~~~|~~~~~~~~~~~                             |
;   |                                   |                     ,----------------------'
;   |                                   |                     | EXIT_AND_HOOK_INT19H:
;   |                                   |          ___________|____________
;   |                                   |         |     disable hotkey          |
;   |                                   |         |(exec some 1st-run code)|
;   |                                   |         |  hook INT 19h to ROM   |
;   |                                   |          ~~~~~~~~~~~|~~~~~~~~~~~~
;   |                                   `-----------------| EXIT:
;   |                                         ____________|_____________
;   |                                        |restore regs, old stack...|
;   |                                        |     and RETF to BIOS           |
;   |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~
;   `------------->----------------,
;                                   | BOOT: (note: this is right place for user code)
;                   ________________|_________________
;                  |         display some messages             |
;                  |    install new INT13h handler    |
;                  |         look for number of FDDs     |
;                  |copy bootsector from image to RAM |
;                  |patch bootdrive Byte in bootsector|
;                  |jump to bootsector (never return) |
;                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[[i] 本帖最后由 lintel 于 2006-8-18 03:50 PM 编辑 [/i]]

romos.rar

10.15 KB, 下载次数: 350, 下载积分: 无忧币 -2


作者: cxg678    时间: 2006-8-19 16:29
厉害!学习学习在学习...谢谢各位大侠!!!!!!!!!!!!!!!!!!!!
作者: AthlonFX    时间: 2006-8-19 16:58
弄下来学习学习,上学期刚好学过单片机~
作者: tanghuajin59    时间: 2006-8-20 13:44
天才啊,学习了。
作者: 牛B越来越牛B    时间: 2006-8-20 15:42
这个太有创举了,支持你




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3