中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
English/Chinese Fix Translation
作者:
标题: 尝试把grldr.mbr移植到RomOS写入Bios 上一主题 | 下一主题
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『楼 主』:  尝试把grldr.mbr移植到RomOS写入Bios [已使用 LLM 解释]

grub4dos项目开发者之一Bean大师已经制作成功了,见31、32楼




grldr.mbr真能从bios中引导硬盘上的grldr吗?我也不知道、想知道就尝试了...
今天又一次尝试把grldr.mbr移植到RomOS写入Bios,虽然失败了,但也总算也看到了grldr的启动信息,比起上次显示disk error也算没白折腾,不点和bean看到以下信息希望得到你们的帮助,这个方法是否可行?


Welcome to ROMOS ver. 1.03 by Martin Rehak (C) 2001-2007; rayer@seznam.cz
INT13h vector has been hooked F000:9734 -> D800:01CC
ROMOS has installed virtual ROM DISK drive.

F=0246 CS=D800 SS=4000 ES=0000 DS=E000 DI=8000 SI=007B BP=1000 SP=FFF5
Bootsector loaded at 0000:7C00
Bootimg!

Missing MBR-helper._


Last edited by fastslz on 2008-1-10 at 05:56 PM ]
LLM 解释

这是一篇关于 2007 年前后,技术爱好者尝试将 Grub4Dos 的引导组件 grldr.mbr 集成到主板 BIOS 中,以实现从固件层面直接启动引导程序的讨论。

技术背景

  1. ROMOS: 由 Martin Rehak 开发的一个小工具,允许用户将一个磁盘镜像(通常是 FreeDOS)封装成一个 ISA/PCI Option ROM 模块。当 BIOS 自检(POST)完成后,通过特定的热键(如 Scroll Lock)拦截启动流程,挂载一个虚拟的只读磁盘并引导。
  2. grldr.mbr: Grub4Dos 的引导代码。它分为两部分:前 512 字节是符合 MBR 规范的引导扇区,后续部分是所谓的“MBR-helper”,负责寻找并加载磁盘根目录下的 grldr 主程序。
  3. CBROM: 那个时代常用的 Award BIOS 编辑工具,用于向 BIOS 镜像中添加或提取模块(如 ISA 模块、Logo、微码等)。

关键问题解释

在发帖者 fastslz 的尝试中,屏幕出现了 Missing MBR-helper 的错误,这反映了几个核心技术细节:

1. 引导代码的完整性

grldr.mbr 的设计预期是位于磁盘的第 0 扇区及其随后的扇区。它的大小通常是 8KB(16 个扇区)。

  • 错误原因: 传统的 BIOS 引导逻辑(及 ROMOS 的部分实现)习惯于只将镜像的前 512 字节加载到内存 0000:7C00 处。
  • 技术细节: grldr.mbr 的前 512 字节运行后,会尝试寻找它剩下的“身体”(即 helper 部分)。如果 ROMOS 没有将全部 8KB 代码搬运到连续的内存地址,或者没有正确设置内存布局,引导就会因为找不到后续代码而报错。

2. 软盘与硬盘启动模式的差异(BPB 表)

不点(Grub4Dos 核心开发者)在第 11 楼指出了一个关键点:grldr.mbr 具有混合启动特性。

  • 如果引导的是软盘镜像,BIOS 和引导程序需要 BPB(BIOS Parameter Block)来了解磁盘的几何结构(磁头数、扇区数等)。
  • 如果 ROMOS 模拟的是软盘环境,而 grldr.mbr 的 BPB 区域(偏移 0x0B 开始)全为 0,引导程序可能会误判磁盘环境或无法通过 BIOS INT 13h 读取后续扇区。

3. PCI Option ROM 的规范

uleak 提到建议使用 cbrom /pci 方式。

  • ISA ROM vs PCI ROM: 传统的 ISA ROM(如 ROMOS 原始版)通常挂载在 C800D000 段。现代主板 BIOS 更倾向于遵循 PCI 规范。
  • PCI ID 匹配: PCI ROM 需要包含正确的厂商 ID(Vendor ID)和设备 ID(Device ID),否则 BIOS 可能会忽略该模块。bromcfg.exe 就是用来修改这些 ID 以欺骗 BIOS,使其认为该模块是属于板载网卡或其他设备的扩展 ROM。

