Meatballsub wrote:
I have looked into several tutorials, but they all leave me just scratching my head
That's exactly what happened to me a few years back. And I can tell you, head-scratching usually is the first step. Even today, sometimes I'll look at something and won't understand anything at first. But after reading it all again a few more times things start to get into place.
The ASM part was the most difficult thing for me to learn at first. I just couldn't understand how those tiny little instructions could be used to make complex programs, since I was so used to higher level languages such as basic and pascal. In fact, before you can learn ASM, you have to understand how it works, 'cause it's completelly different from high-level languages.
Once you understand it, learning to do more complex tasks gets easier and easier. I made heavy use of
Michal Kowalski's 6502 simulator when I was learning (and still use it a lot for trying routines and such). It's very easy to use, 'cause you can just type in code and watch live how the instructions work, without worrying about compiling the code, doing something graphical so you can see anything or using complicated debuggers. It's integrated debugger is pretty easy to use. What really made me learn 6502 ASM was trying to code a few math routines (multiplication, division, etc) with this simulator.
As for graphics, I think that the NES PPU is the easiest thing to learn in NES programming. If you understand the limitations of the PPU (without getting into any programming details) you have a greater chance of understanding the rest. Most people wanting to program for the NES have a good idea of the limitations, for having played so many games for it. Try to keep it simple in the beginning, though. No fancy scrolling tricks, character swapping, split screens, etc or you'll easily get lost.
The hardest part of game programming, IMO, is game logic. This is the hardest (if not impossible) thing to teach. The concept of a game loop, object handling, physics, level maps, etc. are tough things to master. So, my tip is that you start out simple, maybe with Atari 2600 styled games. You know, single screen games without scrolling (so you don't have to worry about big level maps or progressive background rendering). These kind of games can give you a pretty good idea of how a game loop works, and for your next project you'll want to try something more interesting graphically.
Anyway, this is all I can think of right now. Keep reading about the 6502, grab a copy of the simulator and try to code a few simple routines. Don't worry about displaying the results of your routines, you can just use the debugger to watch the memory and the registers, so you can verify that the code behaves as you expect.
Once you feel confident about your 6502 skills, read about the PPU. Shortly after that you'll be able to write a nice first demo. By this time you'll have to learn about how to make code that's compatible with an actual NES, and you'll learn all the initialization steps, how to sync your stuff to VBlank, etc. After that it's all easy.