ВСТУПЛЕНИЕ: ОТ ГЛАЗ И КАЛЬКУЛЯТОРА К ГРАФИЧЕСКОМУ ИНТЕРФЕЙСУ
Помните классическую отладку на Spectrum? PRINT USR 0 для сброса, вставка HALT'ов в код, чтобы увидеть экран, и бесконечное выслеживание багов через дамп памяти в мониторе? А если нужно было отследить изменение регистра — только глазами и бумажкой.Потом пришли монстры вроде ALDEBUG (часть ALASM), STS или MONTA — они дали окна, регистры и точки останова. Но всё это было в рамках старого доброго 64-колоночного режима, где отладчик занимал полэкрана, а код — вторую половину. И переключение между ними было... ну вы помните.
А теперь представьте: вы сидите перед 4K-монитором, в левой части экрана у вас исходный код с подсветкой, справа — регистры и переменные, снизу — консоль, а ещё вы можете кликнуть мышкой на строку и сказать: "Останавливайся здесь". И всё это — для программы, которая будет работать на Z80 с частотой 3.5 МГц.
Знакомьтесь: DeZog — это не просто отладчик. Это портал из мира Visual Studio Code в мир процессора Z80. Самый мощный, гибкий и современный инструмент для отладки ретро-программ за всю историю спектрумостроения.
ЧТО ТАКОЕ DeZog И ЗАЧЕМ ОН НУЖЕН?
DeZog — это расширение для Visual Studio Code, которое превращает редактор в профессиональный отладчик для Z80. Разработано энтузиастом maziac (он же создатель Z80 Macro-Assembler).Если обычный ассемблер позволяет вам писать код, то DeZog позволяет вам видеть, как этот код выполняется внутри процессора, эмулятора или даже реального ZX Spectrum / Next.
КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ (ЧТО ОН ДАЁТ ПРОГРАММИСТУ)
- Точки останова (Breakpoints) — кликнули слева от строки — и выполнение остановится именно там. Поддерживаются условные брейкпоинты (остановиться, когда A=10).
- Пошаговое выполнение — Step Over (F10), Step Into (F11), Step Out (Shift+F11). Как в дорогих IDE.
- Обратная отладка (Reverse Debugging) — да-да, можно отмотать выполнение назад! Если пропустили момент, где всё сломалось — просто открутите несколько инструкций назад.
- Просмотр регистров — все регистры Z80 (AF, BC, DE, HL, IX, IY, SP, PC, флаги) в реальном времени, с обновлением при каждом шаге.
- Просмотр памяти — можно смотреть любые области RAM, включая экранные области и атрибуты. Даже в разных форматах: байты, слова, ASCII.
- Watch-переменные — добавили метку Score в список наблюдения — и видите её изменение по шагам.
- Code Coverage — подсвечивает строки кода, которые уже выполнялись. Видно, где программа побывала, а куда так и не зашла.
- Поддержка ZX Next — понимает спрайты, банки памяти, новые инструкции.
ИСТОРИЧЕСКИЙ КОНТЕКСТ: ЭВОЛЮЦИЯ ОТЛАДКИ НА SPECTRUM
| Параметр | ALDEBUG (1989) | STS (1990-е) | DeZog (2020-е) |
|---|---|---|---|
| Платформа | ZX Spectrum | ZX Spectrum | VS Code (Windows, macOS, Linux) |
| Интерфейс | Текстовый, 32/64 колонки | Текстовый, псевдографика | Графический, полноцветный, мышь |
| Точки останова | До 10 | До 16 | Не ограничено, условные |
| Просмотр кода | Дизассемблер | Дизассемблер | Исходный ассемблерный код с подсветкой |
| Reverse Debugging | Нет | Нет | Есть! |
| Интеграция | Только с ALASM | Отдельно | VS Code, Z80 Macro-Assembler, sjasmplus, z88dk |
| Целевая аудитория | Хакеры 80-х | Демосцена 90-х | Современные ретро-разработчики |
DeZog — это не прямой потомок ALDEBUG, но он вобрал в себя лучшие идеи всех отладчиков прошлого и умножил их на мощь современных ПК.
УСТАНОВКА И НАСТРОЙКА: СДЕЛАЙ РАЗ, ПОЛЬЗУЙСЯ ГОДАМИ
Установка расширения
- Запустите Visual Studio Code.
- Нажмите Ctrl+Shift+X (или иконку квадратиков слева).
- В поиске введите "DeZog".
- Найдите расширение от автора maziac (иконка с жучком и микросхемой) и нажмите Install.
Что ещё нужно?
DeZog — это отладчик, но он не содержит встроенного процессора. Ему нужно "железо" (реальное или виртуальное), на котором будет выполняться код. Поддерживаются четыре цели (remotes):- zsim — встроенный симулятор Z80 (не требует ничего, работает прямо в VS Code). Идеально для быстрого старта и отладки логики.
- ZEsarUX — мощный эмулятор Spectrum, подключается через протокол ZRCP.
- CSpect — эмулятор для Windows, отличный для ZX Next.
- ZX Next — реальное железо! Можно отлаживать программу прямо на реальном компьютере через последовательный порт.
Создание launch.json (самая важная часть)
Чтобы DeZog заработал, нужно настроить конфигурацию запуска. VS Code спросит об этом при первом запуске отладки. Вот типовой конфиг для работы со встроенным симулятором:
JSON:
{
"version": "0.2.0",
"configurations": [
{
"type": "dezog",
"request": "launch",
"name": "DeZog (zsim)",
// 1. ВЫБОР ЦЕЛИ
"remoteType": "zsim",
"zsim": {
// Можно оставить пустым
},
// 2. ОТКУДА БРАТЬ СИМВОЛЫ (ФАЙЛ ЛИСТИНГА)
"sjasmplus": [
{
"path": "${workspaceFolder}/main.list"
}
],
// 3. ЧТО ЗАГРУЖАТЬ
"load": "${workspaceFolder}/main.sna",
// 4. ВАЖНО: ГДЕ ВЕРШИНА СТЕКА?
"topOfStack": "stack_top",
// 5. ДОПОЛНИТЕЛЬНЫЕ ФИШКИ
"startAutomatically": false, // Остановиться на первой инструкции
"history": {
"reverseDebugInstructionCount": 10000, // ВКЛЮЧАЕМ МАГИЮ ОБРАТНОЙ ОТЛАДКИ
"codeCoverageEnabled": true
}
}
]
}
Разбор полётов:
- "sjasmplus" — DeZog должен знать, где лежит файл листинга (.list), который генерирует ваш ассемблер. Именно по нему он связывает адреса в памяти со строками исходника.
- "load" — что грузим (снапшот .sna, бинарник .bin, образ ленты .tap).
- "topOfStack" — критически важно для правильного отображения стека вызовов. Укажите метку, где объявлена вершина стека.
- "reverseDebugInstructionCount" — включает тот самый реверс-дебаг. Указывает, сколько последних инструкций хранить в буфере, чтобы можно было отмотать назад.
Пример для разных целей
Для CSpect (ZX Next):
JSON:
"remoteType": "cspect",
"cspect": {
"port": 5000 // Порт, который слушает CSpect
},
"load": "${workspaceFolder}/build/program.nex"
Для ZEsarUX:
JSON:
"remoteType": "zrcp",
"zrcp": {
"port": 10000 // Порт ZRCP в ZEsarUX
}
Для реального ZX Next:
JSON:
"remoteType": "zxnext",
"zxnext": {
"serial": "/dev/ttyUSB0" // Путь к serial-порту
}
ИНТЕРФЕЙС И РАБОЧИЙ ПРОЦЕСС
Как это выглядит в редакторе
Когда вы запускаете отладку (F5), VS Code преображается:- Панель управления (Debug Toolbar) — плавает поверх редактора. Кнопки: Continue (F5), Step Over (F10), Step Into (F11), Step Out (Shift+F11), Restart, Stop. А также Step Back и Reverse Continue — кнопки для обратной отладки!
- Область VARIABLES — показывает все регистры Z80: AF, BC, DE, HL, IX, IY, SP, PC, флаги (S, Z, H, P/V, N, C). Можно раскрыть каждый регистр и увидеть его значение в разных форматах (hex, dec, bin). Также показывает дизассемблированный код вокруг PC и содержимое стека.
- Область WATCH — сюда можно добавить любые метки из вашего кода (например, player_x, score) и следить за их изменением.
- Область BREAKPOINTS — список всех точек останова. Можно временно отключать, удалять, добавлять условия (например, A==10).
- Область MEMORY — можно добавить любое количество областей памяти для просмотра. Удобно смотреть на экранную область (16384), атрибуты или буфер спрайтов.
- Редактор кода — текущая строка подсвечена жёлтым. Строки, которые уже выполнялись (code coverage), подсвечены зелёным фоном. Можно навести мышку на любую метку и увидеть её текущее значение.
Основные действия
- Поставить точку останова — кликните слева от номера строки. Появится красный кружок.
- Условная точка останова — кликните правой кнопкой -> "Add Conditional Breakpoint" и введите условие, например: (A == 10) && (B > 5).
- Добавить переменную в Watch — выделите метку в коде, кликните правой кнопкой -> "Add to Watch".
- Посмотреть память — в палитре команд (Ctrl+Shift+P) выполните DeZog: Add Memory Viewer. Укажите адрес (например, 0x4000) и размер.
Это просто космос. Если вы прошли шагом дальше, чем нужно, или пропустили момент, когда испортился регистр, — не перезапускайте программу!Просто нажмите кнопку "Step Back" (или Shift+F11, если настроено), и DeZog отмотает выполнение на одну инструкцию назад. Можно отматывать, пока не увидите, где произошла ошибка. Это работает благодаря тому, что DeZog хранит историю состояний процессора (количество шагов задаётся в reverseDebugInstructionCount).
ДИРЕКТИВЫ И ИНТЕГРАЦИЯ
Как DeZog понимает ваш код
DeZog не компилирует код. Он полагается на файлы листинга, которые генерируют ассемблеры. Поддерживаются:- sjasmplus — самый популярный выбор. Генерирует .list файлы, которые DeZog отлично парсит.
- z88dk — компилятор Си. DeZog понимает его выходные форматы.
- z80asm — ассемблер из пакета z88dk.
Интеграция с другими расширениями
DeZog идеально работает в связке с:- Z80 Macro-Assembler — чтобы писать код с автодополнением.
- Z80 Instruction Set — чтобы видеть описание команд под курсором.
- Hex Hover Converter — чтобы видеть числа в разных системах счисления.
- ASM Code Lens — для дополнительной навигации.
СРАВНЕНИЕ: DeZog VS КЛАССИЧЕСКИЕ ОТЛАДЧИКИ
| Характеристика | ALDEBUG (ALASM) | STS | MONTA | DeZog |
|---|---|---|---|---|
| Год | 1989 | 1993 | ~1990 | 2020+ |
| Платформа | Spectrum | Spectrum | Spectrum | VS Code (Win/Mac/Linux) |
| Интерфейс | Текстовый, мерцающий | Текстовый, 2 окна | Текстовый | Графический, мышь, вкладки |
| Точки останова | Да (до 10) | Да (до 16) | Да | Неограниченно, условные |
| Просмотр регистров | Да | Да | Да | Да, с автообновлением |
| Просмотр памяти | Да, по одному адресу | Да, окно | Да | Множество окон, любой формат |
| Символы (метки) | Из ALASM | Из файла символов | Вручную | Из листинга ассемблера, автоматически |
| Code Coverage | Нет | Нет | Нет | Да (подсветка исполненных строк) |
| Reverse Debugging | Нет | Нет | Нет | ДА! |
| Поддержка ZX Next | Нет | Нет | Нет | Полная (спрайты, банки) |
| Стоимость | 75 руб (было) | Freeware | Freeware | Бесплатно (Open Source) |
ПЛЮСЫ И МИНУСЫ
Плюсы (Почему это гениально)
- Уровень комфорта XXI века: Вы отлаживаете ретро-код, сидя в современном редакторе с подсветкой, мышкой и вкладками. Никакого мерцания и 64-колоночного текста.
- Условные брейкпоинты: (HL == 0x4000) && (A > 5) — остановка по сложному условию. Для сложных багов это спасение.
- Обратная отладка: Перестал быть актуальным "HALT и перезапуск". Просто отмотал назад и увидел ошибку.
- Code Coverage: Мгновенно видно, какие части кода выполняются, а какие — мёртвый груз.
- Поддержка реального железа: Отладка прямо на ZX Next — это вообще за гранью добра и зла.
- Интеграция с VS Code: Всё остальное (Git, задачи, терминал) тоже под рукой.
- Активная разработка: Автор (maziac) постоянно обновляет и улучшает расширение.
Минусы (О чём нужно знать)
- Сложность настройки: launch.json, файлы листинга, пути к эмуляторам — новичку придётся повозиться. Но это делается один раз на проект.
- Требует современного ПК: Нужен компьютер, где работает VS Code (хотя сейчас это почти любой).
- Нет встроенного ассемблера: DeZog только отлаживает. Компилировать код нужно отдельно (sjasmplus и т.д.).
- Для zsim нет графики: Встроенный симулятор эмулирует только процессор, не видео. Для отладки графики нужно подключать полноценный эмулятор (ZEsarUX/CSpect).
СОВЕТЫ БЫВАЛОГО (ОПТИМИЗАЦИЯ РАБОТЫ)
- Всегда включайте генерацию листинга в вашем ассемблере. Для sjasmplus это флаг --lst. Без него DeZog будет показывать только дизассемблер, а не ваш красивый исходный код.
- Правильно указывайте вершину стека. Если "topOfStack" указан неверно, стек вызовов будет отображаться некорректно, и вы не увидите, откуда пришла программа.
- Используйте условные брейкпоинты для поиска багов. Например, если игра вылетает, когда счёт становится больше 1000, поставьте брейкпоинт на изменение переменной score с условием score > 1000.
- Сохраняйте историю побольше. Если позволяет память, ставьте reverseDebugInstructionCount в 50000-100000. Тогда можно отматывать далеко назад.
- Смотрите память в удобном формате. Для экранной области удобно выбрать отображение "Byte" (байты) или "ASCII". Для таблиц спрайтов — "Word" (слова).
- Комбинируйте с Z80 Macro-Assembler. Вместе они дают полный цикл: написание кода + отладка в одном окне.
ЗАКЛЮЧЕНИЕ: ОТЛАДКА БУДУЩЕГО ДЛЯ КОМПЬЮТЕРА ПРОШЛОГО
DeZog — это, без преувеличения, технологический прорыв в мире ретро-разработки. Он берёт всё лучшее от классических отладчиков (ALDEBUG, STS) и переносит это в современный мир, добавляя возможности, о которых спектрумисты 80-х могли только мечтать.Условные брейкпоинты, обратная отладка, code coverage, поддержка реального ZX Next — это инструменты уровня профессиональной разработки ПО, которые теперь доступны каждому, кто пишет под Z80.
Да, его настройка требует некоторых усилий. Но эти усилия окупаются стократно, когда вы ловите сложный баг за 5 минут вместо 5 часов.
Если ALASM когда-то дал спектрумистам "молоток и гаечный ключ" для сборки программ, то DeZog даёт нам целую рентген-установку, чтобы заглянуть внутрь работающего кода и увидеть, что же там на самом деле происходит.
Хотите писать сложные проекты для Spectrum и не сойти с ума при отладке? Ставьте DeZog.
Ссылка на аддон - DeZog
P.S. Если вы только начинаете, попробуйте конфигурацию с "remoteType": "zsim". Она не требует установки эмуляторов и позволит быстро освоиться с интерфейсом. А когда поймёте, как это работает, подключайтесь к ZEsarUX или CSpect и отлаживайте уже с графикой.
P.P.S. Автору расширения, maziac, можно смело ставить памятник при жизни. За то, что сделал отладку под Spectrum такой, какой она должна была быть изначально.