Glossary¶
NES emulation has dense jargon. Definitions below; defined here once so other docs can use them without re-explaining.
| Term | Definition |
|---|---|
| 2A03 | Ricoh CPU+APU IC used in the NTSC NES/Famicom (1.789 MHz). 2A07 is the PAL variant. |
| 2C02 | Ricoh PPU IC for NTSC. 2C07 is PAL. 2C03/2C04/2C05 are arcade variants (Vs. System / PlayChoice-10). |
| A12 | Bit 12 of the PPU address bus. Toggled when fetching from $1000-$1FFF; used by MMC3 to count scanlines. |
| APU | Audio Processing Unit. Five channels: pulse 1, pulse 2, triangle, noise, DMC. Integrated into the 2A03. |
| Attribute table | The 64-byte block at the end of each nametable specifying the palette for each 32×32 pixel quadrant. |
| Background | The tile-based scrolling layer rendered from CHR via the nametables, attributes, and palettes. |
| Band-limited synthesis | Generating audio samples by convolving step-responses with a windowed sinc kernel. blip_buf is the canonical implementation. |
| BCD | Binary-coded decimal. 6502 has it; the 2A03 disables it (D flag is settable but ADC/SBC ignore it). |
| Bus | The shared mutable state container that the CPU borrows during execution. Owns PPU, APU, mapper, RAM, controllers, open-bus latch. |
| Bus conflict | A cartridge write where CPU and PRG ROM drive the data bus at the same time, usually producing an AND-like value on discrete mappers. |
| Cartridge | The physical ROM cartridge, modeled as PRG-ROM + CHR-ROM/RAM + PRG-RAM + a mapper. |
| CHR | Character ROM/RAM. The 8 KB pattern table data that sprites and background tiles draw from. |
| CPU dot | Equivalent to a CPU clock cycle. NTSC: ~559 ns. |
| Cycle accuracy | An emulator that advances each chip in lockstep at sub-instruction granularity, so mid-instruction PPU/APU events are visible to subsequent CPU code. |
| Dendy | Russian PAL famiclone (1990s). Uses PAL crystal but NTSC's PPU clock divider, producing 50 Hz refresh with NTSC-compatible timing. |
| DMA | Direct Memory Access. Two units: OAM DMA ($4014 write copies 256 B to OAM) and DMC DMA (samples from CPU memory to APU's DMC channel). |
| DMC | Delta Modulation Channel. The fifth APU channel; plays 1-bit-delta-encoded samples from CPU memory. |
| Dot | One PPU clock cycle. The PPU produces one pixel per dot during visible scanlines. |
| ExRAM | The 1 KB internal RAM in the MMC5 mapper, with multiple usage modes (extended attributes, fill nametable, etc.). |
| Famicom | "Family Computer", the Japanese version of the NES (1983). |
| FDS | Famicom Disk System — Japan-only floppy disk add-on. |
| Fine X / Fine Y | The 3-bit pixel offset within a tile (0-7). Lives in the PPU's x register and the high 3 bits of v. |
| Frame counter | An APU sub-unit clocking envelopes, sweep, length counters, and (optionally) the frame IRQ at ~240 Hz. |
| Get / put cycle | APU/DMA phase terminology. DMA reads occur on get cycles and writes on put cycles; DMC and OAM DMA timing depends on this alignment. |
| Hijacking | When an interrupt of higher priority redirects an in-progress lower-priority interrupt's vector fetch to its own vector. NMI hijacks IRQ; IRQ hijacks BRK. |
| iNES | Marat Fayzullin's 1996 file format for NES ROM dumps. The 16-byte header is the de facto standard. |
| IRQ | Interrupt Request. Level-sensitive on the 6502 — fires while the line is held low and I flag is clear. |
| Length counter | Per-channel APU counter that silences the channel when it reaches zero. Decremented on half-frame clocks. |
| Linear counter | Triangle-channel-specific counter providing finer length control independent of the length counter. |
| Lockstep scheduling | The PPU is the master clock; CPU and APU advance based on PPU dot count. Opposite of catch-up. |
Loopy v/t/x/w |
The four internal PPU registers governing scroll and VRAM addressing. Named after the late "Loopy" who reverse-engineered them. |
| Mapper | The cartridge IC that arbitrates banking, mirroring, and (for some) IRQ generation. ~250 distinct types exist. |
| Mirroring | The PPU has only 2 KB of internal nametable VRAM but 4 KB of address space; the cartridge specifies which 1 KB regions mirror each other (horizontal, vertical, single-screen A/B, four-screen). |
| MMC | Memory Management Controller (Nintendo). MMC1, MMC2, MMC3, MMC4, MMC5, MMC6 are official Nintendo mappers. |
| Nametable | A 1 KB block of PPU memory holding tile indices (32×30 = 960 bytes) plus attribute data (64 bytes). Four logical tables exist; usually only 2 physical are present in the console (mirroring). |
| NES 2.0 | Extended iNES header format adding 12-bit mappers, submappers, exponent-multiplier ROM sizing, and per-region timing. Detected when header[7] & 0x0C == 0x08. |
| NMI | Non-Maskable Interrupt. Edge-sensitive on the 6502 — fires once per high-to-low transition. The PPU asserts NMI at the start of vertical blank if PPUCTRL bit 7 is set. |
| NROM | iNES mapper 0. The simplest cart: no banking, fixed 16/32 KB PRG and 8 KB CHR. |
| OAM | Object Attribute Memory. The 256 B sprite list (64 sprites × 4 bytes: Y, tile, attributes, X). |
| Open bus | When a memory location returns the last value on the data bus instead of meaningful data. Pervasive on the NES due to incomplete address decoding. |
PPU _io_db |
The PPU's internal CPU-facing dynamic data latch. It backs write-only register reads and unused PPUSTATUS bits and decays over time. |
| PAL | Phase Alternating Line. The European TV standard; NES PAL has 312 scanlines and 50 Hz. |
| Pattern table | An 8 KB region of PPU memory storing tile bitmaps (each tile = 16 bytes = two 8×8 1-bit planes). |
| PPU | Picture Processing Unit. The 2C02 chip; runs at 3× CPU clock; renders the picture. |
| PRG | Program ROM/RAM. The cart-side memory for code and data, mapped into CPU address space. |
| Sprite-zero hit | A PPUSTATUS flag set when sprite 0's first non-transparent pixel overlaps a non-transparent background pixel. The classic mechanism for split-screen status bars. |
| Sweep | Per-pulse-channel APU sub-unit that periodically modifies the channel's period (frequency sweep). |
| Submapper | NES 2.0 field that distinguishes board or chip variants sharing the same mapper number, such as MMC3 revisions or VRC2/VRC4 wiring. |
| Tile | An 8×8 pixel block. Drawn from the pattern table; positioned by the nametable; colored by the attribute table + palette. |
| VBL / VBlank | Vertical blank. The period (scanlines 241-260 NTSC) between frames; safe time for the CPU to update PPU state. |
| VRAM | Video RAM. The 2 KB internal PPU RAM holding nametable data. |
| VRC | Konami's Virtual Rom Controller mapper family (VRC1-7). |
v, t, x, w |
The four loopy registers in the PPU. See "Loopy v/t/x/w". |