Pasmo — это кроссплатформенный, легкий и надежный кросс-ассемблер для процессора Z80, написанный на стандартном C++. Его главная философия — простота сборки, установки и использования.
Этот инструмент позволяет создавать исполняемый код сразу в самых популярных форматах для ретро-компьютеров, таких как ZX Spectrum, Amstrad CPC, MSX и CP/M.
Для Windows можно использовать Cygwin или MinGW с прилагаемым Makefile.
Основной формат вызова Pasmo из командной строки:
Простота и скорость: Запустил — получил готовый файл. Нет лишних шагов.
Прямая работа с форматами эмуляторов: Не нужны конвертеры.
Проверенная надежность: Активно используется сообществом ретро-разработчиков много лет.
Идеален для обучения и небольших проектов: Прямой контроль над кодом и памятью.
Pasmo — это прагматичный и эффективный инструмент, который отлично подходит для создания игр, демо и утилит под ZX Spectrum и другие 8-битные платформы. Он не пытается быть навороченной IDE, а блестяще выполняет свою главную задачу — превращать читаемый ассемблерный код в рабочую машинную программу.
Ссылки для углубленного изучения:
Основные особенности и достоинства
- Мультиплатформенность
: Работает под Windows, Linux, macOS. Исходный код легко компилируется любым современным C++ компилятором. - Не требует линкера
: Генерирует готовый, фиксированный (non-relocatable) машинный код. Не нужно отдельных этапов компоновки. - Богатая поддержка форматов вывода
: Может создавать файлы прямо для эмуляторов и реального железа:- .TAP, .TZX для ZX Spectrum (лента)
- .CDT для Amstrad CPC (лента)
- PLUS3DOS для Spectrum +3 (дискета)
- AMSDOS для Amstrad CPC (дискета)
- Сырой бинарный код, Intel HEX, PRL для CP/M.
- Совместимый синтаксис
: Поддерживает различные стили написания чисел и директив, привычные программистам со старых ассемблеров. - Уникальная экспериментальная функция
: С опцией --86 может транслировать исходник Z80 в код для процессора 8086, создавая .COM файлы для MS-DOS.
Установка и первая сборка
Вариант 1: Готовый исполняемый файл (Windows)
Самый простой способ — скачать готовый .zip архив (например, pasmo-0.5.3.zip) с официальной страницы, распаковать и запускать pasmo.exe из командной строки.Вариант 2: Компиляция из исходников (Linux/macOS/Windows)
Если для вашей ОС нет готового бинарника или нужна последняя версия:- Скачайте архив с исходниками (например, pasmo-0.5.5.tar.gz).
- Распакуйте: tar -xzf pasmo-0.5.5.tar.gz
- Перейдите в папку и выполните стандартную процедуру:
Bash:
./configure
make
sudo make install # (для установки в системные папки)
Для Windows можно использовать Cygwin или MinGW с прилагаемым Makefile.
Вариант 3: Через пакетный менеджер
- Debian/Ubuntu: Установите командой sudo apt-get install pasmo.
- Mac OS X: Доступен готовый .sitx архив.
Использование: от команды до готового файла
Основной формат вызова Pasmo из командной строки:
Bash:
pasmo [опции] исходник.asm выходной_файл [файл_символов]
Ключевые опции для ZX Spectrum
- --tap или --tzx → Создает файл образа ленты только с машинным кодом. Для загрузки в Basic: LOAD "" CODE.
- --tapbas или --tzxbas → Создает ленту с автозагрузчиком на Basic! В образ добавляется программа-загрузчик, которая автоматически вызывает CLEAR, загружает ваш код и запускает его (если задана директива END). Идеально для готовых релизов.
- --plus3dos → Создает файл для загрузки с диска Spectrum +3.
- --bin → Генерирует сырой бинарный код (по умолчанию).
- -I путь → Добавляет путь для поиска файлов, подключаемых директивами INCLUDE и INCBIN.
- --equ имя=значение → Предварительно определяет символ, как будто в коде есть имя EQU значение. Полезно для условной компиляции.
Bash:
# Создаем TAP-файл с автозапуском для вашей игры
pasmo --tzxbas mygame.asm mygame.tzx
# Создаем чистый бинарный блок кода для вставки в другой проект
pasmo --bin library.asm library.bin
Синтаксис и особенности работы
Организация кода и памяти
- Используйте директиву ORG, чтобы указать, по какому адресу в памяти должен располагаться код. Например, ORG 32768 (или #8000 в hex) — стандартный адрес для программ на ZX Spectrum 48K.
- Конец программы и точка входа задаются директивой END. Аргумент этой директивы — адрес, с которого начнется выполнение после загрузки. Пример: END start.
- Для подключения внешних файлов (исходников или данных) используйте INCLUDE "файл.asm" и INCBIN "данные.bin".
Система обозначений и вычислений
Pasmo гибок в записи чисел, поддерживая форматы разных ассемблеров:- Шестнадцатеричные: $FF, #FF, 0FFh, &HFF.
- Двоичные: %11110000, 11110000b.
- Десятичные: 255, 255d.
- Восьмеричные: 377o, &O377.
Локальные метки и условная компиляция
- Локальные метки можно создавать, начиная их имя с символа _. При использовании опции --alocal все такие метки автоматически становятся локальными.
- Для условной сборки используйте директивы IF, ELSE, ENDIF. Условием может быть выражение или проверка определения метки:
Код:
IFDEF DEBUG_MODE
ld a, 1 ; Код для отладки
ELSE
ld a, 0 ; Релизный код
ENDIF
- Символ DEBUG_MODE можно определить в коде (DEBUG_MODE EQU 1) или передать через командную строку (--equ DEBUG_MODE=1).
Работа с различными форматами вывода
- Спектрум (лента)
: Опции --tapbas/--tzxbas — лучший выбор для финального файла. Эмулятор или устройство вроде DivMMC воспримет его как обычную кассету с программой. - Спектрум +3 (дискета)
: --plus3dos. Получившийся файл можно поместить в образ дискеты эмулятора. - Проекты из нескольких модулей: Pasmo сам не линкует .rel файлы, но вы можете использовать --bin для создания отдельных блоков кода, а затем объединять их с помощью INCBIN в главном файле или внешними утилитами.
- Для отладки
: При сборке можно попросить Pasmo создать файл со всеми метками (третий аргумент в командной строке). Этот файл в формате EQU-директив можно загрузить в отладчик эмулятора (например, в DeZog для VS Code), чтобы видеть имена меток вместо голых адресов.
Итог: почему Pasmo?
Pasmo — это прагматичный и эффективный инструмент, который отлично подходит для создания игр, демо и утилит под ZX Spectrum и другие 8-битные платформы. Он не пытается быть навороченной IDE, а блестяще выполняет свою главную задачу — превращать читаемый ассемблерный код в рабочую машинную программу.
Ссылки для углубленного изучения:
- Официальная документация Pasmo (очень подробная, на английском).
- Страница загрузки с бинарниками и исходниками.
- Репозитории с примерами исходного кода, собранного с помощью Pasmo.