GBA模拟器移植

百度网站



一、下载gpsp 源代碼

gpsp源码
在这里插入图片描述
解压文件

7z x gpsp.7z 

二、gpsp环境配置

gpsp需要SDL环境我们先在bulidroot中添加SDL包

make menuconfig
Target packages  ---> 
	Graphic libraries and applications (graphic/text)  --->
		[*] SDL 

我们全选SDL路径下的所有选项
在这里插入图片描述

在这里插入图片描述

打开之前解压的 gpsp 文件夹配置Makefile

cd gpsp/bittboy
vi Makefile

添加 buildroot 的 gcc 编译器
在这里插入图片描述
告知 SDL.h 位置以及 SDL 元件库位置
在这里插入图片描述

其实很简单在buildroot文件夹搜索 sdl-config 位置在哪里,然后在Makfike里替换自己的路径就可以了

尝试编译看到编译成功
在这里插入图片描述
我们把文件传入板子里运行看看什么情况
在这里插入图片描述
提示需要一个 Gameboy Advance BIOS 文件我们网上搜索之后放入文件在运行试试看
Gameboy Advance BIOS
在这里插入图片描述
**非常好,运行后发现直接段错误,经过一顿找问题调试下,在晕哥的指导下终于找到问题所在 SDL_Init出错 **

export SDL_NOMOUSE=1

再次运行我们发现已经不再报错了
在这里插入图片描述

我们下载一个 gba rom 文件运行试试看效果
gba rom下载地址

alsactl restore -f /var/lib/alsa/asound.state  声卡配置
export SDL_NOMOUSE=1
./gpsp kdyg.gba

可以看到运行起来了,画面已经跑起来了
在这里插入图片描述
在这里插入图片描述

没声音的话别忘了打开声卡,设置声卡配置

alsactl restore -f /var/lib/alsa/asound.state

在此处修改按键定义

#if defined(PC_BUILD)

u32 key_map(SDLKey key_sym)
{
  switch(key_sym)
  {
    case SDLK_LSHIFT:
    case SDLK_BACKSPACE:
      return BUTTON_R;

    case SDLK_SPACE:
    case SDLK_TAB:
      return BUTTON_L;

    case SDLK_DOWN:
      return BUTTON_DOWN;

    case SDLK_UP:
      return BUTTON_UP;

    case SDLK_LEFT:
      return BUTTON_LEFT;

    case SDLK_RIGHT:
      return BUTTON_RIGHT;

    case SDLK_RETURN:
      return BUTTON_START;

    case SDLK_ESCAPE:
      return BUTTON_SELECT;

    case SDLK_LCTRL:
      return BUTTON_B;

    case SDLK_LALT:
      return BUTTON_A;

    default:
      return BUTTON_NONE;
  }
}
#endif

参考

感谢司徒大神的无私开源,感谢晕哥的大力帮助
https://whycan.com/t_7909.html#p80061
https://debugdump.com/topic/1679/%E5%8F%B8%E5%BE%92gpsp%E6%B8%B8%E6%88%8F%E6%9C%BA%E6%A8%A1%E6%8B%9F%E5%99%A8%E6%BA%90%E7%A0%81%E7%A7%BB%E6%A4%8D%E5%88%B0%E5%85%A8%E5%BF%97v3s-r11%E7%AD%89soc-%E8%BD%AC?_=1670746814627

更多推荐