无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: sgw888

[发布] 基于GRUB4DOS的BOOTSECT

[复制链接]
 楼主| 发表于 2011-5-27 17:40:06 | 显示全部楼层
回 blithewind :

目前的功能够用了吧? 可以更新NT52 NT60 DOS的,你还想要什么的呢?
目前也就是XP,WIN7 DOS了吧?
回复

使用道具 举报

发表于 2011-5-28 13:21:16 | 显示全部楼层
原帖由 sgw888 于 2011-5-27 17:40 发表 回 blithewind :目前的功能够用了吧? 可以更新NT52 NT60 DOS的,你还想要什么的呢? 目前也就是XP,WIN7 DOS了吧?
只是需要对mbr/dbr的备份与恢复.支持.mbr及.bin文件就可以了。存放位置可置可bootsect同级目录中.比如我要恢复wee.bmr到mbr或将我的xorldr的MBR备份到默认目录,或者进行相反的操作,在进行某些启动测试时,只要启动到grub命令行就可方便地操作,而不必进PE或其它工具进行,还是很有意义的.
回复

使用道具 举报

发表于 2011-5-28 13:51:51 | 显示全部楼层
菜单简单写了一下,你自己要补充。
menu.bat任务完成后,你要做什么事情,需要自己完善。如menu.bat任务完成,想返回主菜单,需要在合适的地方加上configfile (fd9)/MAIN.LST

sw888.rar

749 Bytes, 下载次数: 34, 下载积分: 无忧币 -2

回复

使用道具 举报

 楼主| 发表于 2011-6-3 17:16:26 | 显示全部楼层
感谢 zhaohj 的帮助。zhaohj 的动态菜单真的很棒。
现在 BOOTSECT 菜单版已完工,请大家帮忙测试。

BOOTSECT 是一个经过封装的单文件。在批处理执行开始,会把所有的文件载入到内存,并虚拟软驱 (fd9)  
主要文件介绍:

main.lst  主菜单
choose.lst 引导代码选择菜单
MENU.BAT 硬盘选择  动态菜单  生成批处理
maincall  调用批处理
bootsec 程序执行主体,核心操作批处理  由原来的命令行版修改而来。 简单修改。

main.lst 内容:
#主菜单框架
debug off
color white/blue blue/yellow light-red/blue 10
default 5
timeout 50
#0
title       GRUB4DOS BOOTSECT
clear
#1
title
clear
#2
title   Update MBR [Master Boot Record]
set czlx=mbr
configfile (fd9)/CHOOSE.LST

#3
title   Update DBR [Partition Boot Record]
set czlx=dbr
configfile (fd9)/CHOOSE.LST

#4
title   Clear Hard Disk 1-62 sectors
set czlx=clear
(fd9)/MENU.BAT
boot

#5
title   Return BOOTSECT Main Menu
configfile (fd9)/MAIN.LST

#6
title   Return GRUB4DOS Boot Menu
set *
map --unmap=9
map --rehook
configfile (md)4+8

#7
title   GRUB4DOS Commandline
commandline

#8
title   Reboot
reboot

#9
title   Halt
halt


choose.lst 内容:
debug off
color white/blue blue/yellow light-red/blue 10
default 5
timeout 50
#0
title       Choose Boot Code Type
clear
#1
title
clear
#2
title          nt5x
set yddm=/nt52
(fd9)/MENU.BAT
boot
#3
title          nt60
set yddm=/nt60
(fd9)/MENU.BAT
boot
#4
title          dos
set yddm=/dos
(fd9)/MENU.BAT
boot
#5
title   Return BOOTSECT Main Menu
configfile (fd9)/MAIN.LST



maincall 内容:
!BAT by sgw888
#主调用菜单
goto %czlx%

:clear
(fd9)/BOOTSEC clear %hddisk%
goto :end

:mbr
(fd9)/BOOTSEC %yddm% /mbr %hddisk%
goto :end

:dbr
(fd9)/BOOTSEC %yddm% %acpart%

:end
set nn=
set ac=
set gt=
set hdn=
set hdp=
set hddisk=
set acpart=
set czlx=
set yddm=
configfile (fd9)/main.lst


