Emulicious-Memory-Editor-1.png

ProcedureProfiler.png

Trace-Visualisation-1.png

💡 ВСТУПЛЕНИЕ: КОГДА ТОЧНОСТЬ СТАНОВИТСЯ ИСКУССТВОМ

В мире ретро-эмуляции есть два подхода: "запустить и поиграть" и "понять, как это работает на реальном железе". Первый подход хорош для казуальных игроков, второй — критически важен для разработчиков, ромхакеров и настоящих энтузиастов.

Emulicious от разработчика Michael Stegmaier (известного как Calindro) — это воплощение второго подхода . Это не просто эмулятор, а целая исследовательская лаборатория для нескольких платформ: Game Boy, Game Boy Color, Master System, Game Gear и MSX .

Но самое интересное для нас — Emulicious имеет глубокую интеграцию с Visual Studio Code через официальное расширение-отладчик . Это позволяет не просто запускать игры, а профессионально разрабатывать под эти платформы с пошаговой отладкой исходного кода на C и ассемблере .


🏗️ ЧТО ТАКОЕ EMULICIOUS И ЗАЧЕМ ОН НУЖЕН?

Emulicious — это бесплатный многосистемный эмулятор, написанный на Java, который работает на Windows, Linux, macOS и любых других ОС, поддерживающих Java SE . Он нацелен на предельную точность эмуляции (precision emulation), что делает его незаменимым инструментом для серьёзной разработки .

🎯 ПОДДЕРЖИВАЕМЫЕ ПЛАТФОРМЫ


СистемаПоддержкаОсобенности
Nintendo Game BoyПолнаяТочная эмуляция оригинального "кирпичика"
Nintendo Game Boy ColorПолнаяПоддержка цветных режимов и обратной совместимости
Sega Master SystemПолнаяЭмуляция 8-битной консоли от Sega
Sega Game GearПолнаяПортативная версия Master System с подсветкой экрана
MSXПолнаяЛегендарный японский стандарт домашних компьютеров
Analogue PocketЧастичнаяПоддержка запуска ROM-файлов *.pocket

🎯 КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ (ЧТО ОН ДАЁТ ПОЛЬЗОВАТЕЛЮ)

  1. Точность превыше всего — эмуляция максимально приближена к поведению реального железа, что критично для разработчиков и ромхакеров .
  2. Богатейший набор инструментов — отладчик, профайлер, трассировщик, анализатор покрытия кода, редактор памяти, просмотрщики тайлов, спрайтов, палитр и карт .
  3. Remote Debugging — возможность подключаться к эмулятору из VS Code и отлаживать код на уровне исходников .
  4. Автоматическое обновление — эмулятор сам следит за актуальностью версии .
  5. IPS Patching — поддержка патчей для ROM-файлов .
  6. Реверсивный шаг (Reverse Stepping) — можно отмотать выполнение назад, как в DeZog .
  7. Тесты точности — эмулятор проходит множество тестов из сообщества gbdev, подтверждая свою надёжность .

🧬 ИСТОРИЧЕСКИЙ КОНТЕКСТ: ПОЧЕМУ ТОЧНОСТЬ ВАЖНА?

Автор Emulicious подробно объясняет, почему точность эмуляции критически важна для разных категорий пользователей :
КатегорияПочему важна точность
Казуальные игрокиНеточная эмуляция может ломать игровые механики. Например, в игре Another World есть сцена, которая полагается на специфическое поведение инструкции — если эмулятор неточен, сцену невозможно пройти.
Разработчики (Homebrew)Без точной эмуляции приходится после каждого изменения тестировать на реальном железе. Точный эмулятор позволяет отлавливать баги до того, как они попадут на hardware.
РомхакерыПри модификации ROM нужно быть уверенным, что изменения не сломают игру на реальной консоли.

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


⚙️ УСТАНОВКА И НАСТРОЙКА

📥 Шаг 1: Установка самого эмулятора

Emulicious распространяется бесплатно и доступен для всех основных платформ .

Способ А: С официального сайта
  1. Перейдите на emulicious.net .
  2. В разделе загрузок выберите версию под вашу ОС.
  3. Для Windows доступна версия со встроенной Java — скачайте её, если у вас нет Java .
  4. Распакуйте архив в удобную папку (например, C:\Emulicious).
Способ Б: Через Flathub (Linux)
Bash:
flatpak install flathub net.emulicious.Emulicious

Размер установки ~317 МБ, загрузка ~82 МБ .

