Hello, new here, and need best recommandations.

Are you new to 6502, NES, or even programming in general? Post any of your questions here. Remember - the only dumb question is the question that remains unasked.

Moderator: Moderators

Post Reply
DocWaluigean
Posts: 205
Joined: Sun Jun 17, 2018 6:41 pm

Re: Hello, new here, and need best recommandations.

Post by DocWaluigean »

tokumaru wrote:
DocWaluigean wrote:I'm even willing to make a tutorial that's more comprehend-able than BunnyBoy if I understand everything.
You'd be surprised by how many people have said that, but either "forgot" or just gave up on NES development.

It's not easy to word this stuff in simpler terms, because this really isn't a simple subject. You can't replace terms like registers, mirroring, addressing, etc. by simpler ones because they describe unique things and behaviors that don't necessarily have counterparts that are easier to comprehend. We can EXPLAIN all the terms and behaviors individually so that when you see them at a later time they won't sound like alien concepts, but programming knowledge is something you build progressively, you have to understand one layer before moving on to the next, you can't skip to the topmost layer and expect things to be worded in a way that circumvents everything established in the layers below.
As sadly as I have to agree on the term, there is a form of ambitions in certain people that made them attempt to do those kinds. For many people on "forgot" or just gave up, they didn't find motivations or ambitions, since "it's a waste of time to make tutorial for a dead old program" beliefs or other things.
For me, I have big one, that every time I felt quitting, I only went to sleep to calm myself down, because I feel upset so much for a while since no tutor or any road is there for me. I waited time to try again, and try to explain much differently. The road I always get stuck is 6502 Processor Overview in Week 3.

As I'm predicting you hear this term also, I'm not like any people who have said those kinds. I find much more values in NES programming than before more and more, especially NIKI homebrew games, Mario Adventure 3: Mushroom Mayhem, yet I often struggles with coding without forms of learning styles like mnemonics. It's odd that I understand partially in BASIC, Java[Script], and C#, yet I struggle the most in 6502, even though I feel it's one of hard-to-learn coding languages and it's obvious.

There's a learning styles called VARK where it shows some kind of learning styles for people who learns best of: Visual, Aural, Read/Write, and Kinesthetic. For me, it's possible for, at most, all 4 of it.

Maybe I can't explain well or get you guys to understand where I come from because despite my native tongue is Spanish, I use English majority of my life, and I can't use grammar terms correctly many times. But I can tell ya, I'm a fast learner when I understand something, I really strive for good qualities on something.

As I know tutor is highly discourages or not possible much here because "they have lives" or "they do it for money for teaching", I want to let ya know I'm serious on tutoring, and I'm willing to record and understand details by details to make NES tutorials so good, even children can learn more than what they could do in NESMaker.
It just a good communications between student and tutors for support is really needed to help me understand as "God-Tier" as Shiru, NIKI, and DahrkDaiz, who got me into this homebrew business in the first place.

If you feel I'm not even trying. despite the fact that to other eyes, I may be another person who doesn't care or gives up easily:

-I understood completely with basics of Binary, HEX, and decimals/ natural numbers.
-I understood that the address $ is like a room where you place the codes, and certain "rooms" inside does specific jobs, like the sprite-color decision "room."
-I at least know what Mapper does in certain types, from increasing tile size, to the abilities of making beautiful music using N106.
-INC means increment, which is mathematical technique in increasing number by 1, unless stated.
-I understood that graphic limit is set to 13 colors, with one transparent for each "4" colors, which is 3 colors and 1 transparent, and the screen is 256 X 240, but issues in vertical lines is 256 X 224
and other things about 8X8, 16X16 Sprite limit, where vertical mirror is possible, but not horizontal mirror.
- $ and # symbol is different, where $ is the address, and # is the number-number.
-I somewhat partially understood that A, X, Y is a type of register that "allows you to store numbers [Address? Digits/HEX?] temporary" like forms of transport from one address to another, OR some kind of math abilities that allows you to carry the number using "LDA" and "STA" stuff.
-I partially understood about high-power and low-power byte like what they said on Nerdy Night Week 4:

Code: Select all

The palettes start at PPU address $3F00 and $3F10. To set this address, PPU address port $2006 is used. This port must be written twice, once for the high byte then for the low byte:

  LDA $2002    ; read PPU status to reset the high/low latch to high
  LDA #$3F
  STA $2006    ; write the high byte of $3F10 address
  LDA #$10
  STA $2006    ; write the low byte of $3F10 address

If I understand the code from BASIC languages with certain opcodes on what it does, like DEC and INC, the same way with the C# programming beginners where they did the "Application > NameSpace > Assembly > Codes", then I have compatibility to understand 6502 languages, but I tend to struggle with certain information that doesn't comprehend to me because it isn't explain well for me, or because, dare I say it, "It's boring to try and read it and remember it."

I just want to put this down just to tell ya what kind of person I am. You could think I'm "autistic moron" or anything like that, or anything that people who has elitist personality could put me down, but I just want to let ya know I'm really trying hard to figure out on codes yet struggle on obstacles, and I'm serious and determined to learn, that I'm willing to be perfect attendances for tutors. Discord, other ways, I'm in.

Even though I know it's high chance that response is very obvious that no tutors is here, or potentially discourages to try to tutor. If there isn't any forms of tutor that can help me learn in very well styles that I could rival Shiru and/or DahrkDaiz in terms of creative codes, I might as well ask so many ridiculous questions on something that's potentially easy here like I did.

