samjuggler.gif
mnemodemo1.gif
lyra3.gif


💡 ВСТУПЛЕНИЕ: БРИТАНСКАЯ ЛЕГЕНДА ЗАСЛУЖИВАЕТ СОВРЕМЕННЫХ ИНСТРУМЕНТОВ

Знаете ли вы, что в конце 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é .

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

  1. Подсветка синтаксиса Z80 — все команды и директивы pyz80 разноцветные и наглядные .
  2. Встроенный ассемблер pyz80 — расширение включает последнюю версию pyz80, так что ничего дополнительно скачивать не нужно .
  3. Горячие клавиши для сборки и запуска:
    • F10 — собрать исходник в образ диска SAM (готовый .dsk или .mgt) .
    • Ctrl+F10 — собрать и сразу запустить в эмуляторе SimCoupe .
    • Ctrl+Shift+F10 — собрать и отправить на реальный SAM Coupé по сети (через TrinLoad) .
  4. Автоматическое добавление SAMDOS v2 — чтобы образ диска был загрузочным, расширение первым файлом добавляет SAMDOS .
  5. Генерация symbol map — создаёт файл символов, совместимый с отладчиком SimCoupe v1.1+ .
  6. Поддержка workspace settings — можно настроить под каждый проект свои параметры (главный файл, пред- и пост-обработка) .
  7. 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)
ЗвукBeeperAY-3-8912 (3 канала)
ДисководОпциональноВстроенный 3.5" дисковод
ОСSinclair BASICSAMDOS / MasterDOS

pyz80 — это ассемблер, написанный на Python, который специально создан для генерации кода под SAM Coupé. Он понимает форматы дисков SAM, умеет создавать загрузочные образы и поддерживает все особенности этой платформы .

А vscode-pyz80 берёт этот ассемблер и интегрирует его в VS Code так, что процесс разработки становится таким же удобным, как и для современных платформ .


⚙️ СТАНОВКА И НАСТРОЙКА: ШЕСТЬ ШАГОВ К САМОЙ МОЩНОЙ Z80-МАШИНЕ

📥 Шаг 1: Установка Visual Studio Code

Если у вас ещё нет VS Code — скачайте с code.visualstudio.com и установите. Это бесплатно и кроссплатформенно.

📦 Шаг 2: Установка расширения vscode-pyz80

  1. Запустите Visual Studio Code.
  2. Нажмите Ctrl+Shift+X (или иконку квадратиков слева), чтобы открыть вкладку Extensions.
  3. В поиске введите "pyz80".
  4. Найдите расширение от автора 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 в удобную папку (например, C:\SimCoupe на Windows или ~/SimCoupe на macOS/Linux).

🌐 Шаг 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.pyC:\\pyz80\\pyz80.py/usr/local/bin/pyz80.py
pyz80.pythonПуть к интерпретатору PythonC:\\Python39\\python.exe/usr/bin/python3
pyz80.simcoupeПуть к SimCoupeC:\\SimCoupe\\simcoupe.exe/Applications/SimCoupe.app/Contents/MacOS/SimCoupe
pyz80.samdiskПуть к SAMdiskC:\\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. Расширение:
  1. Запускает pyz80 с текущим (или указанным в mainsource) файлом.
  2. Создаёт образ диска SAM (обычно .dsk или .mgt).
  3. Автоматически добавляет в начало образа SAMDOS v2, чтобы диск был загрузочным .
  4. Генерирует symbol map для отладчика SimCoupe .
Результат: в папке проекта появляется файл main.dsk, готовый к использованию.

Вариант Б: Собрать и запустить в SimCoupe (Ctrl+F10)
Нажимаем Ctrl+F10. Расширение:
  1. Выполняет сборку (как в варианте А).
  2. Запускает SimCoupe, автоматически загружая в него созданный образ диска .
  3. Благодаря symbol map, в отладчике SimCoupe вы увидите не просто адреса, а имена ваших меток .
Вариант В: Собрать и отправить на реальный SAM (Ctrl+Shift+F10)
Нажимаем Ctrl+Shift+F10. Расширение:
  1. Выполняет сборку.
  2. Использует SAMdisk для отправки образа на реальный SAM Coupé по сети (через TrinLoad) .
  3. Ваша программа запускается на реальном железе!

🧠 ПРОДВИНУТЫЙ РЕЖИМ: КАСТОМНЫЕ 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 генерируется автоматически
Запуск на реальном железеСкопировать дискету, вставить в SAMCtrl+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 звезды на момент написания . Но это не показатель качества, а следствие узости ниши.
  • Документация только на английском: для русскоязычных пользователей может быть барьер.

🧪 СОВЕТЫ БЫВАЛОГО (ОПТИМИЗАЦИЯ РАБОТЫ)

  1. Используйте workspace settings. Не пишите пути к инструментам в глобальных настройках — кладите их в .vscode/settings.json проекта. Тогда при клонировании репозитория всё будет работать у всех .
  2. Настройте mainsource. Если проект состоит из нескольких файлов, укажите главный файл в настройках. Тогда даже если вы редактируете include-файл, F10 будет собирать весь проект, а не только текущий файл .
  3. Используйте prebuild для конвертации ресурсов. Графику и музыку удобно хранить в исходных форматах (например, картинки BMP), а перед сборкой автоматически конвертировать в данные для ассемблера через prebuild .
  4. Подставка BASENAME — ваш друг. Если вы генерируете несколько файлов (например, main.bin, main.sym, main.dsk), используйте _BASENAME_ в настройках, чтобы не дублировать имена .
  5. Для сложных проектов переходите на 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, если расширение оказалось полезным — это лучшая награда для разработчика.