Andrew Haung 转载请注明作者及联络方式
dosbox是针对x86的的DOS模拟器。它可以运行在Linux/Windows之上。这样原来DOS下很多工具和游戏就可以直接运行起来。
它的底层基于SDL。
一.RHEL的安装
----------------------------------------------------------------------
1.到官网下载源码.
源码:
要求正确编译SDL/SDL_image/SDL_ttf/SDL_mixer/SDL-net
./configure
make
make install
在图形界面下运行dosbox,显示如下界面表示成功
与Linux交换文件。需要在dosbox下用mount命令把某一个目录虚拟成DOS盘符.
mount <盘符>
如 mount C:/ /home/hxy
把仙剑的DOS版拷入/home/hxy.
然后进入C:/SDLPAL 执行 pal.即可显示如下界面
DOS游戏下载
我下了其中的阿拉丁,运行中的INSTALL.bat c:\aladdin2,然后在aladdin2运行aladdin.exe
二.ARM版本下的移植
--------------------------------------------------------------------
1.它需要SDL/SDL_net/SDL_sound/alsa库。因此在此这前必须移植这几个库
libSDL_sound库的移植
下载
生成Makefile
./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux
dosbox移植
./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --disable-opengl --with-sdl-prefix=$PWD/../../output/arm-linux --with-alsa-prefix=$PWD/../../output/arm-linux
在开发板上运行dosbox。第一次运行会生成配置文件。它是自动在当前目录下
.dosbox/dosbox-0.74.conf
但是分辩率不一样。需要调整。
dosbox.conf 这里需要将其设为
fullresolution=480x272
fullscreen=true
这个选项在开发板上一运行就死掉。用缺省的分辩率也总是比屏幕大。
最后不得以打开源码发现在src/gui/sdlmain.c下的
static void show_warning(char const * const message)发现用
if(!sdl.surface) sdl.surface = SDL_SetVideoMode(640,400,0,0);
换成如下语句
if(!sdl.surface) sdl.surface = SDL_SetVideoMode(480,272,16,0);
另外发现dosbox的SDL全屏模式采用直接采用SDL的全屏硬件模式,这个开发板上好象并未支持,因此挂掉比较正常
另外在下面
SDL_Surface* splash_surf = SDL_CreateRGBSurface(SDL_SWSURFACE, 640, 400, 32, rmask, gmask, bmask, 0);
换成
SDL_Surface* splash_surf = SDL_CreateRGBSurface(SDL_SWSURFACE, 640,320, 16, rmask, gmask, bmask, 0);
但是重编译仍然显示不正常,show_warrning只是部分调用。后再读代码发现是按VGA的缺省配置来设置的。
启动画面:
src/gui/sdlmain.c::GUI_StartUp()
另外我的SDL是用oss而非alsa.这样比较简单。因此需要在
[MIDI]中把mididevice=default 改成mididevice=oss
打开oss
另外需要[autoexec] 可以写自动命令
一般会把几个目录自动mount成DOS 盘符
比如 SD卡的路径 /udisk 指定d:盘
mount d: /udisk
mount c: /game/dos
阅读(3607) | 评论(0) | 转发(0) |