I'm new in NES dev

Discuss technical or other issues relating to programming the Nintendo Entertainment System, Famicom, or compatible systems. See the NESdev wiki for more information.
User avatar
nesgamer
Posts: 8
Joined: Fri Jul 11, 2025 3:00 pm

I'm new in NES dev

Post by nesgamer »

I'm new in NES dev, got any assemblers for Windows and begginer-friendly? :D
tepples
Posts: 22993
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)

Re: I'm new in NES dev

Post by tepples »

Are you familiar with the Windows command prompt or the Bash shell included with Git version control software? If so, you can follow the instructions at nrom-template to get set up with ca65 and Python on Windows.
User avatar
chatty
Posts: 40
Joined: Wed Dec 11, 2024 9:41 am
Location: Brazil

Re: I'm new in NES dev

Post by chatty »

I know you didn't ask for this, but while you're at it, you might as well wanna follow a guide or something to make your own NES game. I recommend Nerdy Nights:

https://nerdy-nights.nes.science/
User avatar
Dwedit
Posts: 5257
Joined: Fri Nov 19, 2004 7:35 pm

Re: I'm new in NES dev

Post by Dwedit »

Batch files are very good for people who don't like the command line.
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
User avatar
chatty
Posts: 40
Joined: Wed Dec 11, 2024 9:41 am
Location: Brazil

Re: I'm new in NES dev

Post by chatty »

Batch files are very good for people who don't like the command line.
Yeah, but you gotta know how to code one of them in order to use them xp.
User avatar
nesgamer
Posts: 8
Joined: Fri Jul 11, 2025 3:00 pm

Re: I'm new in NES dev

Post by nesgamer »

chatty wrote: Fri Jul 11, 2025 7:49 pm
Batch files are very good for people who don't like the command line.
Yeah, but you gotta know how to code one of them in order to use them xp.
Yep, but i use Windows 10. and i made my own assembler in Python. It's called NanoNES. :o
It supports MMC5 features, and i am making my own game (It's the most complex nes games ever) :shock:
And i don't have a machine that has Windows XP running on it. Instead, i have a laptop that runs Windows 7 (it's probably the best windows microsoft made) by Positivo.
Pokun
Posts: 3442
Joined: Tue May 28, 2013 5:49 am
Location: Hokkaido, Japan

Re: I'm new in NES dev

Post by Pokun »

I'm confused why you need Windows XP?

If you just want to know what assemblers people are using for 6502 the most popular ones here are: ca65, nesasm, asm6 and 64tass. They all work on Windows XP, 7 and 10. There are some discussions about them here and here.
User avatar
Dwedit
Posts: 5257
Joined: Fri Nov 19, 2004 7:35 pm

Re: I'm new in NES dev

Post by Dwedit »

I think "xp" is an emoticon (eyes shut, tongue sticking out), not a reference to Windows XP.
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
User avatar
nesgamer
Posts: 8
Joined: Fri Jul 11, 2025 3:00 pm

Re: I'm new in NES dev

Post by nesgamer »

Dwedit wrote: Sat Jul 12, 2025 11:20 am I think "xp" is an emoticon (eyes shut, tongue sticking out), not a reference to Windows XP.
OH! the xp emoticon should be uppercase x and p. so it will be an actual emoticon
User avatar
chatty
Posts: 40
Joined: Wed Dec 11, 2024 9:41 am
Location: Brazil

Re: I'm new in NES dev

Post by chatty »

Dwedit wrote: Sat Jul 12, 2025 11:20 am I think "xp" is an emoticon (eyes shut, tongue sticking out), not a reference to Windows XP.
Indeed, that's it.

Also, a Positivo machine... your hardware will really limit what you can do.
User avatar
nesgamer
Posts: 8
Joined: Fri Jul 11, 2025 3:00 pm

Re: I'm new in NES dev

Post by nesgamer »

I am not using a Positivo laptop, chatty. :roll:
I just wanna need a assembler of my choice :cry:
Also i use Windows and 6502 Assembly :D
User avatar
Dwedit
Posts: 5257
Joined: Fri Nov 19, 2004 7:35 pm

Re: I'm new in NES dev

Post by Dwedit »

Anyway, there are two major options for which assembler to use: ASM6 or CA65.

ASM6 is simpler in how to use, and much more direct about emitting bytes. You put in an instruction or .db statement, and it emits a byte to your output file. Then for advanced memory layouts, you can pad out to fill the bank, reassign the current address $ to a different value, then emit more bytes. Reassigning the current address is an unusual feature for an assembler, and it gives ASM6 a lot of power. However, it also does not stop you from misusing symbols, such as trying to jump an address from the wrong bank.

Meanwhile CA65 uses sections, and you declare what memory those sections go into. Then your source code files need to declare what section they are generating code for. I haven't really used CA65 much.

No assembler has a GUI, they're all command-line programs. So you should make a .bat file to launch the assembler to build the code. If you want something like an IDE, you should install a program like TextPad. TextPad can be configured for syntax highlighting. You can also set up a "Tool" to invoke your build.bat file in the project directory, and also set it up to let you double click on errors to take you to that line number.
Here come the fortune cookies! Here come the fortune cookies! They're wearing paper hats!
User avatar
segaloco
Posts: 913
Joined: Fri Aug 25, 2023 11:56 am

Re: I'm new in NES dev

Post by segaloco »

Dwedit wrote: Tue Jul 15, 2025 2:08 pm Reassigning the current address is an unusual feature for an assembler...
Not in my experience, dot assignment was all too common in AT&T assemblers, generally your data segment looked something like:

Code: Select all

var_a: . = .+2
var_b: . = .+4
var_c: . = .+4
which reserved one two-byte variable var_a followed by two four-byte variables var_b and var_c. Then you just let the linker go to town on resolving any cross-module addresses.
Oziphantom
Posts: 1980
Joined: Tue Feb 07, 2017 2:03 am

Re: I'm new in NES dev

Post by Oziphantom »

Dwedit wrote: Tue Jul 15, 2025 2:08 pm Reassigning the current address is an unusual feature for an assembler, and it gives ASM6 a lot of power. However, it also does not stop you from misusing symbols, such as trying to jump an address from the wrong bank.
No, that is the most common, not having that power is really an outlier and even then you can do it in CA65 for those moment when you need to, or if you just want to avoid the how linking config and do it manually.

you typically have .ORG but * is the other common method.
Pokun
Posts: 3442
Joined: Tue May 28, 2013 5:49 am
Location: Hokkaido, Japan

Re: I'm new in NES dev

Post by Pokun »

Yeah either $ dollar-sign or an * asterisk ("star label") is very commonly used in many many assemblers for referring to or even reassigning the current address of the assembly PC. 64tass uses the star label.

nesgamer wrote: Tue Jul 15, 2025 1:14 pm I just wanna need a assembler of my choice :cry:
So did you check out any of those I listed and Dwedit explained about?