Я делаю эмулятор NES. Хочу его запускать на микроконтроллере. Пока в этой тематике плохо разбираюсь, и хотелось бы почитать ваши решения и советы как можно сделать сборку, например для arduino uno.
Мой проект находится здесь. Я пока мало что смыслю в эмуляторах, и поэтому есть большие затупы. Цель данного проекта научиться писать сложный код, уметь правильно читать документацию, хороший проект в портфолио, научиться работать со схемотехникой, сделять эмулятор для моего старого проекта RetroSprite, в котором по возможности сделаю полноценную студию для разработки NES (Это если не заинтересует более интересный проект).
Сейчас проект компилируется в 84888 байт памяти, это значит, что 84 килобайта. В arduino uno всего 32 кб, плюс пишут, что 0.5 на загрузчик отводиться.
Проект как понимаю будет разрастаться и нужно понять как это решается на уровне электронной схемы.
На chipdip например нашел микросхемы памяти на 256кб. Этого хватит, чтобы сохранить код библиотеки, но как мне кажется, что это неправильное мышление. Но, я сейчас обдумал. Я пока точно не знаю как работают прямо все игры nes, но готов рассуждать, что в nes память меняется только в ram области, а область кода не затрагивается. Если это так, то из библиотеки можно убрать в структуре место для кода и chr данные (фона и спрайтов). Если убрать эти данные и оставить только указатели, то размер файла должен уменьшиться до 43928 байт. Это всё-равно много. Там ещё нет реализации APU, а PPU занимает 0x4000 байт, хотя стой, что если для ppu взять микросхему памяти и в неё писать данные экрана, а когда надо считать что на экране, то будем читать из микросхемы памяти, так можно?
Потому что если убрать ещё 0x4000 байт, то получиться 27544 байт памяти, что уже помещается на arduino. Плюс это код оптимизированный на gcc, что будет в компиляторе для arduino не ясно. Наверное эмуляторы делают на verilog, где делаются прямо чипы, или нет?
Как тогда делают такие ретро консоли, где помещается сразу несколько эмуляторов? Просто у меня код и так мало занимает логики, хотя если убрать макросы и добавить некоторую другую логику, то код удастся ещё уменшить.
Плюс на arduino нужно сделать логику взаимодействия с экраном, у меня есть несколько купленных небольших экранчиков, хотелось бы научиться с ними работать.
Эмулятор пока может вот только это, но хочется капец как запустить его на железке и возрадоваться.