无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 20645|回复: 93
打印 上一主题 下一主题

如果在 grub4dos 中集成 DOS 运行环境,哪个开源的 DOS 比较好,请推荐

  [复制链接]
跳转到指定楼层
1#
发表于 2014-12-10 10:16:45 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 不点 于 2015-1-3 14:06 编辑

我知道的有 dosemu,dosbox,freedos。还有别的 DOS 环境吗?您更喜欢哪一个?






2015年1月3日更新:这个是按照第一方案编写的版本。运行的逻辑路线:对于不带 “--config-file=......” 参数的 grub.exe 来说,如果它发现在地址 2M 处有以前的 grub4dos 的备份,则执行退出 DOS 返回到 grub4dos 的功能。如果在地址 2M 处没有发现 grub4dos 的备份,则像从前一样,正常加载 grub.exe 自身所带的 grub4dos 环境。用 "grub.exe --config-file=" (后面为空) 可以强制按照以前无参数的情形去执行,即,强制正常加载 grub.exe 自身所带的 grub4dos 环境,因此,不去执行退出 DOS 的动作,即,不会返回到以前的 grub4dos 环境中。这种方法用来模拟以前不带 “--config-file=......” 参数的 grub.exe 的情况。

2014年12月27日更新:这个是基于 26 日的版本,支持 “DOS 时代菜鸟 DOS 工具箱” 里面的中文 DOS。调用 BIOS 成功清屏,已经算是完美。
2014年12月26日更新:尽最大努力,支持中文 DOS 环境,仍不完美,留作参照物。
2014年12月25日更新:添加了恢复视频状态的 BIOS 调用,希望对于 DOS 图形模式的恢复起到某些帮助作用。

新增功能:

在 grub4dos 下用 boot 命令启动 DOS 后,可以用不带参数的 grub.exe 从 DOS 返回到 grub4dos 中。

以后,从 grub4dos 切换到 DOS 用 quit 命令即可。而从 DOS 切换到 grub4dos 仍然是用不带参数的 grub.exe 命令。

补充说明:不限定 DOS 的种类。任何 DOS 都支持。




grub4dos-0.4.5c-2014-12-27.7z

263.6 KB, 下载次数: 97, 下载积分: 无忧币 -2

调用 BIOS 清屏成功!这个可以完美替代 26 日的版本。我们就以这个为主进行测试吧。

grub4dos-0.4.5c-2014-12-26.7z

263.35 KB, 下载次数: 7, 下载积分: 无忧币 -2

尽最大努力,支持中文 DOS 环境,仍不完美,留作参照物。

grub4dos-0.4.5c-2014-12-25.7z

262.92 KB, 下载次数: 44, 下载积分: 无忧币 -2

添加了恢复视频状态的 BIOS 调用,希望对于 DOS 图形模式的恢复起到某些帮助作用。

grub4dos-0.4.5c-2014-12-24.7z

262.76 KB, 下载次数: 14, 下载积分: 无忧币 -2

终于又找到了一处毛病,这个应该正常了

grub4dos-0.4.5c-2014-12-23.7z

261.69 KB, 下载次数: 22, 下载积分: 无忧币 -2

这个版本也留作参照物

grub4dos-0.4.5c-2015-01-03.7z

263.86 KB, 下载次数: 46, 下载积分: 无忧币 -2

这个是按照第一方案编写的程序,请测试。

grub4dos-0.4.5c-2014-12-22.7z

261.38 KB, 下载次数: 42, 下载积分: 无忧币 -2

这个版本暂时保留,作为参照物。

评分

参与人数 1无忧币 +5 收起 理由
ql1307096 + 5 很给力!

查看全部评分

2#
 楼主| 发表于 2014-12-10 17:52:30 | 显示全部楼层
本帖最后由 不点 于 2014-12-14 23:51 编辑

加载 DOS 环境的话,就存在常规内存争用的问题了。

