无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 4236|回复: 3
打印 上一主题 下一主题

[教程] XP用8G内存 [专为小白,非小白请直接忽视]

[复制链接]
跳转到指定楼层
1#
发表于 2015-10-2 00:44:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2012doking 于 2015-10-2 00:58 编辑

XP用8G内存 [专为小白,非小白请直接忽视]
今日老机器上了8G内存,无奈XP认不出来,又不能更换操作系统,最后将认不出来的4G多做成了虚拟内存盘,把交换文件放了上去,作为纯小白的我折腾了一天,期间多亏不点大神的帮助,最后终于搞定,现将过程记录如下,以便小白们少走弯路:
1、用Winimage 创建一个4G的img,加载时若报WARNING,请直接忽视它
2、然后加入菜单
title XP with virtual drive [4G]
map --mem --top /boot/4G.img (hd3)
map --hook
chainloader /ntldr
3、安装Firadisk驱动 ,直接右键安装即可,WinVblock我无论如何也装不上(其实也不知道装上没有,反正先装它,没效果,后装Firadisk,winvblcok也不知道怎么卸载)
4、启动windows XP后把虚拟内存放到内存盘里去。
期间我还安装了RamDisk Plus,无论如何也创建不了,或许和我安装了Winvblock有关,不太清楚
另外,按照启动grub4dos是的标题的最后一个4608M,计算所得的最大img文件,装载不进去,太大了,最大img不知道怎么计算
就这么简单,居然折腾一天

这些问题解决了,再做个RamOS啥的,貌似是很简单的事情啊,直接把我以前的ghost放进虚拟机里生成img即可!


最后呢,赞一下grub4dos,为什么呢,我贴一下08年我用cdshell时写的吐血的代码,其实就是实现了个菜单而已

/////////////////////////  以下为眼晕区,晃晃就行,目的是对比grub4dos之强大   /////////////////////////////////////////////////////
#123456789ABCDEF1123456789ABCDEF2123456789ABCDEF3123456789ABCDEF4123456789ABCDEF5123456789ABCDEF6123456789ABCDEF7123456789ABCDEF8123456789ABCDEF9123456789ABCDEFA123456789ABCDEFB123456789ABCDEFC123456789ABCDEFD123456789ABCDEFE123456789ABCDEFF123456789ABCDE
set DefaultTime=30
set DefaultTitle="  Boot from hard disk ...   "
set DefaultOffsetX=26
set MenuTitle1="Main Menu"
set MenuLen1=8
set MenuText11="MenuItemTextfff"        ;set MenuItemType11=2                        ;Set MenuInfoA11="Info11A";        Set MenuInfoB11="Info11B";Set MenuInfoC11="Info11C"
set MenuText12="memdisk ggg.img"        ;set MenuCommand12="memdisk ggg.img"
set MenuText13="MenuItemText13"
set MenuText14="MenuItemText14"

set MenuLen2=6
set MenuCommand21="part"                ;set MenuItemType21=-1
set MenuItemType22=0                       

set MenuLen3=7
set MenuItemType13=3



Set ColorOf_UpperBar      = "white on brightgrey"
Set ColorOf_TitleBar      = "brightgrey on blue"
Set ColorOf_WindowBody    = "black on white"
Set ColorOf_MenuOption    = "white on brightgrey"
Set ColorOf_MenuHighlight = "white on red"
Set ColorOf_HelpHighlight = "brightblue on white"
Set ColorOf_MenuShadow    = "grey on white"
Set ColorOf_WindowShadow  = "grey on green"
Set ColorOf_Background    = "white on grey"

#Do not change the below
set DefCnt=0
set SmIdx=0
set MenuNO=1
set MenuNOLast=0
set MenuLen=0
set iTmp=0
set strTmp=""
set MenuBK="                                          "
set InfoBK="                                                                         "
Set C_UB = color[$ColorOf_UpperBar]
Set C_TB = color[$ColorOf_TitleBar]
Set C_WB = color[$ColorOf_WindowBody]
Set C_SD = color[$ColorOf_WindowShadow]
Set C_HH = color[$ColorOf_HelpHighlight]
Set C_MO = color[$ColorOf_MenuOption]
Set C_MH = color[$ColorOf_MenuHighlight]
Set C_SW = color[$ColorOf_MenuShadow]
Set C_BG = color[$ColorOf_Background]





goto GotoMenu

end

