Skip to content

Latest commit

 

History

History
149 lines (78 loc) · 4.86 KB

README_zh.md

File metadata and controls

149 lines (78 loc) · 4.86 KB

English | 中文

nes 模拟器

Pull Requests Welcomefirst-timers-only Friendly

github licenseLatest ReleaseWindowsLinuxMacos

github: Dozingfiretruck/nes: A NES emulator in C (github.com) (推荐)

gitee: nes: c语言实现的nes模拟器 (gitee.com) (由于同步问题可能导致更新不及时)

介绍

​ C语言实现的nes模拟器,要求C语言标准: C11 以上

注意:本仓库仅为nes模拟器,不提供游戏本体!!!

平台支持:

  • Windows

  • Linux

  • MacOS

模拟器支持情况:

  • CPU

  • PPU

  • APU

mapper 支持:

​ 0, 2, 3, 7, 94, 117, 180

软件架构

​ 示例基于SDL2进行图像声音输出,没有特殊依赖,您可自行移植至任意硬件

编译教程

编译准备

Windows:

​ 安装MSVC(Visual Studio 2022)

​ 安装 xmake

Linux(Ubuntu):

sudo add-apt-repository ppa:xmake-io/xmake -y
sudo apt-get update -y
sudo apt-get install -y git make gcc p7zip-full libsdl2-dev xmake

Macox:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
brew install make gcc sdl2 xmake

编译方法

​ 克隆本仓库,直接执行 xmake 编译即可

使用说明

​ Linux或Macos下输入 ./nes xxx.nes 加载要运行的游戏

​ Windows下输入 .\nes.exe xxx.nes 加载要运行的游戏

按键映射

手柄 选择 开始 A B
P1 W S A D V B J K
P2 1 2 5 6

注意:P2使用数字键盘(小键盘)

移植说明

incsrc 目录下的源码无需修改,只需要修改port目录下的三个文件 nes_conf.h nes_port.c nes_port.h

  • nes_conf.h为配置文件,根据自己需求配置即可
  • nes_port.h为移植头文件,通常只需要移植nes_printf即可
  • nes_port.c为主要移植文件,需要移植所有函数

注意:如果移植的目标平台性能羸弱、空间较小等特别预留了一些宏配置:

  • 可以将NES_ENABLE_SOUND设置为0关闭apu以增加运行速度
  • 可以将NES_RAM_LACK设置为1使用半屏刷新以减少ram消耗(运行速度会降低)
  • 可以自行配置NES_FRAME_SKIP进行跳帧
  • 如果为嵌入式平台使用spi 8字节传输时颜色异常配置NES_COLOR_SWAP可进行大小端切换

另外,APU合成使用了单浮点数计算,代码在nes_apu.c中,可自行优化单浮点计算加速或者不使用单浮点计算以加速运行速度

运行展示

mapper 0:

Super Mario Bros F1_race Star Luster (J) Ikki (J)
Circus Charlie

mapper 2:

Contra1 Castlevania Journey Lifeporce
mega_man Athena (J)

mapper 3:

contra Donkey_kong

mapper 94:

Senjou no Ookami

mapper 180:

Crazy Climber

文献参考

https://www.nesdev.org/