Skip to content
Systems

Nintendo Entertainment System

The console that rebuilt the games industry

Launched as the Famicom in 1983, Nintendo's 8-bit console paired the Ricoh 2A03 CPU with a tile-and-sprite PPU and a strict licensing regime, reviving the crashed console market and selling around 62 million units.

nintendo-entertainment-system console8-bitcartridgesppu2a03 1983–1995

Overview

The Family Computer (Famicom) launched in Japan on 15 July 1983. A redesigned version, the Nintendo Entertainment System, reached North America in 1985 and Europe in 1986. Where the home computers of the era handed you a screen you could write to directly, the NES hid its screen behind a dedicated graphics chip and gave you nothing for free — but in return it offered fast, flicker-free, scrolling tile-and-sprite games at a price arcades could not match at home. Strict licensing kept quality high, and the machine sold around 62 million units worldwide, anchoring a generation of console gaming.

Technical Specifications

Processor

Ricoh 2A03 (NTSC) / 2A07 (PAL) @ ~1.79 MHz (NTSC) / ~1.66 MHz (PAL)

  • A second-source MOS 6502 core with decimal (BCD) mode disabled
  • Integrates the APU (sound) and controller/DMA hardware on the same die
  • Same registers, addressing modes and instruction set as every other 6502 — code skills transfer directly from the C64's 6510

Memory

2KB internal work RAM at $0000-$07FF, mirrored through $1FFF

  • $0000-$00FF: zero page (fast addressing)
  • $0100-$01FF: the stack
  • $0200-$07FF: general work RAM (commonly $0200 for the sprite OAM buffer)
  • $2000-$2007: PPU registers (mirrored to $3FFF)
  • $4000-$4017: APU and I/O registers
  • $4020-$FFFF: cartridge space — PRG ROM, optional PRG RAM, mapper registers
  • $FFFA-$FFFF: the NMI, reset, and IRQ vectors

The CPU has no direct access to video memory. Everything the screen shows is reached through the PPU's register hatch.

Graphics: PPU

Ricoh 2C02 (NTSC) / 2C07 (PAL)

  • 256×240 pixel output
  • A master palette of 64 entries (about 54 visually distinct colours); 32 bytes of palette RAM at $3F00 select the picture's colours
  • Background built from nametables (a grid of tile indices) plus attribute tables (which sub-palette each region uses)
  • Tile shapes come from pattern tables in CHR ROM or CHR RAM, not from a fixed ROM font
  • 64 hardware sprites (8×8 or 8×16), but only 8 per scanline — the source of the NES's signature sprite flicker
  • VRAM is written only through the $2006/$2007 address-and-data ports, and safely only during vertical blank (VBlank), signalled once per frame by the NMI

Sound: APU

Integrated into the 2A03

  • Two pulse (square) channels with sweep and envelope
  • One triangle channel (often used for bass)
  • One noise channel (percussion, effects)
  • One DMC channel for sample playback (delta modulation)
  • Registers at $4000-$4013, channel enables at $4015, frame counter at $4017
  • Some cartridges add expansion audio (Konami VRC6, Nintendo MMC5, Sunsoft 5B)

Cartridges and Mappers

The cartridge is not just storage — it is hardware that extends the machine.

  • PRG ROM maps into $8000-$FFFF; CHR ROM/RAM feeds the PPU's pattern tables
  • A mapper chip bank-switches ROM in and out, breaking the 32KB/8KB ceilings
  • NROM (mapper 0): the simplest — fixed 16/32KB PRG, 8KB CHR. The Primer builds on this.
  • MMC1 (1): serial-loaded banking, common for larger early games
  • UxROM (2) / CNROM (3): cheap PRG or CHR banking
  • MMC3 (4): PRG/CHR banking plus a scanline IRQ counter for split-screen effects — one of the most-used mappers
  • MMC5 (5): the most capable — extra RAM, expansion audio, advanced scrolling
  • Battery-backed PRG RAM gave games like The Legend of Zelda their save files