It's getting late here atm. So I hope I don't make any errors to explain.

EDIT: I don't ever want anyone, young or old, to go through struggles what I gone through that gives up easily.
User avatar
tokumaru
Posts: 12427
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Hello, new here, and need best recommandations.

Post by tokumaru »

I haven't been following this thread closely, but it's not like us to call anyone a moron or anything of the kind. We're always willing to help those who demonstrate they're making progress. What nobody here likes is when we do our best to explain something to someone, taking time from other things we could be doing for ourselves (e.g. working on our own projects, spending time with our families, etc.), and the person's reply makes it clear they didn't even read it all.

What we don't like is when people try to take shortcuts. There are no shortcuts... quite the opposite, really! If you're reading a post or a document, and all the information is flying over your head, you don't just skip and go "yeah, this is not working for me, let's see what's next". You can't go forward if you don't understand what came before. You have to keep reading, over and over until something makes sense. Once something makes sense, read again and more things will make sense.

We're here to help, we can explain things in a different way, we just don't have the time to rewrite every document and tutorial so they're perfect for everyone, and we don't have time to private tutor each person that comes to the forum saying that the information that currently exists is not in line with their favorite way of studying.

Coding games is not an easy task, you'll have to adapt and overcome several hardships, so consider this the first of many problems to overcome. You'll have to adapt and make do with the documentation that exists, because no one will rewrite it all overnight. We'll be here to help when things don't make sense.
DocWaluigean
Posts: 205
Joined: Sun Jun 17, 2018 6:41 pm

Re: Hello, new here, and need best recommandations.

Post by DocWaluigean »

tokumaru wrote:I haven't been following this thread closely, but it's not like us to call anyone a moron or anything of the kind. We're always willing to help those who demonstrate they're making progress. What nobody here likes is when we do our best to explain something to someone, taking time from other things we could be doing for ourselves (e.g. working on our own projects, spending time with our families, etc.), and the person's reply makes it clear they didn't even read it all.
https://forums.nesdev.com/viewtopic.php?f=5&t=6313

I obviously know this person is acting...disrespectfully strange, but I am feeling a little offended when I think about the people calling offensive terms, where despite being on internet, and expect to be civilized, it just gives me impressions where people would just attack me if I was in similar position as him and I was trying to talk what I want to say, like uncomfortable term koitsu gave me, just because I tried to get straight-of-straight information instead of reusing the same answers everyone gets; bunnyboy and Easy6502. Until I signed up, I don't feel comfortable asking for help or try to learn NES by asking. Call me or anyone autism who feel the same way, but I rather never let it be exposed on my appearances.
tokumaru wrote:What we don't like is when people try to take shortcuts. There are no shortcuts... quite the opposite, really! If you're reading a post or a document, and all the information is flying over your head, you don't just skip and go "yeah, this is not working for me, let's see what's next". You can't go forward if you don't understand what came before. You have to keep reading, over and over until something makes sense. Once something makes sense, read again and more things will make sense.
The thing about this is when I/anyone were to read documents like "Programmanual" and come across sentences that confuses the 6502 with other reference things, it could throw off easily with certain grammar or pronunciations. The only shortcuts I can think of is using mnemonics or "cheat sheets" that tells you what the code does and copy-paste the specific code to make things faster.

Also, if I tried to re-reading in the same place, it will feel like I ain't progressing and demotivation increases as I get stuck. I'm not like average person who could easily understand it; it could take them 2 weeks at most to understand, this could take me about 8 months at most. Maybe I'm wrong or right, but the fact I'm stuck in Week 3 for many times, rarely going to Week 4 or 5, but revert back to week 3, just made me upset.
tokumaru wrote:We're here to help, we can explain things in a different way, we just don't have the time to rewrite every document and tutorial so they're perfect for everyone, and we don't have time to private tutor each person that comes to the forum saying that the information that currently exists is not in line with their favorite way of studying.

Coding games is not an easy task, you'll have to adapt and overcome several hardships, so consider this the first of many problems to overcome. You'll have to adapt and make do with the documentation that exists, because no one will rewrite it all overnight. We'll be here to help when things don't make sense.
I'm a little unsure about this. It's either I feel I refused to accept this paragraph, or I'm trying too hard to accept and understand, that the fact I tried to learn on something I'm stuck on for long time. I could say, "Maybe I want to be the one who'll rewrite it all overnight if I get real tutor and help.", but it'll just be repeating myself and encourages frown against me.

If that's true about help, where did the "elitist" and "strict" ideologies come from...?

So what if I write to write a storyboard / script of how to learn NES 6502 programming, and I need some form of clarifications?
User avatar
Kasumi
Posts: 1293
Joined: Wed Apr 02, 2008 2:09 pm

Re: Hello, new here, and need best recommandations.

Post by Kasumi »

I responded to one of your posts at 1:10 am. At 1:50 am, was my second response. That's 40 minutes to write just the second post. I also had to read your posts in order to respond. (Maybe obvious, but I feel like people often forget this.) Probably at least an hour of work went into those posts. I could have done anything else in that time.

I've helped people who post source code with basically no context, which means I have to read all their source code which usually does not take a small amount of time.

