|
我是一个G4D代码初学者,在几位前辈的指导下,终于完成了这个玩具.在此,感谢527104427,P大,sratlf大,zxw和CHENALL
1.集成各种SRS驱动方法,如DPMS模式驱动,SRSFN模式驱动,F6IMG模式驱动,或是自制OEM原版驱动。
2.用户可以选择使用WINXP还是WIN2K3的自动应答文件实现自动安装
3.用户可以选择FIRADISK,invblk或是VBOOT,如果是FIRADISK则支持一步安装
4.支持SISO,Z大版RUN,夜大版多种方式一步安装NT5内核操作系统,同时解决了Z大版RUN不能一步完成的问题(如果用户自定的是一个ISO文件如/MYISO/MYISO.ISO)
5.支持Z大版或夜大版自动菜单和自动列表选择安装操作系统(如果用户指定的是一个目录如/MYISO/)
6.自动转换ZIP格式的U盘为HDD格式U盘
7.支持自动交换HD0和HD1,解决了安装系统后无法从硬盘启动的问题.
8.支持加载SRS驱动和自动应答文件SIF后从物理光驱安装系统或返回菜单以便在其他菜单中使用SRS驱动和SIF自动应答文件.
9.支持全自动安装ISO,要求是用户准备了MYISO/MYISO.ISO文件
遗憾:遗憾的是如果用户输入的是目录的话,然后从自动菜单或自动列表中选择的ISO无法实现一步安装,原因在于我无法获取到SISO模块/Z大的RUN/夜大的RUN在选择列表或菜单项目后如何返回选择的ISO路径,不不知道有没有办法解决这个问题.
注意:此菜单项只能为第一个菜单;请用户自行准备/SRS/目录下的驱动和/MYISO/下的目录或指定ISO目录
- title ^ALT+0 [0] 预先加载SRS和SIF到A盘,FIRA等驱动到B盘后安装系统或返回菜单
- # 0.使用注意:这里把ZIP格式U盘转为HDD硬盘(不能事先使用fd2hd菜单调用);不能使用run img模块,否则会自动交换hd0和hd1从而产生13错误(可使用INSMOD先加载到内存),在map前不要使用ls,否则镜像会无法加载到fd中
- fd2hd && clear
- set c1=$[0002]
- set c2=$[0003]
- set c3=$[0004]
- set c4=$[0007]
- set c5=$[1004]
- set c6=$[0104]
- set c7=\44[0002]
- set c8=\44[0003]
- set c9=\44[0006]
- set ca=\44[0007]
- set cb=\44[0101]
- # 1.1.1 事先设置默认的myiso=/MYISO/[MYISO.ISO],如果找不到则提示用户输入目录
- find --set-root --ignore-floppies /MYISO/MYISO.ISO && set myiso=/MYISO/MYISO.ISO ! set myiso=/MYISO/
- find --set-root --ignore-floppies ls %myiso% && clear ! set /p /u myiso=请输入镜像文件目录或文件(如/MYISO/或/MYISO/MYISO.ISO):
- find --set-root --ignore-floppies ls %myiso% || clear && echo && pause --wait=3 没有找到%myiso%,三秒后返回 && goto 0
- # 如果指定的是目录则仅生成菜单列表,如果指定的是文件则仅显示一步安装
- clear && echo
- echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- if /I "%myiso:~-1,1%"=="/" && echo 1.生成/MYISO/或自定义目录的自动菜单(RUN模式SRATLF版)
- if /I "%myiso:~-1,1%"=="/" && echo 2.生成/MYISO/或自定义目录的自动列表(RUN模式SRATLF版)
- if /I "%myiso:~-1,1%"=="/" && echo 3.生成/MYISO/或自定义目录的自动菜单(RUN模式ZXW版)
- if /I "%myiso:~-1,1%"=="/" && echo 4.生成/MYISO/或自定义目录的自动列表(RUN模式ZXW版)
- if /I "%myiso:~-1,1%"=="/" && echo 5.生成/MYISO/或自定义目录的菜单列表(SISO模式)
- if /I not "%myiso:~-1,1%"=="/" && echo 1.一步安装/MYISO/MYISO.ISO(RUN模式SRATLF版,仅FIRA驱动)
- if /I not "%myiso:~-1,1%"=="/" && echo 2.一步安装/MYISO/MYISO.ISO(RUN模式ZXW版,仅FIRA驱动)
- if /I not "%myiso:~-1,1%"=="/" && echo 3.一步安装/MYISO/MYISO.ISO(SISO模式,仅FIRA驱动)
- if /I not "%myiso:~-1,1%"=="/" && echo 4.一步安装/MYISO/MYISO.ISO(G4D原版模式,仅FIRA驱动)
- echo -e \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo
- echo 请选择操作方式(%c3%G光驱启动,C命令模式,M返回菜单%c1%),如果%c6%5秒内%c1%没有选择则自动选择%c3%第一项
- calc *0x4cb00=0x1 > nul
- pause --wait=5 && set /a keyt=*0x4cb00 && set n=5
- checkrange 1:%n% calc %keyt%-48 && set /a isoxz=%keyt%-48 ! if "%keyt%"=="1" && set isoxz=1 ! set isoxz=1
- if "%keyt%"=="99" && set isoxz=c ! if "%keyt%"=="67" && set isoxz=C ! if "%keyt%"=="103" && set isoxz=g ! if "%keyt%"=="71" && set isoxz=G ! if "%keyt%"=="109" && set isoxz=m ! if "%keyt%"=="77" && set isoxz=M
- # 1.3 SRSF6模块会同时在AB盘生成FIRA和SRS驱动(不带FIRA参数如果找不到驱动则生成空盘),支持原版或是F6格式的OEM驱动,SRSID驱动和SIF驱动;F6IMG在A盘产生驱动(无则生成空盘),支持原版或F6格式OEM X32驱动和--X64位驱动,支持驱动打包为gz(F6IMGZ)或lzma或散开或混合格式;
- # ZWX版的F6IMG则在HOTDLL版的基础上通吃GZ,LMZA和IMG格式;DPMS只支持ISO格式的DMPS专用驱动,找不到驱动时什么也不做(需预加载空A盘,否则再也就无法添加A盘);另外SISO模块支持F6IMG(仅内置),SRSF6N(增加srsf6n /srs.iso方式)和DPMS以及自制IMG,IMA四种方式都包含.
- clear && echo
- echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo 1.加载自制SRS驱动/SRS/MYSRS.IMG到A盘(默认MYSRS.IMG为空白盘)
- echo 2.加载自制SRS驱动/SRS/SRS.ISO到A盘(SRSF6N无菜单版模式)
- echo 3.加载F6IMG到A盘(HOTDLL版F6IMG模式)
- echo 4.加载F6IMG到A盘(ZXW版F6IMG模式)
- echo 5.加载DPMS驱动到A盘(CHENALL的DPMS模式)
- echo -e \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo
- echo 请选择%c3%SRS驱动%c1%类型,如果%c6%5秒内%c1%没有选择则自动选择%c3%第五项
- calc *0x4cb00=0x1 > nul
- pause --wait=5 && set /a keyt=*0x4cb00 && set n=5
- checkrange 1:%n% calc %keyt%-48 && set /a mysrs=%keyt%-48 ! if "%keyt%"=="5" && set mysrs=5 ! set mysrs=5
- find --set-root --ignore-floppies ls /SRS/ && clear
- if /I "%mysrs%"=="1" && if exist /SRS/MYSRS.IMG && map --mem /SRS/MYSRS.IMG (fd0) && map --hook
- if /I "%mysrs%"=="2" && run --noboot /SRS/SRS.ISO (0xf0) && command SRSF6N (0xf0)/SRS && map --unmap=0xf0 && map --unmap=0x01 && map --rehook
- if /I "%mysrs%"=="3" && command F6IMG /SRS/F6IMG/ || if /I "%mysrs%"=="3" && command F6IMGZ /SRS/F6IMGZ/
- if /I "%mysrs%"=="4" && command F6IMGN /SRS/F6IMG.IMG || if /I "%mysrs%"=="3" && command F6IMGN /SRS/F6IMG/
- if /I "%mysrs%"=="5" && map --mem /SRS/MYSRS.IMG (fd0) && map --hook && clear && echo -e \n正在加载/SRS/DPMS.ISO && command /SRS/DPMS.BAT && if exist (fd1)/TXTSETUP.OEM && map (fd0) (fd1) && map (fd1) (fd0) && map --rehook
- set mysrs= && clear
- # 1.4 加载内置虚拟内存驱动,只有FIRADISK.IMG支持一步安装
- clear && echo
- echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo 1.加载内置/HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/FIRADISK.IMG到B盘
- echo 2.加载内置/HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/winvblk.img到B盘
- echo 3.加载内置/HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/vboot.img到B盘
- echo -e \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo
- echo 请选择%c3%虚拟内存%c1%驱动类型,如果%c6%5秒内%c1%没有选择则自动选择%c3%第一项
- calc *0x4cb00=0x1 > nul
- pause --wait=5 && set /a keyt=*0x4cb00 && set n=3
- checkrange 1:%n% calc %keyt%-48 && set /a mymd=%keyt%-48 ! if "%keyt%"=="1" && set mymd=1 ! set mymd=1
- find --set-root --ignore-floppies ls /HYTOOLS/GRUB/NTBOOT/ && clear
- if /I "%mymd%"=="1" && if exist /HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/FIRADISK.IMG && map --mem /HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/FIRADISK.IMG (fd1)
- if /I "%mymd%"=="2" && if exist /HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/winvblk.img && map --mem /HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/winvblk.img (fd1)
- if /I "%mymd%"=="3" && if exist /HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/vboot.img && map --mem /HYTOOLS/GRUB/NTBOOT/NTBOOT.IMG/vboot.img (fd1)
- map --rehook && set mymd= && clear
- # 1.5 把FIRA驱动写入注册表实现一步安装ISO,仅支持FIRA驱动(如果是自动列表或自动菜单则无法实现一步安装,因为不知道RUN和RUNS的返回值是不是%iso%)
- # if exist %iso% set myiso=%iso%
- if /I not "%myiso:~-1,1%"=="/" && cat --locatei=###### --number=1 (fd1)/TXTSETUP.OEM | set fk0= > nul
- if /I not "%myiso:~-1,1%"=="/" && if not %fk0%#==# set /A fk0=0x%fk0% > nul
- if /I not "%myiso:~-1,1%"=="/" && if not %fk0%#==# write --offset=%fk0% (fd1)/TXTSETUP.OEM value=Parameters,StartOptions,REG_SZ,"cdrom,vmem=find:%myiso%;"\r\n > nul
- if /I not "%myiso:~-1,1%"=="/" && if not %fk0%#==# cat --skip=%fk0% --locate=/ --replace=\\ (fd1)/TXTSETUP.OEM > nul
- # 1.6 复制内置SIF到A,B盘以便实现无人值守安装
- clear && echo
- echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo 1.复制内置/HYTOOLS/IMGS/WINXP.SIF到A盘和B盘
- echo 2.复制内置/HYTOOLS/IMGS/WIN2K3.SIF到A盘和B盘
- echo 3.复制内置/HYTOOLS/IMGS/WINNT.SIF到A盘和B盘
- echo -e \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo
- echo 请选择%%c3应答文件%c1%类型,如果%c6%5秒内%c1%没有选择则自动选择%c3%第一项
- calc *0x4cb00=0x1 > nul
- pause --wait=5 && set /a keyt=*0x4cb00 && set n=3
- checkrange 1:%n% calc %keyt%-48 && set /a mysif=%keyt%-48 ! if "%keyt%"=="1" && set mysif=1 ! && set mysif=1
- if /I "%mysif%"=="1" && set mysif=WINXP.SIF || if /I "%mysif%"=="2" && set mysif=WIN2K3.SIF || if /I "%mysif%"=="3" && set mysif=WINNT.SIF
- if exist /HYTOOLS/IMGS/%mysif% && fat copy /o /HYTOOLS/IMGS/%mysif% (fd0)/WINNT.SIF && fat copy /o /HYTOOLS/IMGS/%mysif% (fd1)/WINNT.SIF ! && clear && pause 没有加载自动应答文件%mysif%,任意键继续
- set mymd= && clear
- # 1.7 提示是否交换A,B盘以便自动加载驱动,默认不交换(感觉代码多余,改成了显示驱动即可)
- clear && echo
- echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo %c3%FD0的SRS%c1%驱动如下:
- ls (fd0)/
- echo -e \n%c3%FD1的虚拟内存%c1%驱动如下:
- ls (fd1)/
- echo -e \n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- echo
- pause --wait=5 以上驱动如不正确可%c3%返回修改%c1%,%c6%5秒后%c1%将执行自动菜单列表或一步安装
- # 1.2.1磁盘交换后外部命令RUN会无法使用,出现13错误,可使用INSMOD加载到内存中调用
- find --set-root --ignore-floppies ls %myiso% && clear
- if /I "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="1" && RUNS --swap-ext --show.IMG.IMA.GZ.WIM.ISO %myiso%
- if /I "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="2" && RUNS --swap-ext --autolist --show.IMG.IMA.GZ.WIM.ISO %myiso%
- if /I "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="3" && insmod run && map (hd0) (hd1) && map (hd1) (hd0) && map --rehook && run --set-ext=+.iso|.ima|.img|.gz|.bin|.wim|.|/ %myiso%.automenu
- if /I "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="4" && insmod run && map (hd0) (hd1) && map (hd1) (hd0) && map --rehook && run --set-ext=+.iso|.ima|.img|.gz|.bin|.wim|.|/ %myiso%
- if /I "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="5" && siso --swap iso=%myiso% srs=n sif=n 3
- if /I not "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="1" && RUNS --swap %myiso%
- if /I not "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="2" && insmod run && map (hd0) (hd1) && map (hd1) (hd0) && map --rehook && run %myiso%
- if /I not "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="3" && siso --swap iso=%myiso% srs=n sif=n 3
- if /I not "%myiso:~-1,1%"=="/" && if /I "%isoxz%"=="4" && clear && map (hd0) (hd1) && map (hd1) (hd0) && map --rehook && echo 正加载%myiso% && find --set-root --ignore-floppies %myiso% && map --mem %myiso% (0xff) && map --rehook && chainloader (0xff)
- if /I "%isoxz%"=="G" && cdrom --init && map --hook && chainloader (cd0) && boot
- if /I "%isoxz%"=="C" && commandline
- command | clear
复制代码 |
|