无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
123
返回列表 发新帖
楼主: 不点
打印 上一主题 下一主题

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

  [复制链接]
61#
 楼主| 发表于 2014-12-27 15:57:59 | 只看该作者
chenall 发表于 2014-12-27 15:18
有没有可能把GRUB4DOS做成类似IPXE那样的,可以一直存在于内存中,并且允许其它程序直接直接调用GRUB4DOS的 ...

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

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

使用道具 举报

62#
 楼主| 发表于 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 技术。
回复

使用道具 举报

63#
 楼主| 发表于 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隐藏起来,那时候才能解决扩展内存冲突问题。
回复

使用道具 举报

64#
发表于 2014-12-28 16:39:18 | 只看该作者
本帖最后由 pcs2006 于 2014-12-29 15:17 编辑

本来打算测试Grub.exe是否会破坏dos的显示模式,于是写了一个小小的程序,
首先保存原有画面资料(包括文字及属性)、显示模式及鼠标位置及大小,
然后载入grub.exe,等grub.exe返回时,回存显示模式,鼠标位置及原画面文字,
发觉只有某些dos中文系统不能正常显示,可能是grub.exe 进入grub4dos环境的前或后时
破坏了原有的中文系统,于是返回dos时乱掉了(暂时只有dos时代菜鸟的dos工具箱有这种情况).

grub.com没什么功能,只是回存原有的画面,不怕被grub.exe 清掉而已
把grub.com和grub.exe放在一起就是了,键入grub时,dos首先会执行grub.com
若嫌名字不好,也可以随便改名,例如grub1.com什么的....
若在grub 后加了parameters,grub.com不会做任何储存或回存的动作,
因为grub.exe可能有自己的讯息输出,保留画面没什么意义了。

http://pan.baidu.com/s/1mgFWigS

压缩包里包括grub.com及其汇编程序。
已修正程序出错...

点评

确实是会破坏显示模式。这是因为,从 DOS 进入 grub4dos 时,grub4dos 有可能是 VBE 模式,而从 grub4dos 的显示模式切换到原有的 DOS 显示模式,可能发生不匹配,发生模式错误,导致显示异常。 我在 27 日的版本  详情 回复 发表于 2014-12-28 22:53
回复

使用道具 举报

65#
发表于 2014-12-28 21:29:20 | 只看该作者
是不是 dos 下运行了 himem某些软件,它们破坏了位于扩展内存的 grub4dos  环境?

是启动直接进入 dos 。加载了 himem。然后执行 grub.exe,进入 G4D。按说是破坏了 himem。
不清楚为何执行 ls (fd0)/ 会重启。

点评

内存冲突对双方都有害。 从 grub4dos 进入 DOS 之时,保存 grub4dos 的常规内存到 2M 地址处。 在 DOS 下加载 himem,则 DOS 使用了扩展内存,那么就可能破坏掉 grub4dos 的代码或数据。因此,重新进入 grub  详情 回复 发表于 2014-12-28 22:34
回复

使用道具 举报

66#
 楼主| 发表于 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 也可能要出现不正常了。



回复

使用道具 举报

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

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

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

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

点评

刚才测试了27日的版本,这台AMD Athlon II一切正常,未试其他电脑,之前的印象, 许多机子常有51楼的情况,就是无法载入dos img,所有文件是一样的,似乎和bios版本有关 注:64楼的文件之前有bug,已修正,若有  详情 回复 发表于 2014-12-29 00:17
回复

使用道具 举报

68#
发表于 2014-12-29 00:17:11 | 只看该作者
不点 发表于 2014-12-28 22:53
确实是会破坏显示模式。这是因为,从 DOS 进入 grub4dos 时,grub4dos 有可能是 VBE 模式,而从 grub4dos ...

刚才测试了27日的版本,这台AMD Athlon II一切正常,未试其他电脑,之前的印象,
许多机子常有51楼的情况,就是无法载入dos img,所有文件是一样的,似乎和bios版本有关

注:64楼的文件之前有bug,已修正,若有需要请重新下载,保留回存画面的程序已放在asm文件内,
除了载入grub.exe外,全是int 10h的调用,不涉及int 21h

点评

代码写得很好,也很容易看懂。 代码能够恢复视频缓冲区,然而,恢复视频缓冲区,是要耗费空间的。 如果是文本模式,需要耗费的空间很小。 但如果是图形模式,恢复像素数据,那可承受不了,640×480×4 / 8  详情 回复 发表于 2014-12-29 01:44
回复

