This course includes

  • 15 hours on-demand video

  • Downloadable resources and exercises

  • Full lifetime access

  • Access on mobile and desktop

  • 14 day money back guarantee

  • Secure checkout through PayPal

Watch Intro Video

Motivations & Learning Outcomes

Is this course for you?

If you want to learn how to code using Assembly language and understand the fundamental building blocks that make computers tick, then this course is definitely for you. We use the simple Atari 2600 architecture to investigate how to build games by poking bits and turning simple electrical signals into moving objects in your screen.
Buy $12.99
Is this course for you?

What you'll learn

Course overview and structure

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 memory, how the TIA chip controls the display and the 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 $12.99
What you'll learn
  • 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

  • 2
    Hardware and Architecture
    • Hardware and Specs FREE PREVIEW
    • What was your first video game console?
    • Review of Binary and Hexadecimal
    • Quiz: Binary and Hexadecimal
    • The 6502 Processor
    • Processor Carry and Overflow Flags
    • Quiz: 6502 Processor
  • 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
    • Addressing Modes
  • 4
    VCS Memory Map and the TIA
    • VCS Memory Map
    • Memory Map and Page Zero
    • Setting the Background Color
    • NTSC Frame Synchronization
    • Painting the CRT in a Controlled Way
    • Quiz: Painting the CRT
  • 5
    Screen Objects
    • TIA Screen Objects
    • Players, Missiles, and Balls
    • Playfield Graphics
    • Exercise: Playfield Pattern
    • Player Bitmap and Scoreboard
    • Playfield Color
    • Defining RAM Variables
    • Quiz: Screen Objects
  • 6
    Vertical and Horizontal Positioning
    • Vertical Positioning
    • Implementing Vertical Position
    • Quiz: Vertical Positioning
    • Horizontal Positioning
    • Implementing Horizontal Position
    • Exercise: Limiting Horizontal Movement
    • Limiting Horizontal Movement
    • A Deeper Look at Fine Horizontal Positioning
  • 7
    Processor Instructions and Clock Cycles
    • Counting Clock Cycles
    • The NOP Instruction
  • 8
    Controller Input
    • Joystick Input
    • Joystick Player Movement
    • Quiz: Joystick Input
    • Bitwise Operations
    • Example of Bitwise Application
  • 9
    Subroutines, Stack, and Pointers
    • Subroutines
    • The Stack
    • Pointers
  • 10
    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
  • 11
    Controlling Position and Movement
    • Player Horizontal Position Subroutine
    • Quiz: Subroutines
    • Handling Joystick Movement
    • Changing Sprite Frame
    • Enemy Vertical Movement
  • 12
    Random Numbers
    • Generating Random Values
    • Bitshift Operations
    • Random Enemy Position
    • Exercise: Random Values
  • 13
    Object Collision
    • Collision Registers
    • Checking Object Collision
  • 14
    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
    • Quiz: Bit Masking
  • 15
    Missiles
    • Drawing Missiles
    • Missile Collision
    • Addressing Mode Mistakes
  • 16
    Audio
    • Sound Registers
    • Generating Sound
  • 17
    Scanline Analysis and Debugging Tools
    • Scanline Analysis
    • Gopher 2600 Emulator and Debugger
  • 18
    Conclusion and Next Steps
    • Next Steps
    • Moving Forward

Reviews

  • Excellent course, well presented in a logical sequence

    Kevin Yeo

    I've been going through this course and the material is very well presented and delivered in a sensible and logical order. There are times when I have strugg...

    Read More

    I've been going through this course and the material is very well presented and delivered in a sensible and logical order. There are times when I have struggled and this is down to the devil being in the detail. Assembly language and assemblers appear to be very picky, so sometimes things like spaces matter and make the difference between disaster and success. However, when I've scrutinised the problem it's been remedied by carefully analysing everything and being very exact. This shouldn't put you off, I've been meaning to learn some form of assembly language programming and the Atari and the 6502/6507 is the perfect platform, you don't even need a console.

    Read Less
  • Atari 2600: 6502 Assembly Language Programming

    Samuel Ward

    I think that Gustavo does a very good job of explaining the concepts, opcodes, syntax, etc. The video graphics are a superb addition. My only concern is th...

    Read More

    I think that Gustavo does a very good job of explaining the concepts, opcodes, syntax, etc. The video graphics are a superb addition. My only concern is this: I have a good bit of experience with Assembly language programming, so I am comfortable with the lessons and material; however, I wonder how someone with zero Assembly language programming experience will handle such a quick crash course. I am also a little skeptical that with the remaining 7 or 8 hours of instruction videos, Gustavo will cover enough material to give a new 6502/6507 programmer (like me) enough instruction to make that person comfortable / competent enough to actually write code for an Atari video game. I'm skeptical yet hopeful! So far I am pleased with the course.

    Read Less
  • So much fun

    Ajay Khanna

    As a long-time programmer, this course felt like a going on a great short vacation with an excellent guide. GP informs everything with a delight in what can ...

    Read More

    As a long-time programmer, this course felt like a going on a great short vacation with an excellent guide. GP informs everything with a delight in what can be achieved by clever hacking with limited means, and can be very subtle with depth (for example, I first thought the scoreboard was an odd choice for a long video, but it turns out that it involves some sweet bit-masking and opens the door to asymmetric playfield rendering). In this era when assembly programming on current platforms (x86 etc) has fewer applications (I think), I wonder if this is the right way to teach it: through constrained systems and games.

    Read Less
  • Great course!

    Nicole Durrant

    I've just about come to the end of the course and I have to say it's been a deeply enjoyable experience from beginning to end. The course covers most key po...

    Read More

    I've just about come to the end of the course and I have to say it's been a deeply enjoyable experience from beginning to end. The course covers most key points necessary to program games on the Atari 2600, even closing with creating an entire game on the system. If you are interested in learning about the Atari 2600 this is easily the most accessible and beginner friendly way to go about it. I would also recommend trying this course if you are simply interested in Assembly programming or learning about the fundamentals of computing.

    Read Less
  • Makes assembly very accessible

    Eren Fraser

    I really gotta thank Gustavo for making this course, definitely allows people to get their feet into assembly and shake their fears, hopefully I plan to get ...

    Read More

    I really gotta thank Gustavo for making this course, definitely allows people to get their feet into assembly and shake their fears, hopefully I plan to get involved more into 2600 homebrew development and maybe C64 or NES as well. Great to have someone making retro development more accessible by making comprehensive courses, would love to see more platforms as well (Teach MIPS ASM via N64/PSX development? :) ) Again, very accessible and fairly comprehensive, highly recommended

    Read Less
  • Great Introduction

    Antonio Herrera Martin

    I has all the basic ingredients to start practicing and playing with the development of games for the Atari 2600, but it also can help to gain an insight in ...

    Read More

    I has all the basic ingredients to start practicing and playing with the development of games for the Atari 2600, but it also can help to gain an insight in other similar consoles which possess similar characteristics.

    Read Less

Instructor

  • Gustavo Pezzi

    Senior Lecturer

    Gustavo Pezzi

    Gustavo teaches computer science and mathematics at BPP University, London. He researches how teaching game programming can help enhance awareness and understanding of mathematics and physics. He is also a professional software engineer with more than 10 years of experience, with an industry background in 3D systems, games, web systems, databases, and data science. His academic path includes institutions such as Pittsburg State University, City University of London, and University of Oxford.