ВСТУПЛЕНИЕ: БРИТАНСКАЯ ЛЕГЕНДА ЗАСЛУЖИВАЕТ СОВРЕМЕННЫХ ИНСТРУМЕНТОВ
Знаете ли вы, что в конце 80-х существовал компьютер, который должен был стать убийцей ZX Spectrum? Он назывался SAM Coupé — машина на базе процессора Z80B с частотой 6 МГц, 256-512 КБ ОЗУ, графикой 512×192 и звуком на трёх каналах AY-3-8912. Британская компания Miles Gordon Technology создала его как эволюционное развитие Spectrum, сохранив обратную совместимость, но добавив мощь, недоступную обычным спектрумам .И хотя SAM Coupé не смог завоевать массовый рынок, у него осталось преданное сообщество разработчиков и фанатов. И для них есть отличная новость: теперь писать под SAM Coupé можно в современнейшем VS Code, используя расширение vscode-pyz80 от разработчика simonowen .
vscode-pyz80 — это не просто подсветка синтаксиса. Это полноценная обёртка вокруг ассемблера pyz80 (от Andrew Collier), которая позволяет компилировать код, запускать его в эмуляторе и даже отправлять на реальный SAM Coupé по сети — и всё это прямо из редактора, горячими клавишами .
ЧТО ТАКОЕ VSCode-PYZ80 И ЗАЧЕМ ОН НУЖЕН?
vscode-pyz80 — это расширение для Visual Studio Code, которое добавляет поддержку ассемблера pyz80, предназначенного для разработки под компьютер SAM Coupé .
КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ (ЧТО ОН ДАЁТ ПРОГРАММИСТУ)
- Подсветка синтаксиса Z80 — все команды и директивы pyz80 разноцветные и наглядные .
- Встроенный ассемблер pyz80 — расширение включает последнюю версию pyz80, так что ничего дополнительно скачивать не нужно .
- Горячие клавиши для сборки и запуска:
- F10 — собрать исходник в образ диска SAM (готовый .dsk или .mgt) .
- Ctrl+F10 — собрать и сразу запустить в эмуляторе SimCoupe .
- Ctrl+Shift+F10 — собрать и отправить на реальный SAM Coupé по сети (через TrinLoad) .
- Автоматическое добавление SAMDOS v2 — чтобы образ диска был загрузочным, расширение первым файлом добавляет SAMDOS .
- Генерация symbol map — создаёт файл символов, совместимый с отладчиком SimCoupe v1.1+ .
- Поддержка workspace settings — можно настроить под каждый проект свои параметры (главный файл, пред- и пост-обработка) .
- BASENAME-подстановка — удобная замена имени файла в настройках .
ИСТОРИЧЕСКИЙ КОНТЕКСТ: ПОЧЕМУ SAM COUPÉ И PYZ80?
| Параметр | ZX Spectrum (классика) | SAM Coupé |
|---|---|---|
| Процессор | Z80A @ 3.5 МГц | Z80B @ 6 МГц |
| ОЗУ | 48/128 КБ | 256/512 КБ |
| Графика | 256×192, атрибуты | 512×192, 4 цвета на пиксель (режим 4), 256×192 с 16 цветами на линию (режим 8) |
| Звук | Beeper | AY-3-8912 (3 канала) |
| Дисковод | Опционально | Встроенный 3.5" дисковод |
| ОС | Sinclair BASIC | SAMDOS / MasterDOS |
pyz80 — это ассемблер, написанный на Python, который специально создан для генерации кода под SAM Coupé. Он понимает форматы дисков SAM, умеет создавать загрузочные образы и поддерживает все особенности этой платформы .
А vscode-pyz80 берёт этот ассемблер и интегрирует его в VS Code так, что процесс разработки становится таким же удобным, как и для современных платформ .
СТАНОВКА И НАСТРОЙКА: ШЕСТЬ ШАГОВ К САМОЙ МОЩНОЙ Z80-МАШИНЕ
Шаг 1: Установка Visual Studio Code
Если у вас ещё нет VS Code — скачайте с code.visualstudio.com и установите. Это бесплатно и кроссплатформенно.
Шаг 2: Установка расширения vscode-pyz80
- Запустите Visual Studio Code.
- Нажмите Ctrl+Shift+X (или иконку квадратиков слева), чтобы открыть вкладку Extensions.
- В поиске введите "pyz80".
- Найдите расширение от автора simonowen и нажмите Install .
Шаг 3: Установка Python (обязательно!)
Расширение использует pyz80, который написан на Python и требует интерпретатора Python версии 3.6 или выше .- Windows: скачайте с python.org и при установке обязательно отметьте "Add Python to PATH".
- macOS: brew install python3 (если есть Homebrew) или скачайте с официального сайта.
- Linux: sudo apt install python3 (или через менеджер пакетов вашего дистрибутива).
Шаг 4: Установка SimCoupe (для запуска в эмуляторе)
Если вы хотите пользоваться магией Ctrl+F10 и запускать код в эмуляторе, скачайте SimCoupe v1.1 или новее .- Официальный сайт: simcoupe.org
- Репозиторий на GitHub: github.com/simonowen/simcoupe
Шаг 5: Установка SAMdisk (для отправки на реальное железо)
Если вы счастливый обладатель реального SAM Coupé с сетевой картой и TrinLoad, вам понадобится SAMdisk v4 или новее .- Сайт: simonowen.com/samdisk/
- Эта утилита позволяет записывать образы дисков на реальные дискеты или отправлять их по сети.
Шаг 6: Настройка путей (если программы не в PATH)
Расширение попытается найти pyz80, simcoupe и samdisk в вашем системном PATH. Если они установлены в нестандартных местах, нужно прописать пути в настройках VS Code .Откройте настройки: File -> Preferences -> Settings (или Ctrl+,), найдите раздел pyz80 и укажите:
| Параметр | Описание | Пример (Windows) | Пример (macOS/Linux) |
|---|---|---|---|
| pyz80.path | Путь к pyz80.py | C:\\pyz80\\pyz80.py | /usr/local/bin/pyz80.py |
| pyz80.python | Путь к интерпретатору Python | C:\\Python39\\python.exe | /usr/bin/python3 |
| pyz80.simcoupe | Путь к SimCoupe | C:\\SimCoupe\\simcoupe.exe | /Applications/SimCoupe.app/Contents/MacOS/SimCoupe |
| pyz80.samdisk | Путь к SAMdisk | C:\\SAMdisk\\samdisk.exe | /usr/local/bin/samdisk |
Совет: Если вы работаете над разными проектами, лучше указывать эти пути не в глобальных настройках, а в workspace settings (в папке .vscode конкретного проекта). Тогда настройки можно будет сохранить в репозитории .
СТРУКТУРА ПРОЕКТА И НАСТРОЙКИ WORKSPACE
Для максимального удобства автор рекомендует использовать workspace (папку проекта), а не просто открывать отдельные файлы .Пример типовой структуры:
Код:
MySamProject/
├── .vscode/
│ └── settings.json # Настройки проекта (pyz80)
├── src/
│ ├── main.asm # Главный исходник
│ ├── graphics.asm # Графические процедуры
│ └── data.asm # Данные
├── assets/
│ ├── sprites/ # Спрайты (исходники)
│ └── music/ # Музыка (исходники)
├── build/ # Сюда будут генерироваться .dsk/.mgt
└── README.md
Настройки .vscode/settings.json
В этом файле можно переопределить поведение расширения под конкретный проект :
JSON:
{
"pyz80.mainsource": "src/main.asm", // Главный файл (всегда собирать его)
"pyz80.extraopts": "--syntax=f --lst", // Доп. опции для pyz80
"pyz80.prebuild": "python tools/convert_gfx.py", // Запустить перед сборкой
"pyz80.postbuild": "python tools/make_pack.py", // Запустить после сборки
"pyz80.samdiskArgs": ["--boot=master"] // Аргументы для samdisk
}
ВАЖНО: В настройках prebuild, postbuild и extraopts можно использовать подстановку _BASENAME_. Например, если ваш главный файл называется mygame.asm, то _BASENAME_ заменится на mygame. Это удобно для генерации файлов с именами, производными от имени проекта .
РАБОЧИЙ ПРОЦЕСС (ТРИ РЕЖИМА РАБОТЫ)
Шаг 1: Пишем код
Создаём файл main.asm (или используем любой .asm). Расширение автоматически включит подсветку синтаксиса для Z80 и директив pyz80.
Шаг 2: Собираем (три варианта)
Вариант А: Просто собрать (F10)Нажимаем F10. Расширение:
- Запускает pyz80 с текущим (или указанным в mainsource) файлом.
- Создаёт образ диска SAM (обычно .dsk или .mgt).
- Автоматически добавляет в начало образа SAMDOS v2, чтобы диск был загрузочным .
- Генерирует symbol map для отладчика SimCoupe .
Вариант Б: Собрать и запустить в SimCoupe (Ctrl+F10)
Нажимаем Ctrl+F10. Расширение:
- Выполняет сборку (как в варианте А).
- Запускает SimCoupe, автоматически загружая в него созданный образ диска .
- Благодаря symbol map, в отладчике SimCoupe вы увидите не просто адреса, а имена ваших меток .
Нажимаем Ctrl+Shift+F10. Расширение:
- Выполняет сборку.
- Использует SAMdisk для отправки образа на реальный SAM Coupé по сети (через TrinLoad) .
- Ваша программа запускается на реальном железе!
ПРОДВИНУТЫЙ РЕЖИМ: КАСТОМНЫЕ TASKS ДЛЯ МАКСИМАЛЬНОЙ ГИБКОСТИ
Если встроенных возможностей расширения недостаточно (например, нужен сложный Makefile), можно отключить встроенные хоткеи и использовать стандартную систему задач VS Code .
Пример .vscode/tasks.json
JSON:
{
"version": "2.0.0",
"options": {
"env": {
"PYZ80": "${config:pyz80.path}",
"PYTHON": "${config:pyz80.python}",
"SIMCOUPE": "${config:pyz80.simcoupe}",
"SAMDISK": "${config:pyz80.samdisk}"
}
},
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "make",
"windows": {
"command": ".\\make.bat"
},
"args": [],
"problemMatcher": ["$pyz80"],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Build and SimCoupe",
"type": "shell",
"command": "make",
"windows": {
"command": ".\\make.bat"
},
"args": ["run"],
"problemMatcher": ["$pyz80"]
},
{
"label": "Build and TrinLoad",
"type": "shell",
"command": "make",
"windows": {
"command": ".\\make.bat"
},
"args": ["net"],
"problemMatcher": ["$pyz80"]
}
]
}
Биндинг на клавиши (keybindings.json)
Чтобы повесить задачи на привычные F5/Ctrl+F5, добавьте в keybindings.json :
JSON:
[
{
"key": "f5",
"command": "workbench.action.tasks.runTask",
"args": "Build and SimCoupe",
"when": "editorLangId == pyz80"
},
{
"key": "ctrl+f5",
"command": "workbench.action.tasks.runTask",
"args": "Build and TrinLoad",
"when": "editorLangId == pyz80"
}
]
СРАВНЕНИЕ: vscode-pyz80 VS ОБЫЧНАЯ РАЗРАБОТКА ПОД SAM
| Критерий | Традиционный подход | vscode-pyz80 |
|---|---|---|
| Редактор кода | Любой текстовый редактор | VS Code с подсветкой и автодополнением |
| Сборка | Команда вручную: python pyz80.py main.asm | Одна клавиша F10 |
| Создание загрузочного диска | Ручное копирование SAMDOS, настройка | Автоматически |
| Запуск в эмуляторе | Запустить SimCoupe, вручную загрузить диск | Ctrl+F10 — всё сразу |
| Отладка с символами | Генерировать map отдельно, загружать вручную | Map генерируется автоматически |
| Запуск на реальном железе | Скопировать дискету, вставить в SAM | Ctrl+Shift+F10 — отправка по сети |
| Предобработка данных | Отдельные скрипты | Настройка prebuild прямо в проекте |
ПЛЮСЫ И МИНУСЫ
Плюсы (Почему это must-have для SAM-разработчика)
- Полная интеграция: от кода до запуска на реальном железе — три клавиши .
- Всё включено: pyz80 уже внутри расширения, ничего не надо скачивать отдельно .
- Автоматический SAMDOS: образ диска получается сразу загрузочным .
- Поддержка отладки: symbol map для SimCoupe генерируется автоматически .
- Гибкость: можно использовать и встроенные хоткеи, и кастомные tasks для сложных проектов .
- Подстановка BASENAME: удобно для генерации имён файлов .
- Кроссплатформенность: работает на Windows, macOS, Linux .
Минусы (О чём нужно знать)
- Узкая ниша: только для SAM Coupé. Если вы пишете под обычный Spectrum, это расширение не для вас.
- Требует Python: нужен интерпретатор Python 3.6+ .
- Настройка путей: если программы не в PATH, придётся прописывать пути вручную .
- Мало звёзд на GitHub: всего 2 звезды на момент написания . Но это не показатель качества, а следствие узости ниши.
- Документация только на английском: для русскоязычных пользователей может быть барьер.
СОВЕТЫ БЫВАЛОГО (ОПТИМИЗАЦИЯ РАБОТЫ)
- Используйте workspace settings. Не пишите пути к инструментам в глобальных настройках — кладите их в .vscode/settings.json проекта. Тогда при клонировании репозитория всё будет работать у всех .
- Настройте mainsource. Если проект состоит из нескольких файлов, укажите главный файл в настройках. Тогда даже если вы редактируете include-файл, F10 будет собирать весь проект, а не только текущий файл .
- Используйте prebuild для конвертации ресурсов. Графику и музыку удобно хранить в исходных форматах (например, картинки BMP), а перед сборкой автоматически конвертировать в данные для ассемблера через prebuild .
- Подставка BASENAME — ваш друг. Если вы генерируете несколько файлов (например, main.bin, main.sym, main.dsk), используйте _BASENAME_ в настройках, чтобы не дублировать имена .
- Для сложных проектов переходите на Makefile. Когда проект перерастает простую схему, используйте кастомные tasks и Makefile — это даст полный контроль над процессом сборки .
ЗАКЛЮЧЕНИЕ: SAM COUPÉ ЖИВЁТ В ЦИФРЕ
vscode-pyz80 — это блестящий пример того, как современные инструменты могут вдохнуть новую жизнь в старые, но легендарные платформы.Если вы разработчик под SAM Coupé (или только хотите им стать), это расширение сэкономит вам часы и дни жизни, которые раньше уходили на рутинные операции: сборку, создание загрузочных дисков, запуск в эмуляторе, загрузку на реальное железо.
Три горячие клавиши — F10, Ctrl+F10, Ctrl+Shift+F10 — закрывают 90% потребностей разработчика. А возможность кастомизации через workspace settings и кастомные задачи позволяет адаптировать процесс под любые, даже самые сложные проекты.
Автору расширения, simonowen, отдельное спасибо не только за само расширение, но и за поддержку SimCoupe и SAMdisk — без его вклада экосистема SAM Coupé была бы гораздо беднее.
Официальный сайт: simcoupe.org
Сайт: simonowen.com/samdisk/
Репозиторий на GitHub: github.com/simonowen/simcoupe
P.S. Если у вас нет реального SAM Coupé, не расстраивайтесь. Эмулятор SimCoupe настолько точен, что вы сможете полноценно разрабатывать и тестировать программы, а позже, если представится случай, запустить их на реальном железе.
P.P.S. Не забудьте поставить звёздочку автору на GitHub, если расширение оказалось полезным — это лучшая награда для разработчика.