rsemu 0.0.2

A multiplatform emulator in pure Rust, built bottom-up on a generic framework.
Documentation
//! Device models.
//!
//! Everything here is feature-gated, one feature per device (`CLAUDE.md`,
//! "Crate shape"): a NES build links a cartridge, a 6502 and the NES chips, and
//! nothing else. The core ([`crate::core`]) is what they are all written
//! against, and no type in this tree may appear in a `core::` signature
//! (`ROADMAP.md` §0, "generic first, specific second").
//!
//! This module always compiles, and is empty in a build with no device
//! features enabled.
//!
//! | Module | Feature | Covers |
//! | --- | --- | --- |
//! | [`apple1`] | `dev-apple1` | the Apple 1's MC6821, its monitor ROM socket, and RSMON |
//! | [`apu`] | `dev-nes-apu` | the RP2A03 audio half: channels, frame counter, DMC |
//! | [`cart`] | `dev-nes-cart` | cartridge images and the mappers that decode them |
//! | [`flash`] | `dev-flash-cfi` | parallel NOR flash: the CFI query and the Intel/Sharp command set |
//! | [`nes`] | `dev-nes-io` | the console's own I/O: controller ports, OAM DMA |
//! | [`pc`] | `dev-pc` | an IBM PC/AT board's chips: 8259A, 8254, 8042, MC146818, 8237A, the firmware socket |
//! | [`ppu`] | `dev-nes-ppu` | the RP2C02 picture unit: the per-dot pipeline |
//! | [`lcd`] | `dev-lcdc` | a generic RGB scanout engine: framebuffer in, `Scanout` out |
//! | [`sitronix`] | `dev-st7272a` | the ST7272A TFT panel driver: SPI register configuration, no pixel path |
//! | [`riscv`] | `dev-riscv` | the RISC-V `virt` board: CLINT, PLIC, 16550, virtio, and the device tree generator |
//! | [`wdc`] | `dev-wdc` | the W65C51N ACIA and W65C22 VIA, and a 6502 board's ROM |
//!
//! Most of `dev/` is `no_std + alloc`. The two documented exceptions —
//! `dev/blk/*` and `dev/net/*`, which are `std` because `fstool` and `pktkit`
//! are — do not exist yet.

#[cfg(feature = "dev-apple1")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-apple1")))]
pub mod apple1;

#[cfg(feature = "dev-nes-apu")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-nes-apu")))]
pub mod apu;

#[cfg(feature = "dev-nes-cart")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-nes-cart")))]
pub mod cart;

#[cfg(feature = "dev-gb")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-gb")))]
pub mod gb;

#[cfg(feature = "dev-flash-cfi")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-flash-cfi")))]
pub mod flash;

#[cfg(feature = "dev-nes-io")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-nes-io")))]
pub mod nes;

#[cfg(feature = "dev-pc")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-pc")))]
pub mod pc;

#[cfg(feature = "dev-nes-ppu")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-nes-ppu")))]
pub mod ppu;

#[cfg(feature = "dev-lcdc")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-lcdc")))]
pub mod lcd;

#[cfg(feature = "dev-st7272a")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-st7272a")))]
pub mod sitronix;

#[cfg(feature = "dev-riscv")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-riscv")))]
pub mod riscv;

#[cfg(feature = "dev-wdc")]
#[cfg_attr(docsrs, doc(cfg(feature = "dev-wdc")))]
pub mod wdc;