总结

该帖子的最终成功方案(由 Bean 完成)实际上是简化了引导逻辑:

  1. 不再进行复杂的磁盘仿真: 既然目标是启动硬盘上的 grldr,就不需要 ROMOS 模拟出一个包含 FreeDOS 的虚拟盘。
  2. 全量内存搬运: 编写一段极简的汇编代码作为 ROM 头部,负责将存储在 ROM 里的 8KB grldr.mbr 完整地复制到内存中(通常是 0000:7C00),然后跳转执行。
  3. 环境清理: 确保 DL 寄存器传递了正确的启动驱动器号(如 0x80 代表第一块硬盘),这样 grldr.mbr 运行后就能立即去真实的硬盘里搜寻 grldr 文件。

这种“BIOS 植入版 Grub4Dos”在当时非常流行,常被用于制作“万能启动主板”或作为一种极难被系统内软件破坏的系统维护后门。





第一高手 第二高手

2007-10-26 01:51
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

GRLDR.MBR 非常简单,你不要把它弄得很复杂。本来它是个自行车,骑上就跑,你却给它修高速公路和一个火箭发射架。(玩笑)

你不需要把 grldr.mbr 仿真成一个磁盘,如果仿真了,你反而要失败。

你只需要把 grldr.mbr 全部 8192 个字节放在 0000:7C00 开始的地址处,然后把控制跳转到 0000:7C00 就可以了。

INT13h vector has been hooked F000:9734 -> D800:01CC
ROMOS has installed virtual ROM DISK drive.

以上这两条消息都是做磁盘仿真的,多此一举。这就是失败的原因。


Missing MBR-helper

这条消息说明只有 512 字节放在了 0000:7C00,而其余的 helper 部分却没有。




因为我们亲手创建,这个世界更加美丽。
2007-10-26 08:04
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

把控制跳转到 0000:7C00?主要对ROMOS不了解,都是E文也没地方交流,汇编又不会,所以ROMOS开始976字节部分不敢改。




第一高手 第二高手

2007-10-26 14:17
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

殊我无知,ROM OS 是个什么东东?我确实不了解。你最好把你了解的,给我简单介绍一下。

它本身有多大?它在内存中的何处(内存地址)?

它的代码总共只有 976 字节?如果是的,你把它上载,我来给你改。

你得说清楚,grldr.mbr 在什么地方,比如说,是否立即跟在 976 字节之后?如果是的,你把这一整块都上载。

===============

噢,对了,既然是 ROM “OS”,它就试图找到一个磁盘映像(进行磁盘仿真)。但是 grldr.mbr 根本就不是一个磁盘映像,所以,用 ROM OS 这个用法本身就是不太正确的。

因此,我猜想,只要把 ROM OS 中的“磁盘仿真”部分去掉,就完事了。




因为我们亲手创建,这个世界更加美丽。
2007-10-26 14:42
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

romos 官网http://rayer.ic.cz/romos/romose.htm
在BIOS中添加isa模块实现在bios自检通过后按Scroll Lock直接来引导FreeDOS

论坛空间满了
你到官网下载romos.bin头部976字节就是romos主程序后面部分就是FreeDOS的img镜像文件,romos.bin可以用WinImage打开




第一高手 第二高手

2007-10-26 15:04
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