Способ В: Вручную с Java (macOS/Linux)
Если у вас уже установлена Java SE, можно скачать версию без встроенной Java и запускать через java -jar Emulicious.jar.

🔧 Шаг 2: Установка расширения для VS Code

Для интеграции с Visual Studio Code нужно установить специальное расширение-отладчик .
  1. Запустите Visual Studio Code.
  2. Нажмите Ctrl+Shift+X (или иконку квадратиков слева), чтобы открыть вкладку Extensions.
  3. В поиске введите "Emulicious Debugger".
  4. Найдите расширение от автора emulicious (или Calindro) и нажмите Install .

⚙️ Шаг 3: Настройка путей в VS Code

После установки расширения нужно указать, где лежит сам эмулятор .
  1. Откройте настройки VS Code (File -> Preferences -> Settings или Ctrl+,).
  2. Найдите раздел Emulicious Debugger.
  3. В поле "Emulicious Path" укажите полный путь к исполняемому файлу эмулятора, включая имя файла:
    • Windows: C:\Emulicious\Emulicious.exe
    • Linux: /home/username/Emulicious/Emulicious (или путь к flatpak)
    • macOS: /Applications/Emulicious.app/Contents/MacOS/Emulicious

🔌 Шаг 4: Включение удалённой отладки в эмуляторе

Перед запуском отладки нужно разрешить эмулятору принимать внешние подключения .
  1. Запустите Emulicious.
  2. В меню выберите Tools -> Remote Debugging.
  3. Убедитесь, что пункт Enabled отмечен галочкой .

📁 СТРУКТУРА ПРОЕКТА И НАСТРОЙКА LAUNCH.JSON

Для работы с Emulicious в VS Code нужно создать или настроить конфигурацию запуска в файле .vscode/launch.json.

📝 Базовая конфигурация для отладки

JSON:
{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "emulicious-debugger",
            "request": "launch",
            "name": "Emulicious Debug",
            "program": "${workspaceFolder}/build/rom.gb",
            "emulicious": {
                "rom": "${workspaceFolder}/build/rom.gb",
                "symbolMap": "${workspaceFolder}/build/rom.sym",
                "stopOnEntry": true,
                "remotePort": 58876
            }
        }
    ]
}

🔍 Ключевые параметры


ПараметрОписаниеПример
typeДолжен быть "emulicious-debugger" "emulicious-debugger"
requestВсегда "launch" для запуска"launch"
programПуть к ROM-файлу"${workspaceFolder}/build/rom.gb"
emulicious.romПуть к ROM (дублируется)"${workspaceFolder}/build/rom.gb"
emulicious.symbolMapФайл с символами (для отображения исходников)"${workspaceFolder}/build/rom.sym"
emulicious.stopOnEntryОстанавливаться на первой инструкцииtrue
emulicious.remotePortПорт для удалённой отладки (по умолчанию 58876)58876

🏗️ Пример проекта GBDK Starter Template

Разработчик RednibCoding создал отличный шаблон для GBDK, который уже настроен для работы с Emulicious .

Структура шаблона:
Код:
GBDK-Starter-Template/
├── .vscode/
│   ├── c_cpp_properties.json    # Пути к include GBDK
│   └── launch.json               # Конфигурация для Emulicious
├── build/                         # Выходная папка
├── tools/                          # Вспомогательные скрипты
├── build.bat                       # Скрипт сборки
├── main.c                           # Главный файл программы
└── README.md

Как использовать :
  1. Склонируйте репозиторий.
  2. В c_cpp_properties.json укажите правильный путь к папке include вашего GBDK.
  3. В Emulicious включите Tools -> Remote Debugging -> Enabled.
  4. Нажмите F5 в VS Code — проект скомпилируется и запустится в Emulicious с привязанным отладчиком.

🚀 РАБОЧИЙ ПРОЦЕСС (ДЕНЬ ОПЛАТЫ)

✍️ Шаг 1: Пишем код

Создаём простую программу на C для Game Boy с использованием GBDK:
C:
#include <gb/gb.h>
#include <stdio.h>

void main(void) {
    printf("Hello, Game Boy!");
    
    while(1) {
        // Ждём нажатия кнопки
        waitpad(J_START);
        
        // Меняем фон при старте
        BGP_REG = 0xE4;
    }
}

🔨 Шаг 2: Собираем проект

