基于Linux的Gameboy模拟器移植和优化研究

发布者:廿由人最新更新时间:2009-02-27 来源: 计算机仿真关键字:嵌入式系统  模拟器  移植  优化 手机看文章 扫描二维码
随时随地手机看文章

引言

  面向A R M微处理器构架的嵌入式操作系统的使用量这些年持续增长,在各种嵌入式操作系统中, L inux是获得支持最多的第三大力量。

  目前,ARM L inux支持包括ARM610、A RM710、ARM720T cores、ARM920T cores、StrongARM 110、StrongARM1100、XScale等系列的ARM处理器。

  Gameboy是目前比较流行的8位掌上游戏机,通常被简称为GB,它的最终态Game Boy Color (GBC)是完全向后兼容的。Gnuboy是GB /GBC的软件模拟器,是一种自由软件,它是基于Qt系统的,能够运行几乎所有的黑白和彩色的GB /GBC游戏ROM,但运行复杂一些的游戏需要在速度上得到加强,同时它的声音还没有得到测试。

  Gnuboy已经实现了i386汇编代码的一些优化工作,能够在奔腾机器上运行良好,除此之外,到目前为止,它能够运行的平台还很有限。随着嵌入式系统设计技术的发展,PDA、Smartphone等嵌入式产品的功能不断地得到扩展,适应用户的需要, Gnuboy在嵌入式产品中的移植应用非常具有前景。目前Gnuboy在ARM Linux下还没有得到很好的应用,本文就是在构建的基于ARM920T Linux的嵌入式平台上对gnuboy运用进行的尝试性工作,同时, Gnuboy作为一种虚拟机技术,本文的工作对研究虚拟机技术在ARM L inux中的应用也具有一定的价值。

硬件环境

  本实验测试板采用Motorola公司的MX1 Lite,系统的主要模块有处理器内核模块、用户接口模块、连接设备模块等,如图1所示,下面分别进行介绍。

      1)处理器内核模块采用v4T体系结构的ARM920T 内核拥有16K的指令缓存和16K的数据缓存; 外部接口模块提供了最多6 个片选信号来访问外部设备,其中连接的12Kx16bits的NOR Flash 经过配置用于系统启动; SDRAM 控制器提供了对使用32Mx32bits的SDRAM的访问控制。

  2)用户接口模块由于MX1 L ite没有模拟信号处理模块,无法直接接收触摸屏的输入,所以本系统采用了TI的TSC2301芯片来支持触摸屏的输入功能,它与主芯片通过连续外设接口协议连接,它不仅可以接收触摸屏的输入,而且它还支持声音数模转换和输入输出等功能; LCD 控制器用于给外部液晶显示屏提供显示数据,LCD采用了Sharp 的20x240 HR - TFT LCD,它支持触摸屏输入,分辨率为320x240。

  3)连接设备模块包含有多媒体卡/数字安全主机控制模块、内存棒控制器和智能卡接口,以此来连接用于外部存储的多媒体卡。

Gnuboy软件结构和一些工具软件

  Gnuboy是基于Qt系统的,可从图2中看出它和整个系统的关系。本文构建的基于ARM920T的嵌入式L inux平台下采用的是嵌入式系统的QT 版本: QT/Embedded 和Qtop ia(QPE) ,这有助于模拟器的移植。

QT/Embedded和Qtopia

  QT/Embedded和Qtopia是著名的QT库开发商TrollTech开发的基于Framebuffer、面向嵌入式系统的QT版本。它的特点是界面美观、色彩配比好,使用与QT/Windows和QT/X11 完全一致的AP I接口,许多基于QT的程序可以非常方便地移植到嵌入式系统。Qtopia 包括了全套的个人信息管理PIM,如地址本、日程安排、游戏、配置工具等。QT/Embedded实现了对下层输入设备的驱动和底层图形接口以及各基类和AP I,它在编译后生成函数库被应用程序调用。Qtopia也是以客户/服务器的方式,通过消息机制来管理各种应用程序。图3描述了QT应用程序的执行方式及系统结构,其中X Server是核心。

一些工具软件

  移植前需要在宿主机上建立ARM 的交叉编译环境,主要用到的开发工具包括三个部分: binutils、gcc、glibc。

  ● Binutils — 用于操作二进制文件的实用程序集合,包括诸如汇编器as、二进制转换工具( objdump、objcopy) 等这样的实用程序;

  ● Gcc — GNUC编译器(C编译器gcc和C + +编译器g + + ) ;

  ● Glibc —所有应用程序将链接到的C库。

  可以直接从Internet上下载已经编译的二进制文件安装到PC机上,并相应设置比如路径等这样一些比较简单的参数即可使用,但必须保证编译时所用的函数库版本与目标板上运行时所使用的函数库版本的一致。ARM Developer Suite它是全套的实时开发软件工具包,编译器生成的代码密度和执行速度优异,可快速低价地创建ARM结构应用。