我是提取头部976字节保存文件os.bin
copy /b os.bin+grldr.mbr romos.bin
再把romos.bin填充0到romos.bin原始大小,添加isa模块到bios文件中,再刷新bios目前我有3个备用bios芯片,不怕刷坏,所以有条件测试
不能上传附件debug写吧
@echo e 100 55 AA 80 E9 D7 02 43 48 4B 53 55 4D 3D 5D 50 72 >>tmp11
@echo e 110 65 73 73 20 5B 53 63 72 6F 6C 6C 4C 6F 63 6B 5D >>tmp11
@echo e 120 20 74 6F 20 62 6F 6F 74 20 52 4F 4D 4F 53 20 21 >>tmp11
@echo e 130 00 57 65 6C 63 6F 6D 65 20 74 6F 20 52 4F 4D 4F >>tmp11
@echo e 140 53 20 76 65 72 2E 20 31 2E 30 33 20 62 79 20 4D >>tmp11
@echo e 150 61 72 74 69 6E 20 52 65 68 61 6B 20 28 43 29 20 >>tmp11
@echo e 160 32 30 30 31 2D 32 30 30 37 3B 20 72 61 79 65 72 >>tmp11
@echo e 170 40 73 65 7A 6E 61 6D 2E 63 7A 00 52 4F 4D 4F 53 >>tmp11
@echo e 180 20 68 61 73 20 69 6E 73 74 61 6C 6C 65 64 20 76 >>tmp11
@echo e 190 69 72 74 75 61 6C 20 52 4F 4D 20 44 49 53 4B 20 >>tmp11
@echo e 1A0 64 72 69 76 65 2E 00 42 6F 6F 74 73 65 63 74 6F >>tmp11
@echo e 1B0 72 20 6C 6F 61 64 65 64 20 61 74 20 00 42 6F 6F >>tmp11
@echo e 1C0 74 69 6E 67 21 00 FB 50 06 9C 6A 00 07 26 02 26 >>tmp11
@echo e 1D0 6C 04 26 3A 26 6C 04 75 F9 9D 07 58 C3 50 53 B4 >>tmp11
@echo e 1E0 02 B7 00 CD 10 5B 58 C3 50 53 51 B4 03 B7 00 CD >>tmp11
@echo e 1F0 10 59 5B 58 C3 60 9C 53 E8 ED FF B4 09 31 C9 86 >>tmp11
@echo e 200 CF 80 E1 7F 2E 8A 04 3C 00 74 0A CD 10 46 FE C2 >>tmp11
@echo e 210 E8 CA FF EB EF 5B 80 FF 80 78 0F 9D 61 60 9C B8 >>tmp11
@echo e 220 0D 0E 30 DB CD 10 B0 0A CD 10 9D 61 C3 50 53 E8 >>tmp11
@echo e 230 11 00 87 D1 30 DB B8 3A 0E CD 10 E8 05 00 87 D1 >>tmp11
@echo e 240 5B 58 C3 86 F2 E8 06 00 86 F2 E8 01 00 C3 50 52 >>tmp11
@echo e 250 9C 88 D6 80 E2 0F 80 E6 F0 C0 CE 04 E8 09 00 88 >>tmp11
@echo e 260 D6 E8 04 00 9D 5A 58 C3 80 FE 0A 72 03 80 C6 07 >>tmp11
@echo e 270 80 C6 30 B4 0E 88 F0 CD 10 C3 60 1E 06 16 0E 9C >>tmp11
@echo e 280 B9 09 00 BE B1 01 89 E5 BB 07 01 E8 67 FF B8 3D >>tmp11
@echo e 290 0E 30 DB CD 10 36 8B 56 00 E8 A7 FF B0 20 CD 10 >>tmp11
@echo e 2A0 45 45 46 46 46 E2 E1 E8 73 FF 9D 1F 17 07 1F 61 >>tmp11
@echo e 2B0 C3 46 00 00 43 53 00 53 53 00 45 53 00 44 53 00 >>tmp11
@echo e 2C0 44 49 00 53 49 00 42 50 00 53 50 00 9C 80 FA 01 >>tmp11
@echo e 2D0 74 06 9D EA 13 02 00 00 60 1E 80 FC 02 74 15 80 >>tmp11
@echo e 2E0 FC 03 74 42 80 FC 08 74 52 80 FC 15 74 5F 80 C4 >>tmp11
@echo e 2F0 41 E9 71 00 50 89 DF 31 F6 80 E1 3F FE C9 B8 12 >>tmp11
@echo e 300 00 F6 E6 01 C6 B8 01 00 B3 12 F6 E3 F6 E5 01 C6 >>tmp11
@echo e 310 30 ED 01 CE C1 E6 09 81 C6 D0 03 0E 1F 59 C1 E1 >>tmp11
@echo e 320 09 F3 A4 E9 3D 00 89 E5 36 8B 46 18 0D 01 00 36 >>tmp11
@echo e 330 89 46 18 36 C6 46 11 03 E9 28 00 89 E5 B5 07 B1 >>tmp11
@echo e 340 12 36 C6 46 0D 01 36 89 4E 0E E9 16 00 89 E5 36 >>tmp11
@echo e 350 C6 46 11 01 36 C7 46 0E 00 00 36 C7 46 0C 7E 00 >>tmp11
@echo e 360 E9 00 00 B4 2A 68 00 B8 1F 3E 88 26 9E 00 1F 61 >>tmp11
@echo e 370 9D CF 60 06 6A 00 07 BE 4C 00 BF 14 02 26 8B 0C >>tmp11
@echo e 380 26 89 0D 26 8B 54 02 26 89 55 02 26 C6 45 FF EA >>tmp11
@echo e 390 26 C7 04 CC 01 26 8C 4C 02 BE B9 02 BB 07 01 E8 >>tmp11
@echo e 3A0 53 FE E8 88 FE BE D8 02 E8 4A FE 8C CA B9 CC 01 >>tmp11
@echo e 3B0 E8 7A FE E8 67 FE 07 61 C3 49 4E 54 31 33 68 20 >>tmp11
@echo e 3C0 76 65 63 74 6F 72 20 68 61 73 20 62 65 65 6E 20 >>tmp11
@echo e 3D0 68 6F 6F 6B 65 64 20 00 20 2D 3E 20 00 9C 60 8C >>tmp11
@echo e 3E0 D0 68 00 40 17 BB FF FF 87 DC 50 53 06 1E 6A 00 >>tmp11
@echo e 3F0 07 26 81 3E 64 00 DD 02 75 0C 8C C8 26 39 06 66 >>tmp11
@echo e 400 00 75 03 E9 48 00 E8 14 FE BE 0E 00 BB 0F 81 E8 >>tmp11
@echo e 410 E3 FD B4 1E E8 AF FD 6A 00 07 26 A0 17 04 88 C4 >>tmp11
@echo e 420 24 10 3C 10 74 08 2E 8C 06 00 00 E9 17 00 B0 10 >>tmp11
@echo e 430 F6 D0 20 C4 26 88 26 17 04 26 C7 06 64 00 DD 02 >>tmp11
@echo e 440 26 8C 0E 66 00 1F 07 5B 17 89 DC 61 9D CB E8 CC >>tmp11
@echo e 450 FD BE 31 00 BB 0E 81 E8 9B FD B4 14 E8 67 FD E8 >>tmp11
@echo e 460 10 FF E8 61 FD BE 7B 00 BB 07 81 E8 87 FD E8 55 >>tmp11
@echo e 470 FD E8 A9 FD E8 03 FE E8 4C FD BE A7 00 BB 07 01 >>tmp11
@echo e 480 E8 72 FD BA 00 00 B9 00 7C E8 A1 FD E8 8E FD BE >>tmp11
@echo e 490 BD 00 BB 0F 81 E8 5D FD B4 0A E8 29 FD 6A 00 07 >>tmp11
@echo e 4A0 BE 10 04 26 8A 04 B4 01 80 FC 01 75 05 0C 40 26 >>tmp11
@echo e 4B0 88 04 68 00 00 07 BF 00 7C 0E 1F BE D0 03 B9 00 >>tmp11
@echo e 4C0 02 F3 A4 26 C6 06 24 7C 01 B2 01 EA 00 7C 00 00 >>tmp11
@echo rcx>>tmp11
@echo 3D0>>tmp11
@echo n tmp1>>tmp11
@echo w>>tmp11
@echo q>>tmp11
@debug<tmp11>nul
@Copy /b /y tmp1 os.bin
@del tmp*