You have trouble believing some people are here to help? It's a mixed bag of personalities, sure. But that's the only way it can work. I'm not trying to guilt you too much, but I think it's worth really thinking about the collective time we all spent to create about 35 posts worth of guidance. Imagine if one person decided to do that for you, for free.

If you want a tutor without paying, well, you've got it. You've got pages of help you didn't pay for. Maybe some of it's a little tough love, but again. Really think about what you've received here already. This is extra! This is in addition to the free resources that already exist. Like that often repeated answer of easy6502. You think it's bad when we recommend easy6502 a lot? The alternative is rewriting easy6502! It's much easier to answer your questions about it than rewrite it.

What are your questions about it? Where are you stuck? These are not rhetorical questions!
Also, if I tried to re-reading in the same place, it will feel like I ain't progressing and demotivation increases as I get stuck.
Then ask. If there's anything about my posts you don't understand. ASK! I spent the hour because I want to help. If you don't understand the help, do you really think I'd rather have you struggle in silence after already investing in you? Ask!

And the beauty of this is that if I ever start to feel drained by the time spent, there's an army of people just as knowledgeable or more knowledgeable who can fill my shoes while I recharge. Tokumaru and I were basically racing to help you first! Think about it!

I'll leave you with this: https://forums.nesdev.com/viewtopic.php ... t=metatile This is a 97 page thead spanning 7 years that primarily serves the purpose of helping just one person. I'll even say I've lost my patience in the thread :( , but honestly we mostly really do just want to help.
User avatar
Sumez
Posts: 919
Joined: Thu Sep 15, 2016 6:29 am
Location: Denmark (PAL)

Re: Hello, new here, and need best recommandations.

Post by Sumez »

DocWaluigean wrote:I'm even willing to make a tutorial that's more comprehend-able than BunnyBoy if I understand everything.
I have never read Nerdy Nights, so I might be completely wrong about this, but is it possible that it was never a particularly good tutorial to begin with? Either way, programming for the NES is not so much about programming, as it's about understanding the hardware, and it's hard for any tutorial to cover this. You need documentation if you don't want to end up with more questions than you have answers.

To be honest, I never even heard of Nerdy Nights before I had already learned what it attempts to teach. But whenever it's brought up, it's usually among newcomers who have been following it, and have a ton of questions based on it. Questions which are all answered on the Nesdev wiki, too.
As far as I'm aware, it was written quite some time ago, and doesn't really follow a lot of the standards that are usually recommended procedure (such as separating game logic from NMI), as well as relying on Nesasm, which a lot of people aren't fans of (I am not familiar with this either, but I like CA65 well enough to never move away from it).

I think a big source of the problem is that people open up the tutorial and expect to learn everything from it. It's no wonder they come out with questions. I can't imagine any tutorial being thorough enough to make you understand everything going on in a piece of video game hardware, but what do I know.

Here's what I did.
My approach might not be good for everyone, but it worked for me. I basically familiarized myself with every major aspect of the NES hardware (aside from sound generation) before picking up an assembler. That doesn't mean knowing all the ins and outs, but it meant being familiar with the concepts before eventually running into them. If you don't know what a nametable, OAM buffer or attributes are, you're not gonna get far. I browsed through all the most interesting pages of the Nesdev wiki, learning how stuff worked. This was primarily video output, but the NMI and controller reading was of course important too. I just did this here and there in my spare time, over a few days. At the point, this was my end goal, so maybe that made it easier for me, but it wasn't until I realised how basic the hardware actually was that I figured I should take it further and try making something.

Then I learned 6502 independently from the NES hardware, which was pretty much required, but also pretty simple (this guide is excellent), and finally I just downloaded a blank template of a working NES game, and mucked about in it for a few hours. :)
Those last two steps was just one evening, but depending on how familiar you are with programming in general, it can take however long you feel is necessary. And of course it took me probably another week to get something really working and playable, but at that point the thing I had made was entirely my own thing, not following somebody's tutorial. And I never had any questions, because everything I made was based on individual and well documented examples from the Nesdev Wiki. Ok, so I did have a lot of stuff that I needed to look up, but nothing that hadn't already been discussed in details, so it was pretty easy to search for older forum threads.

That said, everyone here is happy to answer questions, and like you said yourself - the only stupid question is the one that remains unasked. People don't mock people for their lack of knowledge, unless said people act like they know it all despite of it.
DocWaluigean
Posts: 205
Joined: Sun Jun 17, 2018 6:41 pm

Re: Hello, new here, and need best recommandations.

Post by DocWaluigean »

Kasumi wrote:I responded to one of your posts at 1:10 am. At 1:50 am, was my second response. That's 40 minutes to write just the second post. I also had to read your posts in order to respond. (Maybe obvious, but I feel like people often forget this.) Probably at least an hour of work went into those posts. I could have done anything else in that time.

I've helped people who post source code with basically no context, which means I have to read all their source code which usually does not take a small amount of time.

You have trouble believing some people are here to help? It's a mixed bag of personalities, sure. But that's the only way it can work. I'm not trying to guilt you too much, but I think it's worth really thinking about the collective time we all spent to create about 35 posts worth of guidance. Imagine if one person decided to do that for you, for free.

If you want a tutor without paying, well, you've got it. You've got pages of help you didn't pay for. Maybe some of it's a little tough love, but again. Really think about what you've received here already. This is extra! This is in addition to the free resources that already exist. Like that often repeated answer of easy6502. You think it's bad when we recommend easy6502 a lot? The alternative is rewriting easy6502! It's much easier to answer your questions about it than rewrite it.

