ВСТУПЛЕНИЕ: ОТ РУЧНОЙ НАСТРОЙКИ К "ВСЁ ВКЛЮЧЕНО"
Помните классический путь спектрумиста, решившего заняться разработкой? Сначала нужно найти компилятор — sjasmplus, pasmo или z88dk. Потом скачать эмулятор — Fuse, ZEsarUX или CSpect. Потом прописать пути, настроить переменные окружения, разобраться с версиями зависимостей. А если вы переходите с Windows на macOS — всё по новой. А если проект старый и требует конкретной версии ассемблера — начинается пляска с бубном.И тут, как гром среди ясного неба, появляется Zx-Ide.
Zx-Ide — это не просто расширение для VS Code. Это революционный подход к организации рабочего окружения для разработки под ZX Spectrum. Он использует контейнеризацию (Docker) и делает так, что всё необходимое для компиляции и отладки приезжает к вам автоматически, в изолированном контейнере, без захламления основной системы.
Разработчик: dgzornoza.
Платформа: Visual Studio Code.
Философия: "Один раз настроил контейнер — и проекты собираются везде одинаково".
ЧТО ТАКОЕ ZX-IDE И ЗАЧЕМ ОН НУЖЕН?
Zx-Ide — это комплексное расширение для VS Code, которое автоматически создаёт изолированную среду разработки для проектов под ZX Spectrum внутри Docker-контейнера.
КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ (ЧТО ОН ДАЁТ ПРОГРАММИСТУ)
- Готовое окружение "из коробки" — в контейнере уже установлены: sjasmplus, pasmo, z88dk, утилиты для создания TAP/TZX, и всё необходимое.
- Кроссплатформенность — проект будет собираться одинаково на Windows, macOS и Linux. Никаких "а у меня не компилируется".
- Изоляция от системы — никакого мусора в реестре, PATH и папках программы. Всё живёт в контейнере.
- Воспроизводимость сборок — можно зафиксировать версию контейнера, и даже через 10 лет проект соберётся один-в-один.
- Автоматическое создание проекта — мастер проектов создаёт структуру папок и базовые файлы (main.asm, Makefile, .vscode/tasks.json, .vscode/launch.json).
- Интеграция с DeZog — в новых версиях предустановлен отладчик, так что можно сразу отлаживать код.
- Zero-install для коллег — скинул папку проекта другому человеку, он открыл её в VS Code, подтвердил "Reopen in Container" — и работает.
ИСТОРИЧЕСКИЙ КОНТЕКСТ: ЭВОЛЮЦИЯ СРЕД РАЗРАБОТКИ
| Параметр | ALASM (1989) | Классический подход (2000-е) | Zx-Ide (2020-е) |
|---|---|---|---|
| Платформа | ZX Spectrum | Windows/Linux/macOS | VS Code + Docker |
| Установка инструментов | Встроены в дискету | Ручной поиск, скачивание, прописывание путей | Автоматически через контейнер |
| Зависимости | Только сам ALASM | sjasmplus, z88dk, эмуляторы, утилиты | Всё внутри контейнера |
| Переносимость проекта | Только с дискетой | Зависит от версий на ПК | Абсолютная (образ Docker) |
| Время настройки нового ПК | 5 минут (вставить дискету) | Часы, иногда дни | 5 минут (установить Docker + VS Code) |
| Совместимость версий | Одна версия на всю жизнь | Ад с версиями библиотек | Фиксация версии в Dockerfile |
Zx-Ide — это эволюционный скачок. Он берёт идею "всё включено" от старых Spectrum-ассемблеров (где инструменты были на одном диске) и переносит её в современный мир контейнеров.
УСТАНОВКА И НАСТРОЙКА: ПЯТЬ ШАГОВ К ИДЕАЛЬНОЙ СРЕДЕ
Предварительные требования
- Visual Studio Code — последняя версия.
- Docker Desktop(или Docker Engine + Docker Compose).
- Windows: Docker Desktop с поддержкой WSL2.
- macOS: Docker Desktop.
- Linux: Docker Engine + docker-compose (или Podman с поддержкой Docker API).
Установка расширения
- Запустите Visual Studio Code.
- Нажмите Ctrl+Shift+X (или иконку квадратиков слева).
- В поиске введите "Zx-Ide".
- Найдите расширение от автора dgzornoza (иконка с красным логотипом Spectrum) и нажмите Install.
Создание нового проекта (мастер)
- Нажмите F1 (или Ctrl+Shift+P), чтобы открыть палитру команд.
- Введите и выполните команду: ZxIde: Create new project.
- Мастер задаст несколько вопросов:
- Тип проекта: Zx Spectrum (или другие, если поддерживаются).
- Язык/инструментарий: sjasmplus, pasmo или z88dk.
- Имя проекта: например, MyFirstGame.
- Папка для проекта: выберите, куда сохранить.
- Мастер создаст структуру проекта и откроет её в новом окне.
Открытие проекта в контейнере
- В новом окне проекта снова откройте палитру команд (F1).
- Выполните команду: Dev Containers: Reopen in Container.
- VS Code начнёт сборку контейнера:
- Скачивается базовый образ (обычно на основе Debian/Ubuntu).
- Устанавливаются все необходимые инструменты (sjasmplus, z88dk, make, git и т.д.).
- Это занимает 3-10 минут при первом запуске (зависит от скорости интернета).
- После успешной сборки VS Code переподключится к проекту, работающему внутри контейнера.
- В левом нижнем углу появится индикатор: "Dev Container: Zx-Ide".
СТРУКТУРА ПРОЕКТА (ЧТО МАСТЕР НАГЕНЕРИЛ)
Код:
MyFirstGame/
├── .devcontainer/ # Конфигурация контейнера (сердце проекта)
│ ├── devcontainer.json # Настройки для VS Code внутри контейнера
│ └── Dockerfile # Инструкция по сборке образа
├── .vscode/ # Конфигурация VS Code
│ ├── launch.json # Настройки запуска отладки (DeZog)
│ └── tasks.json # Задачи сборки (Ctrl+Shift+B)
├── src/ # Исходные коды
│ ├── main.asm # Пример программы на ассемблере
│ ├── main.bas # Если выбран Boriel Basic
│ └── main.c # Если выбран z88dk
├── Makefile # Автоматизация сборки
└── README.md # Описание проекта
Ключевые файлы: что внутри?
.devcontainer/Dockerfile (упрощённо):
Код:
FROM debian:bullseye-slim
# Устанавливаем зависимости
RUN apt-get update && apt-get install -y \
make git curl wget \
build-essential
# Устанавливаем sjasmplus
RUN wget https://github.com/z00m128/sjasmplus/releases/download/v1.20.3/sjasmplus-1.20.3-linux64.tar.gz \
&& tar -xzf sjasmplus-*.tar.gz \
&& cp sjasmplus /usr/local/bin/
# Устанавливаем z88dk
RUN wget https://github.com/z88dk/z88dk/releases/download/v2.3/z88dk-2.3-linux-x64.tgz \
&& tar -xzf z88dk-*.tgz \
&& cd z88dk \
&& make install
# Устанавливаем дополнительные утилиты (bin2tap, etc)
RUN git clone https://github.com/utility_library.git \
&& cd utility_library \
&& make install
.devcontainer/devcontainer.json:
JSON:
{
"name": "Zx-Ide Project",
"build": {
"dockerfile": "Dockerfile"
},
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [
"maziac.dezog",
"maziac.z80-macroassembler",
"maziac.hex-hover-converter",
"rtorralba.boriel-basic"
],
"remoteUser": "vscode",
"postCreateCommand": "echo 'Контейнер готов к работе!'"
}
РАБОЧИЙ ПРОЦЕСС (ДЕНЬ ОПЛАТЫ)
Пишем код
Открываем src/main.asm и пишем классику:
Assembler Z80:
org 32768
Start:
; Чистим экран
ld hl, 16384
ld de, 16385
ld bc, 6911
ld (hl), 0
ldir
; Выводим сообщение
ld hl, HelloMsg
call PrintString
jr $
PrintString:
ld a, (hl)
or a
ret z
rst 16
inc hl
jr PrintString
HelloMsg:
db "Hello from Zx-Ide!", 0
Сборка проекта
Нажимаем Ctrl+Shift+B (или ⇧+⌘+B на macOS).Запускается задача сборки, описанная в .vscode/tasks.json:
- Вызывается sjasmplus (или другой компилятор) с нужными флагами.
- Генерируется .list файл (для отладки).
- Создаётся .sna (снапшот) или .tap (лента).
- В терминале VS Code видим вывод компилятора.
JSON:
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "sjasmplus",
"args": [
"--lst=main.list",
"--sna=main.sna",
"src/main.asm"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}
Отладка
Нажимаем F5.Запускается отладчик, настроенный в launch.json. Благодаря тому, что в контейнере уже есть DeZog, вы сразу попадаете в режим отладки:
- Программа загружается во встроенный симулятор zsim (или подключается к эмулятору).
- Выполнение останавливается на первой инструкции.
- Слева — регистры, справа — код, снизу — консоль.
- Ставим точки останова, нажимаем F10, F11 — идёт отладка.
JSON:
{
"version": "0.2.0",
"configurations": [
{
"type": "dezog",
"request": "launch",
"name": "Debug (zsim)",
"remoteType": "zsim",
"sjasmplus": [
{
"path": "${workspaceFolder}/main.list"
}
],
"load": "${workspaceFolder}/main.sna",
"topOfStack": "stack_top",
"startAutomatically": false
}
]
}
Тестирование в эмуляторе
Если нужно проверить графику и звук, можно настроить запуск внешнего эмулятора:- Добавить задачу в tasks.json для запуска Fuse, ZEsarUX или CSpect с загруженным файлом.
- Или настроить вторую конфигурацию в launch.json для подключения к уже запущенному эмулятору (через ZRCP для ZEsarUX или порт для CSpect).
ВНУТРЕННЕЕ УСТРОЙСТВО: ЧТО ВНУТРИ КОНТЕЙНЕРА?
Состав типового контейнера Zx-Ide
| Компонент | Версия (пример) | Назначение |
|---|---|---|
| Базовый образ | Debian 11 (bullseye) | Стабильная основа |
| sjasmplus | 1.20.3 | Ассемблер Z80 (основной) |
| pasmo | 0.5.5 | Альтернативный ассемблер |
| z88dk | 2.3 | Компилятор Си для Z80 |
| make | 4.3 | Автоматизация сборки |
| git | 2.30 | Контроль версий |
| bin2tap | latest | Конвертер бинарников в TAP |
| bin2sna | latest | Конвертер в снапшоты |
| DeZog | latest (устанавливается как расширение) | Отладчик |
| Z80 Macro-Assembler | latest | Подсветка и автодополнение |
Как это работает под капотом
- Dockerfile описывает, как собрать образ с нуля.
- devcontainer.json говорит VS Code, как подключиться к этому контейнеру и какие расширения в нём установить.
- При выполнении Reopen in Container:
- VS Code запускает контейнер.
- Монтирует папку проекта внутрь контейнера.
- Устанавливает внутрь контейнера свой сервер (VS Code Server).
- Подключается к нему через защищённый канал.
- Всё, что вы видите в VS Code — редактор, терминал, отладчик — на самом деле работает внутри контейнера, но вы этого не замечаете.
СРАВНЕНИЕ: ZX-IDE VS КЛАССИЧЕСКАЯ НАСТРОЙКА
| Критерий | Классический подход | Zx-Ide |
|---|---|---|
| Время первой настройки | Часы (поиск, установка, пути) | 10-15 минут (с учётом скачивания образа) |
| Перенос проекта на другой ПК | "А у тебя какая версия sjasmplus?" | Скопировал папку → Reopen in Container |
| Захламление системы | Мусор в PATH, реестре, папках | Ноль (всё в контейнере) |
| Обновление инструментов | Ручное скачивание, риск сломать старые проекты | Новый проект → новый контейнер с новыми версиями. Старые проекты не трогаем. |
| Работа без интернета | Можно (если всё уже установлено) | Требуется интернет только для первого скачивания образа. Дальше — офлайн. |
| Совместная работа | "Пришли мне свою папку с компиляторами" | Пришли ссылку на GitHub, я открыл в контейнере |
| Поддержка Windows/macOS/Linux | На каждом нужно ставить по-разному | Абсолютно одинаково |
ПЛЮСЫ И МИНУСЫ
Плюсы (Почему это гениально)
- Чистота системы: Никаких танцев с PATH и зависимостями. Удалил папку проекта — удалил и контейнер (опционально). Система как новенькая.
- Воспроизводимость: Проект, созданный сегодня, будет собираться точно так же через 5 лет, если зафиксировать версию образа.
- Одинаковость для всей команды: Нет больше "у меня компилируется, а у тебя нет". У всех один образ.
- Быстрый старт для новичков: Не нужно знать, что такое sjasmplus и как его ставить. Установил Docker + VS Code + расширение — и вперёд.
- Интеграция с DeZog: Отладка настроена сразу.
- Поддержка трёх языков: sjasmplus, pasmo, z88dk — под любой вкус.
- Готовые конфиги: Мастер создаёт launch.json, tasks.json, Makefile — можно сразу работать.
Минусы (О чём нужно знать)
- Требует Docker: На слабых машинах или в виртуальных окружениях Docker может тормозить. На современных ПК — незаметно.
- Первый запуск долгий: Скачивание образа и установка инструментов занимает время (3-10 минут). Но это один раз на проект.
- Размер образа: Образ может весить 500 МБ - 1 ГБ. Но это плата за изоляцию.
- Сложность кастомизации: Если вам нужно добавить в контейнер свою утилиту, придётся править Dockerfile. Но это не сложнее, чем ставить программу в Linux.
- Привязка к пути: Если переместить папку проекта, контейнер перестанет работать (нужно удалить старый и создать новый). Автор предупреждает об этом.
- Не для пуристов: Тем, кто любит "реальное железо" и ручную настройку каждого байта, контейнеры могут показаться избыточными.
СОВЕТЫ БЫВАЛОГО (КАК ВЫЖАТЬ МАКСИМУМ)
- Фиксируйте версии в Dockerfile. Если проект важный, не ставьте latest для инструментов. Пропишите конкретную версию sjasmplus и z88dk, чтобы через год ничего не отвалилось.
- Используйте .dockerignore. Чтобы в образ не попадали временные файлы и бинарники, создайте .dockerignore и пропишите там build/, *.bin, *.sna.
- Для больших проектов делайте многоэтапную сборку. Если ваш проект требует компиляции дополнительных утилит, используйте multi-stage builds в Dockerfile, чтобы итоговый образ был меньше.
- Кешируйте образы. После первой сборки образ останется на диске. Следующие проекты будут открываться быстрее, так как Docker использует кеш.
- Чистите неиспользуемые контейнеры. Команда docker container prune удалит остановленные контейнеры, которые больше не нужны.
- Интегрируйте с GitHub Actions. Можно настроить автоматическую сборку проекта в контейнере на CI-сервере — тогда гарантия, что на вашем ПК и на сервере сборка будет идентичной.
- Для z88dk используйте готовые библиотеки. В контейнере уже есть все стандартные библиотеки z88dk для Spectrum — не нужно их копировать в проект.
ЭКОСИСТЕМА: С ЧЕМ ДРУЖИТ ZX-IDE
Zx-Ide отлично работает в связке с:| Расширение/Инструмент | Назначение |
|---|---|
| DeZog | Отладка (уже встроена в контейнер) |
| Z80 Macro-Assembler | Подсветка, автодополнение, навигация |
| Z80 Instruction Set | Подсказки по командам |
| Hex Hover Converter | Перевод чисел при наведении |
| GitLens | Работа с Git внутри контейнера |
| Docker | Управление контейнерами |
| ZEsarUX / CSpect | Внешние эмуляторы (запускаются на хосте, подключаются через сеть) |
ЗАКЛЮЧЕНИЕ: НОВЫЙ СТАНДАРТ РЕТРО-РАЗРАБОТКИ
Zx-Ide — это не просто очередное расширение для VS Code. Это философский сдвиг в подходе к созданию окружения для ретро-программирования.Он решает проблему, которая мучила спектрумистов десятилетиями: "как настроить среду, чтобы всё работало и не рассыпалось при смене компьютера или обновлении инструментов".
Используя мощь Docker-контейнеров, Zx-Ide делает разработку под ZX Spectrum такой же простой и воспроизводимой, как разработка под современные платформы. Сделал проект → упаковал в контейнер → отправил другу → у друга всё собралось с первого раза. Мечта, ставшая реальностью.
Да, для работы с ним нужно немного привыкнуть к контейнерной модели. Да, первый запуск требует терпения. Но когда вы попробуете, как это удобно — возвращаться к ручной установке компиляторов уже не захочется.
Если ALASM когда-то дал спектрумистам "молоток и гаечный ключ", а DeZog — "рентгеновский аппарат" для заглядывания внутрь кода, то Zx-Ide даёт нам целый "стерильный хирургический блок", где каждый инструмент лежит на своём месте, в идеальной чистоте, и никогда не подведёт.
Попробуйте — и ваш следующий проект для ZX Spectrum начнётся не с часовой настройки окружения, а с одной команды и чашки кофе, пока Docker скачивает образ.
Ссылка на аддон - ZX-IDE
*P.S. Автору расширения, dgzornoza, огромное спасибо за этот инструмент. Он сделал для ретро-сообщества то, что никто не решался сделать — применил современные практики DevOps к разработке под легендарный компьютер 80-х.*
P.P.S. Если у вас старый компьютер и Docker тормозит — не расстраивайтесь. Для простых проектов можно не использовать контейнер, а установить инструменты вручную. Но для серьёзной работы или командных проектов — Zx-Ide вне конкуренции.