使用道具 举报

69#
 楼主| 发表于 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 使用。

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

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

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

点评

基本上,能够键入grub.exe,应该是文字模式环境,即使在用中文系统下, 也是文字模式,最大不会超过10k,若不嫌麻烦压缩一下,可能会在3k以下。 另外,要保存图形模式画面资料,不必真个动用内存,可调用现有的i  详情 回复 发表于 2014-12-29 10:27
回复

使用道具 举报

70#
 楼主| 发表于 2014-12-29 01:58:17 | 只看该作者
刚才测试了27日的版本,这台AMD Athlon II一切正常,未试其他电脑,之前的印象,
许多机子常有51楼的情况,就是无法载入dos img,所有文件是一样的,似乎和bios版本有关


假如无法载入 DOS,那它大致应该死机,而不至于退回到 grub4dos。

要知道,退回到 grub4dos 的功能,只有通过 grub.exe 才能实现。如果纯粹是偶然的随机代码,碰巧能够退回到 grub4dos,那可能性太小。

注意,DOS 不可以有任何访问扩展内存的动作。不可以有 himem 或 emm386 之类的程序。DOS 下的程序不可以写入扩展内存。读取扩展内存是可以的。


回复

使用道具 举报

71#
发表于 2014-12-29 10:27:18 | 只看该作者
不点 发表于 2014-12-29 01:44
代码写得很好,也很容易看懂。

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

基本上,能够键入grub.exe,应该是文字模式环境,即使在用中文系统下,
也是文字模式,最大不会超过10k,若不嫌麻烦压缩一下,可能会在3k以下。

另外,要保存图形模式画面资料,不必真个动用内存,可调用现有的int 10h实现,
ax=1c01h是保存視訊規格,ax=1c02h是回存視訊規格。
代码大致是这样的:

SaveVid:  push    es
                mov     bx,offset VideoBuffer
                mov     ax,1c01h                ;save Video Config
                mov     cx,0007h
                int     10h
                pop     es
                ret
;------------------------------------------------------------------------------
RestoreVid:
                push    es
                mov     bx,offset VideoBuffer
                mov     ax,1c02h                ;Restore Video config
                mov     cx,0007h
                int     10h
                pop     es
                ret

;------------------------------------------------------------------------------

其中的VideoBuffer并不是昼面资料,是视讯規格緩衝,一般要4-10k就可以,
比文字模式更省空间,我写过类似的文字和游戏画面切换的程式,代码不复杂,
详情请参考:
http://www.ymailsoft.com/app/clu ... mation_Id=I00012942

但若回到grub4dos时又有图象显示,这会抵触和破坏了原来保存,问题挺复杂的。

不管怎样,这都会增加grub4dos的工作量,又没有逼切性,权作玩票方案好了哈。

点评

int10/ah=1Ch,在 2014-12-27 的版本中,已经采用了。运行情况与您刚才描述的情况完全一样。 您的解释,让我更清楚了 int10 功能 AH=1Ch 的作用。我本来还纳闷:为何保存和恢复状态的代码不能完全恢复状态呢?现  详情 回复 发表于 2014-12-29 12:18
回复

使用道具 举报

72#
 楼主| 发表于 2014-12-29 12:18:19 | 只看该作者
pcs2006 发表于 2014-12-29 10:27
基本上,能够键入grub.exe,应该是文字模式环境,即使在用中文系统下,
也是文字模式,最大不会超过10k ...

int10/ah=1Ch,在 2014-12-27 的版本中,已经采用了。运行情况与您刚才描述的情况完全一样。

您的解释,让我更清楚了 int10 功能 AH=1Ch 的作用。我本来还纳闷:为何保存和恢复状态的代码不能完全恢复状态呢?现在明白了。谢谢,非常感谢。

点评

原来27日的版本已使用了int 10h ah=1ch功能,那么不妨让grub.com先做一下实验, 把上面SaveVid和RestoreVid的代码加入grub.com中。 试验的结果,新的grub.com配合27日的版本,可以完全回复画面,包括dos时代菜鸟  详情 回复 发表于 2014-12-30 09:55
回复

使用道具 举报

