Session Details

Party Like It's 1985: Making NES Games in Assembly

Full-Day Workshop

The Nintendo Entertainment System (NES) defined the look, feel, and sound of video games in the late 80’s and early 90’s. The NES’ impressive library of games was written using 6502 assembly language, which is relatively simple when compared to assembly languages for modern processors. The MOS Technologies 6502 processor, combined with the NES’ custom “Picture Processing Unit” (PPU) and optimized memory layout, allowed for an incredibly diverse range of game experiences.

Most commercial NES games were programmed by very small teams, often with only one or two members writing assembly code. Even now, developers continue to push the bounds of what the system was originally thought capable of. There have been a number of Kickstarters for original NES games, often programmed by solo developers. Learning NES development will give you a deeper understanding of how computers work at a low level. Also, it’s fun!

In this workshop, we will explore assembly development for the NES with a modern toolkit, building out a full, playable game along the way. The workshop does not assume any previous experience with assembly language or game development. All you will need is a computer and familiarity with basic programming concepts like variables, if statements, for loops, and functions. By the end of the workshop, we will have covered:

  • The history of the NES, including the hardware limitations and tradeoffs that led to its design
  • How the major components of the NES work - CPU, PPU, APU, address bus, cartridge mappers
  • Binary and hexadecimal numbers
  • 6502 assembly and the ca65 assembler
  • Creating NES graphics from scratch with modern tools
  • 8-bit collision detection and physics
  • Reading controller input
  • Principles of digital sound synthesis
  • Playing sound and music on the NES
  • Techniques used in popular NES games
  • How to write an NES emulator
  • Distributing your NES games for people to play on real hardware or on the Web

Attendees should have experience with any programming language - familiarity with concepts like variables, functions, and flow control (if/then/else, for/while loops) is all that is required. I assume attendees have never seen assembly language of any kind before. Having played a few video games might be helpful to put things in context, but I do not assume any experience with the NES itself, either.

The tools we will be using are cross-platform, Windows/Mac/Linux. Attendees should have their own computer and the text editor of their choice.

Kevin Zurawel

Senior Software Engineer


A software development conference in the Louisville, KY area on March 28 - 30, 2018 designed to cover all aspects of software development regardless of development stack.

Contact Us
Keep in Touch