gfxmenu 使用了较高端的常规内存,直接与 DOS 软件的内存发生冲突。所以,gfxmenu 不能再支持了。

其他的内存,比如磁盘读写缓冲区以及几何参数探测缓冲区,可以合并或精简。最后,grub4dos 内核只能占用 128K 的低端内存,即,0 ~ 0x1FFFF 的内存空间。其余的,都留给 DOS 软件使用。

由于不再支持 gfxmenu,我打算开辟一个新的分支,比如,版本号就叫做 0.5。这样,不影响使用旧版的、现有的 gfxmenu 的用户。


进一步研究发现,FreeDOS 内核使用了物理地址 0x700 ~ 0x10000 的空间,这与 grub4dos 发生了冲突。

1、grub4dos 的未压缩菜单位于 0x800,这不能再用了,必须挪到别处,或者干脆撤销(把未压缩和压缩的菜单合并,只使用压缩菜单空间)。

2、grub4dos 的堆栈栈顶位于 0x7000,代码位于 0x8200~0x10000。解决办法是,让 FreeDOS 不再使用 0x6800 ~0x10000 的空间。

回复

使用道具 举报

3#
 楼主| 发表于 2014-12-11 08:19:02 | 显示全部楼层
jack95 发表于 2014-12-10 23:03
集成dos后有什么优势,能带动那方面的应用?

自己用,自己觉得有用。所有的开发工作,都是首先自己要用,然后才去开发。至于说对别人有没有用,那是不知道的。自己需要运行 DOS 程序,弥补 grub4dos 的应用程序的缺乏,所以想做这个开发。



回复

使用道具 举报

4#
 楼主| 发表于 2014-12-14 21:23:01 | 显示全部楼层
对 freedos 进行了初步改造。改造后的版本已经上载在一楼,请测试它是否可以正常使用。

回复

使用道具 举报

5#
 楼主| 发表于 2014-12-15 11:39:08 | 显示全部楼层
jack95 发表于 2014-12-14 23:11
运行后直接进入grldr,选freedos后卡主

请您确认:这是卡死吗?是不能进入 DOS 命令行吗?
回复

使用道具 举报

6#
 楼主| 发表于 2014-12-15 11:42:30 | 显示全部楼层
jack95 发表于 2014-12-15 10:44
可以进入freedos,如何返回开始的grub4dos环境?

麻烦请您确认,新版和旧版是否都能进入 DOS?

目前只是初步的工作,仅仅测试修改后的 FreeDOS 究竟能否正常工作。

其他工作还没开展,预计需要两个礼拜或两个月才能全部做完。
回复

使用道具 举报

7#
 楼主| 发表于 2014-12-18 17:14:42 | 显示全部楼层
ql1307096 发表于 2014-12-16 15:14
不知道这个跟map img镜像有什么区别呢?

差别不是太大。目前通过 img 进入 DOS 之后,无法返回到 grub4dos 中。注意,通过 grub.exe 可以再次进入 grub4dos,但那不等于退回到 grub4dos。用 grub.exe 重新进入 grub4dos 后,那是一个全新的 grub4dos 环境,原来的变量都丢失了。

改进之后,可以自由地在 grub4dos 与 DOS 之间切换,两者的运行环境都不破坏,变量都不丢失。

至于说具体的实现手段,还在权衡之中。

回复

使用道具 举报

8#
 楼主| 发表于 2014-12-18 18:24:42 | 显示全部楼层
又考虑了几天,觉得应该分步骤实现。

作为第一步,目前先考虑简单的情况,以 “概念证明” 的性质来实现。

这个阶段的 DOS 限定为只使用 1M 以内的空间,不使用扩展内存。如此一来,与 grub4dos 的冲突将减少,因此容易解决冲突问题。

以后,当把 grub4dos 的内核搬到扩展内存顶端以后,再考虑不限制 DOS 内存的问题。

当从 grub4dos 切换到 dos 时,保存 grub4dos 的环境。

