LINUX.ORG.RU

Эмулятор для железки?

 ,


0

1

Я делаю эмулятор 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 нужно сделать логику взаимодействия с экраном, у меня есть несколько купленных небольших экранчиков, хотелось бы научиться с ними работать.

Эмулятор пока может вот только это, но хочется капец как запустить его на железке и возрадоваться.



Последнее исправление: peeruoeso (всего исправлений: 2)

Я так понимаю, мне может пригодиться SRAM, например такой link. Тут столько памяти, что хватит и на ppu и на apu и на сам образ игры.

peeruoeso
() автор топика

А почему не взять контроллер, где памяти побольше просто?

Werenter ★★☆
()

Зачем такие сложности, если есть ESP32 с тонной памяти например. Код ардуино можно оставить тот же.

James_Holden ★★★★
()

Как тогда делают такие ретро консоли, где помещается сразу несколько эмуляторов?

Добавляют побольше памяти и не заморачиваются.

То, что ты делаешь — похвально. Но никто этим уже давно не занимается в коммерческих целях в области этих самых консолей. Там либо много памяти и вообще никаких особых заморочек по оптимизации (для тем, кому дёшево и просто поиграть), ну либо FPGA, а не программная эмуляция (для эстетов, кому надо максимально близко к оригиналу)..

CrX ★★★★★
()

@Werenter @James_Holden

У меня пока бюджет ограничен. На arduino вроде всё просто и почти всё есть для программирования. Есть также stm32 с программатором, но там вроде тоже памяти мало.

@CrX

А как это берут больше памяти? Микроконтроллер с большим объемом памяти? Например те что советовал James_Holden?

Так, тогда надо посмотреть микроконтроллеры с большой памятью. А вообще, то что я задумал с отдельной SRAM, это возможно? Просто я не знаю когда будут деньги на всё что требуется, а arduino есть и на SRAM хватет денег купить.

peeruoeso
() автор топика
Ответ на: комментарий от peeruoeso

А как это берут больше памяти? Микроконтроллер с большим объемом памяти? Например те что советовал James_Holden?

Никто не выпускает эмуляторные «приставки» на микрокотроллерах. Они берут какой-нибудь ARM и пару гигов оперативки. И вообще не парятся. Просто посмотри характеристики всех этих поделий на том же алиэкспрессе. Если там нет характеристик, загугли по модели. Оно обычно не скрывается.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от peeruoeso

А как это берут больше памяти?

Я по приколу как-то снял корпус у одной такой приставки, купленной. Там внутри обычный одноплатник на арме залитый. Возьми себе просто одноплатник на арме, я например знаю BeagleBone® Black. Уверен что есть варианты и помощнее и подешевле, тут подскажут, если спросишь.

vbcnthfkmnth123 ★★★★★
()
Ответ на: комментарий от CrX

@CrX

А ну да, я помню, RAM было 4G в какой-то модели, точно. Спасибо.

Может и до этого дойду, а пока хочу попробовать сделать поделие на микроконтроллере. Интересно всё-таки это направление.

peeruoeso
() автор топика

Не хочу тушить твой энтузиазм. Но выглядит все так, как будто ты решил рисовать в стиле импрессионизма, не осилив академический рисунок.

Был тут один светоч, которы делал ёба-охлаждение. Энтузиазма много, а толку мало.

Ну и воспользуйся поиском в интернетах, проекты NES на микроконтроллерах есть, можно просто качать и смотреть как устроены.

Ну и последний совет. Разбей свое изучение на маленькие простые кусочки (условно: загрузка, инициализация, работа с кнопками, работа с дисплеем, работа со звуком, работа с SD и т.д.). Для каждого кусочка делаешь отдельные минипроекты где все подробно изучаешь, а потом все эти кубики собираешь вместе в готовое решение.

yax123 ★★★★★
()
Ответ на: комментарий от peeruoeso

а arduino есть и на SRAM хватит денег купить.

А сколько стоит SRAM + геморой по его подключению? Например, вот модуль ESP32-S3-Zero ценой 440 руб. на Озоне. Просто сравни с ардуино (они имеют туже стоимость):
Микроконтроллер ESP32-S3FH4R2 включает двухядерный процессор Xtensa 32-bit LX7, работающий на частоте до 240 МГц. Имеет встроенную память SRAM 512KB, ROM 384KB и 2MB PSRAM. На плате установлено 4MB Flash памяти. Поддерживает WIFI с керамической антенной, а также Bluetooth LE 5.0. Также на плате имеется RGB светодиод WS2818. Для подключения используется порт Type-C. Начинать работать с ним можно в Arduino IDE, установив доп. модуль для esp32.
Сравнивать это с ATmega328 смешно - флеш-память 32 Кб, ОЗУ 2 Кб, EEPROM 1 Кб. Тактовая частота 16 МГц (причем - за те же деньги).

sigurd ★★★★★
()
Ответ на: комментарий от sigurd

О, спасибо вам за эту ценную информацию. Я не знал, что esp можно на arduino программировать. А то из-за санкций IDE заблокированы. Я думал, что остается только либо на arduino, либо на stm32, потому что есть IDE, то ли Eclipse, то ли NetBeans или CodeBlocks, где есть возможность для embedded делать проекты. Думал что только два варианта доступны. Тогда надо даташит по ESP скачивать, капец конечно, хорошо что пока ни одного микроконтроллера не знаю, а то бы мучался, - всё время изучать новые даташиты, это напряжно, наверное.

peeruoeso
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.