Controllers

  • Two ports, read serially through $4016 (player 1) and $4017 (player 2)
  • A strobe write latches the button state; eight reads then shift out A, B, Select, Start, Up, Down, Left, Right
  • Accessories: the Zapper light gun, the Power Pad, R.O.B., and the Famicom's microphone

Programming Environment

Assembly is the only real option

Unlike the C64, the NES has no built-in BASIC — a cartridge boots straight into your machine code at the reset vector. Games were written almost entirely in 6502 assembly, with the CPU, PPU and APU driven directly through their registers.

Common workflow:

  1. Assemble 6502 source (today: ca65; historically: NESASM, custom in-house tools)
  2. Link PRG and CHR into an iNES cartridge image (ld65 with a layout config)
  3. Run on hardware or an emulator; iterate

The frame loop

NES code is organised around the frame. The NMI fires at the start of VBlank; the handler updates the screen (it is the only safe time to touch VRAM with rendering on), runs the game logic, and returns. The main loop typically just waits for the next NMI. This frame heartbeat has no direct equivalent on a home computer that lets you poke the screen at any time.

Where the picture comes from

A game must supply its own tile shapes in CHR, build a nametable, choose palettes, and enable rendering before anything appears — there is no resident character set to lean on. That up-front ceremony is the price of the PPU's speed.

Why It Mattered

Rebuilding a dead market

The 1983 North American console crash had buried the industry under shovelware. Nintendo's Seal of Quality licensing program — limiting how many titles a publisher could ship, enforcing technical and content standards — restored retailer and player confidence. Curation, not raw power, was the NES's masterstroke.

Design language

Super Mario Bros., The Legend of Zelda, Metroid and Mega Man set conventions — scrolling worlds, save files, power-up progression, tight platforming — that games still follow. A generation's expectations of what a game is were shaped here.

A global influence

Even European bedroom coders working on the Spectrum and C64 borrowed the NES's design cues, while its tile-and-sprite model became the template for 8- and 16-bit consoles that followed.

Quirks and Limitations

Sprite flicker

Only 8 sprites draw per scanline. Games with more objects on a line either flicker sprites deliberately (cycling which 8 show) or design around the limit. The flicker became a recognisable part of the NES look.

The VBlank window

VRAM can only be updated safely during the short vertical-blank period each frame. Try to write too much and you run past VBlank into visible rendering, corrupting the picture. NES programmers budget their per-frame updates carefully, often pre-building them in a buffer.

The 8×8 attribute grid

Background colour is chosen per 16×16 region via the attribute table, not per tile — so neighbouring tiles must share a sub-palette. Careful tile and colour layout works around the constraint, much as the Spectrum's attribute clash demanded.

No CPU "stop"

Like every 6502, the 2A03 never halts on its own — it always runs to the next instruction. Programs must loop deliberately; a missing loop runs off into whatever bytes follow.

Modern Legacy

Emulation

  • Mesen: highly accurate, debugger-rich
  • FCEUX: long-standing, scriptable, widely used for tool-assisted runs
  • MiSTer FPGA: hardware-level recreation

Homebrew

  • Active toolchains (cc65/ca65, NESASM) and flash carts (EverDrive) put new games on real hardware
  • A thriving scene around NESdev documents the machine to the cycle

Reissues

  • The NES Classic Edition and Nintendo Switch Online keep the library in circulation

Programmer Resources

Starting out:

  • A minimal NROM cartridge: iNES header, reset routine, PPU warm-up, a backdrop colour
  • The $2006/$2007 PPU hatch for writing VRAM
  • The NMI as the frame heartbeat

Intermediate:

  • Nametable and attribute-table layout; reading the controller at $4016
  • Sprite OAM and the $4014 DMA copy
  • Scrolling via $2005 and the PPU address latch

Advanced:

  • Mapper banking for larger worlds; MMC3 scanline IRQs for split effects
  • APU music and DMC samples; cartridge expansion audio
  • Cycle-timed raster tricks within the VBlank budget

Tools:

See Also