当从 dos 切换到 grub4dos 时,也保存 DOS 的环境。

所以,关键是实现一个切换的接口。目前考虑以命令的方式来实现。

在 dos 下实现一个 breakdos 命令,可以从 dos 返回到 grub4dos 环境。
在 grub4dos 下实现一个 resumedos 命令,可以从 grub4dos 进入 DOS 环境并恢复到原先的状态。

回复

使用道具 举报

9#
 楼主| 发表于 2014-12-21 17:33:57 | 显示全部楼层
2014年12月21日:编译了 grub4dos,请测试常规功能是否正常。也测试新增的功能是否正常。

新增功能:

在 grub4dos 下用 boot 命令启动 DOS 后,可以用不带参数的 grub.exe 从 DOS 返回到 grub4dos 中。

以后,从 grub4dos 切换到 DOS 用 quit 命令即可。而从 DOS 切换到 grub4dos 仍然是用不带参数的 grub.exe 命令。

补充说明:不限定 DOS 的种类。任何 DOS 都支持。
回复

使用道具 举报

10#
 楼主| 发表于 2014-12-21 21:12:59 | 显示全部楼层

目前的实现方式,支持任意的 DOS,而 grub4dos 本身也没有集成 DOS 的 API。

本次比以前做了微小的改进。

1、修补了 boot 命令,让它启动 DOS 之后,先把 grub4dos 的 640K 常规内存保存在 2M 处,以便 grub.exe 能够利用它返回到 grub4dos 之中。
2、修补了 grub.exe,在无参数时,让它试图首先从 2M 处寻找 grub4dos 的备份。找到后就切换到先前的 GRUB 环境。
3、修补了 quit 命令,让它在从 grub 环境退回到 DOS 环境时,也先把 grub4dos 的 640K 常规内存保存在 2M 处,以便 grub.exe 能够利用它返回到 grub4dos 之中。

这种微调的实现方式,可以兼容现有的一切。所以,这个改动(测试稳定以后)可以纳入到目前的 svn 数据库中。


测试的方法:

用新版本的 grub4dos 启动 DOS,然后,在 DOS 下执行新版的 grub.exe,看看能否返回到先前的 grub 环境。当成功返回到 grub 之后,再执行 quit 命令,看看可否退回到刚才的 DOS 环境。

然后又运行 grub.exe,看看能否返回到 grub 环境。

然后再执行 quit 命令,看看能否退回到 DOS 环境。

就这样,反复折腾,看看是否都顺利。

回复

使用道具 举报

11#
 楼主| 发表于 2014-12-22 09:04:58 | 显示全部楼层
pcs2006 发表于 2014-12-22 09:02
试了 Windows 98 DOS, FreeDOS 和 DOS 7.1 情况一样如下:
1. 系统起动首先进入Grub4dos.
2. boot 入 dos  ...

谢谢,测试结果与我的测试结果相同。

看来有个什么隐蔽的地方没弄好。排解错误好困难啊。

回复

使用道具 举报

12#
 楼主| 发表于 2014-12-22 15:43:37 | 显示全部楼层
中午找到毛病,问题解决了,更新后的版本在一楼下载。

现在大家可以大量测试了,看看会不会暴露出其他问题。

回复

使用道具 举报

13#
 楼主| 发表于 2014-12-22 18:17:49 | 显示全部楼层
topway 发表于 2014-12-22 17:17
如何测试? 有没有操作步骤及说明?

其实,日常的使用,便是测试。这叫做常规功能测试。代码改动以后,有可能影响到日常使用,因此,需要常规功能测试。

新增的功能,大概只有开发人员才关心。

新功能有什么使用的场景?我来说说一些可能的情况吧。

你有一个 grub4dos 的菜单或程序(包括批处理)。你希望调用某个 DOS 程序,然后返回到 grub4dos 中。

你可以用 boot 命令启动 DOS,在 DOS 中,你有 autoexec.bat,它可以运行你的程序,在这个 autoexec.bat 里面,你可以放一条 grub.exe 命令,这样会返回到 grub4dos 中。

