I don't bash nesasm every time it's mentioned, I bash it every time it causes problems for somebody because of the weird way it handles things. Which is, coincidentally enough, most of the time I see it mentioned.
I can offer two very good choices over nesasm: x816 and ca65. Why? Because x816 doesn't have the weird habit of partitioning everything into 8k banks like nesasm does, which is only useful IF you're working with a mapper that does just that. Not only that, it also handles 65816 code, which is perfect in case you want to migrate over to the snesdev scene. One major disadvantage, though, is that it's apparently only available for DOS.
ca65 is probably an even better choice, despite the fact that it spits out object files (but the linker can make binaries out of those, anyway). It was written for a more general 6502 and 65816 crowd, and can handle not only regular and bankswitched code, but can easily handle other platforms that use 6502 or 65816 processors (perfect for me, since I also dabble with the Atari 2600 and the Commodore 64). Not to mention the fact that it doesn't impose limits on the end user except what his/her machine can handle (and the target platform's). And as someone pointed out earlier, it is available for many modern operating systems besides DOS.
You're right, of course, I probably could have worded my post more tactfully. But over the years, my tolerance for stupidity has reached an all-time low, and based on what I've heard, nesasm does a lot of stupid things, which is most likely why I went off and posted rudely. There's just this part of me that expects things to work the way they're supposed to. And nesasm, well...doesn't. And this is hardly the first time I've read about somebody having problems with it.
What can I do about this error?
Moderator: Moderators
Apparently it is hard-wired for an 8K bank size, which isn't weird, but is somewhat stupid given that many NES mappers use 16K and 32K banks. I bet it was originally written for another system whose bank size was always 8K (PC Engine?).I don't bash nesasm every time it's mentioned, I bash it every time it causes problems for somebody because of the weird way it handles things. [...] based on what I've heard, nesasm does a lot of stupid things.
So a more informative reply would have been: nesasm is hard-wired for 8K banks, so you'll have to manually break your code and data into 8K or smaller chunks and manually set their addresses, or use a different assembler. I recommend ca65.