移植和优化

  Gnuboy是一种虚拟机机制,它对具体硬件的操作是通过操作系统(这里是L inux)来进行的,图4 为它对基于ARMlinux平台硬件操作的抽象层次。

      这个抽象层次也适用于在ARM Linux平台下用C语言编写的一般虚拟技术应用。越是顶层越是抽象,代码可移植性就越好;越是底层,越是硬件相关,代码可移植性就越差,但代码执行速度越快。这也是一般虚拟机移植和优化思想的体现,提高移植性,多运用抽象的接口,提高速度,多一些直接操作硬件的代码。

[page]

移植

  Gnuboy在此平台上的正确运行需要解决中断、提供Framebuffer支持、数据存储格式、字符串到64位整数转换等问题。

      中断问题

  Gnuboy需要依赖宿主操作系统(这里是L inux)来提供输入/输出等基本服务,让宿主操作系统作为它与硬件设备的中间人,这种游离于硬件通信细节之外的方法具有良好的可移植性,本文要解决的主要是提供对键盘输入和游戏控制终端的中断响应和处理。

  在本文构建的平台下,需要编写相应的键盘和游戏控制终端的Linux驱动程序,以模块方式加载后,在Gnuboy中打开该设备。对应键盘处理,在Gnuboy中需要调整相应的键盘设置代码使之与系统一致。

  提供Framebuffer支持

  Framebuffer技术提供了一个访问物理图形设备的定义良好的接口,本文构建的平台下采用的是Qt系统的嵌入式版本,它是基于Framebuffer的, Gnuboy要在该平台下运行,必须提供对Framebuffer的支持。通过访问/dev/ fb0来取得系统framebuffer中用于显示图像的数据和进行处理。在Gnuboy中调用游戏画面的Framebuffer地址和扫描方法也需要作响应的修改。

  修改Framebuffer地址,也就是获得游戏画面的开始地址在内存中的位置。针对采用的LCD 的分辨率, 需要在Gnuboy中计算Framebuffer地址处做出相应修改。对于本平台中采用的LCD, Gnuboy刷新处理方法是从第一行开始,逐行刷新,同时由于一个像素采用两个字节,因此在逐行刷新时,每次写两个字节。

  数据存储格式和字符串到64位整数转换

  在ARM Linux下可配置成大数端或者小数端格式来保存和处理整数数值,在Gnuboy中与数值存储字节顺序有关的代码需要与之对应。

  Linux明显缺乏用来把整数字符串转换为64位整数的函数,如果字符串参数突破32位的极限,就有可能出问题,因此在Gnuboy需要提供字符串到64位整数的的转换函数。

  设置启动模拟器路径和编译

  在用户已经选择好游戏Rom,点击launch simulator按钮触发启动模拟器,进入游戏功能,因此在Gnuboy代码中需要获得rom的绝对路径,由于QT操作系统无法在代码中直接运行qtop iagnuboy命令,因此需要给出该可执行文件的绝对路径。

  源代码修改好以后,在Makefile中设定交叉编译器: CC= arm - linux - gcc, CXX = arm - linux - g + +。编译时要用到针对ARM的函数库可以把函数库放在一个自己建的一个目录,为了让gcc 在搜索函数库时到指定的目录中寻找,可在Makefile的通过- L参数添加存放针对ARM函数库的目录。例如QTOP IA L IBS = - L $(QPED IR) / lib。

  经过交叉编译后把得到的可执行文件qtop iagnuboy和qtop iagnuboyl烧到嵌入式系统中可以运行,然后不足之处是画面速度有些慢,这正是下面优化要研究的问题。

