@devstorm
Super Mario Bros. занимает 40 КБ (PRG ROM - 32 КБ, а CHR ROM - 8 КБ). При этом, если сжать ПЗУ, то, вероятно, получится значение порядка 31 КБ.
Уровни не используют RLE или LZ77, это заняло бы слишком много места. Скорее, игра использует команды типа "отныне использовать этот шаблон заливки земли", "нарисовать здесь трубу", "поставить лестницу", "поставить ворота". В Super Mario Bros. на один объект используется два байта, представляющих следующую информацию: XXXXYYYY PSSSVVVV, где X - горизонтальная позиция на странице, Y - вертикальная позиция на странице, P - переход на следующую страницу, S - команда, а V - ее параметр (длина или номер расширенного объекта). Позиции Y, превышающие 0b1011, используются для специальных команд (так как такие параметры будут выводиться за границы).
Графика не сжимается, так как хранится в CHR ROM и напрямую доступна PPU (PPU не может обращаться к RAM). Однако, поскольку графика имеет размер 2bpp, она занимает не так много места. Палитры используются для того, чтобы не ограничивать всю игру 2bpp - обратите внимание, что блоки 16x16 имеют разные цветовые палитры. Для уменьшения количества необходимых тайлов используются некоторые приемы - например, облака - это то же самое, что и кусты, только с другой палитрой.