73#
发表于 2014-12-30 09:55:30 | 只看该作者
本帖最后由 pcs2006 于 2014-12-31 18:05 编辑
不点 发表于 2014-12-29 12:18
int10/ah=1Ch,在 2014-12-27 的版本中,已经采用了。运行情况与您刚才描述的情况完全一样。

您的解释 ...


原来27日的版本已使用了int 10h ah=1ch功能,那么不妨让grub.com先做一下实验,
把上面SaveVid和RestoreVid的代码加入grub.com中。

试验的结果,新的grub.com配合27日的版本,可以完全回复画面,包括dos时代菜鸟的dos工具箱。

http://pan.baidu.com/s/1ntiKiwx

点评

仍旧以前述 dos 时代菜鸟的中文 dos 为测试对象。这一版的 grub.com,不能恢复显示画面。此前的版本还可以成功恢复。也许是这台联想笔记本的 BIOS 比较特殊吧。它的 int10/ax=1C00h 返回的缓冲区大小,换算成字节数  详情 回复 发表于 2014-12-30 22:49
回复

使用道具 举报

74#
 楼主| 发表于 2014-12-30 22:49:27 | 只看该作者
pcs2006 发表于 2014-12-30 09:55
原来27日的版本已使用了int 10h ah=1ch功能,那么不妨让grub.com先做一下实验,
把上面SaveVid和Resto ...

仍旧以前述 dos 时代菜鸟的中文 dos 为测试对象。这一版的 grub.com,不能恢复显示画面。此前的版本还可以成功恢复。也许是这台联想笔记本的 BIOS 比较特殊吧。它的 int10/ax=1C00h 返回的缓冲区大小,换算成字节数,竟然达到 56K,也就是说,已经接近 64K 了。

我猜,说不定有些主板的 int10/1C00h 功能采用 256K 的缓冲区,也未可知。

------------------------

继续说说恢复画面的问题。我们接触得较多的中文 DOS,都是把图形模式包装成文本模式了。

但不要忘了,在原始的图形模式下,dos 也能工作。在图形模式下,即使是英文的 dos 仍然可以运行。

说不定有些国家的 dos 就偏爱图形模式,也未可知。

这时候我们不可能以较小的内存空间来恢复整个屏幕的内容。

因此,我觉得保持清屏状态是没问题的,或者说是合理的。

点评

功能 入口参数和出口参数 INT 10H 的 1C00H 功能 返回状态缓冲区容量 AX = 1C00H AL = 1CH 成功 BX = 需要的 64 字节块数目 实际操作下,cx也应该定义,若cx,7,传回的bx才有参考价值, 在几部机子不同的中  详情 回复 发表于 2014-12-31 14:43
回复

使用道具 举报

75#
发表于 2014-12-31 14:43:53 | 只看该作者
不点 发表于 2014-12-30 22:49
仍旧以前述 dos 时代菜鸟的中文 dos 为测试对象。这一版的 grub.com,不能恢复显示画面。此前的版本还可 ...

功能 入口参数和出口参数
INT 10H 的 1C00H 功能
返回状态缓冲区容量 AX = 1C00H AL = 1CH 成功
BX = 需要的 64 字节块数目

实际操作下,cx也应该定义,若cx,7,传回的bx才有参考价值,
在几部机子不同的中文系下,bx大多传回0fh,shl bx,6,也就是乘上64=960(3c0h),
少于1k,这是显示模式的config 表,你的缓冲区大小达到 56K,
是不是我的理解错误了,还是联想笔记本太另类:)

grub.com只是试验中文系统有没有遭破坏,尤其dos时代菜鸟的dos工具箱改动了不少中断.
试验结果是没有,初期的画面乱掉只是欠一个模式转换而已。

点评

1C 功能有很完善的说明,我当然不会搞错。实际计算出的缓冲区大小 56KB,确实令人吃惊。 你给的缓冲区只有 8K,显然太小了,所以也就理所当然地不能恢复画面。 而你之前的版本,不带有 1C 功能,反而可以正确  详情 回复 发表于 2014-12-31 17:26
回复

使用道具 举报

76#
 楼主| 发表于 2014-12-31 17:26:41 | 只看该作者
pcs2006 发表于 2014-12-31 14:43
功能 入口参数和出口参数
INT 10H 的 1C00H 功能
返回状态缓冲区容量 AX = 1C00H AL = 1CH 成功

1C 功能有很完善的说明,我当然不会搞错。实际计算出的缓冲区大小 56KB,确实令人吃惊。

