2 个不稳定版本

0.11.0 2024年6月12日
0.10.0 2024年5月16日

#236 in 模拟器

Download history 148/week @ 2024-05-12 26/week @ 2024-05-19 12/week @ 2024-05-26 8/week @ 2024-06-02 173/week @ 2024-06-09 16/week @ 2024-06-16 1/week @ 2024-06-23

每月103次下载
用于 tetanes

MIT/Apache

710KB
12K SLoC

TetaNES Core

Build Status Doc Status Latest Version Downloads License

📖 概要 - ✨ 功能 - 🚧 构建 - 🚀 入门 - ⚠️ 已知问题 - 💬 联系方式

概要

TetaNES

背景图片版权:由 Zsolt Palatinusunsplash 提供

这是 TetaNES 的核心模拟库。熟练的开发者可以在 tetanes-core 的基础上构建自己的定制模拟库或应用程序。

一些社区示例

  • NES Bundler - 将你的 NES 游戏转换为针对您最喜欢的操作系统的单个可执行文件!
  • Dappicom - Dappicom 是一个使用 Noir 和 Rust 编写的可验证的任天堂娱乐系统模拟器。
  • NESBox - NESBox 的愿景是成为在线多人游戏玩家的首选平台,为所有用户提供出色的用户体验。

最低支持的 Rust 版本 (MSRV)

当前最低支持的 Rust 版本是 1.78.0

功能

  • NTSC、PAL 和 Dendy 模拟。
  • 无头模式。
  • 像素化和 NTSC 滤镜。
  • 支持光枪 (Light Gun)。
  • 支持 iNES 和 NES 2.0 ROM 头部格式。
  • 支持 14 个映射器,覆盖约 85% 的授权游戏。
  • 支持游戏精灵代码。
  • 运行时可配置。
    • 增加/减少速度 & 快进
    • 视觉 & 瞬时回放
    • 保存 & 加载状态
    • 支持电池备份 RAM 保存

构建

要构建项目,您需要一个编译器的夜间版本,并运行 cargo buildcargo build --release(如果您希望帧率更好)。

特性标志

  • cycle-accurate - 启用周期精确仿真。更占用CPU资源,但支持更广泛的需要精确时间间隔的游戏。禁用可能在低端机器上提高性能。默认启用。
  • profiling - 启用 puffin 分析。

入门指南

以下是一个使用ROM设置 tetanes_core 并运行仿真的基本示例。要获取更深入的示例,请查看 tetanes::nes::emulation 模块。

use tetanes_core::prelude::*;

fn main() -> anyhow::Result<()> {
    let mut control_deck = ControlDeck::new();

    // Load a ROM from the filesystem.
    // See also: `ControlDeck::load_rom` for loading anything that implements `Read`.
    control_deck.load_rom_path("some_awesome_game.nes")?;

    while control_deck.is_running() {
      // See also: `ControlDeck::clock_frame_output` and `ControlDeck::clock_frame_into`
      control_deck.clock_frame()?;

      let audio_samples = control_deck.audio_samples();
      // Process audio samples (e.g. by sending it to an audio device)
      control_deck.clear_audio_samples();

      let frame_buffer = control_deck.frame_buffer();
      // Process frame buffer (e.g. by rendering it to the screen)

      // If not relying on vsync, sleep or otherwise wait the remainder of the
      // 16ms frame time to clock again
    }

    Ok(())
}

已知问题

请参阅 github问题跟踪器

联系

对于问题报告,请使用 github问题跟踪器。您也可以直接通过 https://lukeworks.tech/contact/ 联系我。

依赖项

~2–13MB
~145K SLoC