触摸屏如何玩街机:将xmame移植到arm 触摸屏很详细的移植过程

话不多说,直接开始,下面是将xmame基于sdl移植到arm触摸屏上的过程。

一  先安装虚拟机。

ubuntu 12.04


经过几个步骤,我们就把虚拟机安装好了。这是一个新的虚拟机。


按住


安装好虚拟机之后。就可以开始我们的xmame移植过程了。


需要的文件

1) 源码:

SDL-1.2.13.tar.gz

xmame-0.106.tar.bz2

2) 编译器。

arm-none-linux-gnueabi-gcc





二 将源码编译和移植。

1 先移植sdl,因为编译xmame是需要依赖sdl的。

1.1 将SDL-1.2.13.tar.gz 考虑到虚拟机



1.2 配置

执行 ./configure --prefix=/home/sdl CC=arm-none-linux-gnueabi-gcc --host=arm-none-linux-gnueabi-

将sdl的安装目录放到/home/sdl下。

1.3 执行编译和安装。

make 

make install

如果不出意外的,就编译成功,并把sdl所需要的文件拷贝到/home/sdl目录下了。




1.2 xmame的交叉编译。(重点)

xmame的编译,基本占移植工作的80%。SDL因为没有其它依赖项,所以只要指定编译器,基本都可以编译成功。而xmame这个就复杂多了。需要根据不同的平台作出修改,还有根据不同的系统制定不同的编译器,以及还要根据显示模式,指定是使用sdl方式还是x11方式。基本X11的文章最后可以讲一讲。

1.2.1 文件的修改。

将xmame-0.106.tar.bz2 源码拷贝到虚拟机里。



需要修改文件。主要是修改两个文件:cpu.mak,makefile.unix。

主要是修改makefile,启用sdl,不使用x11。指定编译器,xmame的安装路径

文件目录

F:\xmame\src\sdlmame\xmame-0.106\xmame-0.106\src\cpu\cpu.mak




$(OBJ)/cpu/m68000/%.o: src/cpu/m68000/%.c

         @echoCompiling $<...

         $(CC)$(CDEFS) $(CFLAGS) -I$(OBJ)/cpu/m68000 -c $< -o $@


修改为:

#$(OBJ)/cpu/m68000/%.o: src/cpu/m68000/%.c

         #@echoCompiling $<...

         #$(CC)$(CDEFS) $(CFLAGS) -I$(OBJ)/cpu/m68000 -c $< -o $@

$(OBJ)/cpu/m68000/m68kmake.o:

src/cpu/m68000/m68kmake.c

         @echoHost compiling $<...

         $(HOST_CC)$(CDEFS) $(CFLAGS) -I$(OBJ)/cpu/m68000 -c $< -o $@



$(OBJ)/cpu/m68000/m68kmake$(EXE):

$(OBJ)/cpu/m68000/m68kmake.o $(OSDBGOBJS)

修改为


$(OBJ)/cpu/m68000/m68kmake$(EXE):

$(OBJ)/cpu/m68000/m68kmake.o $(OSDBGOBJS)

         @echoHost linking $<...

         $(HOST_CC)$^ -o $@




修改文件:

F:\xmame\src\sdlmame\xmame-0.106\xmame-0.106\makefile.unix


CC    =@gcc

修改为:

CC    =@arm-none-linux-gnueabi-gcc


HOST_CC = $(CC)

# HOST_CC = @gcc


修改为:

#HOST_CC = $(CC)

HOST_CC = @gcc


AR = @ar

AR_OPTS = rc

修改为:

AR = @arm-none-linux-gnueabi-ar

AR_OPTS = rc


将RANLIB = @ranlib

# RANLIB = @true

修改为:

RANLIB = @arm-none-linux-gnueabi-ranlib

# RANLIB = @true


# Uncomment next line to build expat as

part of the build.

# BUILD_EXPAT = 1


# Uncomment next line to build zlib as part

of the build.

# BUILD_ZLIB = 1

修改为:

# Uncomment next line to build expat as

part of the build.

BUILD_EXPAT = 1


# Uncomment next line to build zlib as part

of the build.

BUILD_ZLIB = 1


PREFIX = /usr/local

修改为:

PREFIX = /home/xmamesdl/


# i386, GNU asm

MY_CPU = i386

修改为:

# i386, GNU asm

MY_CPU = arm


# X11 (including Glide & OpenGL if

enabled below)

DISPLAY_METHOD = x11


# SDL library

# DISPLAY_METHOD = SDL

修改为:

# X11 (including Glide & OpenGL if

enabled below)

#DISPLAY_METHOD = x11


# SDL library

 DISPLAY_METHOD = SDL


# The name of your sdl-config executable

SDL_CONFIG    =sdl-config


修改为

# The name of your sdl-config executable

SDL_CONFIG    =/home/sdl/bin/sdl-config





1.2.2 编译。

将这两个文件修改之后,就可以执行make了。

如果你是使用和我一样的虚拟机版本,一样的配置,一样的修改,基本上都可以编译成功。


1.2.3 将编译后的文件install。也就是提取。

执行make install。有些可能需要执行sudo make install.


然后在我们的指定的安装目录下/home/xmamesdl 就可以看到




到这里基本上就成功一半了。