你给的缓冲区只有 8K,显然太小了,所以也就理所当然地不能恢复画面。

而你之前的版本,不带有 1C 功能,反而可以正确恢复画面。

点评

这似乎和ax,1c00h那缓冲区没有关系,因为那个只是表格而己,不是真正的视讯资料。 bios千差万别,有些机子ok但有些不成,为什么视讯资料回存了,但偏偏没有显示,随便按一下Enter, 屏幕上卷,原来的画面出来了,  详情 回复 发表于 2014-12-31 18:22
回复

使用道具 举报

77#
发表于 2014-12-31 18:22:06 | 只看该作者
不点 发表于 2014-12-31 17:26
1C 功能有很完善的说明,我当然不会搞错。实际计算出的缓冲区大小 56KB,确实令人吃惊。

你给的缓冲区 ...

这似乎和ax,1c00h那缓冲区没有关系,因为那个只是表格而己,不是真正的视讯资料。
bios千差万别,有些机子ok但有些不成,为什么视讯资料回存了,但偏偏没有显示,随便按一下Enter,
屏幕上卷,原来的画面出来了,其实视讯资料都在,只是中文系统不知道,我在这里用一个笨办法,
利用ah=0601h,int10h,屏幕上卷一行,告诉中文系统我回来了...

这个版本也加了一些安全检定,确信buffer足够才做保存。
我在三部机子试都可以正确回存,当然也有连第一步dos的退不回的,但那是老问题了。

http://pan.baidu.com/s/1ntiKiwx

点评

>>bios千差万别,有些机子ok但有些不成,为什么视讯资料回存了,但偏偏没有显示,随便按一下Enter, 屏幕上卷,原来的画面出来了,其实视讯资料都在,只是中文系统不知道[/backcolor],我在这里用一个笨办法, 利  详情 回复 发表于 2015-1-11 11:54
回复

使用道具 举报

78#
 楼主| 发表于 2015-1-1 11:37:12 | 只看该作者
首先纠正一下我在前面关于机器型号的描述。联想和华硕笔记本,都是返回 BX=000F。能够正常恢复画面。

而返回 BX=0374 的,是 VirtualBox 虚拟机。你自己可以安装 VirtualBox 虚拟机进行试验。

在 VirtualBox 上,最新版的 grub.com 不能恢复画面(显示的画面为 grub4dos 的内容:Graphics mode set to 0x12),但回车后,滚屏一行,则可以显示以前的 DOS 画面。

我发现可能是你程序中的一个小的错误造成的。


int5:    mov   ax,1c00h                ;get vga config buffer size in bx
           xor    bx,bx
           mov  cx,07h
           int    10h
           cmp  al,1ch
           jnz    int3
               mov        cx,6        ; x 64 bytes
           shl         bx,cl   <------- 此处也有隐患,万一当 buffer size 超过 64K 时,将发生溢出。BX 的寻址范围最大只有 64K。改进方法:不要进行乘以 64 的操作,而把 2000h 除以 64,这样再进行比较,就安全了。
           cmp       bx,2000h
           jg            int3 这里似乎应该是 ja (无符号比较大小)才对 。


回复

使用道具 举报

79#
 楼主| 发表于 2015-1-3 11:11:37 | 只看该作者
反复考虑,觉得不容易解决与原有的功能相冲突的问题。

有两个方案,大家讨论一下,哪个更好?

方案一,grub.exe 不带参数表示退出 dos 返回到 grub 环境。而原有的 grub 不带参数功能,
需要用参数 --config-file=  (这里配置文件为空) 来实现。

方案二,grub.exe 不带参数表示原有的功能,新增一个参数 --resume 表示
退出 dos 返回到 grub 环境。


第一个方案,给老用户带来一定的不方便,需要老用户修改旧的 bat 批处理,
把不带参数的 grub.exe 添加一个形式参数 --config-file= (这里配置文件为空),
表示采用默认的配置文件。但命令行输入很方便。

第二个方案,保持了与旧版的兼容性,但终端命令行需要敲入 grub --resume 才能执行
退回到 grub 的任务,这给命令行的输入,带来一定的不方便。

我个人倾向于采用第一个方案,虽然给老用户带来了不兼容性,但修改起来也不困难。
我们可以把它写入日志,告诉用户出现错误后应该怎么处理,即,添加
空的 --config-file=  (这里配置文件为空) 形式参数。

