I haven't done too much language/construction checking but might a style like this be beneficial?
What is a Register?
It's a really tiny bit of memory (usually 8 or rarely 16 bits on the nes) with a very specific task, unlike RAM which you've got plenty of (well... 2kB) but is general purpose for your convenience. Registers are usually physically situated within some processor, microcontroller and so on. There are all kinds of registers. They are a bit like synapses in that they pass on tiny bits of information or react to certain situations, which your game can be on the lookout for at your option.
What is the arithmetic and what are the index registers:
It may help to think about the arithmetic register (A for Accumulator) and index registers (X, Y) as
hands.
The CPU has 3 hands. It can grab (actually copy) a piece of information from one bowl, manipulate it some, and/or place (again, copy) it to another bowl. Just like your real-life hands, you'll use these three hands all the time when executing 6502 code.
You instruct the hands to do different things with instructions. When viewing assembly code, you see lots of mnemonics like LDA (LoaD A), STA (STore A), CMP (CoMPare). These instruct the hands to do different things. Other instructions instruct other parts of the CPU than the hands though. For example, a BRK (BReaK) will instruct the CPU to stop doing whatever it is doing at that very instant and turn attention to something else (which the programmer has pre-defined is something called a vector, for those who are curious).
(curiosity fact box: historically, this specific instruction (BRK) was used a lot to "escape" a program and enter a debugging program called a "monitor". None of that is relevant today, though, as the NES doesn't have any programs built-in and it's far easier to debug your code in an emulator on a modern computer anyway. If you see any old book mentioning a [debugging] monitor, this was what they meant - not the screen. BRK can still be useful for other things, for example auto-reset the game when something goes awry or pause game playback to show the programmer the current value of some variables on-screen).
A (short for accumulator) is where you'll try to do most of your math and "message delivery" between bowls (it might make sense to call them mail boxes as this point, because every bowl/mail box has an address, That's how you know from where to load and where to store).
X is often used as a counter when you need to iterate a task a number of times or do something called indexed addressing. That's for another day.
Y is in practice kind of a spare register for when you need to juggle a lot of information at once or want to preserve or pass a value between functions without needing to fetch it again and again from ROM or RAM.
X and Y actually are nearly identical though X has some additional obscure functionality which is too nerdy to mention right now.
What are status registers?
The CPU (and PPU - that's the picture processor) also has(have) an assortment of different "flags". They work a bit like when you try to remember something by holding out a finger or tie a rubber band around it, Unlike hands (arithmetic/index registers), these flags can only hold the simplest kind of information: if something
is or
isn't, and just like fingers they have specific names.
Many of these flags are super useful for making decisions (should the game/code do this or that? Well, let's check the PPU status register. Aha, this Sprite Overflow flag for example says there's more than 8 sprites on a scanline, so maybe we should enable the priority cycling/flicker routine so that the 9th sprite and so on isn't invisible. (curiosity fact box: a lot of games actually have sprite cycling turned on all the time for the sake of simplicity). The sprite overflow flag can say if there's an overflow or if there isn't. It can't say how many sprites there are on a line. It can't hold a value other than 1 or 0.
This is status flag, and 8 status flags comprise a status register. There are two pure-bred status registers internal to the NES: CPUSTATUS and PPUSTATUS.
What is a control register?
Some flags are meant to be read and are updated automatically by the CPU or PPU. Still others can actually also be manipulated (written to) by the programmer. This category of flags are more like flip switches for various modes, settings, and preferences of the system. These are called control registers. PPUCONTROL is one where you can turn background and sprites on and off and tint the whole screen in a few colours and so on.
What is a hardware register?
Basically any register that controls or returns the status of some hardware, for example a controller. In that sense, a hardware register can be about status or control.
What is a stack?
The CPU has one rucksack (comprised of a so-called stack register (more exactly called stack pointer), and a storage space situated in RAM called stack page). In practice, it works just like a rucksack. A hand can put stuff in it or take something out. If you take something out of it, it will be the last thing you put in. Then the item you put in after that, and so on.
What is the program counter?
The program counter is a special register which keeps track of where in the code the program currently is (so that it knows what line of code to execute next). It is like a teachers' pointer in the classroom going word for word across a phrase in a foreign language on the whiteboard, ie. it instructs the pupils what word to pronounce next. When the code doesn't go straight from top to bottom (ie instructions tell it to momentarily jump to some other function and then return to where it were), it interacts a lot with the stack (rucksack) to remember where to return. The stack register is therefore adequately called the stack pointer, much like the teachers' pointer.
Why do i need to know all this?
With NESmaker, you can principially do what it says on the tin. Press click and assemble a game. But if you want to get the most out of it, it is good knowing what building blocks on the hardware you're actually working with and how they interact.
tl;dr (but not really a summary)
Bottom line: Arithmetic registers (hands) are for loading, manipulating and storing a grab of data in different bowls. Flags are bundled in groups of 8 and one such group is also called a register, but their function is different from the arithmetic or index ones.
New words to look up:
Registers