Используя шаблон или свой Makefile, компилируем код в ROM-файл (например, rom.gb) и генерируем файл символов (rom.sym). Символы нужны, чтобы отладчик понимал соответствие между адресами в ROM и строками исходного C-кода .

🐛 Шаг 3: Запускаем отладку

Нажимаем F5. Происходит следующее :
  1. VS Code запускает задачу сборки (если настроено).
  2. Запускается Emulicious и загружает наш ROM.
  3. Эмулятор подключается к отладчику через указанный порт.
  4. Выполнение останавливается на первой инструкции (если stopOnEntry: true).

🔍 Шаг 4: Отлаживаем

Теперь доступны все возможности:
  • Точки останова — ставим прямо в C-коде, кликнув слева от номера строки.
  • Пошаговое выполнение — F10 (Step Over), F11 (Step Into), Shift+F11 (Step Out).
  • Просмотр переменных — видим значения локальных и глобальных переменных.
  • Просмотр регистров — все регистры Z80 (или LR35902) в реальном времени.
  • Просмотр памяти — можно смотреть любые области адресного пространства.

📊 Шаг 5: Анализируем производительность

Emulicious предоставляет мощный профайлер . Можно увидеть, какие функции выполняются дольше всего, и оптимизировать именно их. Анализатор покрытия кода (Coverage Analyzer) подсвечивает, какие строки кода выполнялись, а какие — нет . Это бесценно для тестирования.


🧠 ПРОДВИНУТЫЕ ВОЗМОЖНОСТИ ОТЛАДЧИКА

🔬 Что умеет встроенный отладчик Emulicious

Сам эмулятор имеет встроенный отладчик с ещё более богатыми возможностями, доступными через графический интерфейс :
ИнструментНазначение
DebuggerОсновной отладчик с интерактивным дизассемблером, автоматическим разделением кода и данных, реверсивным шагом
ProfilerПрофилировщик для поиска узких мест производительности
TracerТрассировщик выполнения с логгированием
Coverage AnalyzerАнализ покрытия кода
Memory EditorРедактор памяти с поиском значений
Palette ViewerПросмотрщик палитр
Tile ViewerПросмотрщик тайлов
Tilemap ViewerПросмотр карт тайлов
Sprite ViewerПросмотр спрайтов
Sound ViewerВизуализация звука
Data PlotterПостроитель графиков данных
RAM SearchПоиск по RAM
RAM WatchНаблюдение за ячейками памяти
Memory TracerТрассировка обращений к памяти

🎯 Условные точки останова

Мощный синтаксис выражений позволяет задавать сложные условия для брейкпоинтов . Например:
  • Остановиться, когда регистр A равен 10 и выполняется запись в память по адресу 0xFF44.
  • Остановиться, когда счётчик команд достигает определённой метки, но только если флаг Z сброшен.

🔄 Реверсивная отладка (Reverse Stepping)

Как и в DeZog, Emulicious позволяет отматывать выполнение назад . Если вы прошли шагом дальше, чем нужно, или пропустили момент изменения переменной — просто отмотайте несколько инструкций назад и посмотрите, что произошло.

📚 Загрузка исходных файлов

Отладчик умеет показывать не дизассемблер, а ваш исходный код на C или ассемблере . Для этого нужны файлы с отладочной информацией (например, .sym, .map, .lst), которые генерируются компилятором.


📊 СРАВНЕНИЕ: EMULICIOUS VS АЛЬТЕРНАТИВЫ


КритерийEmuliciousBGB (Game Boy)MAMEDeZog + эмулятор
ПлатформыGB/GBC, SMS, GG, MSX Только GB/GBCТысячи системТолько Z80 (через эмулятор)
ТочностьОчень высокая Эталонная для GBЗависит от драйвераЗависит от эмулятора
Отладка из VS CodeДа (официальное расширение) Нет (через сторонние мосты, сложно)Есть GDB Stub Да (DeZog + zsim/эмулятор)
Отладка C-кодаДа (с символами) Только ассемблерДа (с GDB)Частично (через z88dk)
ПрофайлерВстроенный НетНетНет
Просмотр графикиTile/Sprite/Palette Viewer Встроенный (BGB)Через отдельные утилитыНет
Java requirementДа (встроена в Windows-версию) Нет (нативный код)НетНет
Сложность освоенияСредняя (много инструментов)НизкаяВысокаяСредняя

🎨 ПЛЮСЫ И МИНУСЫ

