#1
graphicsmode -1 640:800 480:600 24:32
#2
calc *0x82b8 && calc *0x82b9&0xff
#3
uuid (hd0,0)
#4echo -n | echo -n | echo -n | echo -n
find --set-root --devices=h /ntldr || find --set-root --devices=h /bootmgr
这个图形模式的命令没有公布具体的参数,红色分辨率部分还有人这样写:100:1000 100:1000 ,不知道是怎么个意思。
原帖由 zhs509 于 2012-1-7 12:39 发表
哈哈 好像我的维护盘就是那么写的。。。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=180142&page=209#pid2362316
抱歉,你这句还有其他疏忽:
graphicsmode -1 800:600 640:480 32
应该这样:
graphicsmode -1 640:800 480:600 24:32
640:800 是控制水平方向的像点个数。不可以颠倒过来,变成 800:640。这是指定范围,小的在前,大的在后。
480:600 控制垂直方向的像点个数,同样不可以颠倒顺序,应该前小后大,表示区间。
24:32 也是有必要的,以免把 4 位的模式 0x102 (它等同于以前的 VGA 0x6A 模式)也包括进来了。
应该首先采用这条命令决定分辨率,分辨率决定之后,再加载图片。这样就不会出错了。黑屏实际上是根本没有进入 VBE 模式的结果,当然不会显示汉字了。
graphicsmode -1 后面不加别的控制参数,竟然会造成黑屏,这可是出乎意料的。如果出现那样的情况,可以认为属于显卡 BIOS 的问题(即显卡 VBE 的问题),无法解决,只有添加别的控制参数,来达到较小的分辨率,使显示器不至于 “ 因为承受不了太大的分辨率 ” 而 “ 罢工 ”。
-------------------
补充研究:
进一步分析:
像这样控制分辨率:
graphicsmode -1 640:800 480:600 24:32
是不是太严格了?假如有些手机之类的设备,分辨率不高,这样控制就太狭窄了。可以考虑这样:
graphicsmode -1 100:1000 100:1000 24:32
这样范围更灵活一些,同时也避免出现很大的分辨率(例如 1024 x 768 )。
[quote] graphicsmode 命令兼容 VGA 的 6A 模式,比如graphicsmode -1 命令会在某台机器上探测到三个合法的模式:
128:1B,640x400x24,Direct Color
112:1B,640x480x24,Direct Color
102:1B,800x600x4,Planar
及某些无效模式:
115:1A,800x600x24,Direct Color
这里仅列一个1A,还有若干1B的模式,均非4/24/32位色,亦不为新版本支持。
102:1B,800x600x4,Planr
地址 长度 说明
========= ============== ==============================================
0000:8208 4字节(即双字) 启动分区号 install_partition (the boot partition)
0000:8278 4字节(即双字) GRUB4DOS编译的日期十进制数.
0000:8280 4字节(即双字) 启动驱动器号(boot_drive)
0000:8284 4字节(即双字) pxe 客户端 ip (即本地ip)
0000:8288 4字节(即双字) pxe 服务器 ip
0000:828C 4字节(即双字) pxe 网关 ip
0000:8290 8字节(即四字) 最后访问的文件的大小(是执行"cat --length=0"后的文件大小)
0000:8298 4字节(即双字) 可用的扩展内存大小(以 KB 为单位)
0000:829C 4字节(即双字) 当前根分区号(current root partition)
0000:82A0 4字节(即双字) 当前根所在的驱动器(current root drive)
0000:82A4 4字节(即双字) 解压标志 (gzip非自动解压),非0时不自动解压
0000:82A8 8字节(即四字) 最后访问的分区的起始扇区号
0000:82B0 8字节(即四字) 最后访问的分区的扇区总数
磁盘分区类型标志
00 空,DOS或Windows不允许使用,视为非法 5C Priam Edisk
01 FAT12 61 Speed Stor
02 XENIX root 63 GNU HURD or Sys
03 XENIX usr 64 Novell Netware
06 FAT16 04 表示分区小于32M 65 Novell Netware
07 HPFS / NTFS 70 Disk Secure Mult
08 AIX 75 PC/IX
09 AIX bootable 80 Old Minix
0A OS/2 Boot Manage 81 Minix/Old Linux
0B Win95 FAT32 82 Linux swap
0C Win95 FAT32 83 Linux
0E Win95 FAT16 84 0s/2 hidden C:
0F Win95 Extended(大于 8GB) 85 Linux extended
10 OPUS 86 NTFS volume set
11 Hidden FAT12 87 NTFS volume set
12 Compaq diagmost 93 Amoeba
16 HiddenFAT16 94 Amoeba BBT
14 Hidden FAT16<32MB A0 IBM Thinkpad hidden
17 Hidden HPFS/NTFS A5 BSD/386
18 AST Windows swap A6 Open BSD
1B Hidden FAT32 A7 NextSTEP
1C Hidden FAT32 partition B7 BSDI fs
(using LBA-mode INT 13 extensions) B8 BSDI swap
1E Hidden LBA VFAT partition BE Solaris boot partition
24 NEC DOS C0 DR-DOS/Novell DOS secured partition
3C Partition Magic C1 DRDOS/sec
40 Venix 80286 C4 DRDOS/sec
41 PPC Perp Boot C6 DRDOS/sec
42 NTFS动态分区 C7 Syrinx
4D QNX4.x DB CP/M/CTOS
4E QNX4.x 2nd part E1 DOS access
4F QNX4.x 3rd part E3 DOS r/0
50 OnTrack DM E4 Speedstor
51 OnTrack DM6 Aux EB BeoS fs
52 CP/M F1 SpeedStor
53 OnTrack DM6 Aux F2 DOS 3.3+secondary partition
54 OnTrack DM6 F4 SpeedStor
55 EZ-Drive FE LAN step
56 Golden Bow FF BBT
原帖由 mygamexxx 于 2011-9-24 09:58 发表
请教,关于G4D加载一个菜单文件后,如何在菜单中得到菜单文件的路径。
比如:通过 configfile (hd0,1)/back/menu.lst加载菜单后,如何在菜单中获取菜单文件menu.lst所在的分区(hd0,1)和目录/back/从而设置为变量。
批处理中可以用%~dp0获取,在菜单文件中应该无法使用吧。 ...
原帖由 chenall 于 2011-9-24 09:58 发表
这个菜单文件的位置一般是固定的。
使用以下命令就可以得到当前加载的菜单。
具体的可以自己看源码。ASM.S里面就可以找到答案。
call Fn.0 0 0x8217 | set menu=
得到的menu变量就是当前使用的菜单文件(上一个configfile命令的参数)
...
原帖由 sratlf 于 2011-11-7 17:56 发表
@tulongwa
汗 明白怎么回事了 grldr内置菜单没执行过configfile /file命令的话 通过call Fn.0 0 0x8217得到的就是 /menu.lst 这一结果 我一直用这个结果作为第二备用菜单文件使用的
第一备用菜单文件是 menu 指定的 第二备用是这个 第三备用是(md)4+8 这下好处理了
echo
用法: echo [-e] [-n] STRING
描述:
(by zhaohj@wuyou)
输出指定内容。
用法:echo [-e] [-n] STRING
-e:允许转义
-n:不换行
不带参数的echo,默认不转义、自动输出换行符。
下面是一些转义符:
\NNN (1到3位)八进制值 NNN 表示的字符
\\ 反斜杠
\a 警报 (声音)
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\xHH (1到2位)十六进制值为 HH 的字节
增强功能:颜色设置,只支持console模式(文本模式).
使用方法:
echo -P:XXYY $[ABCD]MESSAGE
-P为大写;XX为横坐标,YY为纵坐标。
用$[ABCD]来指定后面显示的字符使用的颜色.
A 值为1时闪烁 (blinking foreground color).
B 值为1时高亮(light)
C [0-7]背景色(background color)
D [0-7]前景色-字体颜色(foreground color)
例子:
1:输出
symmpi
PCI\VEN_1000&DEV_0050
命令:
echo symmpi
echo PCI\VEN_1000&DEV_0050
或
echo -e symmpi\r\nPCI\\VEN_1000&DEV_0050
#上面\r\n输出回车换行,\\输出\
2:输出
PCI\VEN_1000&DEV_0050 symmpi
#注意:输出前面有2个空格开头的内容
命令:
echo -e \x20\x20PCI\\VEN_1000&DEV_0050 symmpi
#上面\x20转义后为一个空格
!BAT
debug 0
checkrange 20111009:-1 read 0x8278 || clear && echo Error: Not supported $[0003]grub4dos version! && exit
#0x8278为grub4dos版本在内存中的地址。
#$[0003] 未解。
calc *0x8280&0xff/2 || debug 1 && command | call :zip_fix *0x8280&0xff= && exit
#由后面的zip_fix子程序可判断 *0x8280&0xff取(bd)设备号。
#计算*0x8280 的值是否为0x80/0x23(fb启动)/0x21(PXE)/0xXX(光驱,更大于硬盘设备号),是则继续,不是就调用zip_fix。
#启动时如果为zip,则为(fd0)或者(fd0,0),此时设备号为0。
calc *0x82b8 && calc *0x82b9&0xff/2 || debug 1 && command | call :zip_fix *0x82b9&0xff=
#如果为UD启动,则判断是否存在(fd0)、(fd0,0)
#0x82b8 、0x82b9与UD有关,具体来讲干什么用的?
#*0x82b9&0xff取(ud)还是可见分区的设备号?
debug 0
exit
:zip_fix
debug 0
setlocal
set /a zip.mod=%1
call :movedisk + || exit
#调用movedisk子程序,才HD号依次后移。
map (%zip.mod%) (hd0) > nul || exit
#加上> nul 屏蔽写屏。
map --hook > nul
map --floppies=0
#既然将FD给形成HD了,最后要去掉FD。
endlocal && call :cpath_fix %zip.mod% %~5
#调用cpath_fix修正路径
clear
exit
:cpath_fix
if "%~d2"=="(fd%1)" command --set-path=(hd0)%~p2 || if "%~d2"=="(fd%1,0)" command --set-path=(hd0,0)%~p2
calc *0x8280-%1 || calc *0x8280=0x80 > nul
#calc *0x8280-%1一定为0,这句可以砍掉吧?
calc *0x82b8 && calc *0x82b9=*0x82b9&0xffffff00|0x80 > nul
#这个红色部分不明白,另外请解释下那个|
calc *0x82a0-%1 || calc *0x82a0=0x80 > nul
exit
:movedisk
set /a hd0=*0x475&0xff+0x7f
if "%hd0%"=="127" exit
if "%1"=="-" || goto :move
map (hd0) (hd-1) > nul
:move
set /a hd1=%hd0%%%1 1
if "%hd1%"=="127" exit
map (%hd0%) (%hd1%) > nul
if "%hd0%"=="128" exit
set /a hd0=%hd0%-1
goto :move
color 0x3f 0x3c 0x3 0x3
#分别设置主菜单、选中菜单项、帮助、版本信息的字体颜色;按背景/前景的16进制数来设置。其中0x3其实为0x03,可以简写为 3
#color适用于VBE及文本模式,背景/前景色可使用64位表示法,如#3333ff为一种蓝色,#ff99ff为一种粉色,则0x113333ff11ff99ff表示背景为蓝色/前景为粉色的一种配置。
calc 46<<2+*0x8304
read %@retval% || splashimage /BOOT/GRUB/BACK1.BMP > nul
#如已加载背景,不再重复加
color border 0
#使边框的颜色为0x0(黑色)
font && font ()/BOOT/GRUB/MENU.HEX
#如有字体先卸载再加载/BOOT/GRUB/MENU.HEX为字体
read 0x1800820 || font ()/BOOT/GRUB/MENU.HEX
#如已加载字体,不再重复加载
原帖由 2011phzhc 于 2012-1-7 12:31 发表
#在所有磁盘类设备的根目录下寻找 ntldr 文件,并将找到的设备设置为根
find --set-root --devices=h /ntldr
find --devices=uh --set-root /0PE/0PE.ISO && set PEISO=/0PE/0PE.ISO && goto 1 ! echo -n
if exist (0xff)+1 rootnoverify (0xff)
find --devices=cfp --set-root /0PE/0PENB.LZMA && goto 2 ! echo -n
原帖由 2011seeu 于 2012-1-18 22:19 发表
:cpath_fix
if "%~d2"=="(fd%1)" command --set-path=(hd0)%~p2 || if "%~d2"=="(fd%1,0)" command --set-path=(hd0,0)%~p2
calc *0x8280-%1 || calc *0x8280=0x80 > nul
#calc *0x8280-%1一定为0,这句可以砍掉吧?
calc *0x82b8 && calc *0x82b9=*0x82b9&0xffffff00|0x80 > nul
#这个红色部分不明白,另外请解释下那个|
graphicsmode -1 参数1 参数2 参数3
参数1 为指定分辨率宽度,可以使用具体数值,也可以使用一个范围值。
参数2 为指定分辨率高度,可以使用具体数值,也可以使用一个范围值。
参数3 为指定位色,可以是具体数值,也可以使用一个范围值。
欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) | Powered by Discuz! X3.3 |