Немного поработав над эмулятором для NES (у меня он декодирует некоторые коды операций, но ни одно другое оборудование не эмулируется), я могу поделиться несколькими ответами.Для большинства игр использовался ассемблер.Оптимизирующие компиляторы, если они были доступны для ЦП, были далеко не так хороши 20–30 лет назад, как сегодня.Чтобы получить производительность, вам нужно было написать на ассемблере (это даже верно для ПК. Части Doom есть в ASM).Тем более что процессор NES работал на частоте менее 2 МГц.Кроме того, память была дороже, чем сегодня.Оригинальный Mario хранился примерно в 40 тысячах памяти.16 тыс. Из них составляли реальный код, а оставшиеся - графические и звуковые ресурсы.
До эпохи 32-битных консолей любая операционная система или даже встроенные утилитыконсоль была необычной (Sega CD был одним из немногих в 16-битной эпохе с настоящим BIOS, и в процессор Game Boy была встроена небольшая программа, которая отвечала за прокрутку логотипа Nintendo при включении).См. Выше об ограничениях размера, как основной причине.При вставке картриджа микросхема ПЗУ в автомобиле была подключена непосредственно к адресной шине ЦП.При включении процессор будет считывать данные с фиксированного адреса, чтобы получить фактический адрес, с которого была запущена программа, а затем перейти к этому месту и начать выполнение.
Что касается ресурсов, то NES Dev Wiki имеет ресурсы, касающиеся оборудования NES, а также ссылки на программирование.Домен Zophar's также имеет технические документы и общедоступные ПЗУ для многих консолей (я не знаю, стоит ли мне ссылаться на ZD на этом сайте, просто Google)