Я реализую эмулятор для старой игровой консоли, в основном для учебных целей.Эмуляция памяти-сопоставления игровой консоли, доступ к различным местоположениям по указанному адресу
Эта консоль отображает ромы и многое другое в регионах в своем адресном пространстве. Определенные местоположения также отражаются так, что несколько адресов могут соответствовать одному и тому же физическому местоположению. Я хотел бы подражать этому, но я не уверен, что было бы хорошим подходом к этому (а также не знаю, как этот процесс называется, отсюда и этот несколько общий вопрос).
Одна вещь, которая работает, является простой, неупорядоченной картой. Имеют ли они абсолютные адреса и соответствующие указатели на мои структуры данных. Таким образом, я могу легко отобразить все, что мне нужно, в адресное пространство системы. Проблема с этим подходом заключается в том, что это, очевидно, бодрость памяти. Даже с небольшими ромами, я получаю около десяти миллионов записей, благодаря вышеупомянутому зеркалированию. Наверняка, это не может быть сложной задачей?
Любая помощь очень ценится.
Edit:
Чтобы предоставить некоторые подробности относительно того, как именно я это делаю:
Система в вопросе, конечно, SNES. Использование this wiki в качестве основного ресурса, я implemeted, что я упоминал выше, следующим образом:
- Создать
std::unordered_map<uint32,uint8_t*> mMemoryMap;
- Проверьте ли ПЗУ LoRom или HiRom
- Для каждого байта в ПЗУ
- Calculate адрес, где он должен быть сопоставлен, и поместить как адрес, так и указатель на указанный байт на карте.
- Если раздел необходимо отразить где-то в другом месте, повторите приведенное выше
- Это будет применяться ко всему еще мне нужно сделать, таким, как видео- или систему-память
Если теперь я хочу, чтобы получить доступ что-нибудь в пределах адресного пространства, я могу просто использовать адрес система будет использовать внутренне.
Я думаю, вы должны добавить код для этого –