Learn Assembly Language By Making Games For The Atari 2600
Last updated 11/2022
MP4 | Video: h264, 1280x720 | Audio: AAC, 44.1 KHz
Language: English | Size: 13.17 GB | Duration: 17h 3m
Last updated 11/2022
MP4 | Video: h264, 1280x720 | Audio: AAC, 44.1 KHz
Language: English | Size: 13.17 GB | Duration: 17h 3m
Programming games for the Atari 2600 platform using 6502 Assembly Language
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
Requirements
No requirements
Description
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 programmingUnderstand what happens under the hood when you write something as simple as print("Hello World") in your favorite high-level languageLearn 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 emulatorThere 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.
Overview
Section 1: Introduction
Lecture 1 Motivations and Learning Outcomes
Section 2: Hardware & Architecture
Lecture 2 Hardware and Specs
Lecture 3 The Popularization of Game Cartridges
Lecture 4 Your First Game Console
Lecture 5 Digital Binary System
Lecture 6 Counting in Base 10 & Base 2
Lecture 7 Hexadecimal Notation
Lecture 8 The 6502/6507 Processor
Lecture 9 Processor Status Flags
Section 3: 6502 Assembly Programming
Lecture 10 The Assembler Flow
Lecture 11 Assembly Language(s)?
Lecture 12 Popular 6502 Assembly Instructions
Lecture 13 Installation and Tools
Lecture 14 Picking a Code Editor
Lecture 15 Our First Assembly Code
Lecture 16 The DASM Assembler
Lecture 17 The Stella Emulator
Lecture 18 The Javatari Emulator
Lecture 19 Installing DASM on Windows
Lecture 20 Our First Assembly Bug
Lecture 21 Important Assembly Terminology
Section 4: 6502 Instruction Set
Lecture 22 Different Addressing Modes
Lecture 23 6502 Instruction Set
Lecture 24 6502 Instructions Warm-up Exercises
Lecture 25 6502 Exercises Walkthrough
Lecture 26 Is the Atari 2600 a Proper Computer?
Section 5: VCS Memory Map and the TIA
Lecture 27 VCS Memory Map
Lecture 28 Memory Map and Page Zero
Lecture 29 Sending Instructions to the Display
Lecture 30 Stella Debugger Warnings
Lecture 31 NTSC Video Synchronization
Lecture 32 Painting the CRT
Section 6: TIA Objects
Lecture 33 TIA Screen Objects
Lecture 34 Players, Missiles, and Balls
Lecture 35 Playfield
Lecture 36 Playfield (Exercise)
Lecture 37 NTSC vs. PAL
Lecture 38 Player Bitmap and Scoreboard
Lecture 39 Playfield Color
Lecture 40 Playfield Pixel Size
Lecture 41 Declaring Variable Names
Lecture 42 When to use .byte, .word, and ds?
Lecture 43 A Quick Discussion on Registers & Variables
Section 7: Horizontal and Vertical Positioning
Lecture 44 Vertical Positioning
Lecture 45 Implementing Vertical Position
Lecture 46 Representing Graphics Data in Games
Lecture 47 Horizontal Positioning
Lecture 48 "Fine" Horizontal Positioning
Lecture 49 Implementing Horizontal Positioning
Lecture 50 Horizontal Position (Exercise)
Lecture 51 Horizontal Position (Solution)
Lecture 52 Horizontal Position & Keeping Time
Lecture 53 A Deeper Look into Horizontal Positioning
Section 8: Clock Cycles
Lecture 54 Counting Clock Cycles
Lecture 55 Undocumented OpCodes
Section 9: Controller Input
Lecture 56 Joystick Input
Lecture 57 Joystick Player Movement
Lecture 58 Atari VCS Input Ports
Lecture 59 Bitwise Operations
Lecture 60 Bitwise Application Example
Section 10: Subroutines, Stack, and Pointers
Lecture 61 Subroutines
Lecture 62 Stack
Lecture 63 Pointers
Section 11: Starting our Final Project
Lecture 64 Starting our Final Project
Lecture 65 Defining the Project Playfield Graphics
Lecture 66 Creating Sprites in PlayerPal
Lecture 67 Defining the Project Player Graphics
Lecture 68 Drawing Player Sprites
Lecture 69 A Reflection on Counting Clock Cycles
Section 12: Project Movement and Positioning
Lecture 70 Player Horizontal Position Subroutine
Lecture 71 Handling Joystick Movement
Lecture 72 Changing Sprite Animation Frame
Lecture 73 Enemy Vertical Movement
Section 13: Random Numbers
Lecture 74 Generating Random Numbers
Lecture 75 Bitshift Operations
Lecture 76 Random Enemy Position
Section 14: Object Collision
Lecture 77 Collision Registers
Lecture 78 Object Collision
Section 15: Digits and Scoreboard
Lecture 79 Score Digits
Lecture 80 Scoreboard and Timer Graphics
Lecture 81 Tasks Performed Inside VBlank
Lecture 82 Implementing Asymmetric Playfield
Lecture 83 Extra Resources on Asymmetrical Playfield
Lecture 84 Scoreboard Background Color
Lecture 85 Game Over Color Effect
Lecture 86 Score Increment (Exercise)
Lecture 87 Score Increment (Solution)
Lecture 88 Limiting Movement (Exercise)
Lecture 89 Limiting Movement (Solution)
Section 16: BCD Decimal Mode
Lecture 90 Using Decimal Mode BCD
Lecture 91 What Is BCD, Really?
Section 17: Missiles and Macros
Lecture 92 Missiles
Lecture 93 Macros
Lecture 94 Missile Collision
Lecture 95 Addressing Mode Errors
Section 18: Audio
Lecture 96 Sound Registers
Lecture 97 Jet Engine Sound
Section 19: Scanline Analysis and Debugging Tools
Lecture 98 Scanline Analysis
Lecture 99 Gopher2600 Emulator and Debugger
Section 20: Conclusion and Next Steps
Lecture 100 Next Steps
Lecture 101 Examples of Disassembled Commented Code
Lecture 102 Copyright and Content Distribution
Section 21: Bonus Lecture
Lecture 103 Other Courses
Lecture 104 Courses
Beginner or intermediate developers interested learning about low-level programming,Developers interested in learning game programming using the Atari system,Professional developers interested in learning about programming using 6502 Assembly language