Board logo

标题: [原创] 用批处理解决了DOS仙剑硬盘版的内存瓶颈(作成光盘,DOS [打印本页]

作者: GOTOmsdos     时间: 2005-4-6 00:00    标题: [原创] 用批处理解决了DOS仙剑硬盘版的内存瓶颈(作成光盘,DOS

全世界找不到用一个参数解决DOS仙剑作成光盘能在内存大小不一的电脑里正常运行的办法!(因为,DOS仙剑<原光盘版被破解成硬盘版的那种>内存大于24MB,就说内存是负值...我的机子上是这样) 过程是这样的: 我正在做操作系统安装、维护和游戏(按下选项就可以玩的那种,当然是DOS的)综合DVD光盘,(送给朋友们的)还把一些我自己设计的图片做成启动时的LOGO和背景图片,效果非常好,已经作的差不多了,但是,有些游戏比如仙剑,要内存不能超过32M吧,用XMSDSK 是可以减掉内存的,但是问题是送给朋友玩,各人的内存是不一样的。那么怎样在DOS下通过批处理来实现只使用一定数量的内存? 看了HIMEM的参数,好象没有这个选项!(98和XP是可以选内存大小的,XP的BOOT。INI有参数的) 只好退而求其次,用一大段批处理来解决了.... 如下与大家共享) 如果谁想作成光盘,送给朋友,直接从光盘启动就可以玩, 相信会对你有很大帮助的.... 解决的思路是这样的: 作一个带有DOS光盘驱动的可启动软盘镜象,通过EASYBOOT的选项来启动它,把DOS仙剑硬盘版放在光盘根目录,启动软盘镜象后,AUTOEXEC.BAT中的CHOICE.COM就会询问玩家电脑的内存大小,根据这个值来用XMSDSK作成内存盘,正好使得不同玩家电脑的内存大小都被一律调整为20MB,这就符合DOS仙剑硬盘版的内存要求了!接着,会把光盘上的游戏目录和SOUND BLASTER16的DOS声卡驱动目录复制到那个刚刚创建的内存盘中,加载声卡驱动(如果玩家的声卡符合兼容SB的就可以了),接着运行游戏了! CONFIG.SYS: dos=high,umb device=himem.sys device=emm386.exe ram devicehigh=vide-cdd.sys /d:dosrav shell=command.com /f /p /e:640 BUFFERS=22,0 FILES=40 AUTOEXEC.BAT: @echo off PROMPT $p$g lh shsucdx /d:dosrav lh ctmouse rem lh smartdrv findcd /s rem command /f /c if exist %cdrom1%\sound\sbinit.com goto cd1 if exist %cdrom2%\sound\sbinit.com goto cd2 if exist %cdrom3%\sound\sbinit.com goto cd3 if exist %cdrom4%\sound\sbinit.com goto cd4 :cd1 %cdrom1% set romcd=%cdrom1% goto end :cd2 %cdrom2% set romcd=%cdrom2% goto end :cd3 %cdrom3% set romcd=%cdrom3% goto end :cd4 %cdrom4% set romcd=%cdrom4% goto end :end a: tw32 cls echo . echo . echo . echo 要玩这个游戏,必须确定您的电脑的内存大小 echo 我的电脑的内存容量大约是(MB,兆): echo . echo [1] 32 echo [2] 64 echo [3] 96 echo [4] 128 echo [5] 160 echo [6] 192 echo [7] 224 echo [8] 256 echo [9] 288 echo [a] 320 echo 352 echo [c] 384 echo [d] 416 echo [e] 448 echo [f] 480 echo [g] 512 choice /c:123456789abcdefg 请按下相应的方括号中的数字或字母(即刻执行): if errorlevel 16 goto 512 if errorlevel 15 goto 480 if errorlevel 14 goto 448 if errorlevel 13 goto 416 if errorlevel 12 goto 384 if errorlevel 11 goto 352 if errorlevel 10 goto 320 if errorlevel 9 goto 288 if errorlevel 8 goto 256 if errorlevel 7 goto 224 if errorlevel 6 goto 192 if errorlevel 5 goto 160 if errorlevel 4 goto 128 if errorlevel 3 goto 96 if errorlevel 2 goto 64 if errorlevel 1 goto 32 :32 a: tw32 /u xmsdsk 28000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :64 a: tw32 /u xmsdsk 44000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :96 a: tw32 /u xmsdsk 76000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :128 a: tw32 /u xmsdsk 108000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :160 a: tw32 /u xmsdsk 140000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :192 a: tw32 /u xmsdsk 172000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :224 a: tw32 /u xmsdsk 204000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :256 a: tw32 /u xmsdsk 236000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :288 a: tw32 /u xmsdsk 268000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :320 a: tw32 /u xmsdsk 300000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :352 a: tw32 /u xmsdsk 332000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :384 a: tw32 /u xmsdsk 364000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :416 a: tw32 /u xmsdsk 396000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :448 a: tw32 /u xmsdsk 428000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :480 a: tw32 /u xmsdsk 460000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat :512 a: tw32 /u xmsdsk 492000 z: /t /y xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat

作者: JonePeng     时间: 2005-4-6 00:00
你的批处理前半部分思路很好,但是后半部分(从choice开始)未免太冗长了,缺乏程序的逻辑性和简洁性。 我的建议是用外部命令GET和Strings来改写后半部分。先用Get获取内存总容量并保存在一个环境变量%total%中,再用Strings把%total%和需要玩游戏的20M相减,得数存为%ramdisksize%,然后用XMSDSK创建大小为%ramdisksize%的虚拟盘(如:xmsdsk %ramdisksize% z: /t /y)。这样,就不必再为不同的内存容量而逐一考虑了。

[此贴子已经被作者于2005-4-6 20:27:17编辑过]


作者: GOTOmsdos     时间: 2005-4-7 00:00
我没用过GET 和STRINGS, 好,一定试一下! 如果成功的话,就不用问玩家了! 也太长多谢!

作者: GOTOmsdos     时间: 2005-4-7 00:00
JonePeng兄! 能不能帮我把后面改一下? 这样快一点.. 多谢了! 还有,GET STRINGS 本站有吗?

作者: GOTOmsdos     时间: 2005-4-7 00:00
谁帮个忙.传个GET程序,我找不到啊!..

作者: GOTOmsdos     时间: 2005-4-7 00:00
弄到GET和STRINGS, 确实不错! 已经大大精简了程序! 如下: 多谢JonePeng兄! @echo off PROMPT $p$g lh shsucdx /d:dosrav lh ctmouse rem lh smartdrv findcd /s rem command /f /c if exist %cdrom1%\sound\sbinit.com goto cd1 if exist %cdrom2%\sound\sbinit.com goto cd2 if exist %cdrom3%\sound\sbinit.com goto cd3 if exist %cdrom4%\sound\sbinit.com goto cd4 :cd1 set romcd=%cdrom1% goto end :cd2 set romcd=%cdrom2% goto end :cd3 set romcd=%cdrom3% goto end :cd4 set romcd=%cdrom4% goto end :end a: tw32 cls echo . echo . echo . echo . 要玩这个游戏,必须知道您的电脑的内存大小 echo . 您的电脑的内存容量大约是下面的哪一个(MB,兆): echo . echo . echo . . 32 echo . . 64 echo . . 96 echo . . 128 echo . . 160 echo . . 192 echo . . 224 echo . . 256 echo . . 288 echo . . 320 echo . . 352 echo . . 384 echo . . 416 echo . . 448 echo . . 480 echo . . 512 get28 s "请输入您的电脑内存容量(以上数字之一),再按回车键:" cls tw32/u if "%get%"=="32" goto 32 strings diskmb=sub %get%, 20 strings diskkb=mul %diskmb%, 1024 xmsdsk %diskkb% z: /t /y goto playpal :32 xmsdsk 30000 z: /t /y :playpal xcopy %romcd%\sound z:\sound\ /e /s xcopy %romcd%\pal z:\sound\pal\ /e /s set blaster=a220 i5 d1 h5 p330 set sbpci=z:\sound z:\sound\sbinit z: cd\sound\pal play.bat 但是,遗憾的是: GET 和STRINGS虽说有报告内存的功能,但都不支持超大内存! STRINGS报告内存是以BYTE记,最多只能传出8位数,也就是十位数MB的内存数! GET28版报告内存,只能传出最大64MB 所以,还是要玩家输入内存数的....

[此贴子已经被作者于2005-4-10 3:31:24编辑过]


作者: JonePeng     时间: 2005-4-8 00:00
呵呵,原来get还有那样的限制啊。毕竟它只是16位程序。对于strings,我试过在纯DOS下获取EMS和XMS总容量时可以获取超过8位数的结果,但不明白获得的数字与实际内存不符,比如,我的机子内存是384M,strings返回的EMS结果竟然是三千七百多MB,即大约3.7G!晕……

作者: Wengier     时间: 2005-4-9 00:00
其實我覺得要知道的應該是當前XMS內存的可用大小,而不是XMS內存的總大小!因為,XMS內存中可能已加載了一些程序(如SMARTDRV等),這樣XMS內存的總大小和XMS內存的可用大小很有可能是大不相同的。可以試試XMS.COM程序,這個程序是支持大內存(>64MB)的,然後用批處理辦法把它得到的當前XMS內存的可用大小數提出來,並用XMSDSK對大於32MB的部分進行填充即可。例如: IF NOT EXIST XMSXXXX0 GOTO QUIT XMS | FIND "Total Free XMS" | NSET freexms=$4 SET dz= STRINGS dz=SUB %freexms%, 32000 > NUL IF NOT %dz%#==# XMSDSK %dz% /t /y SET freexms= SET dz= ECHO Now play the game.. ...

作者: GOTOmsdos     时间: 2005-4-10 00:00
WENGIER,谢谢啦 但 XMS.COM哪里有啊? 本站,白渡,GOOGLE都没有啊! 能传一个吗? 或者,帮一下忙, 寄个给我好吗? EMAIL: mykool@126.com 先谢谢啦 !

[此贴子已经被作者于2005-4-10 3:29:48编辑过]


作者: Wengier     时间: 2005-4-11 00:00
其实就是QEMM中的XMS.COM了,已上传: 打开附件

作者: GOTOmsdos     时间: 2005-4-11 00:00
非常感谢!

作者: smallbrid     时间: 2005-6-4 00:00
那请问这些老DOS游戏去哪下呢,我收集了些,不知道你们有什么游戏,能共享一下吗?我刚到站上,希望DOS高手们能帮忙!

[此贴子已经被作者于2005-6-4 23:27:06编辑过]


作者: palxex     时间: 2005-7-29 20:39
其实,现在已经有一些高手做的破解版仙剑了,可以不必这么麻烦了。 softwide.ys168.com