Gnuboy在ARM Linux下的优化

  优化概述

  如果说CISC的指导思想之一是为了减轻编译的负担,R ISC则向编译提出了更高的要求,ARM作为一种R ISC体系结构,优化问题显得非常重要。从图4 的抽象层次可以知道,对Gnuboy的优化问题,概括来说是对它一些抽象代码进行硬件相关代码替代的过程,并且越是底层的代码,速度越快,这里直接用ARM汇编语言来改写一些原来的C函数。前面的移植运行结果已经显示, Gnuboy的图像显示较慢。它的函数void lcd refreshline ( )的主要功能是使用已经解码好的图像数据来完成游戏画面的显示。对它的优化主要是对它里面调用的两个用C语言所写函数updatepatp ix ( )和bg scan color ( )函数的优化。

  本文采用了与机器相关优化的优化技术,与机器相关的优化这里主要是寄存器分配问题,一般寄存器分配算法是基于一种称为图着色技术的。给定一个无向图G= (V , E ) ,V 是有限节点的集合,V = { v 1, v 2, ., v n} , E是边的集合, E = { ( i, j ) | v i∈V , v j∈V , v i和v j相连} , 图着色问题要求找到一个k尽量小的所有节点的赋值(也称“完全赋值”) C: V — > {1.k } , 要求在该完全赋值中, 若( i,j ) ∈E , 则C ( v i) ≠C ( vj) 。

  简化的图着色技术应用

  针对本文的优化,第一阶段是把C函数用伪ARM汇编指令(即用符号寄存器Ui替代真正ARM寄存器的ARM指令)改写。

  第二阶段对符号寄存器U1~Un ( n > 15)画出相干图并进行着色,所谓对图进行着色是指给图中的每个结点赋予一种颜色,而且所有相邻的两个结点都具有不同的颜色。这样,每种颜色就对应于处理器中的一个实际的物理寄存器,如此着色保证了所有可能发生冲突的符号寄存器都被赋予不同的物理寄存器。

  假设n + 1个符号寄存器的相干图如图5 ( a)所示,其中结点是符号寄存器,而结点之间的弧线表示变量的生命周期有重叠,最少需要16种颜色才能避免相连结点颜色有重叠。由于ARM920T只有r0~r14等15个寄存器可用于存储程序变量,小于16,也就是存在寄存器冲突问题,这个时候就可以通过选择删除一个结点(如图中Un + 1) ,也就是把U6对应的数据存储到存储器中,以后再重装入寄存器来达到对各寄存器进行释放的目的,见图5 ( b)所示,虚线圆圈表示符号寄存器U16对应的数据转存到存储器中。

      用上面介绍的方法对updatepatp ix和bg scan color函数进行处理,得到的ARM汇编函数,用它们替换掉gnuboy源代码中原先的C函数并进行编译生成可执行文件,可执行文件在构建的测试板上运行良好。下面对上面提到的优化来进行一些测试。

      测试评估

  用CodeWarrior forARM Developer Suite和AXD Debugger软件测试优化前后函数的运行时间,结果如表1所示。图着色技术强调实现活跃变量的100%分配,并且代码需要寄存器数量越多,优化效果越明显,这从updatapatp ix和bg scan color函数的优化中可以看出(前者代码较后者复杂,需要存放的临时变量也多) 。进一步优化gnuboy,可用类似的方法替换源代码的另外一些影响速度较大的函数。

总结

  本文构建了一个基于ARM920T嵌入式Linux的实验平台环境, gnuboy作为一种虚拟机,应用到这样的嵌入式环境中遇到的问题具有一定的代表性,最需要解决的问题是速度问题,针对于此,本文实现了它在所构建的平台上的移植和一些优化研究。

关键字:嵌入式系统  模拟器  移植  优化 引用地址:基于Linux的Gameboy模拟器移植和优化研究

上一篇:嵌入式可重构的多DSP图像并行处理系统
下一篇:Windows Embedded力拓培训和认证计划

推荐阅读最新更新时间:2024-05-02 20:46