每个人都可以跟帖发表自己的意见。如果chenall 发表了意见,那么我将按照 chenall 的
意见进行编程。

点评

新增一个参数 --return 表示 退出 dos 返回到 grub 环境 比较好。 更贴切。 用起来感觉更顺。  详情 回复 发表于 2015-1-11 11:33
回复

使用道具 举报

80#
发表于 2015-1-3 11:26:59 | 只看该作者
用grub.exe 会混淆用户的惯性思维,会以为是进入了新的环境;觉得用什么命令从grub进入dos,就用什么命令返回去,新增一个小小的程序也许更好。
回复

使用道具 举报

81#
 楼主| 发表于 2015-1-3 14:11:34 | 只看该作者

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 的情况。

回复

使用道具 举报

82#
 楼主| 发表于 2015-1-3 16:26:07 | 只看该作者
本帖最后由 不点 于 2015-1-3 16:43 编辑

世上没有最好,也没有最差,所有的东西,都是权衡。而且,不同的权衡,就有不同的结果。主要看侧重于哪方面。

主要的负责人,他的权衡是要最终采纳的。他可以参考别人提供的意见,然后做出自己的决定。

有些东西,我自己已经有了基本明确的权衡结果。比如,前面 pcs2006 提供的恢复 DOS 显示画面的代码,我就再三考虑,觉得还是不采纳比较妥当,即,保持清屏,这一点是可以写入文档的。我有以下几方面的考虑。第一,如果恢复画面,万一在有些情况下恢复得不好,用户又该抱怨了。第二,多增加一行代码,就多增加了一个兼容性的隐患,给硬件攻击者留下更多一点的攻击机会。比如说调用那些不常用的 BIOS(例如 int 11h),这可以让硬件攻击者抓住机会制造陷阱导致 grub4dos 死机。第三,代码太长,增加了太多的代码空间,挤占了 grub.exe 功能性的代码空间,让 grub4dos 以后增加功能时遇到麻烦。所以,尽可能地减少代码,应该是我们的一个基本原则。第四,恢复画面只恢复了文本模式或类似文本模式的画面,不能够恢复英文版图形模式 dos 的画面。既然有不能恢复的情况,那就干脆不恢复好了。基于以上这几方面的考虑,我就能够决定,不再执行恢复画面的动作了。

而关于 grub.exe 命令参数的改动,我还真有些拿不定主意。刚刚上载的是按照第一方案处理的结果。如果 chenall 觉得第一方案不好,需要用第二方案,那我再按照第二方案进行修改。


再说说以上诸位提到的 “用一个小工具执行退出 DOS 的功能”。我有以下的想法,供 chenall 以及各位参考。

这个工具可以很小,只完成返回 grub4dos 的任务便可。但我觉得,这个小工具可以适当增加一点功能,让它不仅仅是能够切换到 grub4dos,而是,比如说,能够加载 grldr 或 grub.exe 里面的 grub 内核程序体,完成 grub.exe 现有的功能。初步的版本可能仅仅具有切换到 grub 环境的功能,其他功能是随着用户需要,后来增加上去的。

我想,假如这个工具叫做 grub.com,那么,我们今天对于 grub.exe 命令行的设计,就影响到未来的这个 grub.com 的设计。如果按照第一方案,这两者的功能可以完全一致起来,丝毫也不差。运行在 DOS 下的 grub.exe 支持什么参数,那么 grub.com 也支持一样的参数,不多也不少。譬如说,无参数的 grub.exe 表示切换到 grub 环境,同样地,无参数的 grub.com 也表示切换到 grub 环境。

但如果 grub.exe 采用第二方案,那么两者就无法统一了。这是因为,grub.com 在无参数时本来就是执行切换到 grub 环境这一动作的,而无参数的 grub.exe 却不是的,所以无法统一。

