20. Putting your code in the right place: a brief introduction to prg banking
21. Giving your main character a sword
22. Adding more features to the pause menu
23. Adding a second map
24. Saving the Game
25. Adding objects that attract or repel the player
26. Adding an enemy that mimics player behavior
27. Adding a new sprite size
40. Understanding and tweaking the build tools
41. Dealing with limited ROM space
42. Resizing your rom
43. ROM Data Map
44. Expanding available graphics using CHR banking
45. Getting finer control over graphics with chr ram
46. Writing Functions in Assembly
47. Automatic builds with CircleCI
48. Switching to unrom 512 for advanced features
This project also supports using Unrom 512/mapper 30. (AKA the NESMaker mapper) This has some weird caveats that don’t show up for MMC1, but also enables some new features. If you’re on this page, you probably already know why you want it. Note that in this branch, some features of the library won’t work, or will need manual changes (on your part!)
The code for this is available in the
mapper_30 git branch. Note that this builds off of the
This section tries to note the pros and cons of unrom 512 vs MMC1 with chr ram. Please note that the caveats for chr ram also apply here, so be sure to read that chapter!
Some advantages of unrom 512
- 32k of chr ram (not rom, ram!) split across 4 banks
- 512kb worth of prg space, across 32 16kb banks
- 4 screen mirroring (optional, not enabled in the branch)
- No PRG ram to work with (including save ram) - any use of this will not work on cartridges!
- If you want to save data to the cartridge, you can use the self-flashing feature, but it is not straightforward.
- There is no example of self-flashing in this repository (though PRs are welcome!)
- Some explanation and example (asm) code is available on the nesdev wiki
- Mirroring isn’t switchable - you have to specify horizontal or vertical in the rom header
What do I have to know to start using it?
Not much - I would strongly recommend reading the chr ram chapter first, since that is a requirement here. Otherwise, the branch should get you up and running!
What extra helpers are available?
Changing chr ram banks
You can switch what chr ram bank you are looking at with the
set_chr_bank_0(id) method, included in
set_chr_bank_1 is disabled, since you have to switch both banks at once.
This chapter is admittedly a bit short - if there is more you’d like to see, create an issue or send a PR! The main goal was to create a working example.