Game NES 示例
源码位置: demos/game/nes 查看源码
功能说明
本示例将 NES 模拟器核心适配到 ARCS SDK,在 arcs_evb 上从 SD 卡加载 .nes ROM,通过 LVGL 显示游戏画面和触摸按键,并通过 audio0 播放 NES APU 音频。
平台适配主要位于 src/nes/port/nes_port.c 和 src/nes/port/nes_conf.h。
硬件连接
arcs_evb: 使用板载 ST7789P3 LCD、CST328 触摸和音频播放通道。
SD 卡: 通过 SDMMC0 接入,使用 FAT 文件系统。
USB 键盘: 可选,启用
CONFIG_GAME_NES_USB_HOST_KEYBOARD后通过 USB Hub 接入。
示例步骤
准备 FAT 格式 SD 卡,并创建
/roms/目录。将
.nesROM 文件拷贝到 SD 卡/roms/目录,例如/roms/Super_mario_brothers.nes。编译、烧录并上电运行示例。
若未插入 SD 卡,界面会提示插入 SD 卡并点击
Retry。在 LVGL ROM 列表中触摸选择 ROM;若未扫描到
.nes文件,则使用CONFIG_GAME_NES_ROM_PATH指定的回退路径。使用触摸按键或可选 USB 键盘操作 NES 1P 手柄,点击
ROM可返回 ROM 列表。
编译
./build.sh -C -S samples/game/nes -DBOARD=arcs_evb
烧录
根据实际串口设备替换 /dev/ttyACM0:
./tools/burn/cskburn -s /dev/ttyACM0 -b 3000000 0x0 build/arcs.bin -C arcs
配置说明
配置项 |
默认值 |
说明 |
|---|---|---|
|
|
ROM 扫描或选择失败时使用的回退路径 |
|
|
启用 NES 音频播放 |
|
|
逻辑帧约 60 FPS,绘制帧约 30 FPS |
|
|
每 120 个逻辑帧输出一次性能日志 |
|
|
可选 USB HID 键盘输入 |
输入方式
输入 |
NES 操作 |
|---|---|
触摸按键 |
|
ROM |
返回 ROM 列表 |
方向键 / WASD |
方向键 |
X / K / Alt |
A |
Z / J / Ctrl |
B |
Enter / 小键盘 Enter |
Start |
Space / Tab |
Select |
USB 键盘输入需在 prj.conf 中启用:
CONFIG_GAME_NES_USB_HOST_KEYBOARD=y
预期输出
启动后应看到 SD 卡挂载、LCD/触摸初始化、音频启动、ROM 加载和周期性性能日志:
I/game_nes ... Game NES sample start
I/game_nes ... Mounted /SD:
I/game_nes_port ... display: 240x320, draw region: 240x240@(0,40)
I/lisa_audio_play ... Play started
I/game_nes_port ... Audio playback started (48000Hz)
I/game_nes ... Selected ROM: /SD:/roms/Super_mario_brothers.nes
I/game_nes ... ROM loaded: /SD:/roms/Super_mario_brothers.nes
I/game_nes_port ... perf[120f]: logic_fps=60.2 draw_fps=30.1 draw_avg=0ms lv_avg=4ms audio_avg=3ms audio_calls=120 drop=0 empty=0
稳定运行时,logic_fps 应接近 60,draw_fps 应接近 30,且 drop=0。启动或切换阶段可能出现短暂的 empty 非 0。
注意事项
SD 卡格式化: 若挂载失败,示例会尝试
lsfs_mkfs()后重新挂载,SD 卡已有数据可能被清除。ROM 路径: 自动扫描目录固定为
/SD:/roms/,ROM 文件后缀需为.nes。性能日志: 默认开启低开销性能日志;
CONFIG_GAME_NES_CORE_PROFILE_ENABLE和CONFIG_GAME_NES_CPU_OPCODE_PROFILE_ENABLE仅用于专项分析,不建议日常打开。