In this instructional series, we will learn to create a NES game from scratch using NESmaker. That may sound counterintuitive. Most people presume that NESmaker is solely a GUI tool for drag and drop style game development. That couldn’t be further from the truth. NESmaker is an asset creator and organizer that allows for modular, drag and drop development of NES games, but as an asset creator and organizer, it is possible to create entire engines and games from scratch, no different than if you were using a notepad program and an assembler. This is the side of NESmaker that we’ll focus on here.


We’ll start with a few assumptions. If you are brand new to the software, you will definitely want to start with one of the orientation series. These go over the parts of the tool, and get you up and running quickly with prebuilt template modules. This is meant for users who have already gone through those tutorials and have some level of understanding of how the tool operates.


Also, you should have the latest version of the tool, which is NESmaker 4.5.9, and I highly recommend installing Notepad++ for doing your script editing. Once you do, set .asm files to open with Notepad++ by default.


Keep in mind, this tutorial series dives deep, starts with nothing, and jettisons use of some of the convenient GUI methods of doing things. That means progress through creating a game this way will be very slow. But hopefully it will give confidence in using NESmaker at an advanced level, and give a broader understanding of how to manipulate and customize existing modules.


In this lesson, we will start with building a skeleton for our code base. By the end of the lesson, you should understand how the Script Settings tab works; how to set up new script defines, make new scripts, and include those scripts into your project. You should understand the general idea of a memory map, of variables and labels and constants.  


In this lesson, we'll focus on setting up the NMI and talk a bit about vBlank. We'll learn about the stack, a small bit about how NES graphics are drawn, and about the separation between the normal game logic and the functioning of the Picture Processing Unit. We'll also get something we can push to our emulator to verify that our code is working as expected. 


In this lesson, we are going to refine the palette writing routine in our NMI to make it more efficient. We'll take a look at how to create and read from a table, start working with the X register, and set up our first logic loop in ASM.


In this lesson, we are going to load graphics to the ROM and then push them to the PPU. We are going to set up an address pointer, and we're going to talk about 8 and 16 bit math. We will also create an embedded loop.


In this lesson, we are going learn a bit more about how NESmaker's GUI can be used to mine for data, even when creating games from scratch. We're going to be reinforcing our understanding of writing to the PPU, using logic loops, and will finally begin drawing sprites to the screen.


In this lesson, we are going to learn to get controller input and apply it to movement of our player object on the screen. Beyond that, we're going to learn to regulate frame timing so that our main game loop occurs exactly once per frame.