What are your questions about it? Where are you stuck? These are not rhetorical questions!
Also, if I tried to re-reading in the same place, it will feel like I ain't progressing and demotivation increases as I get stuck.
Then ask. If there's anything about my posts you don't understand. ASK! I spent the hour because I want to help. If you don't understand the help, do you really think I'd rather have you struggle in silence after already investing in you? Ask!

And the beauty of this is that if I ever start to feel drained by the time spent, there's an army of people just as knowledgeable or more knowledgeable who can fill my shoes while I recharge. Tokumaru and I were basically racing to help you first! Think about it!

I'll leave you with this: https://forums.nesdev.com/viewtopic.php ... t=metatile This is a 97 page thead spanning 7 years that primarily serves the purpose of helping just one person. I'll even say I've lost my patience in the thread :( , but honestly we mostly really do just want to help.
For people with difficulties to explain well, one part of me say it's very aggressive, and I should give up. Another part is I deserve this replies, and another say it's tough love, like you said, and so on and so on.

Let me try and explain. Even though my reaction has partial negativity reading it, it's somewhat difficult to explain it, because I could just not reply it, but in turn, gives the feeling that I'm like everyone who gives up so easily, which I never want to be those.

I have one of the biggest questions where it's incredibly obvious to know, yet I chose to ask it, and go deeper. I could tell you that I may get offended or criticized just for leeching or pulling many strings just to finally understand something. I'm not saying you do or something, but you want me to try and go full on questions and expect offensive replies about my knowledge or something, when I want to understand much deeper than before? There's a Japanese communities with more love on NES/FCU and they go ironman on everything, especially this 3 videos: https://youtu.be/FuQc1xpx78c?t=0s https://www.youtube.com/watch?v=hi4MM1E5f7E https://www.youtube.com/watch?v=xMB5FK2YMVA yet I do not see super friendly tutorials that can work with even a toddler worldwide[?].
It made me feel so ashamed that no one feels the love to put enjoyment in coding as those communities, and I really want to boost the qualities of games, especially NES, by making 6502 much easier to learn. But the way of explaining has chances of criticizing me. It could made me feel demotivated to even figure out making tutorials about it. Even though I know chances of ignorance may shown about what I'm talking about.

I'm a little confused on how to explain well to you.

---
Sumez wrote:
DocWaluigean wrote:I'm even willing to make a tutorial that's more comprehend-able than BunnyBoy if I understand everything.
I have never read Nerdy Nights, so I might be completely wrong about this, but is it possible that it was never a particularly good tutorial to begin with? Either way, programming for the NES is not so much about programming, as it's about understanding the hardware, and it's hard for any tutorial to cover this. You need documentation if you don't want to end up with more questions than you have answers.

To be honest, I never even heard of Nerdy Nights before I had already learned what it attempts to teach. But whenever it's brought up, it's usually among newcomers who have been following it, and have a ton of questions based on it. Questions which are all answered on the Nesdev wiki, too.
As far as I'm aware, it was written quite some time ago, and doesn't really follow a lot of the standards that are usually recommended procedure (such as separating game logic from NMI), as well as relying on Nesasm, which a lot of people aren't fans of (I am not familiar with this either, but I like CA65 well enough to never move away from it).

I think a big source of the problem is that people open up the tutorial and expect to learn everything from it. It's no wonder they come out with questions. I can't imagine any tutorial being thorough enough to make you understand everything going on in a piece of video game hardware, but what do I know.

Here's what I did.
My approach might not be good for everyone, but it worked for me. I basically familiarized myself with every major aspect of the NES hardware (aside from sound generation) before picking up an assembler. That doesn't mean knowing all the ins and outs, but it meant being familiar with the concepts before eventually running into them. If you don't know what a nametable, OAM buffer or attributes are, you're not gonna get far. I browsed through all the most interesting pages of the Nesdev wiki, learning how stuff worked. This was primarily video output, but the NMI and controller reading was of course important too. I just did this here and there in my spare time, over a few days. At the point, this was my end goal, so maybe that made it easier for me, but it wasn't until I realised how basic the hardware actually was that I figured I should take it further and try making something.

Then I learned 6502 independently from the NES hardware, which was pretty much required, but also pretty simple (this guide is excellent), and finally I just downloaded a blank template of a working NES game, and mucked about in it for a few hours. :)
Those last two steps was just one evening, but depending on how familiar you are with programming in general, it can take however long you feel is necessary. And of course it took me probably another week to get something really working and playable, but at that point the thing I had made was entirely my own thing, not following somebody's tutorial. And I never had any questions, because everything I made was based on individual and well documented examples from the Nesdev Wiki. Ok, so I did have a lot of stuff that I needed to look up, but nothing that hadn't already been discussed in details, so it was pretty easy to search for older forum threads.

That said, everyone here is happy to answer questions, and like you said yourself - the only stupid question is the one that remains unasked. People don't mock people for their lack of knowledge, unless said people act like they know it all despite of it.
I see. I got almost no replies about hardware understanding, since I want to make NES programs first before hardware. Possibly obvious replies from every beginner. only replies is if anyone from outside Japan ever make usage of custom sound chips made?

http://wiki.nesdev.com/w/index.php/Nesdev_Wiki NESDev Wiki has so many unfinished content, it's very frustrating to do things myself, "to be written"... I been NESDev for around decade, and it almost never changes.....

