Learn Assembly Language by Making Games for the Atari 2600

Learn Assembly Language by Making Games for the Atari 2600

English | MP4 | AVC 1280×720 | AAC 44KHz 2ch | 104 lectures (17h 2m) | 13.17 GB

Programming games for the Atari 2600 platform using 6502 Assembly Language

Are you feeling a bit lost in this fast-paced jungle that is the world of software development today?

Do you need some refreshing vacation where you learn something really small, nerdy, and fun?

Well, book your tickets!

This course will teach you the basics of programming games for the classic Atari 2600 console using 6502 Assembly Language. If you are a complete beginner or if you are a pro developer, chances are you will learn something new and enjoy poking the bytes of a simple and minimal hardware architecture that is the classic Atari 2600 VCS.

Join me if you want to:

  • Expand your knowledge of computer architecture and low-level programming
  • Understand what happens under the hood when you write something as simple as print(“Hello World”) in your favorite high-level language
  • Learn to code game elements for the Atari 2600 system using 6502 assembly language.
  • Create your own Atari ROM cartridges and run them with an Atari emulator

There are no real requirements to this course and beginners are welcomed. You only need to know how to work with computers, copy files around, and a code editor.

Please be aware that I will use Linux in the videos… but both Atari emulator and Dasm assembler work under Linux, Windows, and macOS. So, you will be able to use any operating system you want to take this course.

What you’ll learn

  • Programming for the Atari 2600
  • Assembly 6502 Language
  • Manipulating Video, Audio, and Input data
  • Creating Game ROM Cartridges
  • Computer Architecture and Low-Level Programming
Table of Contents

1 Motivations and Learning Outcomes

Hardware Architecture
2 Hardware and Specs
3 The Popularization of Game Cartridges
4 Your First Game Console
5 Digital Binary System
6 Counting in Base 10 Base 2
7 Hexadecimal Notation
8 The 65026507 Processor
9 Processor Status Flags

Assembly Programming
10 The Assembler Flow
11 Assembly Languages
12 Popular 6502 Assembly Instructions
13 Installation and Tools
14 Picking a Code Editor
15 Our First Assembly Code
16 The DASM Assembler
17 The Stella Emulator
18 The Javatari Emulator
19 Installing DASM on Windows
20 Our First Assembly Bug
21 Important Assembly Terminology

Instruction Set
22 Different Addressing Modes
23 Instruction Set
24 Instructions Warmup Exercises
25 Exercises Walkthrough
26 Is the Atari 2600 a Proper Computer

VCS Memory Map and the TIA
27 VCS Memory Map
28 Memory Map and Page Zero
29 Sending Instructions to the Display
30 Stella Debugger Warnings
31 NTSC Video Synchronization
32 Painting the CRT

TIA Objects
33 TIA Screen Objects
34 Players Missiles and Balls
35 Playfield
36 Playfield Exercise
37 NTSC vs PAL
38 Player Bitmap and Scoreboard
39 Playfield Color
40 Playfield Pixel Size
41 Declaring Variable Names
42 When to use byte word and ds
43 A Quick Discussion on Registers Variables

Horizontal and Vertical Positioning
44 Vertical Positioning
45 Implementing Vertical Position
46 Representing Graphics Data in Games
47 Horizontal Positioning
48 Fine Horizontal Positioning
49 Implementing Horizontal Positioning
50 Horizontal Position Exercise
51 Horizontal Position Solution
52 Horizontal Position Keeping Time
53 A Deeper Look into Horizontal Positioning

Clock Cycles
54 Counting Clock Cycles
55 Undocumented OpCodes

Controller Input
56 Joystick Input
57 Joystick Player Movement
58 Atari VCS Input Ports
59 Bitwise Operations
60 Bitwise Application Example

Subroutines Stack and Pointers
61 Subroutines
62 Stack
63 Pointers

Starting our Final Project
64 Starting our Final Project
65 Defining the Project Playfield Graphics
66 Creating Sprites in PlayerPal
67 Defining the Project Player Graphics
68 Drawing Player Sprites
69 A Reflection on Counting Clock Cycles

Project Movement and Positioning
70 Player Horizontal Position Subroutine
71 Handling Joystick Movement
72 Changing Sprite Animation Frame
73 Enemy Vertical Movement

Random Numbers
74 Generating Random Numbers
75 Bitshift Operations
76 Random Enemy Position

Object Collision
77 Collision Registers
78 Object Collision

Digits and Scoreboard
79 Score Digits
80 Scoreboard and Timer Graphics
81 Tasks Performed Inside VBlank
82 Implementing Asymmetric Playfield
83 Extra Resources on Asymmetrical Playfield
84 Scoreboard Background Color
85 Game Over Color Effect
86 Score Increment Exercise
87 Score Increment Solution
88 Limiting Movement Exercise
89 Limiting Movement Solution

BCD Decimal Mode
90 Using Decimal Mode BCD
91 What Is BCD Really

Missiles and Macros
92 Missiles
93 Macros
94 Missile Collision
95 Addressing Mode Errors

96 Sound Registers
97 Jet Engine Sound

Scanline Analysis and Debugging Tools
98 Scanline Analysis
99 Gopher2600 Emulator and Debugger

Conclusion and Next Steps
100 Next Steps
101 Examples of Disassembled Commented Code
102 Copyright and Content Distribution

Bonus Lecture
103 Other Courses
104 Courses