Comments 32
На хабре раньше был цикл статей про эмуляцию GameBoy на JavaScript. Почему-тo сейчас уже не находит, но если кому-то интересно, то вот оригинал: imrannazar.com/GameBoy-Emulation-in-JavaScript:-The-CPU
+4
Это я переводил. Правда не все статьи еще обработал. blog.asfdfdfd.com/?s=Imran
0
Хорошая, статья, только: . Хотелось запустить посмотреть. DirectX что ли нужен или что это за библиотечка?
+1
Спасибо. Да, я использую Direct3D 9, это как раз одна из его библиотек.
0
При написании эмулятора лучше сразу думать о переносимости. Можно выделить ядро эмуляции и делать разный интерфейс для разных фронтэндов и платформ. А можно использовать SDL в качестве переносимого фронтэнда.
+1
Несмотря на то, что в мои планы переносимость не входила (как и доведение эмулятора до презентабельного состояния), я обеспокоился об отделении ядра эмулятора от всего остального заранее. По сути, наружу торчать лишь три вещи — буфер кадра, буфер сэмплов, состояние кнопок, соответственно, видео, аудио, пользовательский ввод. А уж распоряжаться ими можно как угодно.
0
Сколько времени потратили на изучение и разработку?
+2
Сложно сказать. Начал я в где-то в начале этого года. Закончил буквально неделю назад. Естественно писал я его не целыми днями, а по вечерам. Иногда делал перерыв на пару недель. Большего всего времени отняли процессор и звук. Процессор долго писать сам по себе, да и отлаживать его то еще удовольствие. Звук — коварная штука со скудной документацией, один раз пришлось переделывать с нуля из-за неудачного подхода к эмуляции. О звуке я обязательно напишу в будущих статьях.
+2
Если не секрет на кого вы учились? ))
0
-4
Вы намекнули на проблему программы, но увы, проблема именно у вас — нужно найти эту библиотеку direct x (элементарно ищется через гугл) и положить в %systemroot%\system32
-4
«Спасение утопающих дело самих утопающих» — не ново. Решил проблему следующим образом — переименовал имеющийся у меня файл D3DX9_42.dll в D3DX9_43.dll, и программа запустилась. Она при загрузке спрашивает еще какой-то файл. Что ей надо подсунуть? Наверное файл картриджа? Не подскажет ли уважаемый автор, где эти файлы картриджей можно найти?
+1
>>переименовал имеющийся у меня файл D3DX9_42.dll в D3DX9_43.dll
facepalm
facepalm
+3
А что не так? Тупо сделал копию, положил её в папку программы, переименовал. Вы как будто с луны упали.
0
А скачать свежий DirectX c сайта производителя не?
0
Не предлагает сайт производителя для Windows XP ничего новее, увы. Вроде как самый свежий у меня Direct X, который существует в природе для моей системы. Вот что показал dxdiag.exe: DirectX 9.0c (4.09.0000.0904).
Проблема в том, что сама Windows XP у меня считается уже устаревшей, но пока устраивает по всем параметрам. Не советуйте пожалуйста переустановить Windows на более новую версию, или купить новый компьютер =).
Проблема в том, что сама Windows XP у меня считается уже устаревшей, но пока устраивает по всем параметрам. Не советуйте пожалуйста переустановить Windows на более новую версию, или купить новый компьютер =).
0
void Write(WORD addr, BYTE value);
Что-то я не припомню, что бы в С++ были типы данных WORD и BYTE…
Зачем использовать платформо-зависимый диалект языка, там где не идет на прямую работа с системыми API?
-2
Я бы взял вас на работу… если бы хватило денег.
+2
А нельзя просто взять эмулятор ZX-Spectrum'а под названием QAOP, написанный на JS/HTML, и выпилить из него всё лишнее?)
0
Конечно можно, все таки и там и там довольно похожие процессоры, но так мы получим только эмуляцию инструкций процессора, к тому же между Z80 и процессором Gameboy есть существенные отличия. Все остальное все равно придется писать самому. Я одно время хотел так же поступить, но моей целью было получение опыта в деле эмуляции, а тут уж лучше все самому.
0
Исходники не смотрел, лучше спрошу.
Интересно как происходит синхронизация времени исполнения с реальной скоростью работы геймбоя? На современных компьютерах каждая эмулируемая инструкция будет исполняться значительно быстрее оригинала. Вы как-то меряете время исполнения инструкции и добавляете паузу?
Интересно как происходит синхронизация времени исполнения с реальной скоростью работы геймбоя? На современных компьютерах каждая эмулируемая инструкция будет исполняться значительно быстрее оригинала. Вы как-то меряете время исполнения инструкции и добавляете паузу?
0
Одно время я использовал паузы, но время исполнения отдельных инструкций измерять не требуется. Ядро эмулятора крутится в бесконечном цикле. На каждой итерации я жду, пока эмулятор не произведет полное обновление «экрана», что равняется строго определенному числу тактов процессора Gameboy. Мне достаточно измерить, сколько ушло времени на эмуляцию одного полного обновления «экрана» Gameboy, а там уже делаю паузу, чтобы уложиться в 60 Гц частоту обновления.
Когда я наконец-то сделал адекватную эмуляцию звука, то получилось отказаться от ручной синхронизации (так что правильно, что не смотрели исходники), но обо всем по порядку. Объяснять все сейчас, значит пересказывать куски будущих статей. О синхронизации тоже пойдет речь, это довольно существенная проблема, особенно, когда есть звук.
Когда я наконец-то сделал адекватную эмуляцию звука, то получилось отказаться от ручной синхронизации (так что правильно, что не смотрели исходники), но обо всем по порядку. Объяснять все сейчас, значит пересказывать куски будущих статей. О синхронизации тоже пойдет речь, это довольно существенная проблема, особенно, когда есть звук.
0
У разработчиков MAME был цикл статей про тайминг — там описывался правильный подход.
Но он далеко не прост, действительно проще привязаться к обновлениям экрана.
CPU Scheduling in MAME
part 1 aarongiles.com/?p=137
part 2 aarongiles.com/?p=138
part 3 aarongiles.com/?p=139
part 4 aarongiles.com/?p=140
Но он далеко не прост, действительно проще привязаться к обновлениям экрана.
CPU Scheduling in MAME
part 1 aarongiles.com/?p=137
part 2 aarongiles.com/?p=138
part 3 aarongiles.com/?p=139
part 4 aarongiles.com/?p=140
0
> следующим шагом является документация
Не увидел ссылки на «Pan Docs» — для программиста под GameBoy это в общем-то основной справочный источник: nocash.emubase.de/pandocs.htm
Не увидел ссылки на «Pan Docs» — для программиста под GameBoy это в общем-то основной справочный источник: nocash.emubase.de/pandocs.htm
0
интересная статья. я бы наверное использовал jump table для опкодов, вместо множества кейсов.
0
Sign up to leave a comment.
Пишем эмулятор Gameboy, часть 1