Peanut-GB — это библиотека эмулятора Game Boy с одним заголовком файла, основанная на этом эмуляторе Gameboy. Цель состоит в том, чтобы создать высокоскоростную и портативную библиотеку эмулятора Game Boy (DMG), которую можно использовать на любой платформе, имеющей компилятор C99.
Этот эмулятор очень быстрый . Настолько, что он может работать на полной скорости на Raspberry Pi Pico! Посетите BENCHMARK.md для ознакомления с тестами Peanut-GB.
В настоящее время поддерживается только оригинальный Game Boy (DMG), но предварительная работа по поддержке Game Boy Color уже завершена (см. №50).
Этот эмулятор находится в стадии разработки и может быть неточным (хотя он проходит инструкции процессора Blargg и тесты синхронизации инструкций). Таким образом, некоторые игры могут работать некорректно или не запускаться вообще. Если важна точность, поищите альтернативный эмулятор.
Флагманский пример реализации приведен в peanut_sdl.c, который использует SDL2 для рисования экрана и ввода данных. Запустите cmake
или make
в папке ./examples/sdl2/, чтобы скомпилировать его.
Запустите peanut-sdl
, который создаст окно зоны перетаскивания , в которое вы можете перетащить файл ROM. Альтернативно, запустите в терминале команду peanut-sdl game.gb
, которая автоматически создаст файл сохранения игры game.sav
, если он не найден. Или запустите peanut-sdl game.gb save.sav
чтобы указать файл сохранения.
Примечание. Показанные здесь анимированные GIF-файлы ограничены частотой 50 кадров в секунду, тогда как исходная эмуляция работала со скоростью ~60 кадров в секунду. Это связано с тем, что популярные декодеры GIF ограничивают максимальное значение FPS до 50.
Действие | Клавиатура | Джойпад |
---|---|---|
А | я | А |
Б | х | Б |
Начинать | Возвращаться | НАЧИНАТЬ |
Выбирать | Backspace | НАЗАД |
D-Pad | Клавиши со стрелками | ДПАД |
Повторить А | а | |
Повторите Б | с | |
Нормальная скорость | 1 | |
Турбо x2 (Удерживать) | Космос | |
Турбо X2 (переключить) | 2 | |
Турбо X3 (переключить) | 3 | |
Турбо X4 (переключить) | 4 | |
Перезагрузить | р | |
Изменить палитру | п | |
Сбросить палитру | Шифт + п | |
Полноэкранный | Ф11/ф | |
Пропуск кадров (переключить) | о | |
Чересстрочная развертка (переключить) | я | |
Свалка БМП (переключить) | б |
Режимы пропуска кадров и чересстрочной развертки по умолчанию отключены. Frameskip переключается между 60 и 30 кадрами в секунду.
Нажатие клавиши «b» приведет к сохранению каждого кадра в виде 24-битного растрового файла в текущей папке. Дополнительную информацию см. в /screencaps/README.md.
Следующие проекты используют Peanut-GB в произвольном порядке и в неисчерпывающем списке.
Документацию по прототипам функций можно найти внизу файла peanut_gb.h.
Фронтенд-реализация должна предоставить библиотеке ряд функций. Эти функции устанавливаются при вызове gb_init.
Следующие дополнительные функции могут быть определены для дополнительной функциональности.
Эта функция необходима для рисования на ЖК-дисплее. Установите эту функцию с помощью gb_init_lcd и включите функциональность ЖК-дисплея в Peanut-GB, задав для ENABLE_LCD значение 1 перед включением peanut_gb.h. ENABLE_LCD по умолчанию имеет значение 1, если оно не было определено ранее. Если gb_init_lcd не вызывается или для lcd_draw_line установлено значение NULL, то отрисовка ЖК-дисплея отключена.
Пиксельные данные, отправляемые в lcd_draw_line, содержат данные как тени, так и слоя. Первые два младших бита — это данные оттенка (черный, темный, светлый, белый). Биты 4 и 5 представляют собой данные слоев (OBJ0, OBJ1, BG), которые можно использовать для добавления в игру большего количества цветов точно так же, как Game Boy Color в старых играх Game Boy.
Эти функции необходимы для эмуляции и вывода звука. Peanut-GB не включает эмуляцию звука, поэтому необходимо использовать внешнюю библиотеку. Эти функции должны быть определены, а вывод звука должен быть включен путем определения ENABLE_SOUND равным 1 перед включением peanut_gb.h.
Эти функции необходимы для последовательной связи. Установите эти функции с помощью gb_init_serial. Если эти функции не установлены, эмуляция будет работать так, как если бы соединительный кабель не был подключен.
Эти функции предоставляет Peanut-GB.
Эта функция сбрасывает запущенную игру, как если бы консоль была выключена и снова включена. gb_reset вызывается gb_init для инициализации регистров ЦП.
Эта функция возвращает размер сохранения игры. Эта функция возвращает 0, если игра не использует данные сохранения.
Эта функция запускает процессор до тех пор, пока полный кадр не будет отображен на ЖК-дисплее.
Эта функция вычисляет хэш названия игры. Этот хэш рассчитывается так же, как цвет Game Boy, для добавления цвета в игры Game Boy.
Эта функция возвращает название игры.
Установите время часов реального времени (RTC). Некоторые игры используют эти данные RTC.
Устарело: не использовать. RTC отмечен внутри.
Запустите образ bootrom при сбросе. Чтобы эти изменения вступили в силу, необходимо выполнить сброс после вызова gb_set_bootrom. Это связано с тем, что gb_init вызывает gb_reset, но gb_set_bootrom должен вызываться после gb_init. Бутром должен быть либо DMG, либо MGB.
Этот проект лицензируется по лицензии MIT.