第一高手 第二高手

2007-10-26 15:20
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

romos也值得象你这样的高手一看的
如果可行你修改在976字节之后就装入grldr.mbr,我也试过只写976字节到bios文件里,自检后按scroll lock是又效的,也不知道romos原代码是否规定romos.bin必须是65,536 字节,没规定的话os.bin+grldr就8,144字节,减小isa模块大小。

Originally posted by 不点 at 2007-10-26 14:42:
噢,对了,既然是 ROM “OS”,它就试图找到一个磁盘映像(进行磁盘仿真)。但是 grldr.mbr 根本就不是一个磁盘映像,所以,用 ROM OS 这个用法本身就是不太正确的。

因此,我猜想,只要把 ROM OS 中的“磁盘仿真”部分去掉,就完事了。...


是这样的976字节之后就是FreeDOS磁盘镜像,而romos.bin尾部也是48字节也是0填充数




第一高手 第二高手

2007-10-26 15:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
uleak
初级用户





积分 40
发帖 15
注册 2007-10-26
状态 离线
『第 8 楼』:  try this... 使用 LLM 解释/回答一下

you can try this one before hand. i did this months ago. it may be in better shape.

tinybit mentioned is same as i did. see:

ROMOS.bin structure:
---begin---
ROMOS hock
ROMOS main
grldr.mbr
freedos+usb.img
----end----

