NES Tutorial?

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
NES Tutorial?
by on (#6975)
Hi, all.

First, an introduction... this is my first post, and I'm just getting started for the... err... second time with NES development. I started early this year, but the computer I was developing on died and life got hectic, and now I'm just getting started again.

When I was getting started the first time, I was following GBAGuy's tutorial, because it seemed to be the most newbie-friendly. I got a simple little demo working where a sprite moves around on the screen. I still have the code, but I don't remember anything about how I put it all together. Sadly, GBAGuy's tutorial seems to have vanished. I've been looking around at the NES Documents section on the main page of this site, but none of them seem to be quite as newbie-friendly.

I've d/l'd and am wading through "NES 101" and "Programming that 8-bit beast of power, the NES", with "NES Programming Guide v 0.4" and "Nintendo Entertainment System Documentation" close at hand as reference material.

My question, then, is two-fold:

1. Is there a more newbie-friendly tutorial (or another copy of GBAGuy's stuff) that I've missed?
2. If not, then which of the many docs on that page would be most helpful to me? I'm a bit overwhelmed by the sheer volume of information, and the fact that much of what I need to know seems to be mixed in with things that are still beyond me.

Thanks in advance for the help.

-Lister

by on (#6978)
Hi, Lister! First of all, I'd like to just say welcome to nesdev, it's really cool to make NES games, and yes, GBAguys website has vanished. But! When I began NESdev, I followed his tutorials. Lucky for you, I copy and pasted every one into a word document, and I've uploaded them in a zipped folder onto my site! I didn't put them on the page or anything, I just have them on my account. Click here. But do know that Gbaguys tutorials are to be ignored once read. He uses very unreliable methods when doing things, and he even tells you that he's very unsure of things. He does explain alot of the basics though.

But what you want to do is read a 6502 document linked off the site (I prefer Assembly in One Step) to learn the 6502, and if you're using NESASM (which I prefer for begginers), then it will come with a little document with 6502 instructions so you won't forget. 6502 isn't that hard to learn. Just read alot about the 6502, and post here for further questions. I try to be helpful, but I'm not too clear on things in programming the NES still either. But I'll try to help if you have problems. But yeah, learn the 6502, and you probably want NESASM if you're a begginer.

I have some tech demos on my site (I have a link below on my signature) with you can check out. But don't try too many advanced things yet. Trust me, I know, I started WAY too fast, and I even need to slow down as is. But yeah, I hope that helped. Get some tools off the main site (yy-chr for a graphics editor. Many prefer Tlayer Pro, I prefer YY-Chr though). Nerd Tracker 2 is a cool concept, but when incorperating it into a ROM, it can be a real hastle (aka stay away). But yeah, just post again if you have any questions. I'll be happy to help :) .

P.S- my link didn't work too well, just right click the link, go to properties, copy and paste the url into a new browser window, or whatever :).

by on (#6979)
Thanks for the link, Celius! Very handy. Looking over it, I see that I had forgotten a lot of the issues with GBAGuy's doc... but I have to say, out of everything I looked at, it was the most helpful in actually creating my first working ROM.

I've been browsing the forums and reading docs and I'm considering the possibility of documenting everything I learn as I go along... basically creating a n00b's-eye-view of NES development. It seems to me that there's a lot of good info out there that I'd like to see synthesized into one "learn-by-example" type of document. Maybe with some technical assistance I could separate the wheat from the chaff in GBAGuy's tutorial and incorporate some of the solid information that's available from other sources. And I think being a newbie might just be an advantage in putting together such a document, because I'd be able to focus on documenting the confusing bits as I went along, the things that stump newbies but more experienced NES developers take for granted -- I've gotta learn it anyway, why not write it down?

What do you think, does it sound reasonable, or am I biting off more than I can chew?

by on (#6983)
No, you are not biting off more than you can chew! I've always wanted to do something like this, but I am a little confused on some things too. Are you confused about scrolling? It's alot easier than it seems. There's like l00py's scrolling doc, and that is a peice, in my opinion anyway. It's really easy. I'm just going to give you an idea. Set up 2 variables (yscroll and xscroll), and do something like this:

NMI:
lda xscroll
sta $2005 ;horizontal scroll register
lda #$00
sta $2005 ;vertical scroll register
inc xscroll ;increment scroll variable
inc vblcount ;increment vblank variable
rti

You'd want to do this in your NMI, because it's done once per vblank, and yeah, I shouldn't be assuming you don't know this, I just know that l00py's doc will NOT help if you're a newbie, and GBAguy's tutorials don't explain it at all. But yes, I'd like to put together a document on things I didn't get when I was a newbie, like scrolling, attributes, sprite dma, and even simple math stuff, I was really bad at (see the 8 page object collision page). But yes, I'd really like this. We'll have to do it sometime! :)

by on (#6984)
If you make a doc... just make sure you at least kinda know what you're talking about. People don't really need another GBAguy repeat (sure his docs are newbie friendly, but they also contain lots of false/bad info and state things which he even says he's unsure of).

by on (#6990)
Well, yeah, I wouldn't be like "uhh, I don't know this, so yeah, go figure it out." I would actually figure it out, and put that info in a doc. His scrolling part of the doc was hideous! "Uh, yeah, I don't know how to do this, so yeah, uh, yeah." It's like ya' could have just left that part out of the doc if you were just going to type a bunch of crap like "Yeah, this is possible to do, but I don't know how, so go find out for me, and email me". It's like who's supposed to be learning here? You or me? Yeah, some of his stuff is okay, and he did give me a good boost in to the world of NESdev. But I'll try to write a better doc if I write one. I should. I'll try to write a good one at least :).

by on (#6991)
Celius wrote:
"Uh, yeah, I don't know how to do this, so yeah, uh, yeah." It's like ya' could have just left that part out of the doc if you were just going to type a bunch of crap like "Yeah, this is possible to do, but I don't know how, so go find out for me, and email me".


Yep that about summed it up XD

not only that but he did other questionable things... like write to Spr-RAM with $2004. While that would work... It's completely impractical for all your sprite data.

Plus he did some stuff that would downright just not work. Including declaring vars in zero page with ".db $80" and then expecting the area in RAM to be $80 when the ROM is run (when it wouldn't be)

by on (#6992)
When you're learning, you understand the problems of other learners but lack good knowledge of the subject. When you're experienced, you have good knowledge of the subject but have lost the learner mindset. Both aspects are necessary to write good documentation, but they come at different times! :)

by on (#6993)
I've begun writing the document, it's about 8K already. I've explained what tools are neccisarry, Interrupts, adresses, and I said that they NEED to know the 6502 before they start. But I spent about an hour and a half writing, and it's turning out pretty well so far. I think it should be pretty helpful. Though it is very similiar to programming the 8 bit beast of power. It's like a mixture of NEStech and that document, which I think is neccisarry. But I think it should be pretty good in the end. I'll let one of you read it when I'm done, and you can decide :).