##############
#    ReadMe  #
##############
MenuItemRoutine21:
call DefSrn
print "readme"
print "\nPress any key to continue"
getkey
set MenuNOLast=0
goto GotoMenu
end


##############
#    GotoMenu#
##############
GotoMenu:
if $MenuNOLast<$MenuNO
        then call ClrSrn
call SmPush
goto MenuCtrl
end
##############
#    SmPush  #
##############
SmPush:
        set SmIdx=$SmIdx+1
        set SmNo$SmIdx=$MenuNO
return

##############
#    SmPop   #
##############
SmPop:
        set MenuNO=$SmNo$SmIdx
        set MenuLen=$MenuLen$MenuNO
        set SmIdx=$SmIdx-1
return

##############
#    SmGetTop#
##############
SmGetTop:
        set MenuNO=$SmNo$SmIdx
        set MenuLen=$MenuLen$MenuNO
return

##############
#   CurText  #
##############
CurText:
        set textCursorY = ($CurSel-1)*2+3
        set f=$MenuNO*10+$CurSel
        set textColor=$C_MH
        set textCursorX = 25
        print "                              "
        set strTmp="$MenuText$f"
        set textCursorX = 26
        print "$CurSel"
        print ". "
        print "$strTmp"
return
##############
#   LastText #
##############
LastText:

        set textCursorY = ($LastSel-1)*2+3
        set f=$MenuNO*10+$LastSel
        set textColor=$C_MO
        set textCursorX = 25
        print "                              "
        set textCursorX = 26
        set strTmp="$MenuText$f"
        print "$LastSel"
        print ". "
        print "$strTmp"
return
##############
#   iTmpText #
##############
iTmpText:
        set textCursorY = ($iTmp-1)*2+3
        set f=$MenuNO*10+$iTmp
        set textColor=$C_MO
        set textCursorX = 25
        print "                              "
        set textCursorX = 26
        set strTmp="$MenuText$f"
        print "$iTmp"
        print ". "
        print "$strTmp"
return
##############
#   CurInfo  #
##############
CurInfo:
        call InfoBK
        set f=$MenuNO*10+$CurSel
        set textCursorX=3
        if defined[MenuInfoA$f]
                then set textCursorX=3
                then set textCursorY=21
                then print "$MenuInfoA$f"
        if defined[MenuInfoB$f]
                then set textCursorX=3
                then set textCursorY=22
                then print "$MenuInfoB$f"
        if defined[MenuInfoC$f]
                then set textCursorX=3
                then set textCursorY=23
                then print "$MenuInfoC$f"
return
##############
#   InfoBK   #
##############
InfoBK:
        set textColor=$C_WB
        set iTmp=0
_IBK:       
        if $iTmp<3
                then set textCursorX=3
                then set textCursorY=21+$iTmp
                then print "$InfoBK"
                then set iTmp=$iTmp+1       
                then goto _IBK
return
##############
#     CntBk  #
##############
CntBk:
        set textColor=$C_BG
        set textCursorX=0                       
        set textCursorY=24
        if $DefaultTime<=0
                then return
        set textCursorX=0
        print "$DefaultTitle"
        set textCursorX=$DefaultOffsetX
        print "$DefaultTime"
return
##############
#    DefSrn  #
##############
DefSrn:
        set textColor=color[brightgrey on black]                        # Clearn screen to system default,called by customer
        cls
return
##############
#    ClrSrn  #
##############
ClrSrn:
        set textColor=$C_BG                                        # Clearn screen
        cls
return
##############
#    MenuCtrl#
##############
MenuCtrl:                                       
        call SmGetTop                                # Get the current menu
        set iTmp=1                                # Draw menuitem background
        set textColor=$C_WB
        set textCursorY=2
        set textCursorX=0
_MBK:
        if $iTmp<$MenuLen*2+2
                then print "\ac$MenuBK"
                then set iTmp=$iTmp+1
                then goto _MBK
        call InfoBK                                # Draw Infomation background
        set textColor=$C_TB                        # Draw menu title background
        set textCursorX=0                       
        set textCursorY=1
        print "\ac$MenuBK"                        # $MenuBK is combined with some spaces ,whick fill the background of menutitle
        set textCursorX=0                        # Draw menu title
        print "\ac$MenuTitle$MenuNO"
        set textCursorX=3                        # Draw "INFORMATION:"
        set textCursorY=20
        print "INFORMATION:                                                             "
        set CurSel=1                                # CurSel must be great 0 (begining with 1)
        set LastSel=0                                # LastSel,to check whether to be redraw       
        call CurText                                # Draw the first menuitem
        set iTmp=2