因此我觉得,还是第一方案较好一点,其逻辑本身更简练。第一方案的缺点是需要付出一定的不兼容性的代价。第二方案则需要增加一个 --resume 参数,我感觉还是稍微有点别扭,虽然也可接受。一般情况下,我们尽量不制造不兼容性。但在特殊的情况下,也可以有不兼容性的。我们曾经有过不兼容性,比如,map 参数 --e820cycles 就是不兼容参数。再比如,为了让中断向量恢复得全面一点,我们不再支持那些严重破坏中断向量表的驱动程序和 TSR。最老的 grub.exe 版本是支持所有的 DOS 的,也支持所有的驱动程序和 TSR,因为我们从来不恢复中断向量表。后来我们要探测恢复中断向量表了,所以,不再支持那些有毛病的驱动程序和 TSR 了。因此,可以认为我们引入了不兼容。还有,采用 VBE 图形模式以及新的字库和 font 命令,取消 chinese 版本,用国际版替代,这也是制造不兼容。以上举例,是为了说明,兼容性也并非在任何情况下都要保持的。我们尽量保持兼容性,但也不应该束缚手脚,而把兼容性当作清规戒律。

以上我已经全面罗列了我的想法,好了,这就交给 chenall 你们去处理了。当需要按照第二方案或者其他某个第三方案执行时,请在此告知,我会修改程序的。

回复

使用道具 举报

83#
发表于 2015-1-4 09:46:33 | 只看该作者
是否当兼容性或更改较大的时候,把版本号改动一下呢?
这样便于用户区别,而不是去阅读每个发行版的说明文档。
另外每个阶段性的最终版本,建议另外加个记号或者去掉c这个字符也可以。
便于用户区别,从而采用问题最少,兼容性最好的版本。
回复

使用道具 举报

84#
发表于 2015-1-11 11:33:39 | 只看该作者
不点 发表于 2015-1-3 11:11
反复考虑,觉得不容易解决与原有的功能相冲突的问题。

有两个方案,大家讨论一下,哪个更好?

新增一个参数 --return 表示 退出 dos 返回到 grub 环境
比较好。 更贴切。 用起来感觉更顺。
回复

使用道具 举报

85#
发表于 2015-1-11 11:54:55 | 只看该作者
本帖最后由 mdyblog 于 2015-1-11 11:56 编辑
pcs2006 发表于 2014-12-31 18:22
这似乎和ax,1c00h那缓冲区没有关系,因为那个只是表格而己,不是真正的视讯资料。
bios千差万别,有些机 ...


>>bios千差万别,有些机子ok但有些不成,为什么视讯资料回存了,但偏偏没有显示,随便按一下Enter,
屏幕上卷,原来的画面出来了,其实视讯资料都在,只是中文系统不知道
,我在这里用一个笨办法,
利用ah=0601h,int10h,屏幕上卷一行,告诉中文系统我回来了...

----------
是这样的,
1) 这些中文系统,本身有画面缓冲机制,在自己的程序内存—— “2级软显存” 中。
你按<Endter>, 他会根据“2级软显存”,重汇屏幕——执行滚屏驱动函数,
“2级软显存”,不受BIOS控制的。同时也不用OS来保护了。
所以上面显示不是INT10/1C恢复的,而是中文系统的TSR重绘的结果。

2)
中文系统会检测使系统,采用什么样的底层显示驱动。

下面的说的VirtualBox中,可能选择了FrameBuffer技术, 那么是图形模式——会占用很大的。
64K一般来说不够的。

1024*768*16/8=1.5M
这么大,只有保存到扩展内存了。
INT10/1C估计无能为力了。
你可以找到FrameBuffer 的地址,和格式,根据格式计算大小, 在保护模式中直接拷贝内存来恢复/保存。
注意实际的内存必上面计算1.5M的方法要大,因为规范中,内存不是连续完全 使用的,line间有些会丢弃不用的少量内存。

VRAM= line字节数 * 行数


回复

使用道具 举报

86#
发表于 2015-1-19 19:53:03 | 只看该作者
{:soso_e100:}不点大师:辛苦了!新人路过帮顶!{:soso_e133:}当然是用FreeDOS.这个是开源的,没有版权纠纷.
回复

使用道具 举报

87#
发表于 2017-7-3 16:05:31 | 只看该作者
不点老大,你好,我在用坛子里的两份个run启动ISO,也直接以grub4dos菜单启动iso,现在有个问题反应下,就是关于直接启动iso的问题,一部分pe系统没问题,现在通过他们的run取得ISO表或者直接grub启动,beini系列,xiaopang系列,veket系列,还有bt系列,全部有问题,beini是无法加载到扩展程序,直接以系统本身启动,xiaopang直接卡在启动界面,veket是无法找到qrqy888.sfs,bt也都是卡在启动界面,这些都是ISO文件,都无法完整启动,不知道是不是grub的最终原因? 用的是grub4dos 0.4.6.a,
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 22:24

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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