如果你是跟着我的过程一起编译的,请先不要激动。

如果你只是纯粹看文章的,请忽略以上两句话。


三 将文件拷贝到触摸屏里。

1 sdl文件的准备。

 将sdl的文件拷贝到触摸屏同目录下。

bin目录对应bin目录,

lib目录对应lib目录。



2 xmame的文件拷贝。


xmame的这个bin目录,主要就是主程序了。只要库文件在触摸屏里,这个主程序可以放到其它目录执行。

3 游戏文件的准备。

xmamerc,neogeo.zip,kof97.zip

当你完成前面两步的时候,基本上就执行程序了。也就是你的xmame程序是可以运行的。

这个可以运行,只是说你交叉编译是对的。但是不代表你可以玩游戏。

剩下的操作,就需要根据xmame需要的文件准备一下,放到xmame需要的目录下就行了。

需要准备下配置文件xmamerc

xmamerc 这个配置文件呢,指定了rom包的目录,你需要将游戏放到这个目录下。

还需要一个neogeo.zip来作为游戏的启动。

这时候就可以将kof97.zip放进去,执行xmame,就可以玩拳皇97啦。

不过,是用键盘玩的,我没有试过使用游戏手柄玩。这要看你触摸屏里有没有支持游戏手柄的驱动。


所以,移植完成之后,所需要的东西有:这个是编译之后的文件打包




让我们来看一下游戏画面:


有没有很刺激。这时候你只需要到网上去找一些rom游戏包就可以了,你就拥有了一个街机了。



问题区:

以上过程,属于一遍过,中间没有什么错误阻挡的时候才看到的情况。

说到这,让我想起一个段子,某程序员写了个很长代码,然后编译,直接通过,没有任何错误,这种激动的心情很想忍不住与他女朋友分享,和她女朋友说了之后,对方只回了个哦字。。

好吧,我又想多了。当我移植完这个街机的时候,才发现,我没有女朋友。

有可能你实际中会遇到各种问题。

优先,编译器问题不在这里探讨。


1 程序执行,可能会出现sdl一些错误。当然,前提是你需要将lib放好。下面讨论的时候xmame执行后,提示的一些错误。

比如

SDL Error: could not find a suitable 

或者

video_init failed

或者

SDL Error: could not find a suitable mode

诸如此类提示和SDL相关的问题。

这些问题怎么来的呢。这些问题主要是和你触摸屏的液晶显示有问题。

比如你LCD的分辨率,是16位色还是24位等,以及你启动xmame的方式。

是全屏模式,还是普通模式。

在启动程序的命令行参数没有错误的情况。以上遇到的错误都可以在一个文件里修改。

xmame-0.106\src\unix\video-drivers\SDL.c这个文件里。


其中,主要是在这个函数:

int sysdep_display_driver_open(int reopen):

在这个函数里,是初始化和LCD的相关信息,比如是全屏运行呢,还是什么模式运行。

在这个函数里,需要根据你的触摸屏去修改相应的一些变量和参数,主要是看你的触摸屏支持哪些参数,或者你运行过程中,哪些参数不行,你就一个个试。


还有这个SDL_SetVideoMode。

当然你要看你的错误提示是哪一句,你再逐个参数去试应当行了。


2  游戏的准备。

由于这个xmame街机是基于sdl模式的,不是所有的rom包都能正常执行的。所以,当你不能正常打开游戏的时候,适当的怀疑一下是不是rom包的问题。


好了。

到这里基本就是这个xmame基于sdl的移植过程了。

我之前移植过x11,或者你也想打算移植x11的。

优先xmame基于x11的话,你需要先移植x11。

同时移植x11则依赖很多很多的库,实在是太多了。就不一一列出来的。不像sdl这个不需要依赖别的,比较方便。


-----------------------------------------------------------------------------------------------------------------------------------------结束分割线

你能看到最后,也不容易。

如果你在移植过程中,还是遇到问题,你可以留言。如果你不好意思留言,那怎么办呢。

如果你要联系楼主:

1 请先了解一下我所在的公司的主页:

http://www.flexem.cn

 我们公司有各种型号的触摸屏,还有32寸的触摸屏。想想用32寸的触摸屏玩街机,一下子回到童年的感觉。

2 找到公司前台的电话,咨询一下我们的触摸屏。

    当然,我们公司除了有触摸屏,还有物联网产品,可以远程参数数据,远程监控PLC等,对plc程序远程上传,下载等。

3 我们平台会根据你所在的区域,把相应区域销售的电话给你。

当然,如果你真的想了解我们公司的产品,也可以让我们的销售主动联系你。

4 当你和我们的销售聊得差不多了,就可以下单买个几百个触摸屏。

5 然后你和销售说,你们想在触摸屏玩游戏。

    这时候,我们的销售就可以申请让我出差。

通过以上步骤,你就能联系到我了。

如果你不考虑买触摸屏,回到步骤2.

打电话到我们前台,你说找一下你们公司又会写程序,又会写文章,诗一般的帅哥。

如果前台美女笑了,你可以要到我的联系方式。

相反,你可以挂机了。

你可能感兴趣的:(触摸屏如何玩街机:将xmame移植到arm 触摸屏很详细的移植过程)