grub.exe 究竟能返回到 grub4dos 的什么地方呢?它返回到紧接刚才的 boot 命令的下一条命令处。所以,你在 boot 命令之后,还要放置一些相关的命令或控制转移指令。

然后,假如你又想回到 DOS 了,此时,你无需再执行 boot 命令,而是使用 quit 命令,这是因为 DOS 环境已经存在了。

quit 命令从 grub4dos 退回到 DOS,究竟退到什么地点呢?

你可能已经猜到了:它退到你刚才执行的 grub.exe 命令的下一条命令处。

从哪里退出的,将来切换回来的时候,就仍然回到哪里。从哪出去的,就从哪回来。

grub.exe 和 quit 命令都是起着 “退出” 的作用。

grub.exe 是 “退出 DOS,进入 grub4dos”。
quit 命令是 “退出 grub4dos,进入 DOS”。

它们的共同点是,从哪条命令退出的,将来回来的时候,也会回到紧接这条命令的下一条命令处。

boot 命令与 quit 命令相似,所不同的地方在于,boot 命令是建立初始的 DOS 环境。而 quit 命令是进入已经建立好了的 DOS 环境中。

慢慢理解吧。

回复

使用道具 举报

14#
 楼主| 发表于 2014-12-24 11:00:29 | 显示全部楼层
看看今天这个版本有没有改进?pcs2006 报告的 DOS 图形模式问题是否解决了?

点评

其实 grub4dos-0.4.5c-2014-12-22.7z,只要在切换grub前退回text mode是没有问题的。 grub4dos-0.4.5c-2014-12-24.7z,情况是进入dos后,文字模式或图形模式下按grub.exe 后,系统停止,没有任何显示。 另外,y  详情 回复 发表于 2014-12-24 14:57
回复

使用道具 举报

15#
 楼主| 发表于 2014-12-24 15:24:43 | 显示全部楼层
pcs2006 发表于 2014-12-24 14:57
其实 grub4dos-0.4.5c-2014-12-22.7z,只要在切换grub前退回text mode是没有问题的。

grub4dos-0.4.5c ...

刚才又编译了一个,试试还死机吗?

另外也请试试 23 日的版本是否死机。

回复

使用道具 举报

16#
 楼主| 发表于 2014-12-24 17:03:44 | 显示全部楼层
