Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1683006
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: 嵌入式

2011-09-23 20:01:29

Andrew Huang 转载请注明作者及出处

  在做通实验后,开始将这个函数库加入到Linux的SDL库当中.

 关于Post Process的简单实验和函数库,请参见我的博文件

  我开始考虑将其加入到SDL的显示功能当中,这样SDL_fbvideo.c加入一定补丁代码修改后.新的功能加入到SDL库,这样所有利用的SDL库的软件均可以在不修改代码的情况下,利用为硬件缩放代码在自由的在不同尺寸屏幕上显示.这样以前很多无法移植的SDL程序就可以简单移植到S3C6410开发板上。

  比如我以前移植失败的Dosbox.

  因为绝大部分游戏模拟器都是采用SDL作为底层显示库,所以利用这个功能,我们可以把S3C6410打造一个超级游戏机,当然从成本上来说,比一般MP4的游戏机贵了很多,但是强劲不少。

 一.SDL tank移植 
 
   SDL tank 是模拟红白机一个经典游戏,这个游戏有人用SDL来移植,但是因为其它地图采用二维数组来表示,与图片的高宽度有很重大的关联,因此一但修改了分辩率,其地图要全部重画,工作量不少。以前有不少学生试着移植到Linux开发板.均告失败或者功能损失很多。

   原程序是针对640*480 16bpp的显示。
    源码可以从这里下载 
  如果在480*272的4.3"屏幕上显示,最快方法是用硬件缩放
   Makefile的修改
     
  1. MAIN = tank
  2. CROSS=arm-linux-
  3. CC = $(CROSS)g
  4. CFLAGS =
  5. PRJ_HOME=$(PWD)/../../output/arm-linux
  6. #INCLUDE = -I/usr/include/SDL
  7. INCLUDE = -I$(PRJ_HOME)/include
  8. LIBS = -L$(PRJ_HOME)/lib -lSDL -lSDL_image -lSDL_mixer -lts -lfreetype -lpng -ljpeg -liconv -lmad -lz
  9. HEADER =
  10. OBJS = draw.o function.o game.o hit.o init.o keyevent.o newtank.o test.o
  11. all: $(MAIN)
  12. .cpp.o:
  13. $(CC) -c $(CFLAGS) $(INCLUDE) $<
  14. $(MAIN): $(OBJS)
  15. $(CC) -o $(MAIN) $(OBJS) $(LIBS)
  16. clean:
  17. rm -f *.o a.out $(MAIN) core *~
  这里的运行,采用按键的input event驱动,用来模拟键盘的按键,并且重新调整了按键对应用,让第一个用户使用光标键移动,回车键开火,这样开发板上的按键即可操作一辆坦克.如果两个游戏者可能用USB键盘来操作.
  
  基本移植后,声音和操作正常
  

二. Dosbox ARM的移植

  1.基本版本的移植
     可以参考的我文章 
   生成Makefile 
    
      ./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

    编译 make 
    安装 make install
   最后需要在bin目录写一个run_dos.sh来运行dosbox

  2.关于dosbox的配置文件
    在运行dosbox后,会自动生成一个配置文件 ~/.dosbox/dosbox-0.7.4.conf .修改其中一行配置让软件在开发板运行更加方便
   
   关于按键错误
    ARM-LINUX下或者桌面机的VGA=788frame buffer的模式情况下运行DOSBOX,USB键盘按下的键与实际的显示的键全部错位.
    比如在DOSBOX控制台下输入z,则显示j.这样的游戏机无法正常运行,而在X11中无此问题.

     经过分析和打印运行中间结果,发现是运行中没有采用SDL的按键而且采用扫描码来取得健值原因,必须将配置文件中的默认的usescancodes=true, 改为 usescancodes=false

    
 关于在dosbox运行游戏
    
   在开发板上运行dosbox玩游戏有两种办法,一种是接上USB键盘直接在DOSBOX控制台输入DOS命令。别外一种方法是直接把DOS命令系列写在配置文件的AUTOEXEC 段中,这样将一启动DOSBOX就会自动运行游戏.

  两种方法输入命令都一样的。
 
  因为dos程序都是运行在DOS盘符之下(跟WINDOWS一样), 首先要用扩展命令MOUNT把某一个目录映射成盘符
  mount y /home/hxy/aladdin  #将/home/hxy/aladdin 映射成DOS下的Y:

  然后把DOS游戏拷入这个目录下,然后直接用这个路径运行程序。

运行游戏阿拉丁神灯
  
  运行游戏阿拉丁神灯这个游戏为例演示如何安装和运行DOS游戏。
 
  它程序是用DOS下的压缩软件lha.exe打包发行的,因此要用LHA来解压。将游戏压缩包拷入DOS盘符的根目录。 假设是 /home/hxy/aladdin

  在[AUTOEXEC]段输入如下命令
    
  1. MOUNT Y /home/hxy/aladdin
  2. Y:
  3. MKDIR   Y:\ALADDIN
  4. INSTALL.BAT Y:\ALADDIN\
  
安装成功后再直接执行ALADDIN
  1. MOUNT Y /home/hxy/aladdin
  2. Y:
  3. CD \ALADDIN
  4. SETSND
  5. ALADDIN

 
 
阅读(2961) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

pigtty2011-10-20 19:51:48

黄老师...踩踩你到播客