✅ Плюсы (Почему это must-have для ретро-разработчика)

  • Универсальность: один эмулятор для нескольких популярных платформ .
  • Промышленная точность: можно доверять результатам тестирования .
  • Интеграция с VS Code: официальное расширение-отладчик .
  • Набор инструментов: отладчик, профайлер, трассировщик, просмотрщики графики — всё в одном флаконе .
  • Реверсивная отладка: отматывайте выполнение назад .
  • Условные брейкпоинты: мощный синтаксис выражений .
  • Бесплатный: никаких платежей, донаты приветствуются .
  • Активная разработка: последняя версия от 31.08.2024 .
  • Кроссплатформенность: Windows, Linux, macOS через Java .

❌ Минусы (О чём нужно знать)

  • Требует Java: хотя для Windows есть версия со встроенной Java, для других ОС может понадобиться отдельная установка JRE .
  • Нет фильтров графики: по отзывам, отсутствие графических фильтров может огорчать казуальных игроков .
  • Звук не идеален: по некоторым отзывам, звук остаётся "perfectible" (может быть улучшен) .
  • Закрытый исходный код: в отличие от многих эмуляторов, Emulicious не является open-source .
  • Не для всех платформ: нет поддержки NES, SNES, Mega Drive — только перечисленные выше .
  • Некоторые инструменты не для всех платформ: например, французский обзор отмечает, что часть продвинутых инструментов работает только для Master System/Game Gear .

🧪 СОВЕТЫ БЫВАЛОГО (КАК ВЫЖАТЬ МАКСИМУМ)

  1. Используйте шаблоны проектов. Репозиторий GBDK-Starter-Template от RednibCoding уже содержит настроенный .vscode/launch.json и скрипты сборки — с него легко начать .
  2. Генерируйте symbol map. Убедитесь, что ваш компилятор (GBDK, SDCC и т.д.) создаёт файл с символами (обычно .sym, .map, .lst). Без него отладчик будет показывать только адреса, а не имена переменных и функций .
  3. Изучите встроенный отладчик. Не ограничивайтесь VS Code — откройте Tools в самом Emulicious. Там есть визуализаторы спрайтов и тайлов, которые бесценны для разработки графических игр .
  4. Используйте профайлер. Если игра тормозит, запустите профайлер и посмотрите, какая функция съедает больше всего тактов. Оптимизируйте именно её .
  5. Проверяйте точность. Если сомневаетесь в поведении эмулятора, сверьтесь с тестами на GBEmulatorShootout . Emulicious обычно показывает отличные результаты.
  6. Включите реверсивную отладку. Это спасает, когда вы прошли шагом дальше, чем нужно. Не перезапускайте программу — просто отмотайте назад .
  7. Для MSX есть альтернативы. Корейская документация упоминает, что для MSX можно использовать openMSX Debugger или MAME с gdbstub . Но Emulicious проще в настройке.

📚 РЕСУРСЫ И ССЫЛКИ


📖 ЗАКЛЮЧЕНИЕ: ЭМУЛЯТОР, КОТОРЫЙ ПОНИМАЕТ ВАШ КОД

Emulicious занимает уникальную нишу в мире ретро-эмуляции. Это не просто "поиграть в старые игры" — это профессиональная рабочая станция для разработки под Game Boy, Master System и MSX.

Его главная сила — в сочетании предельной точности с богатейшим набором инструментов и интеграцией с современными IDE. Благодаря официальному расширению для VS Code, вы получаете цикл разработки, не уступающий по удобству современным платформам: написали код, нажали F5, поставили брейкпоинт в C-коде, увидели спрайты в просмотрщике, проверили производительность профайлером.

Если вы серьёзно занимаетесь homebrew-разработкой для Game Boy или MSX — Emulicious должен быть в вашем арсенале. Он не заменит тестирование на реальном железе, но сделает разработку в десять раз быстрее и комфортнее.

Особая благодарность Michael Stegmaier (Calindro) за этот замечательный инструмент, созданный в свободное время и подаренный сообществу бесплатно . Поддержите проект — используйте его, сообщайте о багах, рассказывайте о нём другим !


P.S. Если вы только начинаете знакомство с разработкой под Game Boy, рекомендую начать с GBDK Starter Template от RednibCoding — там уже всё настроено для работы с Emulicious . Установите, нажмите F5 и сразу увидите результат.

P.P.S. Для разработки под MSX также есть поддержка, но имейте в виду, что некоторые продвинутые инструменты отладчика могут быть доступны не для всех платформ .