NES Programming with 6502 Assembly
27h 55m 3s
English
Paid
Course description
This course is a full immersion into the world of the Nintendo Entertainment System. We will learn to program games for the NES using the Assembly 6502 language, exploring the fundamental elements of computer architecture. The unique design of the NES is the ideal environment for mastering key concepts of low-level programming.
By the end of the course, you will have practical knowledge of the 6502 assembler, a deep understanding of NES hardware, and a completed project of your own simple game that we will create together from scratch. We'll start with small examples and gradually combine everything into a final project that demonstrates how a simple game for the NES is structured.
Watch Online
Watch Online NES Programming with 6502 Assembly
0:00
/ #1: Motivations & Learning Outcomes
All Course Lessons (144)
# | Lesson Title | Duration | Access |
---|---|---|---|
1 | Motivations & Learning Outcomes Demo | 09:42 | |
2 | How to Take this Course | 02:59 | |
3 | Placing the NES in History | 09:55 | |
4 | NES Hardware (Console) | 27:03 | |
5 | Opening the NES Cabinet | 03:50 | |
6 | NES Hardware (Cartridge) | 09:40 | |
7 | Binary Numbers | 19:22 | |
8 | Hexadecimal Numbers | 12:45 | |
9 | 6502 CPU Pinout | 13:25 | |
10 | 6502 CPU Registers | 10:10 | |
11 | 6502 CPU Status Flags | 23:26 | |
12 | The Assembler Flow | 12:06 | |
13 | Popular 6502 Instructions | 17:54 | |
14 | CA65 Assembler | 02:47 | |
15 | Installing CA65 on macOS | 01:52 | |
16 | Installing CA65 on Linux | 01:57 | |
17 | Installing CA65 on Windows | 09:08 | |
18 | iNES Header | 16:40 | |
19 | Our First Assembly Code | 14:42 | |
20 | Assembler & Linker | 06:01 | |
21 | FCEUX Emulator | 07:51 | |
22 | Our First Assembly Bug | 07:50 | |
23 | Addressing Modes | 06:45 | |
24 | 6502 Warmup Exercises | 08:22 | |
25 | 6502 Warmup Exercises (Solution) | 15:23 | |
26 | Makefiles | 03:25 | |
27 | CPU Memory Map | 12:36 | |
28 | Clearing RAM Addresses | 12:27 | |
29 | NES Graphics & the PPU | 17:09 | |
30 | Picture Frame & VBlank | 09:39 | |
31 | PPU Memory Map | 20:28 | |
32 | Background Color | 07:51 | |
33 | NES Initialization Code | 17:30 | |
34 | Include Files | 06:40 | |
35 | Resetting PPU Address Latch | 02:32 | |
36 | Sending Multiple Bytes to the PPU | 11:49 | |
37 | Unnamed Labels & Subroutines | 06:47 | |
38 | Editing CHR Tiles | 12:20 | |
39 | Loading Nametable Tiles | 12:58 | |
40 | Nametable Attributes | 09:13 | |
41 | Loading Attribute Bytes | 10:45 | |
42 | Creating Dynamic Macros | 08:27 | |
43 | Declaring Variables | 07:18 | |
44 | Measuring Game Seconds | 04:05 | |
45 | Pointers | 08:49 | |
46 | Loading a Full Nametable | 14:23 | |
47 | Full Nametable Code | 07:35 | |
48 | Exercise: Displaying Text | 05:04 | |
49 | Displaying Text | 08:12 | |
50 | Other Tile Editor Apps | 05:35 | |
51 | NES Sprites | 15:20 | |
52 | Hello Mario | 11:20 | |
53 | OAM Decay | 02:14 | |
54 | Hiding Sprites Off-Screen | 05:04 | |
55 | Sprite Flickering | 03:25 | |
56 | Include Nametable Files | 02:25 | |
57 | Exercise: Hello Goomba | 01:22 | |
58 | Hello Goomba | 04:02 | |
59 | Bitwise Instructions | 11:07 | |
60 | Controller Architecture | 13:48 | |
61 | Controller Input Routine | 10:36 | |
62 | Implementing Controller Input | 04:43 | |
63 | Checking Button Presses | 13:57 | |
64 | Moving Sprites with Button Presses | 03:57 | |
65 | Button Constants | 05:54 | |
66 | Integer & Fractional Position | 25:24 | |
67 | Velocity & Acceleration | 17:09 | |
68 | Signed Velocity | 06:56 | |
69 | Intercalating Animation Frames | 11:11 | |
70 | Multiple of Powers of Two | 02:27 | |
71 | Mirroring & Scrolling | 13:29 | |
72 | Horizontal Background Scrolling | 16:36 | |
73 | Swapping Nametables | 14:40 | |
74 | Bitshifting Operations | 11:50 | |
75 | Load Background Dynamically | 05:11 | |
76 | A Method for Dynamic Scrolling | 23:07 | |
77 | Starting the AtlГўntico Code | 16:13 | |
78 | Drawing Column of Tiles Off-Screen | 21:58 | |
79 | Loading Initial Nametable Tiles | 11:37 | |
80 | Loading Attributes Off-Screen | 26:46 | |
81 | Scroll Split Screen | 07:14 | |
82 | Sprite-0 Hit Implementation | 11:56 | |
83 | Separating Game Logic & NMI | 12:15 | |
84 | Running Game Logic Once Per Frame | 07:14 | |
85 | Saving Registers in the Stack | 03:30 | |
86 | Counting Game Loop Passes | 04:47 | |
87 | Macro to Push & Pull Registers | 02:31 | |
88 | A Discussion on Buffering | 08:22 | |
89 | Array of Actors | 13:34 | |
90 | Adding & Removing Actors | 09:15 | |
91 | A Routine to Add Actors | 17:54 | |
92 | Coding the Routine to Add Actors | 13:23 | |
93 | Template to Loop Actors Array | 06:29 | |
94 | Rendering Actors | 33:36 | |
95 | Updating Actor Position | 12:28 | |
96 | Limiting One Missile Per Button Press | 06:18 | |
97 | Deleting Actors | 16:52 | |
98 | Relative vs. Absolute Jumps | 05:26 | |
99 | Spawning Submarines | 15:45 | |
100 | Spawning Airplanes | 06:07 | |
101 | Random Numbers using LFSR | 24:34 | |
102 | 8-Bit LFSR Example | 09:21 | |
103 | Random Airplane Position | 12:54 | |
104 | Adjusting Airplane Position | 05:09 | |
105 | Sprite Collision Check | 18:22 | |
106 | Missile-Airplane Collision | 24:44 | |
107 | Check Point Inside Bounding Box | 13:26 | |
108 | BCD Representation | 17:48 | |
109 | Routine to Increment Score | 10:29 | |
110 | Buffering Background Tiles | 29:49 | |
111 | Increment Score on Airplane Hit | 02:34 | |
112 | Background Collision Check | 10:44 | |
113 | CHR Bank Switching | 21:38 | |
114 | Game States | 06:10 | |
115 | Title Screen State | 10:13 | |
116 | Title Screen Nametable | 18:21 | |
117 | Title Screen Menu Items | 10:18 | |
118 | Drawing Menu Item Arrow | 07:23 | |
119 | Exercise: Menu Item Palette Selection | 03:58 | |
120 | Menu Item Palette Selection | 05:15 | |
121 | RLE Compression | 10:13 | |
122 | A Python Script to Encode RLE | 14:56 | |
123 | A Routine to Decode RLE Data | 10:06 | |
124 | Title Screen RLE Decoding | 07:07 | |
125 | APU | 14:32 | |
126 | Introduction to FamiStudio | 39:48 | |
127 | Square Channel Ports | 19:57 | |
128 | Triangle, Noise, and DMC Ports | 13:13 | |
129 | Musical Notes & Period | 17:21 | |
130 | Using a Sound Engine | 16:03 | |
131 | FamiStudio Sound Engine | 18:27 | |
132 | Some Notes on Chords & Voicing | 03:50 | |
133 | Playing FamiStudio Music Code | 14:07 | |
134 | Playing Missile Sound Effect | 04:55 | |
135 | Playing Explosion Sound Effect | 07:02 | |
136 | Fixing Button Press/Release Bug | 06:53 | |
137 | Fixing VRAM Buffering Address | 03:48 | |
138 | Clipping Tiles Left & Right | 21:10 | |
139 | Calculating Tile Screen (-1,0,+1) | 29:32 | |
140 | Removing Actors Off Screen | 11:54 | |
141 | Fixing Explosion SFX Bug | 06:42 | |
142 | Developing NES Games with C | 04:53 | |
143 | C NESLib Examples | 32:03 | |
144 | Conclusion & Next Steps | 19:25 |
Unlock unlimited learning
Get instant access to all 143 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.
Learn more about subscriptionBooks
Read Book NES Programming with 6502 Assembly
# | Title |
---|---|
1 | 6502 Warmup Exercises |
2 | 6502 Warmup Exercises (Solution) |
Comments
0 commentsSimilar courses

