rustysnes_cart/coproc/mod.rs
1//! On-cart coprocessors that plug into the [`crate::board::Board`] trait.
2//!
3//! The headline economy of the SNES coprocessor breadth (`docs/cart.md`, `docs/adr/0003`) is the
4//! **shared NEC DSP engine**: one [`upd77c25::Upd77c25`] LLE core backs DSP-1/2/3/4 + ST010/011
5//! (six chips), parameterized only by firmware + register widths. Phase 4 lands DSP-1
6//! ([`dsp1::Dsp1Board`], `Core`/`Curated`); the BestEffort siblings reuse the same engine in
7//! Phase 7.
8//!
9//! Phase 4's second Core/Curated coprocessor is the **Super FX / GSU** ([`superfx::SuperFxBoard`]
10//! over the [`gsu::Gsu`] Argonaut RISC core). Unlike the DSP family it carries no chip-ROM dump —
11//! the GSU program lives in the cartridge ROM — so it is functional the moment the cart loads. It
12//! reuses the same host-sync idea: the GSU runs to completion the instant the CPU sets the Go
13//! flag, so no free-running core-scheduler tick is needed.
14//!
15//! Phase 4's third Core/Curated coprocessor is the **SA-1** ([`sa1::Sa1Board`]) — a second WDC
16//! 65C816 @ ~10.74 MHz plus a support ASIC. Like Super FX it carries no chip-ROM dump (the SA-1
17//! program is in the cartridge ROM). Unlike the host-sync chips it is a real parallel CPU: this
18//! board owns the entire SA-1 *system* (registers, Super-MMC banking, BW-RAM, I-RAM, arithmetic
19//! unit, DMA, var-len, H/V timer) and exposes the SA-1 CPU's memory view via the `Board`
20//! second-CPU hooks; `rustysnes-core` instantiates and steps the second CPU (the crate graph
21//! forbids `rustysnes-cart` from depending on `rustysnes-cpu`).
22
23// Chip-name jargon (µPD77C25, µPD96050, ST010, …) is not Rust code.
24#![allow(clippy::doc_markdown)]
25
26pub mod armv3;
27pub mod cx4;
28pub mod dsp1;
29pub mod epsonrtc;
30pub mod gsu;
31pub mod hg51b;
32pub mod necdsp_variant;
33pub mod obc1;
34pub mod sa1;
35pub mod sdd1;
36pub mod sharprtc;
37pub mod spc7110;
38pub mod superfx;
39pub mod upd77c25;
40
41pub use armv3::St018Board;
42pub use cx4::Cx4Board;
43pub use dsp1::Dsp1Board;
44pub use epsonrtc::EpsonRtc;
45pub use gsu::Gsu;
46pub use hg51b::{Hg51b, Hg51bBus};
47pub use necdsp_variant::{NecDspVariantBoard, Variant as NecDspVariant};
48pub use obc1::Obc1Board;
49pub use sa1::Sa1Board;
50pub use sdd1::Sdd1Board;
51pub use sharprtc::SharpRtcBoard;
52pub use spc7110::Spc7110Board;
53pub use superfx::SuperFxBoard;
54pub use upd77c25::{Revision, Upd77c25};