xianglang 发表于 2023-9-24 12:46:24

graphicsmode会清除掉已加载的字体、背景图

早在三两年前,graphicsmode 是不会清除掉已加载的字体、背景图的,但是昨日我下载了2023-9-22的 G4D 后试了下以前写的很少用到的调用另一个菜单文件的菜单项时,发现了这个问题——我追溯到2022-9-15版,还是存在这样的问题。如果主菜单不使用 graphicsmode -1 600:800 480:600 24:32 指定显示模式的话,G4D加载菜单后会只显示一个莫明其妙的符号后不断滚屏。而要解决 graphicsmode 会清除掉已加载的字体、背景图的问题,我现在是重新加载;另外似乎也可以检测是否使用过 graphicsmode 而决定是否使用,不过我不知道如何检测它。

主菜单 MENU.LST 头部相关内容如下:

default 3
timeout 15
graphicsmode -1 600:800 480:600 24:32
## 下面前一句旧判断是否加载了字库,后一句2023.9.22版本修改后
##font --font-high=24 --simp= /24.hex 内置字库非16*16字体,头部需声明:DotSize=24,simp
#read 0x1800820 || font /GRUB/U51.LZMA
calc *0x8312&4 > nul || font /GRUB/U51.LZMA
## 下面前两句判断是否加载了图形,后一句2023.9.22版本修改后
#calc 46<<2+*0x8304
#read %@retval% || splashimage /GRUB/XL_MOON_800.LZMA
calc *0x8312&2 > nul || splashimage /GRUB/XL_MOON_800.LZMA
.
.
.
titleTest and Other (Menu) \n 备份、检测、维护及其他菜单
configfile /GRUB/MENU-TEST.LST

子菜单 MENU-TEST.LST 头部相关内容如下:

write 0x8274 0x3E01   ##汗,这语句什么用,我现在竟然忘记了。
titleReuturn MENU.LST \n 返回 MENU.LST 菜单
##configfile /GRUB/MENU.LST || find --set-root /GRUB/MENU.LST && configfile /GRUB/MENU.LST
write   0x307ff8   1   &&   configfile


a66 发表于 2023-9-24 17:21:30

高大上

yc2428 发表于 2023-9-24 20:26:21

学习一下

2011yaya2007777 发表于 2023-9-26 17:21:42

早在三两年前,graphicsmode 是不会清除掉已加载的字体、背景图的
已经修正。看看还有没有问题。

xianglang 发表于 2023-9-27 10:44:21

2011yaya2007777 发表于 2023-9-26 17:21
已经修正。看看还有没有问题。

这个版本,已经解决了清除背景图的问题,但是仍然会清除已经加载的字库,导致文字显示花屏(进命令行加载字库返回能正常显示)。

2011yaya2007777 发表于 2023-9-27 11:01:20

本帖最后由 2011yaya2007777 于 2023-9-27 12:33 编辑

2011yaya2007777 发表于 2023-9-26 17:21
已经修正。看看还有没有问题。

这个版本,已经解决了清除背景图的问题,但是仍然会清除已经加载的字库,导致文字显示花屏(进命令行加载字库返回能正常显示)


是使用1#的菜单吗?是g4d还是g4e?我反复测试没有问题呀!是第一次加载主菜单就没有中文,还是从子菜单返回中文消失?

xianglang 发表于 2023-9-28 14:03:52

2011yaya2007777 发表于 2023-9-27 11:01
是使用1#的菜单吗?是g4d还是g4e?我反复测试没有问题呀!是第一次加载主菜单就没有中文,还是从子菜 ...

是1#的菜单。G4D和G4E都是一样,就是在主菜单选择了子菜单,再由子菜单调用主菜单后,字库就被清除了,菜单显示变成了乱码争块。

2011yaya2007777 发表于 2023-9-28 15:03:51

是1#的菜单

主菜单:
default 3
timeout 15

graphicsmode -1 600:800 480:600 24:32
calc *0x8312&4 > nul || font /GRUB/U51.LZMA
calc *0x8312&2 > nul || splashimage /GRUB/XL_MOON_800.LZMA

titleTest and Other (Menu) \n 备份、检测、维护及其他菜单
configfile /GRUB/MENU-TEST.LST



子菜单::

write 0x8274 0x3E01   ##汗,这语句什么用,我现在竟然忘记了。01:显示自动菜单;3e:使用‘>' 分隔符

titleReuturn MENU.LST \n 返回 MENU.LST 菜单
write   0x307ff8   1   &&   configfile

我使用以上菜单没有问题呀。
试一试子菜单:
titleReuturn MENU.LST \n 返回 MENU.LST 菜单
find --set-root /GRUB/MENU.LST
configfile /GRUB/MENU.LST

xianglang 发表于 2023-9-29 13:55:52

刚才在至强5110的台式机上试过了,还是不行。难道是我的电脑都太老、集成显卡的原因?或者是加载SLIC造成的?我将完整的MENU.LST相关的文件,都打包了,看看你那有没有问题?

2011yaya2007777 发表于 2023-9-30 11:54:05

好隐秘的问题。
是由于主菜单的注释里面含有‘DotSize=’字符串,引起了误会。已经修正。

xianglang 发表于 2023-10-1 16:29:51

2011yaya2007777 发表于 2023-9-30 11:54
好隐秘的问题。
是由于主菜单的注释里面含有‘DotSize=’字符串,引起了误会。已经修正。

我的菜单中,‘DotSize=语句已经被注释掉了啊,居然也会影响?实在是够隐蔽的。不过这次修改的版本,已经解决问题了。

只是在用 QEMU 测试时,子菜单使用 write   0x307ff8   1   &&   configfile 返回主菜单时,第一次成功。但是只要执行了一次 write   0x307ff8   1   &&   configfile 或者 configfile /GRUB/MENU.LST 后,再执行 write   0x307ff8   1   &&   configfile会出错(如图),可能是 QEMU 的问题,完全不用理会。


2011yaya2007777 发表于 2023-10-1 16:45:00

使用常规方法为好。configfile /GRUB/MENU.LST
页: [1]
查看完整版本: graphicsmode会清除掉已加载的字体、背景图