I’ve been interested in modifying Nintendo games (the practice is known as “ROM hacking”) for a while, though I’ve never developed my own software from scratch. Recently I had an idea for a project that would require original code, so I needed to learn how to create everything from the ground up.
To write programs for the NES, you have to know or learn assembly for the 6502 microprocessor. This processor was used in a variety of hardware in the 70s and 80s, and by today’s standard, is very simple and is not difficult to learn for those with some programming background. There are are huge number of resources on the 6502 processor available both online and in most libraries. Developing for the Nintendo will also require specific knowledge of the hardware and how to access it.
Once you’ve gotten to the point where you have the desire and ability to develop your own NES programs, ASM6 is a good assembler choice. It was created specifically for NES developers and can export .NES files ready to run in an emulator without the need for a separate linker.
Additionally, here is a collection of very useful macros from “Memblers”. Unfortunately these macros aren’t 100% in ASM6 format but the ones that are not can be rewritten.