MENU.BAT 内容:
这个文件才是关键!!! 在 zhaohj 的基础上做了少许改动。
!BAT
# changelog 2011.05.25
# 考虑到U盘usb-hdd模式启动,(hd0)会被U盘占用,这在处理时要特别小心。
debug off
set ac=
set hdp=
set /a hdn=*0x475&0xff
calc %hdn% || clear && pause --wait=10 NO Harddisk && configfile (fd9)/main.lst
set /a nn=0
set /a gt=%hdn%+2
map --rd-base=0x40000 && map --rd-size=0x1000
echo debug off > (rd)+1
echo color white/blue blue/yellow light-red/blue 10 >> (rd)+1
echo default 2 >> (rd)+1
#0
echo title ==== please select Harddisk   %@date% ==== >> (rd)+1
echo clear >> (rd)+1
#1
echo title >> (rd)+1
echo clear >> (rd)+1
#2
:hdd
echo title          select hd%nn% >> (rd)+1
echo clear >> (rd)+1
echo echo hd%nn% harddisk Partition information: >> (rd)+1
echo echo >> (rd)+1
echo -e checkrange 0x80 read 0x82a0 \&\& echo If be USB-HDD Boot,your first harddisk may be U-Pan \&\& >> (rd)+1
echo geometry (hd%nn%) >> (rd)+1
echo echo >> (rd)+1
echo -e geometry (hd%nn%) \x3e (md)0x300+1 >> (rd)+1
echo -e set hddisk=(hd%nn%) >> (rd)+1
echo -e cat --locate=active (md)0x300+1 \| set ac= >> (rd)+1
echo -e if not exist ac \&\& if /i \x25czlx\x25==dbr \&\& pause --wait=10 NO Active Partition,DBR can not be updated! \&\& goto %gt% >> (rd)+1
echo -e if not exist ac \&\& echo NO Active Partition! >> (rd)+1
echo -e if not exist ac \&\& set /p sfzx=Do you want to continue?(y/n) >> (rd)+1
echo -e if not exist ac \&\& if /i #\x25sfzx\x25==#y \&\& (fd9)/MAINCALL >> (rd)+1
echo -e if not exist ac \&\& if /i not #\x25sfzx\x25==#y \&\& goto %gt% >> (rd)+1
echo -e set ac=0x\x25ac\x25 >> (rd)+1
echo -e set /a ac=\x25ac\x25-3 >> (rd)+1
echo -e cat --skip=\x25ac\x25 --length=1 (md)0x300+1 \| set hdp= >> (rd)+1
echo -e echo List Active Partition (hd%nn%,\x25hdp\x25) files: >> (rd)+1
echo echo >> (rd)+1
echo -e ls (hd%nn%,\x25hdp\x25)/ \|\| echo (hd\x25nn\x25,\x25hdp\x25) partition read error, unable to list files. >> (rd)+1
echo echo >> (rd)+1
echo -e set hddisk=(hd%nn%) >> (rd)+1
echo -e set acpart=(hd%nn%,\x25hdp\x25) >> (rd)+1
echo set /p ac=Whether correct for selected harddisk or Partition (y/n)? >> (rd)+1
echo -e if /i not \x25ac\x25==y goto %gt% >> (rd)+1
echo (fd9)/MAINCALL >> (rd)+1
echo kernel  >> (rd)+1
set /a nn=%nn%+1
if not %nn%==%hdn% && goto :hdd

#变量gt 指向本菜单
#返回bootsect 主菜单
echo title    Return BOOTSECT Main Menu >> (rd)+1
echo clear >> (rd)+1
echo configfile (fd9)/main.lst >> (rd)+1
configfile (rd)+1
exit



以上是菜单版主要文件的源码。
回复

使用道具 举报

发表于 2011-6-3 17:29:11 | 显示全部楼层
支持一下,请大家先虚拟机测试!

大概看了一下没问题!
回复

使用道具 举报

 楼主| 发表于 2011-6-3 19:34:20 | 显示全部楼层
echo -e checkrange 0x80 read 0x82a0 \&\& echo If be USB-HDD Boot,your first harddisk may be U-Pan \&\& >> (rd)+1

上面这一句似乎有问题.

应该把最后面的  \&\& 去掉吧?? 好像没什么作用啊. 实际上不去掉也不会有什么问题.
回复

使用道具 举报

发表于 2011-6-4 12:04:45 | 显示全部楼层
原来考虑想在这里停留一下,没有写完,应该是
\&\& pause --wait=10 这样的语句。
回复

使用道具 举报

 楼主| 发表于 2011-6-14 16:36:59 | 显示全部楼层
2011-6-14 更新日志: 菜单版BUG修正. 上一版本中在选择硬盘界面,如果取消当前的选择,会直接返回主菜单,而不是返回硬盘选择界面,现已修正,在核心执行部分,提示是否继续执行操作时,选择否仍会继续执行,现已修正。 上传两个附件。 附件一为 菜单版修正。 附件二为演示ISO。方便菜鸟测试。其中有UNIFONT 跟中文字库,分别有中英文显示的BOOTSECT,另外还有磁头数检查与修正程序。对于喜欢中文显示的可以选择切换到中文菜单,提示为中文显示。
回复

使用道具 举报

发表于 2011-6-14 16:58:06 | 显示全部楼层
收下了,下次清理mbr方便了。
回复

使用道具 举报

发表于 2011-10-20 14:13:09 | 显示全部楼层

回复 #1 sgw888 的帖子

能不能增加激活某分区为活动分区?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 00:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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