Possibly, those people got big dreams to achieves, yet failed short after certain issues. Life? Emotions? other things. I agree on what you said though.

Nametable is [the final ingredients before converting into usable applications?] And I'm sort of understanding what you said.

Your literally lucky you understand things that I don't. :beer: :cry: :beer: I'm jealous.

I see.. tell me if it's alright to go overboard. Because maybe I have to draw pictures and everything I can so I can see if it looks correct.
User avatar
Kasumi
Posts: 1293
Joined: Wed Apr 02, 2008 2:09 pm

Re: Hello, new here, and need best recommandations.

Post by Kasumi »

You think it's bad when we recommend easy6502 a lot? The alternative is rewriting easy6502! It's much easier to answer your questions about it than rewrite it.

What are your questions about it? Where are you stuck? These are not rhetorical questions!
Seriously! I don't think you should expect offensive replies, but say one person is mean and one person gives you an answer. You've won!

We could go deep about the philosophical nature of public question asking, but I'd rather just answer your 6502 questions.
User avatar
Sumez
Posts: 919
Joined: Thu Sep 15, 2016 6:29 am
Location: Denmark (PAL)

Re: Hello, new here, and need best recommandations.

Post by Sumez »

DocWaluigean wrote: I see. I got almost no replies about hardware understanding, since I want to make NES programs first before hardware.
But see, here's the thing. Making NES programs is all about understanding the hardware.
This is very different from modern programming, where you abstract yourself from everything you don't strictly need to worry about.
Even if you're making a game designed to only run on an emulator, the purpose of an emulator is to, well, emulate the hardware. Making an NES game do anything, is a question about sending numbers around directly in the NES hardware, which eventually puts graphics on the screen.

Of course, you don't need to know the details about how that hardware works aside from things that directly affect your interaction with it. You need to know the basics about how the PPU processes its memory for each individual scanline, but you don't need to know how its registers are accessed internally, as long as you know the best practice of interacting with it.
Personally I don't know crap about hardware, but I know enough to create a functional NES game. That is what you also need.
Possibly obvious replies from every beginner. only replies is if anyone from outside Japan ever make usage of custom sound chips made?
I don't know if any popular homebrew games use it (most people wouldn't be able to make use of it on a real NES, so relying on it would be a bit of a gamble), but it's very popular among Famitracker users.
You'd need your sound engine to support it though, and my suggestion would be, for your first NES project, either use someone else's sound engine, or refrain from having sound at all. Don't overstretch yourself!
Nametable is [the final ingredients before converting into usable applications?] And I'm sort of understanding what you said.
I don't understand this? Nametable is just the NES's name for the data that tells the video chip how the background graphics are laid out. Think about it as a grid of tiles, because that's exactly what it is.
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: Hello, new here, and need best recommandations.

Post by FrankenGraphics »

I don't know if any popular homebrew games use it (most people wouldn't be able to make use of it on a real NES, so relying on it would be a bit of a gamble), but it's very popular among Famitracker users.
You'd need your sound engine to support it though, and my suggestion would be, for your first NES project, either use someone else's sound engine, or refrain from having sound at all. Don't overstretch yourself!
Yeah, i know of no such homebrew game either. Another point is that the only currently available expansion synth is the one used with the Sunsoft 5b mapper, but they cost a premium price, so it's hard to break even if you were to use it in a game. Currently, only the "new" Famitracker beta supports it, i think? Maybe also FT-0CC. So that's a block in the road - being restricted to using Famitracker as your primary audio driver in a game means your game needs to be quite modest in what else it can do, because FT eats quite a bit of resources. Also, we don't really know exactly how the Sunsoft synth works, so emulation may be off. This is because no historical game really used all of its features. If you want to play it safe, you need to stay away from using the hardware envelope it has.

Abandoning expansion sound altogether, there is still a good option.
If you need to use more than 2 pulses, 1tri, 1 noise, your best bet is the DPCM channel as that is compatible with all NES units without modification.

Famitracker itself, FamiTone2 and GGsound are three good drivers you can use that support DPCM. Pently and Penguin are two other good drivers that don't, but have other merits. Each has its usecase, and it takes some time getting into. If you rule out using Famitracker in your game, writing songs for the other four is similar enough that you can make your songs more or less driver agnostic and as a last step add in the special features you like with each of them once you've learned more and decided what you really want.

