Assembler of your choice
Moderator: Moderators
Assembler of your choice
I would like to get idea which assemblers are most popular for NES development today. Please vote for one you use currently. If you use something else, post it in thread.
And it still is the preferred 6502 assembler in Debian. It appears that the only way FCE Ultra could get into Debian and Ubuntu was as a requirement for EFP, a Free NES game made with xa65. And even that's not enough for Fedora. Someone on fedora-legal appears to think the noninfringing use is not clearly substantial, comparing hundreds or thousands of infringing ROMs in a GoodNES set to only a few dozen playable games on pdroms.de and citing Nintendo policy.lidnariq wrote:For no particularly good reason, I'm using xa65. (It was the only 6502 assembler available in debian when I started)
I use ca65. There's a request to package ca65 in Ubuntu Launchpad, but it's easy to compile from source after you sudo apt-get install build-essential. I like its auto-unroller (.repeat), function-local labels (.proc), and the flexibility of using object files and a linker script in much the same way that I have on the PC and GBA.
Last edited by tepples on Wed Dec 15, 2010 2:47 pm, edited 1 time in total.
CA65 seems like a very professional choice, and I guess I would use it if I didn't have to spend so much time tinkering with it before getting it to do anything useful. NESASM is the exact opposite of that: it's very easy to use, but it's also very crude, full of little annoyances and bugs.
The best thing about ASM6 (my assembler of choice) is that it's easy to use, making it just as suitable for beginners as NESASM (but since the popular beginner guides use NESASM, it gets the most attention), but it gives you enough freedom to make programs as complex as you want because that are features to make that easier.
The best thing about ASM6 (my assembler of choice) is that it's easy to use, making it just as suitable for beginners as NESASM (but since the popular beginner guides use NESASM, it gets the most attention), but it gives you enough freedom to make programs as complex as you want because that are features to make that easier.
- MetalSlime
- Posts: 186
- Joined: Tue Aug 19, 2008 11:01 pm
- Location: Japan
Currently I use ca65 for my main project, but I fire up ASM6 when I need to make a little test program because it's easier to produce a ROM from scratch. I might try ASM6 for my next project since it gets so much praise, but I'm too far along in my current project to make the switch now.
I also have a copy of NESASM on my computer in case I need to help a beginner who is using it.
I also have a copy of NESASM on my computer in case I need to help a beginner who is using it.
It would be really easy to "port" those tutorials over to ASM6. If somebody did the conversion work for him, I wonder if bunnyboy would mind swapping them out or at least posting the two versions together.tokumaru wrote:since the popular beginner guides use NESASM, it gets the most attention
I recently started coding for the NES some weeks ago. I followed the tutorial at nintendoage and I started using NESASM. This week however I changed to ASM6 because it seems to me that people are preferring ASM6 over NESASM here at NESDev, so I wanted to change assembler before I learned to code with NESASM. But in the end I think they are quite similar.
I use CA65. The only thing I have to complain about it is that when there's an error in a macro block, it doesn't display the exact line of the error, it displays the line where the macro was called. Also debug line info isn't stored for macros and .repeat blocks, so debugging long macros can be a pain sometimes.
I used to use it, but there were some obscure bugs in it. Generally it works fine though. Seems to be hot stuff in the Atari 2600 scene.Drag wrote:I think I might be the only person on Earth who uses DASM.
Download STREEMERZ for NES from fauxgame.com! — Some other stuff I've done: fo.aspekt.fi
What, no love for X816? I like X816 and have been using it for a long time now to do NES and other random 6502 coding. It's fast, has all the stuff I like (incbin, relative labels, etc) and works.
Sometimes I will use tasm, but mainly if I'm doing something with copynes. These days, if it's 6502, it's X816.
Sometimes I will use tasm, but mainly if I'm doing something with copynes. These days, if it's 6502, it's X816.
/* this is a comment */
- GradualGames
- Posts: 1106
- Joined: Sun Nov 09, 2008 9:18 pm
- Location: Pennsylvania, USA
- Contact:
Like MetalSlime, I use CA65 for my main big project and ASM6 for testing things. I used to think CA65's ability to use segments made it way easier to re-organize data than assemblers such as ASM6, but I didn't realize until recently you could have one top level source file whose sole purpose is to organize all your code and data across banks and simply include the source files and data. It's just a different way of accomplishing the same result.
Even so, I still like some of CA65's syntactic perks, such as .lobytes and .hibytes, scopes, etc. Scopes are nice, because they allow you to re-use some label names in the same chunk of code, instead of anonymous labels for example.
As for how difficult it is to set up, I think it is about the same. The "config" file which you use to set up memory areas and segments, is really like the top level bank organization source file you might have in an ASM6 program. From my sound engine demo:
The "fill = yes" and "size" parameters work like .pad in ASM6. "start" is like .base. The "fill = no" usually would be used for RAM where you're just incrementing the program counter with reserve statements but not outputting any bytes.
Even so, I still like some of CA65's syntactic perks, such as .lobytes and .hibytes, scopes, etc. Scopes are nice, because they allow you to re-use some label names in the same chunk of code, instead of anonymous labels for example.
As for how difficult it is to set up, I think it is about the same. The "config" file which you use to set up memory areas and segments, is really like the top level bank organization source file you might have in an ASM6 program. From my sound engine demo:
Code: Select all
#Config file for SoundEngine
MEMORY
{
#iNES header
HEADER: start = $0, size = $10, fill = yes;
#ram
ZP: start = $0, size = $100, fill = no;
STACK: start = $0100, size = $100, fill = no;
RAM: start = $0200, size = $600, fill = no;
#prg-rom
ROM0: start = $8000, size = $4000, fill = yes;
#fixed prg-rom
ROMFIXED: start = $c000, size = $3ffa, fill = yes;
#vectors
ROMV: start = $fffa, size = $6, fill = no;
#chr-rom
CHRROM0: start = $0000, size = $2000, fill = yes;
}
SEGMENTS
{
#header
HEADER: load = HEADER, type = ro, optional = yes;
#ram
ZEROPAGE: load = ZP, type = zp, optional = yes;
STACK: load = STACK, type = bss, optional = yes;
BSS: load = RAM, type = bss, optional = yes;
#prg-rom
ROM0: load = ROM0, type = ro, optional = yes;
#fixed prg-rom
CODE: load = ROMFIXED, type = ro, optional = yes;
#vectors
VECTORS: load = ROMV, type = ro, optional = yes;
#chr-rom
CHRROM0: load = CHRROM0, type = ro, optional = yes;
}