stm32 移植cJson 注意free释放内存
关于怎么移植的网上有很多参考文档,也很简单,因为cjson只有2个文件,一个cJSON.c 一个cJSON.h文件。 我用的是原子的stm32 工程文件 测试 ,他们有自己定义的malloc.c malloc.h,很方便可以直接用。 需要修改的就是下面:把原本的json malloc 和free替换成我们自己的,如下代码 static void *(*cJSON_malloc)(size_t sz) = malloc; static void (*cJSON_free)(void *ptr) = free;---------------------------------------- void *(*cJSON_m
[单片机]
stm32 <font color='red'>移植</font>cJson 注意free释放内存
优化解锁闪绿问题:Redmi向K30 Pro用户推送稳定版更新
IT之家4月27日消息 据IT之家网友反馈,Redmi手机官方近日面向K30 Pro用户推送稳定版更新,进一步优化用户使用体验。 此次更新版本号为MIUI V11.0.16.0,更新大小370MB,带来了声音视效、短视频万花筒、视频工具箱等新功能,官方更新日志如下: 系统:新增声音视效功能。息屏时配合音乐展示酷炫视效。 锁屏:优化息屏解锁成功瞬间闪绿问题。 相机:新增短视频万花筒功能,优化AI 8K视频支持电影画幅。 设置:全新视频工具箱上线。
[手机便携]
<font color='red'>优化</font>解锁闪绿问题:Redmi向K30 Pro用户推送稳定版更新
派睿电子为电子工程师带来模拟器件采购新体验
  多渠道、提供高品质服务的电子元器件分销商派睿电子宣布,将进一步扩展其“360°设计整合采购方案”,为广大电子设计工程师量身打造针对模拟器件设计的全新元器件采购模式。此举是继去年在“360°设计整合采购方案”推出嵌入式系统后,派睿电子在模拟设计领域对广大电子工程师实现设计的又一切实举措。   派睿电子此次库存扩充集合了诸如ADI, Maxim, ST以及Texas Instruments等业界顶尖厂商的一线产品,并根据广大电子工程师们对模拟器件的设计需求,通过亚太区的统一调配,使中国电子工程师在第一时间获取其设计所需的各类模拟器件。不仅如此,随着TI库存15,000 SKU 的加入,大大扩充了派睿电子在模拟器件方面的本地库存
[模拟电子]
在MC68HC908GP32上移植μC/OS-II
在前几讲中,介绍了μC/OS-II的概念、工作机制,还介绍了μC/OS-II在Intel 80X86CPU上的移植,相信读者通信学习,已经对移植的过程和步骤有了一定的了解。ΜC/OS-II最初是为摩托罗拉68HC11系列单片机设计的。68HC11系列单片机有外部总线,可以外接RAM和ROM;而没有外部总线8位MCU。由于RAM容量的限制,移植就存在一定的困难;但对于有些8位的MCU,将μC/OS-II移植到MOTOROLA MC68H908GP32(以下简称GP32)上。 一、在GP32上移植μC/OS-11的主要问题 在第(4)讲中,介绍过要移植μC/OS-11,目标处理必须满足以下要求:
[应用]
两种嵌入式系统设计模型研究
1 引 言 当今,在嵌入式领域,嵌入式技术已经成为新的技术热点。嵌入式系统的最典型的特点是它同人们的日常生活紧密相关,小到MP3、PDA等微型数字化设备,大到信息家电、智能电器、车载GPS等形形色色运用了嵌入式技术的电子产品和各种新型嵌入式设备在数量上现已远远超过了通用计算机。在嵌入式设备发展的30多年的历史中,嵌入式技术从来没有像现在这样风靡过,人类也从来没有像现在这样享受嵌入式技术带来的便利。 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 从整体来看,我们将嵌入式系统分为两个部分;第一个部分是与应用相关的硬件平台,它负责和外部环境进
[单片机]
两种<font color='red'>嵌入式系统</font>设计模型研究
自制式嵌入式系统RTOS
 为了维持对软件编码的控制并减少商业操作系统的成本,“自制式”嵌入式系统的设计者们一直努力在他们在产品中减少RTOS的份额。   现在,有了一种更好的方法。   以SynthOS为代表的软件产品能够为设计者提供一种RTOS,它采用了一种自动控制技术,减少了软件开发过程中沉闷繁琐的工作。而且以这种方法编写的软件产品的代码也是完全可见的。   使用这种系统时,开发者可先用C代码写下软件任务(就是那些用商业RTOS也能完成的基本任务),然后在其中添加简单的SynthOS陈述,即“原语”。这种规定任务间通讯和操作系统参数的“原语”,以及简单的配置文件,就是产品要求程序员给出的全部输入了。利用这些可利用的模块,SynthOS可形
[嵌入式]
U-Boot移植(16)ylp2410网卡dm9000aep
这几天真被dm9000aep折磨的受不了,在今晚12.5终于宣告对它的完美征服,回顾这几天的历程,真是一波三折。 1、首先我要说的是dm9000aep和dm9000是不一样的,虽是同一个公司的网卡,但是前者是后者的升级版,如果直接把u-boot下的网卡那部分程序拿来用,最终烧到优龙板里后在u-boot下是实现不了tftp的,因为之前我已经在pc机上搭建成功tftp平台了。 注意下面的红体字 一开始我真的以为dm9000aep和dm9000是一样的,所以其它部分移植成功后,就把u-boot直接烧到板里,结果出现如下错误: OpenJTAG ping 172.22.136.38 ERROR: resetting DM90
[单片机]
U-Boot<font color='red'>移植</font>(16)ylp2410网卡dm9000aep
霍尼韦尔推出新型厚度检测传感器 优化锂离子电池生产
中国上海,2021年4月7日 – 霍尼韦尔(纽交所代码:HON)近日宣布推出一款专为优化锂离子电池生产而设计的厚度检测传感器。该新型传感器主要用于在锂离子电池生产中的涂布和辊压过程中高效测量极片的真实厚度。精确的厚度测量值是优化电池性能的一个关键指标。 对于锂离子电池厂商而言,电池生产线的涂布和辊压环节有着苛刻的工艺要求。确保基材上下两侧涂覆均匀对于电极片生产尤其重要。通过精确测量涂层厚度,可以控制横向 (CD) 和纵向 (MD) 的涂布,以及后续的辊压质量。 霍尼韦尔为全球锂离子电池厂商供应先进的传感器和控制器,迄今已有20多年的历史。其先进的厚度测量传感器技术具有低至0.5毫米的超高分辨率,无需申请监管批准或增加辐射屏
[传感器]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved