As many of you know, I am making an NES game from scratch.
It's a platformer.
Mapper: SNROM (Part of the MMC1 family of NES boards)
Mirroring: Single Screen, so I can have it so the pause screen uses a different nametable, and doesn't affect the playfield's tiles.
PRG banks: 16 banks, or 256kb
CHR banks: Zero! I'm using CHR-RAM, so the graphics are fetched from RAM rather than ROM :3
Battery packed save: Yes
I decided to just go with SNROM for the mapper. I would have used SXROM if not for the fact that barely any emulators support it, even if my game is meant to be ran on a real NES. Using a PowerPak, of course.
Here's the RAM map so far:
$0 $F (16 bytes) Local variables for routines
$10 $FF (240 bytes) Pointer city
$100 $1FF (224 bytes) Stack
$200 $2FF (256 bytes) OAM buffer
$300 $3FF (256 bytes) Various graphical stuffs
(128 bytes) Column buffers. (Four sets of 32 tile strips, two per side)
(32 bytes) Metatile buffers (16 metatiles on both sides)
(32 bytes) Buffer for how long to keep using the specified metatiles
(32 bytes) Buffer for the pallete data
(32 bytes) Other graphical crap, like the current scrolling settings, whatever
$400 $4FF (256 bytes) Screen's Metatile buffer (grid of 16 by 16 tiles)
$500 $5FF (256 bytes) Sprite data. Room for 16 objects and each object gets 16 bytes of storage
Layed out like this:
$5x0: S_HI: Address will be indirectly JSR'd to each frame
$5x1: S_LO:
$5x2: S_TS: Type and Status.
$5x3: S_PX: Position X
$5x4: S_PY: Position Y
$5x5: S_WD: Width and height of the sprite, in tiles
$5x6: S_PD: Width and height padding for use in collision detection, in pixels
$5x7: S_SN: Index of the sprite number allocated in the OAM table
$5x8: S_VX: Velocity X
$5x9: S_VY: Velocity Y
$5xA: S_VA: General value A (For use as timers, counters, whatever)
$5xB: S_VB: General value B
$5xC: S_VC: General value C
$5xD: S_VD: General value D
$5xE: S_VE: General value E
$5xF: S_VF: General value F
$600 $6FF (256 bytes) Various game engine stuffs
$700 $7FF (256 bytes) Not allocated
...and the ROM map so far:
Bank |Use
0 |Main bank. Level decoder, column writer, dialog decoder, sprite engine
1 |Player code and level table
2 |\Music engine and data
3 |/
4 |Eight Metatile sets
5 |ASCII tiles and seven sets of 2k CHR tiles
6 |Player tiles
7 |Enemy tiles
8 |Level editor, maybe some other stuff too
9 |Block and enemy code
A |\
B | \
C | \Level data and some dialog
D | /
E | /
F |/
I have no screenshots to post just yet. The game still needs a lot more done first...
It's a platformer.
Mapper: SNROM (Part of the MMC1 family of NES boards)
Mirroring: Single Screen, so I can have it so the pause screen uses a different nametable, and doesn't affect the playfield's tiles.
PRG banks: 16 banks, or 256kb
CHR banks: Zero! I'm using CHR-RAM, so the graphics are fetched from RAM rather than ROM :3
Battery packed save: Yes
I decided to just go with SNROM for the mapper. I would have used SXROM if not for the fact that barely any emulators support it, even if my game is meant to be ran on a real NES. Using a PowerPak, of course.
Here's the RAM map so far:
$0 $F (16 bytes) Local variables for routines
$10 $FF (240 bytes) Pointer city
$100 $1FF (224 bytes) Stack
$200 $2FF (256 bytes) OAM buffer
$300 $3FF (256 bytes) Various graphical stuffs
(128 bytes) Column buffers. (Four sets of 32 tile strips, two per side)
(32 bytes) Metatile buffers (16 metatiles on both sides)
(32 bytes) Buffer for how long to keep using the specified metatiles
(32 bytes) Buffer for the pallete data
(32 bytes) Other graphical crap, like the current scrolling settings, whatever
$400 $4FF (256 bytes) Screen's Metatile buffer (grid of 16 by 16 tiles)
$500 $5FF (256 bytes) Sprite data. Room for 16 objects and each object gets 16 bytes of storage
Layed out like this:
$5x0: S_HI: Address will be indirectly JSR'd to each frame
$5x1: S_LO:
$5x2: S_TS: Type and Status.
$5x3: S_PX: Position X
$5x4: S_PY: Position Y
$5x5: S_WD: Width and height of the sprite, in tiles
$5x6: S_PD: Width and height padding for use in collision detection, in pixels
$5x7: S_SN: Index of the sprite number allocated in the OAM table
$5x8: S_VX: Velocity X
$5x9: S_VY: Velocity Y
$5xA: S_VA: General value A (For use as timers, counters, whatever)
$5xB: S_VB: General value B
$5xC: S_VC: General value C
$5xD: S_VD: General value D
$5xE: S_VE: General value E
$5xF: S_VF: General value F
$600 $6FF (256 bytes) Various game engine stuffs
$700 $7FF (256 bytes) Not allocated
...and the ROM map so far:
Bank |Use
0 |Main bank. Level decoder, column writer, dialog decoder, sprite engine
1 |Player code and level table
2 |\Music engine and data
3 |/
4 |Eight Metatile sets
5 |ASCII tiles and seven sets of 2k CHR tiles
6 |Player tiles
7 |Enemy tiles
8 |Level editor, maybe some other stuff too
9 |Block and enemy code
A |\
B | \
C | \Level data and some dialog
D | /
E | /
F |/
I have no screenshots to post just yet. The game still needs a lot more done first...