How to Program an NES game in C

NES programming tutorial for cc65

And all the code is now on github…





What you need

How cc65 works

01. Our first program

02. What’s a v-blank?

03. VRAM buffer

04. Full Background

05. Palettes

06. Sprites

07. Controllers (and sprite collisions)

08. BG collisions

09. Scrolling

10. Game loop

11. Metatiles

12. Scrolling right

13. Scrolling up

14. Platformer

15. Music

16. Sound effects

17. DPCM Sound

18. Sprite Zero

19. More things, mappers

20. Platformer Again

21. Finished Platformer

22. Zapper / Power Pad

23. Advanced Mapper – MMC1

24. Advanced Mapper – MMC3

All Direction Scrolling

Appendix, neslib library

Appendix, nesdoug library



Downloads, free games



ASM Basics (6502)


Super Nintendo Super Famicom SNES SFC SNESdev programming

SNES Programming Guide



16 thoughts on “How to Program an NES game in C

    1. If you click on “Neslib Example Code” and download the link, there is a version that works with the newest cc65 (as of Nov 2017). It’s been slightly edited by me.

      Also, you can go to Mojon Twin’s website, and download the source code to one of their recent games, they always use a version of neslib…


    1. I’m going to allow it, but there is a high likelihood that I will make major changes to my website, which may not be in the Russian translation that I’m not involved with.


  1. Hi Doug and thx for all your programs. I learn how to program a game on SNES, and all you do is usefull. But… I can’t use your 0,9,2 SuperFamiconv program on Windows x86… It’s possible to compil it for us? THX

    Liked by 1 person

      1. Great, THX a lot! It work correctly! I saw that there is a forum, so I will write new questions on it. Thank a lot for all your work. I hope to do some things and post in the forum!!!


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s