_DIs:                                                # Draw menuitems' text (do not include item1)
        if $iTmp<=$MenuLen
                then call iTmpText
                then set iTmp=$iTmp+1;
                then goto _DIs
        call CurInfo
_Con:                                                # capture keyboard input
        call CntBk
        set LastSel=$CurSel
        if $DefaultTime>0
                then goto _DT1
        getkey
        goto _Key
_DT1:
        set DefCnt=0                # clear default count
        set textColor=$C_BG                       
        set textCursorY=24               
_DT1Lp:       
        getkey 1 goto _Def
_Key:
        if $lastKey==key[esc];        then goto _UpLvl
        if $lastKey==key[down];        then set CurSel=$CurSel+1;then goto _UpDown
        if $lastKey==key[up];        then set CurSel=$CurSel-1;then goto _UpDown
        if $lastKey==key[enter];then goto _Sel
        if $lastKey>=48 && $lastKey<= 48+$MenuLen;then set CurSel=$lastKey-48;then goto _Sel
        goto _Con
_UpDown:
        if $CurSel<=0; then set CurSel=1;then goto _Con
        if $CurSel>$MenuLen; then set CurSel=$MenuLen;then goto _Con
        if $CurSel==$LastSel;then goto _Con
        call LastText
        call CurText
        call CurInfo
        goto _Con
_UpLvl:       
        if $SmIdx<=1;then goto _Con                  # Only one menu in the stack
        call SmPop                                     # Popup Menu and goto it
        goto MenuCtrl
_Sel:                                                # Menuitem had been pressed                                       
        set f=$MenuNO*10+$CurSel               
        if defined[MenuItemType$f];then goto _TDd;else goto _UTDd
_TDd:
        if $MenuItemType$f==$MenuNO || $MenuItemType$f==0;        then goto _UpLvl
        if $MenuItemType$f>0             && $MenuItemType$f<=32767;        then set MenuNOLast=$MenuNO;then set MenuNO=$MenuItemType$f;then goto GotoMenu
        if $MenuItemType$f<0;goto MenuItemRoutine$f
        goto _Con       
_UTDd:
        call DefSrn
        $MenuCommand$f
_Def:
        set DefCnt=$DefCnt+1
#        print "******* $DefCnt  $DefaultTime"
        if $DefCnt<=$DefaultTime
                then set textCursorX=$DefaultOffsetX
                then set iTmp=$DefaultTime-$DefCnt
                then print "                "
                then set textCursorX=$DefaultOffsetX
                then print "$iTmp"
                then goto _DT1Lp
        else call DefSrn
        else boot $hda

end


点评

这有何用,买大内存的人基本都不是为了当磁盘用的。  发表于 2015-10-4 11:56
2#
发表于 2015-10-2 01:11:46 | 只看该作者
本帖最后由 不点 于 2015-10-2 01:38 编辑

既然成功了,那么就可以讨论优化的问题了。

注意到你只是让 hd3 成为一个数据盘,它的内容无关紧要,因此,可以这样(未经试验):

title XP with virtual drive [4G]
map --mem=-0x800000 --top (md)+8 (hd3)
map --hook
chainloader /ntldr

解释一下:(md)+8 就是使用内存开头的 8 个扇区,反正它是什么内容都不重要。把它当作你的 IMG,进行映射。map 命令会自动把这 8 个扇区的内容拷贝到内存顶端。

--mem=-0x800000 的意思是,让内存盘的最小扇区数为 0x800000,也就是 4G。如果没有这个参数,内存盘的长度将是 8 个扇区。有了这个参数,内存盘的长度将扩大到 4G。

你试试看行不行。这样做完之后,进入 Windows 以后,需要你把这个虚拟盘格式化一下。

万一 Windows 认不出这个虚拟盘,你可以利用 chenall 的 fat 外部命令,对 (hd3) 进行格式化,然后再进入 Windows,就应该没问题了。注意安全!格式化 hd3 时,应该是在 map --hook 之后。如果未经 map --hook 就格式化 hd3,则你的真实硬盘 hd3 将被格式化!

总之,小心谨慎,安全性由自己全权负责。

回复

使用道具 举报

3#
 楼主| 发表于 2015-10-2 01:15:48 | 只看该作者
哦,回头在虚拟机上实验一下,不装高端也可以实验,多谢
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-30 08:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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