Simple rules to keep a song agnostic - the most important ones first:
-stay away from the volume column, always.
-obviously stay away from expansion chips.
-in your tracks; always assign instruments to notes, always assign notes to instruments (at least FamiTone2 converter will ignore entries that doesn't come in note+instrument tuples).
-you may use the loop effect (Bxx), but avoid the other famitracker effects for now. only do backward references when using the loop effect. Once you've locked in a decision on a driver, some more effects may become available.
-don't use DPCM samples if you want to keep pently and penguin as options
-don't use the pitch envelopes if you want to keep pently as an option
-don't loop duty envelopes if you want to keep pently as an option
-don't use duty envelopes longer than 1 entry if you want to keep FamiTone2 as an option.
-don't accumulate pitch changes over envelope loops (at least not more than 63 units in either direction) if you want to keep FamiTone2 as an option.
-don't use hi-pitch envelopes if you want to keep GGsound as an option (also goes for Pently, see above).
User avatar
pubby
Posts: 583
Joined: Thu Mar 31, 2016 11:15 am

Re: Hello, new here, and need best recommandations.

Post by pubby »

Dude, let me tell you a story.

Back in 2006, I spent several weeks, if not months, banging my head into a wall trying to learn assembly language. No matter how much I tried, and no matter how I read, nothing made sense. I made zero progress.

It was demoralizing. I felt stupid and hopeless.

The solution I found was not to keep at it. Instead, I picked something easier to learn: GameMaker. And you know what? I was good at GameMaker! And after a year or two of that, I moved to C! And then to C++! I was climbing a set of stairs, rather than leaping over a building.

10 years later, in 2016, I finally returned to assembly. And you know what? Everything made sense! All the pieces fell into place and I was able to understand everything in just a few days. It was super easy. 6502 took a few hours to learn, and the hardware took about 3 days.

So here's my advice: find something easier. Come back to the NES when you're ready. No tutor or tutorial can make up for a lack of experience.
DocWaluigean
Posts: 205
Joined: Sun Jun 17, 2018 6:41 pm

Re: Hello, new here, and need best recommandations.

Post by DocWaluigean »

Kasumi wrote:
You think it's bad when we recommend easy6502 a lot? The alternative is rewriting easy6502! It's much easier to answer your questions about it than rewrite it.

What are your questions about it? Where are you stuck? These are not rhetorical questions!
Seriously! I don't think you should expect offensive replies, but say one person is mean and one person gives you an answer. You've won!

We could go deep about the philosophical nature of public question asking, but I'd rather just answer your 6502 questions.
????????????????????????????

-------

But see, here's the thing. Making NES programs is all about understanding the hardware.
This is very different from modern programming, where you abstract yourself from everything you don't strictly need to worry about.
Even if you're making a game designed to only run on an emulator, the purpose of an emulator is to, well, emulate the hardware. Making an NES game do anything, is a question about sending numbers around directly in the NES hardware, which eventually puts graphics on the screen.

Of course, you don't need to know the details about how that hardware works aside from things that directly affect your interaction with it. You need to know the basics about how the PPU processes its memory for each individual scanline, but you don't need to know how its registers are accessed internally, as long as you know the best practice of interacting with it.
Personally I don't know crap about hardware, but I know enough to create a functional NES game. That is what you also need.

-

I don't know if any popular homebrew games use it (most people wouldn't be able to make use of it on a real NES, so relying on it would be a bit of a gamble), but it's very popular among Famitracker users.
You'd need your sound engine to support it though, and my suggestion would be, for your first NES project, either use someone else's sound engine, or refrain from having sound at all. Don't overstretch yourself!
I don't understand this? Nametable is just the NES's name for the data that tells the video chip how the background graphics are laid out. Think about it as a grid of tiles, because that's exactly what it is.
Application > Assembly > Namespace > Class > Data/Methods.

Isn't it an architecture of universal applications?

Your right though. It's too much pressure to put sounds at this time.

on the first quote, I pretty much am capable to understand the NES hardware.
DocWaluigean wrote: If you feel I'm not even trying. despite the fact that to other eyes, I may be another person who doesn't care or gives up easily:

-I understood completely with basics of Binary, HEX, and decimals/ natural numbers.
-I understood that the address $ is like a room where you place the codes, and certain "rooms" inside does specific jobs, like the sprite-color decision "room."
-I at least know what Mapper does in certain types, from increasing tile size, to the abilities of making beautiful music using N106.
-INC means increment, which is mathematical technique in increasing number by 1, unless stated.
-I understood that graphic limit is set to 13 colors, with one transparent for each "4" colors, which is 3 colors and 1 transparent, and the screen is 256 X 240, but issues in vertical lines is 256 X 224
and other things about 8X8, 16X16 Sprite limit, where vertical mirror is possible, but not horizontal mirror.
- $ and # symbol is different, where $ is the address, and # is the number-number.
-I somewhat partially understood that A, X, Y is a type of register that "allows you to store numbers [Address? Digits/HEX?] temporary" like forms of transport from one address to another, OR some kind of math abilities that allows you to carry the number using "LDA" and "STA" stuff.
-I partially understood about high-power and low-power byte like what they said on Nerdy Night Week 4:

If I understand the code from BASIC languages with certain opcodes on what it does, like DEC and INC, the same way with the C# programming beginners where they did the "Application > NameSpace > Assembly > Codes", then I have compatibility to understand 6502 languages, but I tend to struggle with certain information that doesn't comprehend to me because it isn't explain well for me, or because, dare I say it, "It's boring to try and read it and remember it."
[/quote]

Like you said about understanding function NES game creation.

-------
FrankenGraphics wrote:
I don't know if any popular homebrew games use it (most people wouldn't be able to make use of it on a real NES, so relying on it would be a bit of a gamble), but it's very popular among Famitracker users.
You'd need your sound engine to support it though, and my suggestion would be, for your first NES project, either use someone else's sound engine, or refrain from having sound at all. Don't overstretch yourself!
Yeah, i know of no such homebrew game either. Another point is that the only currently available expansion synth is the one used with the Sunsoft 5b mapper, but they cost a premium price, so it's hard to break even if you were to use it in a game. Currently, only the "new" Famitracker beta supports it, i think? Maybe also FT-0CC. So that's a block in the road - being restricted to using Famitracker as your primary audio driver in a game means your game needs to be quite modest in what else it can do, because FT eats quite a bit of resources. Also, we don't really know exactly how the Sunsoft synth works, so emulation may be off. This is because no historical game really used all of its features. If you want to play it safe, you need to stay away from using the hardware envelope it has.

