Tompis1995 wrote:Do you know anyone who could explain how the NES architecture works without using so much computer lingo I hardly understand?
Learning the NES architecture
is learning computer lingo.
Without knowing what the words mean, you'll never understand the documentation. Without understanding the documentation you will never now how to do anything on the NES - such as displaying a sprite.
If there are any words you don't understand, just ask. Tokumaru already underlined this twice.
Just to clarify a few of the most important ones used here:
PPU: This is just the name of the NES's video chip.
Register: Essentially these are ways to write values to the hardware. On the CPU the most important registers you are working with are of course A, X and Y, but the NES itself has hardware registers for chips such as the PPU, which are used to communicate with it, and tell it what to do. These individual registers are accessed by writing to specific addresses which are always the same.
OAM: "Object Attribute Memory", like Tokumaru explained, this is really just 256 bytes of memory that describe every sprite displayed on an individual frame. "Object" is just the NES's name for hardware sprites.
DMA request: "DMA" is essentially just a way to copy a bunch of data from one place to another. On the NES, there is only one DMA, which has the job of copying data into the PPU's OAM table. When Toku talks about writing to addresses $0200, $0201, etc. that's just a copy of what you want in the PPU's OAM. A single write to the DMA register will make it copy all of this data into the OAM.
Vblank: Any time code is executing on the NES, the console might be in the processing of drawing a visible frame, as this takes time - almost the entire time between the start of two frames. Vblank refers to the short "empty" period between two visible frames in which the NES is actually not drawing anything. This is important, as it's the only time you have to communicate with the PPU during gameplay.
It is however not important during your initialization/reset routine, before you turn on rendering.
Interrupt: To simplify it, this is a routine that can be executed at any time while other code is running. Once the routine ends (with the "RTI" instruction), the code will resume executing where it was.
NMI: This is an interrupt that, in the case of the NES, is run once every frame, during the VBLANK period. So typically your "NMI handler" does the job of communicating with video memory. In this case we are using it to refresh data in our OAM table.