1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//! gc_nes_core is, as the name would suggest, the core of my Ninendo Entertainment System emulator.
//! It provides an interface for dependent crates to load and run NES ROMs, provide input, and extract
//! rendered image data. Audio is currently unsupported.
//!
//! ### Using the Emulator
//!
//! Add gc_nes_core as a dependency in Cargo.toml
//! ```toml
//! [dependencies]
//! gc_nes_core = "0.1.0"
//! ```
//! Dependent crates can use the emulator functionality as follows:
//! ```rust, ignore
//! use gc_nes_core::cartridge::Cartridge;
//! use gc_nes_core::nes::Nes;
//!
//!
//! // Load a .nes file as a cartridge
//! let cartridge = Cartridge::load_from_file("/some/nes/rom.nes".as_ref()).expect("File read error");
//! // Create the NES with the cartridge loaded
//! let mut nes = Nes::new(cartridge);
//! // Run the NES until the next frame completes
//! let frame_buffer:&[u32; 61440] = nes.frame();
//! // Or run it cycle by cycle for a finer approach
//! nes.cycle();
//! // Provide input state:
//! nes.update_controller_one(Some(0b0001_0100));
//! nes.update_controller_two(None); // Disconnected controller
//!
//! ```
//!

#![allow(clippy::needless_return)] // I prefer clarity of return
#![allow(clippy::verbose_bit_mask)] // For consistency in bit mask usage

#[macro_use]
extern crate bitflags;
#[macro_use]
extern crate simple_error;
#[macro_use]
extern crate log;

pub mod cartridge;
pub mod input;
pub mod nes;