Ultimate C++ Part 1: Fundamentals
Sources: codewithmosh (Mosh Hamedani)
Master C++ fundamentals with Mosh Hamedani's course. Ideal for video games, IoT devices, and more. Enhance your coding skills with real-world examples.
3 hours 52 minutes 48 seconds

Ultimate C++ Part 2: Intermediate
Sources: codewithmosh (Mosh Hamedani)
Enhance your C++ skills by mastering arrays, pointers, and other key concepts. Ideal for those with basic knowledge from part one. Course by Mosh Hamedani.
3 hours 37 minutes 48 seconds

Building a Parser from scratch
Sources: udemy, Dmitry Soshnikov
Parsing or syntactic analysis is one of the first stages in designing and implementing a compiler. A well-designed syntax of your programming language is a big
2 hours 31 minutes 11 seconds

Ultimate C++ Part 3: Advanced
Sources: codewithmosh (Mosh Hamedani)
To take this course, you should have watched the first two parts or have a thorough understanding of the concepts covered there. You should be able to write basic C++ programs a...
3 hours 41 minutes 57 seconds

Graph Theory Algorithms for Competitive Programming
Sources: udemy
Welcome to Graph Algorithms for Competitive Coding - the most detailed Specialisation in Graph Theory for Competitive Programmers, Software Engineers & Computer Science students...
20 hours 12 minutes 42 seconds
Want to join the conversation?
Sign in to comment