this post was submitted on 08 Feb 2025
74 points (100.0% liked)

Programming

18314 readers
195 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
top 1 comments
sorted by: hot top controversial new old
[–] [email protected] 16 points 1 week ago

I wrote the only first-person shooter on NES.

I can wholeheartedly recommend C for 8-bit platforms, endorse 6502 assembly as brilliant and rewarding, and tell anyone new to retro game dev to pick any other system besides the NES. It's a fucking nightmare. VRAM is only accessible during vblank and will jank up your screen if you try doing too much per frame. The sound chip will eat inputs if you try doing sample playback. Splitscreen of any kind is nightmarish without a mapper chip. Everything has errata - VRAM reads will return junk once per frame, because go fuck yourself. Every color that's not blue is ugly, anything saturated has "dot crawl," and the palette grid is a bitbanging headache that only gets hidden by CRT overscan.

None of this is aided by cc65 being a jumped-up assembler macro. It is instant. It's the fastest goddamn compiler I've ever used. But some C will generate absolute dogshit assembly, for reasons inscrutable to mortal men. There's documentation - it's wrong. It tells you how to put variables in zero-page and it's lying. There's a fastcall convention that still shoves registers onto the stack. There's no sane way to place things at specific memory addresses, or even page-align arrays, which you'd think might be kinda fucking important for a compiler suite that supports one architecture. But I really cannot overstress how stupidly fast it is, to where checking any of this bullshit by modifying and rebuilding is quicker than any debugger.

So.

Uh.

If this setup eases any of that - great. Otherwise start with a Game Boy game and GBDK.