MSDOS多重启动在10多年前是非常流行的一件事情,因为配置MSDOS玩游戏和运行win31需要基本完全不同的配置.有些游戏对于基本内存要求极为严苛,不少游戏都要求有600k以上的基本内存,这样即使有4M或者8M内存如果不能满足基本内存的要求也是玩不了的。可是说在Dos时代配置Config.sys和Autoexec.bat文件进行多重启动是一个基本功。随着win95的到来,基本就没有类似的要求了,但是对于X86下的WINCE开发来说,多重启动配置还是有很多不错的用途。
下面先来看一个多重启动的例子(ICOP VDX版随版提供,如有异议请联系本人)
Config.SYS
Config.Sys
[menu]
menuitem=CEPC_LOCAL, Boot CE/PC (local nk.bin)
menuitem=CEPC_1024, Boot CE/PC (ether via eboot.bin with /L:1024x768x8)
menuitem=CEPC_800, Boot CE/PC (ether via eboot.bin with /L:800x600x16)
menuitem=CEPC_640, Boot CE/PC (ether via eboot.bin with /L:640x480x32)
menuitem=CEPC_SERIAL, Boot CE/PC (serial via sboot.bin)
menuitem=VESATEST, Run VesaTest program and list valid display modes
menuitem=CLEAN, Clean Boot (no commands)
menudefault=CEPC_800,5
menucolor=7,1
[CEPC_LOCAL]
[CEPC_1024]
[CEPC_800]
[CEPC_640]
[CEPC_SERIAL]
[VESATEST]
[CLEAN]
[COMMON]
buffers=10,0
files=30
break=on
lastdrive=Z
dos=high,umb
device=himem.sys /testmem:OFF
以上是Config.Sys的内容。在Config.Sys中主要做这样几个工作:
(1)在Menu段中确定有几种启动的情况,并定义Menu的Id和Name,
每一起动项语法为:MenuItem =ID,Name。ID用于唯一标示该启动项,Name用于显示。也即启动时显示在屏幕上的是Name,而不是ID。
(2)针对每一启动项配置DOS环境,相当于CASE语句,在每一个CASE下面写配置。在这里只有[COMMON]里面有配置语句。即所有的启
动项均要执行的配置命令。
buffer是设置缓存大小。
files是可同时打开文件的数量。
break为允许或禁止对扩展键CTRL+C的检查,当break=on时,在执行dos命令时使用ctrl+c可以中断命令,当然需要注意的是不是所有的命令都可以中断,并且该开关打开会稍微降低系统性能,不过可以无视这点点降低吧。
lastdrive表示最后一个盘符为,这里定义为Z,需要注意的是在dos下面每多一个盘符就会多占一点点内存,包括前面的file,buffer都是如此,当然就是多一点点,对于现在的内存来说就是大海的一滴水。不过原来有些游戏就差那么一点点就玩不了//grin。
dos=high,umb,这个是必须的,据我所知不loadhigh的话,是不能够使用loadcepc这个命令的。dos的高端内存是指640k-1024k中间这384k内存。并且分为uma和umb两个部分。具体的看另外一篇吧http://www.cnblogs.com/goodleaf/archive/2010/01/02/1637879.html,
那是相当的啰嗦。简单的说用dos启动wince这一句是必须的。
device=himem.sys,介个…上面那个链接的文章里面其实有,简单的说这一句也必须有就是了。testmem:OFF,顾名思义就是是否检查内存。
需要注意的是,DOS下检查内存是有点慢的,嘿嘿。
好了这个看完了,执行完config.sys以后,会继续执行的AutoExec.bat。下面是与上面config.sys对应的AutoExec.bat。
AutoExec.Bat
Autoexce.bat
REM !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
set NET_IRQ=0
set NET_IOBASE=0
set NET_IP=192.168.2.232
if "%CONFIG%" == "CEPC_LOCAL" goto CEPC_LOCAL
if "%CONFIG%" == "CEPC_1024" goto CEPC_1024
if "%CONFIG%" == "CEPC_800" goto CEPC_800
if "%CONFIG%" == "CEPC_640" goto CEPC_640
if "%CONFIG%" == "CEPC_SERIAL" goto CEPC_SERIAL
if "%CONFIG%" == "VESATEST" goto VESATEST
if "%CONFIG%" == "CLEAN" goto CLEAN
:CEPC_LOCAL
REM #################################################################
REM Launch LOADCEPC using a local NK.BIN image.
loadcepc /v nk.bin
goto END
:CEPC_1024
REM #################################################################
REM Set RES=/L:1024x768x8 for use with FLAT display driver.
REM
REM Format
REM /L:DXxDYxBPP[:PXxPY] in DECIMAL!!!!
REM
set RES=/L:1024x768x8
goto WITHRES
:CEPC_800
REM #################################################################
REM Set RES=/L:800x600x16 for use with FLAT display driver.
REM
REM Format
REM /L:DXxDYxBPP[:PXxPY] in DECIMAL!!!!
REM
set RES=/L:800x600x16
goto WITHRES
:CEPC_640
REM #################################################################
REM Set RES=/L:640x480x32 for use with FLAT display driver.
REM
REM Format
REM /L:DXxDYxBPP[:PXxPY] in DECIMAL!!!!
REM
set RES=/L:640x480x32
goto WITHRES
:CEPC_SERIAL
REM #################################################################
REM Launch LOADCEPC on SBoot for a serial port download.
loadcepc /v sboot.bin
goto END
:VESATEST
REM #################################################################
REM Launch VESATEST program. VESATEST will display the
REM VESA BIOS Version number and list all of the available
REM video modes that are supported by the FLAT driver.
REM
REM Note: VESATEST.EXE is an internal tool that is provided AS-IS
REM with no testing or support, hence use at your own risk. We do
REM not provide any redistribution rights either.
vesatest
goto END
:WITHRES
REM #################################################################
REM Here we actually Launch LOADCEPC using the RES, NET_IOBASE,
REM and NET_IRQ env vars we just set above based on menu
REM selections.
loadcepc /v /e:%NET_IOBASE%:%NET_IRQ%:%NET_IP% %RES% eboot.bin
goto END
:CLEAN
:END
其实这个注释蛮清楚地,一看就能明白亚,不过还是简单介绍一下。
SET语句是用来设置环境变量。的前面三个是用来设置网卡的,如果要从网络来loader os,(网络loader相关问题可参看http://www.cnblogs.com/goodleaf/archive/2009/12/16/1625848.html)那么最好设置一下,不太推荐使用DHCP。IRQ和IOBASE就设0就可以,IP的话根据自己的环境来吧。
IF和Goto语句是用来控制跳转,这个好简单,似乎不用介绍。这个Autoexec.bat简单的说就是根据不同的启动项,来执行不同的Loadcepc语句。可以加载不同的参数,也可以load不同的os。举个例子,可以在nand里面放多个os image。比如nk.bin,nk1.bin,nk2.bin。其中nk.bin是800*600的,nk1.bin是640*480,而nk2.bin是thin client。
总的来说X86架构下WinCE利用MSDOS进行多重启动的配置对于开发人员来说是比较好用的,特别是为了教学,培训之类的时候会比较方便。如果拿去做最终的用户产品,估计会被老总pia飞吧,呵呵。