pcs2006 发表于 2014-12-24 16:17
情况依旧--
若配合 grub4dos-0.4.5c-2014-12-22.7z  版的 grub.exe,反而不再死机,
但某些图形模式(d ...

又上载了一个,试试还死机吗?

如果不死机,请报告它能真的 “退出” DOS 而 “返回” grub4dos 吗?成功返回到 grub4dos 时,会有 Returned from DOS 的提示。

如果是进入全新的 grub4dos 环境,那就是有问题的,请报告 CPU 的详细信息:它是 Intel 的,还是 AMD 的,是什么年代的产品。如果你的测试是在虚拟机下完成的,请报告虚拟机的名称和版本。

回复

使用道具 举报

17#
 楼主| 发表于 2014-12-24 17:57:16 | 显示全部楼层
请确认:

23 日的 grub.exe 能够从 DOS 返回到 grub4dos 吗?能够出现 Returned from DOS 的提示吗?

回复

使用道具 举报

18#
 楼主| 发表于 2014-12-25 06:35:23 | 显示全部楼层
本帖最后由 不点 于 2014-12-25 11:20 编辑

上载了 24 日的最后一版,终于找到了一个毛病。

从 DOS 下启动 grub.exe 应该不会死机了。

还需要大家继续测试并报告:从 grub4dos 启动 DOS 是否仍旧失败?我的测试是成功的。

请注意,大家在测试时,应该保证 DOS 下不会自动执行 grub.exe,因为如果进入 DOS 后又自动执行 grub.exe,那就是退出 DOS 而立即返回到 grub4dos 了。

回复

使用道具 举报

19#
 楼主| 发表于 2014-12-25 17:11:58 | 显示全部楼层
下载了 DOS时代菜鸟 的 我的DOS工具箱 2014-10-30 188-17.6 4dos 版,将新的 grub.exe 放在它的根目录下,用 grub.exe 进入 grub4dos,再 quit 回 DOS,图形模式得以成功恢复,DOS 下的中文字符可以正常显示。

似乎没有什么问题了。

回复

使用道具 举报

20#
 楼主| 发表于 2014-12-25 20:07:43 | 显示全部楼层
scxiegangxy 发表于 2014-12-25 18:12
处理器名称        DualCore Intel Core 2 Duo E7400, 2800 MHz (10.5 x 267)
主板芯片组        Intel Eaglelake P45
...

谢谢支持。

诸如此类的 dos 启动失败,我怀疑是以某种方式在进入 dos 时,自动执行了 grub.exe 程序。

请上载这样的 img,或者告知下载地点,以便我能够亲自测试。

不成功的 img 都可以上载,或告知下载地址。
回复

使用道具 举报

21#
 楼主| 发表于 2014-12-27 08:02:22 | 显示全部楼层
26 日折腾了一整天,中文 DOS 环境仍有问题。作为阶段性的成果,上载到一楼了。

目前,当 grub4dos 处于 VBE 模式时,如果用 quit 退回到中文环境的 DOS,则屏幕显示不出字符,需要手动执行一条 cls 命令清屏,才能显示出 DOS 命令行。此时仍有中文支持,可以显示中文字符。

大家能够容忍这种情况吗?如果能容忍,请多多测试 26 日的版本,将来说不定也有办法解决 “必须手动执行 CLS 命令” 的问题。

今天准备再编译一个版本,彻底退出 DOS 环境,只使用干净的英文 text 环境,这样避免调用复杂的 BIOS,也相应地会增加稳定性。

回复

使用道具 举报

22#
 楼主| 发表于 2014-12-27 09:24:48 | 显示全部楼层
2014年12月27日:本来想着用 BIOS 标准调用 int10/ax=0003 返回到英文文本模式即可解决问题,但遗憾的是,DOS 时代菜鸟所采用的中文 DOS 环境是有毛病的,使得上述 BIOS 调用不能彻底卸载中文环境,而只是进入了一个有毛病的英文文本模式。彻底卸载中文环境,需要用这个 DOS 自己带的 fcquit.com 程序才行。这是一个不大不小的 bug,使得我们不可能用标准的 BIOS 调用来解决问题。

如果在中文环境下执行 grub.exe,然后又用 quit 返回到 DOS,此时屏幕不正常,需要执行 cn q 或 fcquit 卸载 DOS 环境才能正常显示。

所以,无论如何都不能解决问题。不完美的中文 DOS,是造成问题的根源。

26 日 和 27 日 这两个版本,就留着让大家长期测试吧。如果有什么问题,请详细报告。

回复

使用道具 举报

23#
 楼主| 发表于 2014-12-27 11:25:35 | 显示全部楼层
本帖最后由 不点 于 2014-12-27 11:46 编辑

27日再次更新,这次以 26 日的版本为基础,调用 BIOS 清屏成功,可以完美支持 “DOS 时代菜鸟 DOS 工具箱” 里面的中文 DOS 了。

以后我们好像应该以这个为主来进行测试。

大家的测试,如果连续 30 天没有人报告 bug,大致就可以进入 svn 数据库了。

噢,忘了:目前只是测试稳定性,还不能进入 svn 数据库。新版 grub.exe 在不带参数时,会执行退出 DOS 返回 grub 的动作,这一点与旧版不兼容,所以,这可能还需要进行功能性的调整。等到测试稳定以后再说吧。



回复

使用道具 举报

24#
 楼主| 发表于 2014-12-27 14:47:38 | 显示全部楼层
在基本成功地贯通了 grub4dos 与 dos 之后,我有一个想法:我们使用 dos 的方式,应该发生一些变化。

原先我们一般是使用 grub4dos 启动 dos,执行完任务后再用 grub.exe 进入 grub4dos。这有两个缺点:

一、dos 破坏了中断向量表,因此,第二次进入 grub4dos 环境以后,中断向量表是受到污染的,不干净。这有可能会导致某些实模式或保护模式程序运行失常。

二、dos 下的 TSR 或设备驱动程序可能接管某些中断,导致 grub.exe 在探测恢复中断向量表时失败,无法进入 grub 环境。


而采用新版 grub.exe 的退出功能,我们不会再面临以上两个风险。我们总是可以退回到可靠的 grub 环境。但是我们需要分别在 grub4dos 和 dos 两个环境下设计好进入和退出的流程,保证在执行完 dos 任务后,又能在 grub4dos 环境下继续执行我们所需要的其他任务。

点评

这个功能稳定之后是不是可以考虑写一个DOS下的小程序让它可以实现返回GRUB4DOS而不是使用GRUB.EXE 必竟GRUB.EXE文件相对来说太大了,特别是一些磁盘空间比较小的镜像不好安放GRUB.EXE.  详情 回复 发表于 2014-12-27 15:20
有没有可能把GRUB4DOS做成类似IPXE那样的,可以一直存在于内存中,并且允许其它程序直接直接调用GRUB4DOS的功能. 就像最新的0.4.6a版本grub4dos,使用ipxe启动grldr之后还可以在grub4dos下直接使用ipxe的完整功能..  详情 回复 发表于 2014-12-27 15:18
回复

使用道具 举报

25#
 楼主| 发表于 2014-12-27 15:57:59 | 显示全部楼层
chenall 发表于 2014-12-27 15:18
有没有可能把GRUB4DOS做成类似IPXE那样的,可以一直存在于内存中,并且允许其它程序直接直接调用GRUB4DOS的 ...

这当然有可能了。我之所以要想实现将 grub4dos 隐藏在扩展内存顶部,也正是因为想让 grub4dos 变成后台服务,与操作系统共存,需要时,呼出 grub4dos,不需要时,隐藏在幕后。

隐藏之后,int13 可以做得很大,里面可以容纳 ipxe 以及 usb 驱动,甚至也能容纳硬盘驱动。那是因为,int13运行于保护模式,不需要占用常规内存。不过,这个实现需要花费很大精力,以后慢慢来。
回复

使用道具 举报

26#
 楼主| 发表于 2014-12-27 16:04:19 | 显示全部楼层
本帖最后由 不点 于 2014-12-27 18:32 编辑
chenall 发表于 2014-12-27 15:20
这个功能稳定之后是不是可以考虑写一个DOS下的小程序让它可以实现返回GRUB4DOS而不是使用GRUB.EXE

必 ...


是的,能够做到。但是我偷懒不想做了,所以就放在 grub.exe 里面了。做完现在这个工作,就已经很累了。我要歇歇,不干了。

如果你或其他某个人愿意做的话,我支持。


补充:我倒是希望 chenall、 yaya 在时间充裕的情况下做做这个工作。可以把小程序起名为 grub.com 或者其他更好的名字。做完这个工作之后,会对 intel 与 AMD 的 cpu 实模式 4G 段限有着深入的了解。这有助于编写与实模式有关的程序。cpu 有个 big real mode,就是我们熟悉的 unreal mode,或者叫做 flat real mode,它可以用来读写 4G 内存。而网上还介绍了一个 huge real mode,它是 32 位的实模式,CS 段寄存器可以在 32 位的 4G 地址空间执行代码。通常用不上 huge real mode,但它也许在某个特殊的情况下有用。

其一,我身体本来也就不好;其二,由于我终究要远离软件开发。所以,我希望由别人来做这个工作,而且这也是一个操练的机会,顺便能够加深理解未公开的 cpu 技术。
回复

使用道具 举报

27#
 楼主| 发表于 2014-12-28 08:25:45 | 显示全部楼层
2011yaya2007777 发表于 2014-12-26 10:14
使用 24 日版本测试。
1. 在 G4D 环境,加载 MSDOS,成功进入 DOS。执行 quit,成功返回 G4D。
2. 在 DOS ...

是不是 dos 下运行了某些软件,它们破坏了位于扩展内存的 grub4dos  环境? dos 不可以执行 himem 或 emm386之类的内存管理软件,它们都要使用扩展内存空间。目前只是解决了常规内存冲突问题,没有解决扩展内存冲突问题。等到将来把 grub4dos 移动到扩展内存顶部并用 int15隐藏起来,那时候才能解决扩展内存冲突问题。
回复

使用道具 举报

28#
 楼主| 发表于 2014-12-28 22:34:14 | 显示全部楼层
本帖最后由 不点 于 2014-12-28 22:38 编辑
2011yaya2007777 发表于 2014-12-28 21:29
是启动直接进入 dos 。加载了 himem。然后执行 grub.exe,进入 G4D。按说是破坏了 himem。
不清楚为何执 ...


内存冲突对双方都有害。

从 grub4dos 进入 DOS 之时,保存 grub4dos 的常规内存到 2M 地址处。而 32M 以内都属于 grub4dos 的活动范围。只要这部分内存被改动,那就破坏了 grub4dos 的运行环境。

在 DOS 下加载 himem,则 DOS 使用了扩展内存,那么就可能破坏掉 grub4dos 的代码或数据。因此,重新进入 grub 环境后,出现异常情况。即使不出现异常,那么当再次退回到 DOS 时,由于扩展内存的内容也已经被 grub4dos 的运行所破坏,因此 DOS 也可能要出现不正常了。



回复

使用道具 举报

29#
 楼主| 发表于 2014-12-28 22:53:43 | 显示全部楼层
pcs2006 发表于 2014-12-28 16:39
本来打算测试Grub.exe是否会破坏dos的显示模式,于是写了一个小小的程序,
首先保存原有画面资料(包括文字 ...

确实是会破坏显示模式。这是因为,从 DOS 进入 grub4dos 时,grub4dos 有可能是 VBE 模式,而从 grub4dos 的显示模式切换到原有的 DOS 显示模式,可能发生不匹配,发生模式错误,导致显示异常。

我在 27 日的版本中已经恢复了 DOS 的显示状态,只剩下视频画面数据没能恢复。其实是我不知道该怎么恢复,所以,我干脆清屏,保证视频显示基本正常。

你的程序能够恢复视频画面,当然更好。我想知道的是,27 日的原版,除了视频画面未能恢复以外,还有别的问题吗?

回复

使用道具 举报

30#
 楼主| 发表于 2014-12-29 01:44:43 | 显示全部楼层
pcs2006 发表于 2014-12-29 00:17
刚才测试了27日的版本,这台AMD Athlon II一切正常,未试其他电脑,之前的印象,
许多机子常有51楼的情 ...

代码写得很好,也很容易看懂。

代码能够恢复视频缓冲区,然而,恢复视频缓冲区,是要耗费空间的。

如果是文本模式,需要耗费的空间很小。

但如果是图形模式,恢复像素数据,那可承受不了,640×480×4 / 8 = 153600 = 150K。再加上 grub.exe 本身占用的 300K,就是 450K 了。grub.exe 还有一个任务是保存 64K 的 HMA 数据,那么整个消耗就超过 512K 了。DOS 很难有这么大的空闲内存供 grub.exe 使用。

既然我们不可能在所有的情况下都恢复视频显示区的内容,那我们就干脆统一地不再恢复。

因此,权衡以后,我觉得清屏就够了。

非常感谢您提供的代码。这个代码我会保存好,并仔细研究学习。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-5 12:55

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表