中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创] 用批处理解决了DOS仙剑硬盘版的内存瓶颈(作成光盘,DOS
作者:
标题: [原创] 用批处理解决了DOS仙剑硬盘版的内存瓶颈(作成光盘,DOS 上一主题 | 下一主题
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『楼 主』:  [原创] 用批处理解决了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

2005-4-6 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 2 楼』:  

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

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






----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-4-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 3 楼』:  

我没用过GET 和STRINGS, 好,一定试一下! 如果成功的话,就不用问玩家了! 也太长多谢!

2005-4-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 4 楼』:  

JonePeng兄! 能不能帮我把后面改一下? 这样快一点.. 多谢了! 还有,GET STRINGS 本站有吗?

2005-4-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 5 楼』:  

谁帮个忙.传个GET程序,我找不到啊!..

2005-4-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 6 楼』:  

弄到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编辑过]




2005-4-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
JonePeng
金牌会员

D◎$ Fαп


积分 4562
发帖 1883
注册 2004-1-19
来自 广东广州
状态 离线
『第 7 楼』:  

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



----====≡≡≡≡ 我的至爱,永远是MSDOS!≡≡≡≡====----
  
2005-4-8 00:00
查看资料  发送邮件  发短消息 网志  OICQ (373343541)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 8 楼』:  

其實我覺得要知道的應該是當前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..
...





Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2005-4-9 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 9 楼』:  

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

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




2005-4-10 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 10 楼』:  

其实就是QEMM中的XMS.COM了,已上传:
打开附件




Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2005-4-11 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
GOTOmsdos
铂金会员

C++启程者


积分 5154
发帖 1827
注册 2003-7-18
状态 离线
『第 11 楼』:  

非常感谢!

2005-4-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
smallbrid
初级用户




积分 111
发帖 4
注册 2005-6-4
状态 离线
『第 12 楼』:  

那请问这些老DOS游戏去哪下呢,我收集了些,不知道你们有什么游戏,能共享一下吗?我刚到站上,希望DOS高手们能帮忙!

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




2005-6-4 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
palxex
初级用户





积分 160
发帖 12
注册 2003-10-12
状态 离线
『第 13 楼』:  

其实,现在已经有一些高手做的破解版仙剑了,可以不必这么麻烦了。
http://softwide.ys168.com

2005-7-29 20:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: