This course includes:

(updated Nov 2020)

  • 16 hours on-demand video

  • Downloadable resources and exercises

  • Lifetime access

  • Access on mobile and desktop

  • Certificate of completion

  • 14 day money back guarantee

  • Secure checkout through Credit Card or PayPal

Is this course for you?

If you want a gentle introduction to coding your first lines of 6502 assembly language, and understand the fundamental building blocks that make computers tick, then this course is definitely for you. This is a beginner-friendly course that requires no prior knowledge, but you will probably make the most of it if you know already the basics of programming.
Buy $19.99
Is this course for you?
Watch Intro Video

Course Introduction & Learning Outcomes

Technologies we'll use

The main hardware we'll learn is the classic Atari 2600 VCS. We'll first dissect the machine architecture and its famous 6502 processor. We will then use the DASM assembler to create our ROM binaries, and execute our games using the Stella emulator. All the software that we'll use during the course will work on either Windows, Linux, or macOS.
Buy $19.99
Technologies we'll use

What you'll learn

Here are the topics you'll learn in this course

  • Hardware & architecture of the Atari 2600

  • 6502 processor registers

  • A complete introduction to 6502 assembly

  • VCS memory mapping

  • TIA screen objects (players, ball, missiles, playfield, etc.)

  • Positioning game objects in the screen & collision

  • Joystick input

  • NTSC display

  • Controlling scanlines & cycle counting

  • Emitting audio

Low-Level Programming

This course is a gentle introduction to computer architecture and 6502 assembly language. You'll learn how the 6502/6507 processor communicates with the RAM, how the TIA chip controls images & sound, and how everything comes together to create simple games for the Atari platform. We'll start with the fundamentals of assembly language, and evolve to create a fully working game. You'll learn how to poke and set game objects in the screen, move them around, manage input events, sound, and collisions. Learning a small architecture like the one inside the Atari 2600 has proven to help students understand more complex machines and become better programmers. Join us, and discover the beauty that resides inside computer systems.
Buy $19.99
Low-Level Programming
  • Lifetime access

    Enroll now and get lifetime access to the course content

  • Access to discussion forum

    Discuss course topics and engage with other students using the discussion board

  • Money back guarantee

    We offer a 14 day money back guarantee for all our courses. No questions asked.

Course Content

  • 1
  • 2
    Hardware and Architecture
  • 3
    6502 Assembly Programming
    • The Assembler
    • Assembly Language(s)?
    • Popular 6502 Assembly Instructions
    • List of 6502 Opcodes
    • Installation and Tools
    • Picking a Code Editor
    • Our First Assembly Code
    • 6502 Assembly Syntax Highlight Links
    • The DASM Assembler
    • The Stella Emulator
    • The Javatari Emulator
    • Installing DASM under Windows
    • Our First Assembly Bug
  • 4
    6502 Instruction Set
    • Addressing Modes
    • Instruction Set
    • 6502 Instruction Set Exercises
    • 6502 Instruction Set Exercises (Solutions)
    • Is the Atari 2600 a Proper Computer?
  • 5
    VCS Memory Map and the TIA
    • VCS Memory Map
    • Memory Map & Page Zero
    • Setting the Background Color
    • Stella Debugger Warning Messages
    • NTSC Frame Synchronization
    • Painting the CRT in a Controlled Way
    • Quiz: Painting the CRT
  • 6
    Screen Objects
    • TIA Screen Objects
    • Players, Missiles, and Balls
    • Playfield Graphics
    • Exercise: Playfield Pattern
    • Player Bitmap and Scoreboard
    • Playfield Color
    • Defining RAM Variables
    • Should We Use BYTE or DS?
    • A Discussion on Registers and Variables
    • Quiz: Screen Objects
  • 7
    Vertical and Horizontal Positioning
    • Vertical Positioning
    • Implementing Vertical Position
    • Quiz: Vertical Positioning
    • Representation of Graphics Data in Games
    • Horizontal Positioning
    • Smooth Horizontal Position
    • Implementing Horizontal Position
    • Exercise: Limiting Horizontal Movement
    • Limiting Horizontal Movement
    • Horizontal Position & Time Keeping
    • A Deeper Look into Horizontal Positioning
  • 8
    CPU Instructions and Clock Cycles
    • Counting Clock Cycles
    • Undocumented OpCodes
  • 9
    Controller Input
    • Joystick Input
    • Joystick Player Movement
    • Quiz: Joystick Input
    • Bitwise Operations
    • Example of Bitwise Application
  • 10
    Subroutines, Stack, and Pointers
    • Subroutines
    • The Stack
    • Pointers
  • 11
    Defining our Final Project
    • The "Bomber" Project
    • Creating Sprites with PlayerPal
    • Defining the Project Playfield Graphics
    • Defining the Project Player Graphics
    • Drawing Player Sprites
    • Temporarily Ignoring Clock Cycles
  • 12
    Controlling Position and Movement
    • Player Horizontal Position Subroutine
    • Quiz: Subroutines
    • Handling Joystick Movement
    • Changing Sprite Frame
    • Enemy Vertical Movement
  • 13
    Random Numbers
    • Generating Random Values
    • Bitshift Operations
    • Random Enemy Position
    • Exercise: Random Values
  • 14
    Object Collision
    • Collision Registers
    • Checking Object Collision
  • 15
    Digits and Scoreboard
    • Score Digits
    • Configuring Scoreboard Graphics
    • Performing Tasks Inside Vertical Blank
    • Implementing Asymmetrical Playfield
    • Extra Material on Asymmetrical Playfield
    • Scoreboard Background Color
    • Game Over Color Effect
    • Exercise: Incrementing the Score
    • Implementing the Score Increment
    • Exercise: Limiting Player Movement
    • Implementing Player Movement Limits
    • Using BCD Decimal Mode
    • But How Does BCD Work, Really?
    • Quiz: Bit Masking & BCD
  • 16
    • Drawing Missiles
    • Missile Collision
    • Addressing Mode Mistakes
  • 17
    • Sound Registers
    • Generating Sound
  • 18
    Scanline Analysis and Debugging Tools
    • Scanline Analysis
    • Gopher 2600 Emulator and Debugger
  • 19
    Conclusion and Next Steps
    • Next Steps
    • Examples of Commented Code
    • Copyright & Content Distribution
    • Moving Forward


  • Gustavo Pezzi

    Senior Lecturer

    Gustavo Pezzi

    Gustavo teaches computer science and mathematics at BPP University, London. He studies how teaching game programming can help enhance awareness and understanding of basic mathematics and physics. He is also a professional programmer with several years of experience in the computing industry. His academic path includes institutions such as Pittsburg State University, City University of London, and University of Oxford.