the main program copy mbr to 7c00 from freedos.img and then jump to it, I change it to load grldr.mbr instead. the freedos virtual drive emulation is still working if i recalled right. grldr will search all disks for grldr. it works.

I used to post all info in znpc.net, download the pre-compiled zip file in 9th reply, source code is there as well.

http://72.14.235.104/search?q=cache:771vo1sLVI4J:bbs.znpc.net/redirect.php%3Ftid%3D3550%26goto%3Dlastpost+romos+grldr.mbr+site:bbs.znpc.net&hl=zh-TW&ct=clnk&cd=1&gl=hk


2007-10-26 16:12
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

汗、又是E文、勉强看懂大半
连接无效啊,我去时空看看




第一高手 第二高手

2007-10-26 16:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

找到了,谢谢
http://www.znpc.net/bbs/viewthread.php?tid=3550&highlight=romos




第一高手 第二高手

2007-10-26 16:30
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 11 楼』:   使用 LLM 解释/回答一下

我找到简单一种方法,可以让你能够用原来的方法启动 grldr.mbr。

注意,比较新的 grldr.mbr 已经是硬盘、软盘混合启动模式。什么意思呢?

在 grldr.mbr 的第一扇区上,你可以填入 BPB 表。

你把 romos.bin 中 FreeDOS 的 BPB 表拷贝到 grldr.mbr 对应区域,就 OK 了。

grldr.mbr 中已经为 BPB 表留有足够空间。在没有填入 BPB 表时,它们都是 00 字节。

这样,填入了 BPB 表的 GRLDR.MBR 就可以用你原来的方法启动了。




因为我们亲手创建,这个世界更加美丽。
2007-10-26 17:58
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

好的再试试..




第一高手 第二高手

2007-10-26 18:41
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lhteee
中级用户




积分 223
发帖 59
注册 2005-5-23
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下

看到过老毛桃将FreeDOS的ROMOS写入BIOS的帖子。




欢迎光临蜗牛软园:http://lhteee.ys168.com
欢迎光临 Ghost家:http://lhtooo.ys168.com
电子信箱(Email):lhteee@163.com
电子信箱(Email):lhteee@gmail.com
2007-10-28 21:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

FreeDOS本来就是RomOS的一部分,而RomOS只要有改BIOS信息刷BIOS经验都不是难事。而我是实在是怕洋文,一搭上洋文啥热情都没了,国内讨论这方面的太少。




第一高手 第二高手

2007-10-28 22:30
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
wang6610
银牌会员




积分 1246
发帖 488
注册 2003-11-11
状态 离线
『第 15 楼』:   使用 LLM 解释/回答一下

楼主做法不对


2007-10-29 11:32
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: