|
|
DOS内存配置终极指南:640KB限制与XMS/EMS/UMB全解析
前言
玩老DOS游戏谁没见过这个报错:Not enough memory. Required: 580KB, Available: 512KB.
一台486装了16MB内存却跑不动游戏——不是内存不够,是不会配。本文从原理到实战,讲透DOS内存管理,帮你把640KB常规内存榨到极致。
第一章:640KB的由来
1981年IBM PC用8088处理器,20位地址总线寻址1MB。IBM划分如下:
- 00000~9FFFF(640KB):常规内存,DOS和程序用
- A0000~BFFFF(128KB):显存映射区
- C0000~DFFFF(128KB):上位内存区UMB,ROM BIOS扩展
- E0000~FFFFF(128KB):保留区+系统ROM BIOS
关键:640KB是硬件内存映射的结果,不是DOS的限制。
1981年640KB是天文数字,但1993年DOOM要580KB常规内存,1995年很多游戏要600KB以上。机器装了16MB,DOS程序却只能直接用最低的640KB——这就是核心矛盾。
第二章:四大内存类型
2.1 常规内存(Conventional Memory)
0~640KB。DOS程序唯一能直接执行代码的区域。DOS内核、驱动、TSR、COMMAND.COM都驻留在此。
可用常规内存 = 640KB - DOS内核 - 驱动 - TSR - COMMAND.COM。这就是为什么你有640KB却只剩500多KB可用。
2.2 上位内存(UMB)
640KB~1MB中未被硬件占用的区域。386的V86模式可把扩展内存映射到这些空闲区创造UMB。
作用:把驱动和TSR加载到UMB,释放常规内存——DOS内存优化的核心手段。典型使用者:MOUSE、SMARTDRV、DOSKEY、MSCDEX、声卡驱动。
2.3 扩展内存(XMS)
1MB以上所有内存。DOS实模式只能访问1MB,必须通过XMS规范由HIMEM.SYS管理。
特点:需286以上;程序不能在XMS中执行代码,只能存数据;Windows、游戏overlay、磁盘缓存大量使用。
HMA(高端内存区):XMS第一个64KB,实模式通过A20线可访问。把DOS内核装入HMA释放约40KB——即DOS=HIGH的作用。
2.4 扩充内存(EMS)
比XMS更早的方案(LIM EMS)。在640KB~1MB间开16KB页框(通常E0000),分页映射访问大量内存。
特点:8086就能用(需硬件扩充板);386以上可用EMM386.EXE模拟;很多老游戏(1990年前)只支持EMS;Windows 3.x增强模式需要EMS。
XMS vs EMS速记:XMS=1MB以上内存,HIMEM管理;EMS=分页映射内存,EMM386模拟;老游戏要EMS,新游戏/Windows要XMS,都要就一起配。
第三章:CONFIG.SYS与AUTOEXEC.BAT
3.1 CONFIG.SYS关键命令
- DEVICE=C:\DOS\HIMEM.SYS
- DEVICE=C:\DOS\EMM386.EXE RAM
- DOS=HIGH,UMB
- DEVICEHIGH=C:\DOS\SETVER.EXE
- FILES=40
- BUFFERS=15
复制代码
- DEVICE=HIMEM.SYS:加载XMS驱动,必须第一个加载
- DEVICE=EMM386.EXE RAM:用XMS模拟EMS+提供UMB。RAM=EMS+UMB,NOEMS=仅UMB
- DOS=HIGH,UMB:HIGH把DOS内核装入HMA(释放约40KB);UMB使DEVICEHIGH/LH生效
- DEVICEHIGH=:把驱动加载到UMB
- FILES=40:同时打开文件数,游戏常用40
- BUFFERS=15:磁盘缓冲区,有SMARTDRV时可设小
3.2 AUTOEXEC.BAT关键命令
- @ECHO OFF
- PROMPT $P$G
- PATH C:\DOS;C:\GAMES
- SET BLASTER=A220 I5 D1 H5 P330 T6
- LH C:\DOS\SMARTDRV.EXE 4096
- LH C:\DOS\MOUSE.COM
- LH C:\DOS\DOSKEY.COM
- LH C:\DOS\MSCDEX.EXE /D:MSCD001
复制代码
- LH(LOADHIGH):把TSR加载到UMB释放常规内存——最重要的优化命令
- SET BLASTER=:声卡环境变量,几乎所有DOS游戏必需
- SMARTDRV 4096:4MB磁盘缓存,用LH加载到UMB
第四章:实战配置与EMM386参数
4.1 通用游戏优化配置
适用于386以上、4MB以上内存,常规内存可用量通常达610KB以上。
CONFIG.SYS:
- DEVICE=C:\DOS\HIMEM.SYS
- DEVICE=C:\DOS\EMM386.EXE RAM I=B000-B7FF I=C800-EFFF
- DOS=HIGH,UMB
- DEVICEHIGH=C:\DOS\SETVER.EXE
- FILES=40
- BUFFERS=15
- STACKS=9,256
- SHELL=C:\DOS\COMMAND.COM C:\DOS /P /E:1024
复制代码
AUTOEXEC.BAT:
- @ECHO OFF
- PROMPT $P$G
- PATH C:\DOS;C:\GAMES
- SET TEMP=C:\TEMP
- SET BLASTER=A220 I5 D1 H5 P330 T6
- LH /L:1,12048 C:\DOS\SMARTDRV.EXE 4096
- LH C:\DOS\MOUSE.COM
- LH C:\DOS\DOSKEY.COM
- LH C:\DOS\MSCDEX.EXE /D:MSCD001 /M:10
复制代码
4.2 EMM386常用参数
- RAM:同时提供EMS和UMB,最常用
- NOEMS:仅UMB无EMS,常规内存更高,适合只需XMS的场景
- I=地址范围:指定某段地址用作UMB,如 I=B000-B7FF
- X=地址范围:排除被硬件占用的地址段,否则死机
- FRAME=地址:指定EMS页框地址,默认E000,被占用时改D000
- MIN=大小:最少提供多少KB EMS,默认256
排错经验:加载EMM386后死机,90%是UMB地址冲突。先用纯RAM参数启动,用MSD.EXE查看空闲地址段,再逐步添加I参数,每次加一段测试稳定。
第五章:MEMMAKER与QEMM
5.1 MEMMAKER自动优化
MS-DOS 6.0+自带,自动分析配置,把驱动和TSR最优分配到UMB。
- 第一次选"Express Setup"快速设置,大多数情况够用
- 运行前确保所有驱动都已在配置文件中
- 优化后用 MEM /C 查看,常规内存应达600KB以上
- 不满意可 MEMMAKER /UNDO 恢复原配置
5.2 QEMM第三方神器
Quarterdeck的QEMM是DOS时代最强内存管理软件。Stealth功能把ROM BIOS映射到RAM腾出更多UMB;Optimize比MEMMAKER更智能;常规内存可用量可达620~630KB。
- DEVICE=C:\QEMM\QEMM386.SYS RAM ST:M
- DOS=HIGH,UMB
- FILES=40
- BUFFERS=15
复制代码注意:QEMM是商业软件需授权。DOSBox中不需要用QEMM。
第六章:常见问题排查
6.1 EMM386找不到页框地址
报错"unable to set page frame base address"。默认页框E000h被硬件占用。
解决:用 FRAME=D000 手动指定;或不需要EMS时用 NOEMS。
6.2 HIMEM未加载
报错"XMS driver not installed"。检查CONFIG.SYS中DEVICE=C:\DOS\HIMEM.SYS路径正确,且在EMM386之前加载。
6.3 加载EMM386后死机
90%是UMB地址冲突。安全模式启动(F5),把EMM386改为纯RAM参数,用MSD.EXE查看被占用地址段,用X参数排除。
常见需排除:C000-C7FF(显卡BIOS)、C800-CFFF(网卡BIOS)、A000-AFFF(VGA显存绝对不能用)、B800-BFFF(文本显存绝对不能用)。
6.4 游戏提示EMS不足
用 EMM386.EXE RAM MIN=2048 确保至少2MB EMS。老游戏大多只认EMS。如果用了NOEMS,改回RAM。
第七章:MEM命令与速查表
7.1 MEM常用命令
- MEM /C /P 查看各模块内存占用,分页
- MEM /F 查看空闲内存区域
- MEM /M 模块名 查看指定模块内存分配
- MEM 简要显示各类内存总量
复制代码
MEM /C关键指标:
- Largest executable program size:最大可执行程序大小,即跑游戏能用的常规内存。600KB以上优秀,610KB以上极品
- MS-DOS is resident in the high memory area:DOS=HIGH已生效
7.2 场景配置速查
- 通用游戏(推荐):EMM386 RAM — EMS+UMB,兼容绝大多数游戏
- 只玩新游戏/Windows:EMM386 NOEMS — 更多UMB,常规内存更高
- 老游戏(1990年前):EMM386 RAM MIN=2048 — 至少2MB EMS
- Windows 3.x增强模式:EMM386 RAM — 增强模式需要EMS
- DOSBox:不需要配置 — DOSBox自动管理内存
结语:够用就好
- 不要追求极限。604KB和612KB对99%的游戏没区别,为多挤8KB搞不稳定得不偿失
- 备份配置文件。改CONFIG.SYS前先 COPY CONFIG.SYS CONFIG.BAK
- 准备应急启动盘。配置搞崩了全靠它
- 善用多重配置。DOS 6.0支持[MENU]段,做"游戏模式""Windows模式""干净模式"多启动选项
- DOSBox用户不用纠结。dosbox.conf里设xms=true、ems=true即可
写在最后:当年为跑一个游戏,对着CONFIG.SYS改一下午,反复重启几十次,终于看到游戏画面的那一刻,那种成就感是现在一键安装的游戏永远给不了的。折腾本身就是乐趣。
本文为原创技术文章,转载请注明出处。有内存配置问题欢迎评论区讨论!
|
|