Abandoning expansion sound altogether, there is still a good option.
If you need to use more than 2 pulses, 1tri, 1 noise, your best bet is the DPCM channel as that is compatible with all NES units without modification.

Famitracker itself, FamiTone2 and GGsound are three good drivers you can use that support DPCM. Pently and Penguin are two other good drivers that don't, but have other merits. Each has its usecase, and it takes some time getting into. If you rule out using Famitracker in your game, writing songs for the other four is similar enough that you can make your songs more or less driver agnostic and as a last step add in the special features you like with each of them once you've learned more and decided what you really want.

Simple rules to keep a song agnostic - the most important ones first:
-stay away from the volume column, always.
-obviously stay away from expansion chips.
-in your tracks; always assign instruments to notes, always assign notes to instruments (at least FamiTone2 converter will ignore entries that doesn't come in note+instrument tuples).
-you may use the loop effect (Bxx), but avoid the other famitracker effects for now. only do backward references when using the loop effect. Once you've locked in a decision on a driver, some more effects may become available.
-don't use DPCM samples if you want to keep pently and penguin as options
-don't use the pitch envelopes if you want to keep pently as an option
-don't loop duty envelopes if you want to keep pently as an option
-don't use duty envelopes longer than 1 entry if you want to keep FamiTone2 as an option.
-don't accumulate pitch changes over envelope loops (at least not more than 63 units in either direction) if you want to keep FamiTone2 as an option.
-don't use hi-pitch envelopes if you want to keep GGsound as an option (also goes for Pently, see above).
Thanks for the lesson of the music? I don't know how to reply without sounding offensive on accident. :arrow:

-------
pubby wrote:Dude, let me tell you a story.

Back in 2006, I spent several weeks, if not months, banging my head into a wall trying to learn assembly language. No matter how much I tried, and no matter how I read, nothing made sense. I made zero progress.

It was demoralizing. I felt stupid and hopeless.

The solution I found was not to keep at it. Instead, I picked something easier to learn: GameMaker. And you know what? I was good at GameMaker! And after a year or two of that, I moved to C! And then to C++! I was climbing a set of stairs, rather than leaping over a building.

10 years later, in 2016, I finally returned to assembly. And you know what? Everything made sense! All the pieces fell into place and I was able to understand everything in just a few days. It was super easy. 6502 took a few hours to learn, and the hardware took about 3 days.

So here's my advice: find something easier. Come back to the NES when you're ready. No tutor or tutorial can make up for a lack of experience.
Here's the thing: I just did which is SmileBASIC, a game where you make games using BASIC Languages with tutors inside the manual. But irony is that I understand BASIC, C# increasingly, and Java, yet I still struggle with 6502. Which I had no choice but to try and ask for help here. I been here since over 5 years, but were shy to ask..
I hope I'm not missing out on any comments.
DocWaluigean
Posts: 205
Joined: Sun Jun 17, 2018 6:41 pm

Re: Hello, new here, and need best recommandations.

Post by DocWaluigean »

viewtopic.php?f=2&t=10028&hilit=caramel ... 45#p111943

So I'm going to try and ask more. From this post I found from another who also struggles with NES about assembly, he mentions about the starting creation of NES blank template.

-What is CN/N/UNRoM? By name and whats the differences?

Upon reading the code:

-Why isn't there an iNES code in the beginning, just mirror and PRG count?

-Why is MyVariable coded out into comment? As further reading, its obvious a tip or hint, but I don't see any... "visual entertaining" to pay attention.

-So .db stand for "database"?

-NMI? IRQ? "Reset" in this format? What is it and what does it do?

-Reading the code, there's nothing inside either of reset or NMI or IRQ. The comments is often ignored, possibly chance of sucking the byte memory out of it?

-I feel .enum is directions toward address code $0000, the main place to store code.
User avatar
Kasumi
Posts: 1293
Joined: Wed Apr 02, 2008 2:09 pm

Re: Hello, new here, and need best recommandations.

Post by Kasumi »

DocWaluigean wrote: ????????????????????????????
Restated: What are the issues you're having with easy6502? I have asked this. I have stated the question is not rhetorical: That is, that I'd like an answer to it. We can discuss whether people's replies are offensive or not, but I don't believe it will be as helpful to your goal of learning to program as telling me/us what specific things you are having issues with programming-wise.

Which I guess the post I'm about to answer seems to be doing, so let's go!
-What is CN/N/UNRoM? By name and whats the differences?
NES has a set of abilities.
Its graphics processor (commonly called the PPU) can "see" 256 background tiles and 256 sprite tiles at a time. (This totals 8KB.)
Its CPU can "see" 64KB of data at a time. By "default" 32KB of this is data from the cartridge.

Super Mario Bros. is 40KB. It has seemingly "maxed out" the NES abilities. But there are games larger than this. The answer to how is extra hardware in the cartridge. This extra hardware is commonly called a "mapper".
NROM is the Super Mario Bros. mapper. It's stock NES abilities.

CNROM allows one to access four times as much graphical memory as Super Mario Bros. could access. (32KB instead of 8KB.) The PPU can still only "see" 8KB at a time. But this mapper lets you swap out what the PPU is "looking at".

UNROM allows one to access four times as much non graphical memory as Super Mario Bros. could access. (128KB instead of 32KB). The CPU can still only "see" 32KB from the cartridge at a time. But this mapper lets you swap out what the CPU is "looking at".

UOROM is similar to UNROM except it allows access to 256KB of non graphical memory. There's an extension of this as well to access even more.

There are actually more than 100 unique mappers. You can only use one at a time. As a beginner, just worry about NROM.
-Why isn't there an iNES code in the beginning, just mirror and PRG count?
Because this is for a different assembler. Only NESASM uses .ines stuff. Edit: Perhaps a better answer is there is iNES code. It starts under the iNES header comment. The code at the top just makes the parts of the iNES header the user is likely to change easier to access. PRG_COUNT = 1 tells the assembler "Whenever I use PRG_COUNT, use the value 1." If the user changed that to '1' to a '2', everywhere PRG_COUNT is used would now be like using 2. So under the iNES header comment, you'll see a .db PRG_COUNT. Changing the value at the top would also change the header because it would cause a different value to be inserted here.
-Why is MyVariable coded out into comment? As further reading, its obvious a tip or hint, but I don't see any... "visual entertaining" to pay attention.
It is meant to show an example of how one is supposed to define RAM.
-So .db stand for "database"?
Define Byte.
-NMI? IRQ? "Reset" in this format? What is it and what does it do?
I covered that in this post: https://forums.nesdev.com/viewtopic.php ... 46#p223346 I say this not to be mean, but if there's something about the post that's not clear could you ask a more specific question about it?
-Reading the code, there's nothing inside either of reset or NMI or IRQ. The comments is often ignored, possibly chance of sucking the byte memory out of it?
It's just a template, not a program that does anything. The user of the template is meant to add the code that goes under reset, NMI and IRQ.
-I feel .enum is directions toward address code $0000, the main place to store code.
$0000-$07FF is RAM. Code needs to be stored at $8000-$FFFF. That .enum is meant to work with the .dsb statements (if one were to uncomment them, or add one's own) .enum sets a sort of "counter" to the value given. When (name) .dsb (number) is encountered, (name) is assigned the current value of the counter. (This results in the use of (name) basically being the same as using the value of whatever the counter was at the point in time the .dsb was parsed.) Then (number) is added to the counter. Let's look at how this looks if the example variables were uncommented.

Code: Select all

 .enum $0000;Sets the counter to $0000

   ;NOTE: declare variables using the DSB and DSW directives, like this:

   MyVariable0 .dsb 1;The counter is $0000. So MyVariable0 is now equal to $0000. Typing lda MyVariable0 will now be the same as typing lda $0000 later in the code.
;The number provided is 1. $0000+1= $0001. So the counter is now $0001


   MyVariable1 .dsb 3;The counter is $0001. So MyVariable1 is now equal to $0001. Typing lda MyVariable1 will now be the same as typing lda $0001 later in the code.
;The number provided is 3. $0001+3=$0004. So the counter is now $0004.
Last edited by Kasumi on Fri Aug 17, 2018 7:32 pm, edited 1 time in total.
User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

Re: Hello, new here, and need best recommandations.

Post by FrankenGraphics »

I see kasumi answered a lot more a lot quicker.

Namespace and nametable are two very different things.
-A namespace is a sort of container in your code. It is also called a scope or name scope. Names declared in that container are local to that container, ie. they can't be seen from the outside. You have probably used namespaces if you've used C#.

-A nametable is an actual physical RAM space specific to the NES/Famicom, which the PPU uses to know what tiles from the graphics bank to draw where.
-What is CN/N/UNRoM? By name and whats the differences?
These are different so-called mappers. Well, CN/UNROM are. A mapper is a hardware feature on the game pak / cartridge which allows the console to access more ROM, RAM, and special hardware features than its 16 bit address range was designed for.

NROM is the most simple, basic type of game pak. It isn't even a mapper in the real sense - just some storage for program and graphics on the PCB. There is no mapping devices on that PCB type, and as such, programs can be no bigger than 32kB, and graphics (stored separately) can be no larger than 8kB. Very early NES games use this type, and it is also a recommended start for new NES programmers, because it is simple to interface with.

CNROM uses CHR-ROM for graphics just like the NROM boards, but can page between several banks of CHR-ROM, so you can have more graphics stored. PRG-ROM is still limited to 32kB.

UNROM uses CHR-RAM instead of CHR-ROM, and allows for very big PRG-ROM sizes, but has no special features beyond that. Graphics need to be loaded from PRG-ROM to CHR-RAM, so it is probably not the best type of cartridges to start out with. But the challenge will be easy to overcome once you've written a few programs for NROM.
So .db stand for "database"?
it stands for "define byte". .dw stands for "define word", and so on.
User avatar
Sumez
Posts: 919
Joined: Thu Sep 15, 2016 6:29 am
Location: Denmark (PAL)

Re: Hello, new here, and need best recommandations.

Post by Sumez »

I don't know if any assembler out of CA65 uses it, but I prefer to use .byte or .word myself. It pretty much states what you are doing.
In my opinion relying on abbreviations for everything in source code belongs in the 90s. If the three-letter opcodes weren't standard in every documentation everywhere I wouldn't be using them either. :)
Post Reply