您尚未登录。

楼主 # 2022-05-27 01:34:01

微凉VeiLiang
会员
所在地: 深圳
注册时间: 2018-10-28
已发帖子: 595
积分: 525
个人网站

F1C100S玩游戏系列-FC红白机Nes模拟器(三)-移植Windows下的开源Nes模拟器VirtuaNes,带声音和按键,C++代码

接上篇F1C100S玩游戏系列-FC红白机Nes模拟器(二)-移植正点原子的nes模拟器(ye781205的汇编核心),带声音,ARM转GNU汇编
和第一篇F1C100S玩游戏系列-FC红白机Nes模拟器(一)-移植InfoNes到BoloRTT工程,带Audio驱动,支持声音
现在第三篇,移植windows端最常见到的模拟器VirtuaNes,支持绝大部分的mapper了,可以说,我现在能找到的nes它都能正常运行!VirtuaNes是c++编写的,好在rtthread的启动linked文件对于c++也有支持。具体修改下面说。其实移植是在一年半以前了,但是一直没有发出来,是因为好像跑起来还有点bug,就是有时候会运行异常,没有找到具体原因。一拖再拖。想想还是发出来让大伙一起找好过自己摸索(逃。移植的是最新版本为0.97,先上链接https://github.com/VeiLiang/BoloRTT.git
---------------------------------------------------------------------------
然后接下来说说移植过程中遇到的坑
坑1:
如果你移植源码到rtthread的工程下,你会发现编译好,运行就会出问题,无法正常跑,,,这是因为VirtuaNes代码里面用到的char型,是有符号的。所以在makefile 或者说rtconfig.py中加入一个编译选项-fsigned-char
坑2:
对于有些指针是强转unsigned char* 到unsigned short或者unsigned int*的。如果unsigned char * 传入的地址不是4字节对齐的,那就崩了,因为没有加入非对齐访问。对于这种情况,我们可以把对应地方修改下,具体例子函数看inline    WORD    OP6502W( WORD addr )
还有一个坑是移植完成感觉特别卡慢的,,但时代久远,又没有做笔记,害。。。记起来再来这里说吧

----------------------------------------------------------------------------
说说rtthread如何加入c++的支持
1.在link脚本中加入以下代码,不然编译时候会报undefined

 __exidx_start = .;
    .ARM.exidx   :
    {
        *(.ARM.exidx* .gnu.linkonce.armexidx.*) 
        _sidata = .;
    }
    __exidx_end = .;

    __rodata_start = .;
    .rodata   : { *(.rodata) *(.rodata.*) }
    __rodata_end = .;

    . = ALIGN(4);
    .ctors :
    {
        PROVIDE(__ctors_start__ = .);
        KEEP(*(SORT(.ctors.*)))
        KEEP(*(.ctors))
        KEEP (*(SORT(.init_array.*)))
        KEEP (*(.init_array))
        PROVIDE(__ctors_end__ = .);
    }
   
    . = ALIGN(4);

    .dtors :
    {
        PROVIDE(__dtors_start__ = .);
        KEEP(*(SORT(.dtors.*)))
        KEEP(*(.dtors))
        PROVIDE(__dtors_end__ = .);
    }
    . = ALIGN(4);

2.代码中加入:void *__dso_handle = 0


-------------------------------------------------------------
最后上图和视频,顺便预告一下第四篇,会用图中的小屏幕awtk做一个界面,发布时间未定。。。

_20220527012847.jpg_20220527012843.jpg_20220527012825.jpg

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn