While searching on the Internet and Quora, I found disassemblers for Pac-Man, Galaxian, and Super Mario Bros. The thing that puzzled me, was while Super Mario Bros was arguably quite a complex game for the NES, while Pac-Man and Galaxian weren't, they all had roughly the same length in assembly language. All three were more than 8 kibibytes but under 16(The actual number was 9 for Galaxian, 15 for Pacman and 16 for Mario). Super Mario Bros seemed too large to fit inside such a small space, especially when compared to Pacman and Galaxian, and on the Wikipedia article for the NES, it claimed that some NES games reached 1 megabyte in size. And if that's true, how come Mario isn't bigger than 16 kibibytes(especially for the even more complex Mario games like SMB3 that came after)?
-
Game size is more than just code. Also graphics and sounds and level designs etc take space, and often even more than the program code itself– tuomasMay 10, 2020 at 19:18
-
1Wikipedia isn't perfect, obviously, but when making a claim that straightforward contradicts Wikipedia, and you even note that in your question, it would be nice to show yours sources.– Michael GrafMay 10, 2020 at 19:35
1 Answer
Those numbers are not correct. Super Mario Bros had 40 KiB of total ROM (32K PRG-ROM (program ROM) and 8K CHR-ROM (character ROM, for storing graphics data)). Pac-Man had 24K (16K PRG, 8K CHR). Super Mario Bros. 3 had 384K total (256K PRG, 128K CHR). Some games were even bigger (and a even few exceeded 1MiB, as you mentioned in your question).
There were several factors influencing cartridge size. The most obvious one was cost: bigger ROMs were more expensive (and games released later tend to be larger because the price of ROM was falling). Another factor was address space limitations: the NES could only address 32K of PRG-ROM and 8K of CHR-ROM, but this limit could be circumvented by using a memory mapper to swap regions of ROM in and out of the addressable range.
-
Alright, but disassemblers of the code only list it as having 16kiB of code, so whats going on?– Nip DipMay 10, 2020 at 20:58
-
1It's hard to tell unless you post a link to the disassemblies you're referring to. Maybe the disassemblies are incomplete? Maybe they only include code, but not level data? May 10, 2020 at 21:45
-
2That article makes mappers sound complicated, but in many cases a mapper would merely be a single commonplace chip. For example, a CNROM mapper would expand the CHR-ROM area from 8KB to 128KB using a four-bit synchronous counter chip as a register with both clock and write-enable signals.– supercatMay 11, 2020 at 18:46
-
1@NipDip Can you post an example of those disassemblies? PRG ROM is often mapped to one fixed 16K bank, plus one switchable 16K bank. Maybe that's what you're referring to, and you misunderstood the comments for the disassembled code?– tobiasvlMay 11, 2020 at 18:54