前言 前面我们完成了USB手柄按键采集,RTP实时推流H264到PC端显示作为虚拟显示器。完成了移植NES游戏模拟器的基本要素,这一篇我们开始进行真正的移植。
过程
如下是移植好的代码
git clone https://github.com/qinyunti/LiteNES.git
移植需要实现hal.c中的接口
nes_key_state查询按键状态
nes_flush_buf写显示缓冲区
nes_flip_display真正将显示缓冲区写入LCD
按键部分key.c/h
void key_init(void* arg);
int key_getstate(int key);
显示部分
lcd_framebuffer.c/h或者
int lcd_init(char* dev);
void lcd_clear(uint32_t color);
void lcd_setpixel(int index,int x, int y,uint32_t color);
void lcd_switch(int index);
lcd_rtp.c/h
int lcd_init(char* ip,int port);
void lcd_clear(uint32_t color);
void lcd_setpixel(int index,int x, int y,uint32_t color);
void lcd_switch(int index);
main.h中宏#define USE_LCD_RTP 1则使用RTP推流,否则使用framebuffer。
编译
aarch64-linux-gnu-gcc main.c dis/dis.c dis/rtp.c dis/x264.c fce/*.c hal.c key.c lcd_rtp.c -lx264 -lm -lpthread -ldl -lortp -L/home/lhj/opt/x264/board/lib -I/home/lhj/opt/x264/board/include -L/home/lhj/opt/board/lib -I/home/lhj/opt/board/include -I./dis -I../include -o litenes
添加可执行权限
chmod +x litenes
LiteNESrom下有一些游戏。
测试
坦克大战
./litenes tank.NES 192.168.1.101 5004 /dev/input/event1
超级玛丽./litenes chaojimali.NES 192.168.1.101 5004 /dev/input/event1
中国象棋
总结 至此我们完成NES游戏模拟器的移植,实现了掌上游戏机的项目。后面会继续优化体验,再出一期视频。