ВСТУПЛЕНИЕ: ПРОБЛЕМА, О КОТОРОЙ ВЫ НЕ ЗНАЛИ, ПОКА ОНА НЕ РЕШЕНА
Представьте ситуацию: вы пишете на C для MSX или ZX Spectrum Next, используя мощный компилятор SDCC (Small Device C Compiler). Вам нужно вставить быстрый ассемблерный код — может быть, для критического по времени участка или для доступа к специфическим возможностям железа. Вы открываете файл .s или .asm, а там... серый монотонный текст. Ни подсветки, ни автодополнения, ни проверки синтаксиса. VS Code думает, что это какой-то неизвестный язык.Знакомо? Это проблема, с которой сталкиваются все, кто использует ассемблер asz80 — стандартный ассемблер для SDCC, унаследованный от древнего ASxxxx .
И тут на помощь приходит расширение ASxxxx Cross Assembler and Linker (и его аналоги), которое добавляет в VS Code поддержку синтаксиса asz80 . Это не просто подсветка — это мостик между миром SDCC и современным редактором.
ЧТО ТАКОЕ ASZ80 И ASXXXX?
Прежде чем говорить о поддержке в VS Code, нужно понять, что такое asz80 и откуда он взялся.ASxxxx — это семейство кросс-ассемблеров с открытым исходным кодом, созданное Аланом Болдуином. В марте 2021 года оно было открыто под лицензией GPL . В это семейство входят ассемблеры для разных архитектур, и asz80 — это вариант для процессора Z80 .
SDCC использует sdasz80 — форк оригинального ASxxxx, который со временем разошёлся с основной веткой . Но синтаксис остался очень близким, и в сообществе (особенно в MSX-разработке) его часто называют просто "asz80 syntax" .
Где используется asz80:
| Платформа | Применение |
|---|---|
| MSX | Основной ассемблер для SDCC при разработке под MSX |
| ZX Spectrum Next | Поддержка расширений .zxn и .ez80 |
| Другие Z80-системы | Везде, где используется SDCC с ассемблерными вставками |
ЧТО ТАКОЕ "ASZ80 SUPPORT" В КОНТЕКСТЕ VS CODE?
Когда мы говорим о "поддержке asz80" в VS Code, мы имеем в виду не один конкретный плагин, а несколько расширений, которые добавляют подсветку синтаксиса для этого диалекта ассемблера. Главное из них — "ASxxxx Cross Assembler and Linker" от разработчика clcxce .
КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ
- Подсветка синтаксиса asz80 — все команды Z80, директивы ассемблера, метки и комментарии становятся цветными .
- Поддержка расширенных инструкций — в том числе undocumented-инструкций IXl, IXh, IYl, IYh, которые так важны для оптимизации .
- Поддержка новых форматов — .zxn для ZX Spectrum Next, .ez80 для eZ80 .
- Автоматическое распознавание файлов — для расширений .asm и .s можно настроить ассоциацию с языком asz80 .
- Интеграция с MSX Game Library — официально рекомендуется для разработки игр под MSX .
УСТАНОВКА И НАСТРОЙКА: ТРИ ПРОСТЫХ ШАГА
Шаг 1: Установка расширения
- Запустите Visual Studio Code.
- Нажмите Ctrl+Shift+X (или иконку квадратиков слева), чтобы открыть вкладку Extensions.
- В поиске введите "ASxxxx Cross Assembler".
- Найдите расширение от автора clcxce и нажмите Install .
Шаг 2: Настройка ассоциаций файлов
Расширение само по себе добавляет поддержку языка, но VS Code нужно "объяснить", что файлы с определёнными расширениями должны обрабатываться как asz80.Откройте настройки VS Code (File -> Preferences -> Settings или Ctrl+,) и добавьте следующие ассоциации :
JSON:
"files.associations": {
"*.asm": "asz80",
"*.s": "asz80"
}
Важно: Это можно сделать как в глобальных настройках, так и в настройках конкретного проекта (в папке .vscode), если вы хотите сохранить конфигурацию в репозитории.
Шаг 3: Проверка
Создайте файл test.asm с таким содержимым:
Assembler Z80:
; Пример кода на asz80
.area _CODE
.globl _main
_main:
ld hl, #_message
call _print
ret
_message:
.ascii "Hello, MSX!\0"
Если всё настроено правильно, вы увидите цветную подсветку: синие команды, зелёные комментарии, жёлтые директивы, оранжевые метки.
РАБОЧИЙ ПРОЦЕСС (ИНТЕГРАЦИЯ С SDCC)
Типичный сценарий: C + ассемблер в проекте под MSX
Структура проекта:
Код:
MyMSXProject/
├── src/
│ ├── main.c # Основной код на C
│ ├── video.asm # Ассемблерные процедуры для видео
│ └── math.asm # Быстрые математические функции
├── .vscode/
│ └── settings.json # Ассоциации файлов
└── Makefile # Сборка через SDCC
Пример main.c:
C:
#include <stdio.h>
// Внешние ассемблерные функции
extern void fast_copy(unsigned char* src, unsigned char* dst, int len);
extern int fast_sqrt(int value);
int main(void) {
unsigned char buffer[256];
fast_copy(buffer, (unsigned char*)0x8000, 256);
int root = fast_sqrt(12345);
return 0;
}
Пример video.asm (с подсветкой asz80):
Assembler Z80:
.area _CODE
.globl _fast_copy
_fast_copy:
; HL = src, DE = dst, BC = len (параметры из C)
ld hl, #2
add hl, sp
ld e, (hl)
inc hl
ld d, (hl) ; DE = src
inc hl
ld a, (hl)
inc hl
ld h, (hl)
ld l, a ; HL = dst
ex de, hl ; Теперь HL = src, DE = dst
pop bc ; BC = len (из стека)
ldir ; Блочное копирование
ret
Благодаря расширению, файл video.asm будет отображаться с полноценной подсветкой, что делает работу с ассемблерными вставками такой же комфортной, как и с C-кодом.
ПРОДВИНУТЫЕ ВОЗМОЖНОСТИ ASZ80
Новые директивы в SDCC 4.3.0
Начиная с версии SDCC 4.3.0, в asz80 появились важные улучшения :| Директива | Назначение |
|---|---|
| .allow_undocumented | Разрешает использование undocumented-инструкций (IXl, IXh, IYl, IYh) |
| --allow-undocumented-instructions | Опция компилятора для генерации undocumented-кода из C |
Пример использования undocumented-инструкций:
Assembler Z80:
.allow_undocumented
ld a, ixh ; Раньше это вызывало ошибку, теперь работает
ld b, iyl ; Экономит байты и такты
Это особенно важно для разработчиков под MSX и ZX Spectrum Next, где каждый такт на счету .
Поддержка ZX Spectrum Next
asz80 поддерживает расширенные инструкции для ZX Spectrum Next через директиву .zxn :
Assembler Z80:
.zxn
mul de ; Умножение (специфично для Next)
swapnib ; Обмен полубайтами
pixelad ; Адрес пикселя
Интеграция с Z80 Assembly Meter
Для полного счастья можно добавить расширение Z80 Assembly Meter от theNestruo, которое показывает количество тактов и байтов для asz80-кода . В настройках нужно добавить asz80 в список языков:
JSON:
"z80-asm-meter.languageIds": ["asz80", "c"]
Это позволит видеть стоимость ассемблерных вставок прямо в редакторе.
СРАВНЕНИЕ: РАСШИРЕНИЯ ДЛЯ ASZ80
| Расширение | Автор | Основные фичи | Когда использовать |
|---|---|---|---|
| ASxxxx Cross Assembler | clcxce | Подсветка asz80, поддержка ASxxxx | Основной выбор для asz80 |
| ASM Code Lens | maziac | Code lens, переход к определению, поиск ссылок | Если нужен анализ кода, а не только подсветка |
| Z80 Macro-Assembler | mborik | Подсветка Z80, автодополнение | Если пишете на sjasmplus, но asz80 тоже понимает (частично) |
ПЛЮСЫ И МИНУСЫ
Плюсы (Почему это нужно каждому MSX/Next-разработчику)
- Критически важно для SDCC: asz80 — стандартный ассемблер для SDCC, и без подсветки работать с ним невыносимо .
- Поддержка новых возможностей: undocumented-инструкции, Z80N, eZ80 — всё это подсвечивается корректно .
- Простота настройки: установил расширение, прописал две строчки в настройках — и всё работает .
- Интеграция с экосистемой: работает вместе с Z80 Assembly Meter, DeZog и другими инструментами .
- Открытый исходный код: можно посмотреть, как работает, и даже поучаствовать в разработке .
Минусы (О чём нужно знать)
- Только подсветка: расширение не добавляет автодополнение, проверку синтаксиса или переход к определению. Для этого нужны другие инструменты .
- Ограниченная поддержка строк: строки, ограниченные апострофами (например, 'Hello'), могут не подсвечиваться корректно .
- Узкая ниша: нужно только тем, кто использует SDCC и asz80. Если вы пишете на sjasmplus под Spectrum, это расширение вам не нужно.
- Зависимость от версии SDCC: новые директивы (вроде .allow_undocumented) появляются в asz80 постепенно, и расширение должно за ними успевать .
СОВЕТЫ БЫВАЛОГО (ОПТИМИЗАЦИЯ РАБОТЫ)
- Используйте workspace settings. Не прописывайте ассоциации глобально — положите их в .vscode/settings.json вашего проекта. Тогда при клонировании репозитория у всех будет одинаковая конфигурация .
- Комбинируйте с ASM Code Lens. Если вам нужно не только видеть цветной код, но и анализировать его (переход к определению, поиск ссылок), добавьте расширение ASM Code Lens от maziac .
- Для MSX укажите правильную платформу в Z80 Assembly Meter. В настройках метра выберите "MSX", чтобы такты считались с учётом wait states .
- Следите за обновлениями SDCC. В версии 4.3.0 были проблемы с генерацией undocumented-инструкций даже без запроса, но в 4.4.0 это исправили .
- Проверяйте совместимость. Если вы используете несколько расширений для ассемблера, убедитесь, что они не конфликтуют за язык файла. VS Code может ассоциировать файл только с одним языком .
РЕСУРСЫ И ССЫЛКИ
- ASxxxx Cross Assembler and Linker на Visual Studio Marketplace: ссылка
- Документация SDCC по ассемблерам: ссылка
- MSX Game Library: Рекомендации по VS Code: ссылка
- ASM Code Lens на Visual Studio Marketplace: ссылка
ЗАКЛЮЧЕНИЕ: НЕВИДИМЫЙ, НО НЕЗАМЕНИМЫЙ
ASZ80 Support (в лице расширения ASxxxx Cross Assembler and Linker) — это пример идеального инструмента, который делает ровно одну вещь, но делает её хорошо.Он не пытается заменить ассемблер, отладчик или компилятор. Он просто даёт вам визуальную обратную связь при работе с asz80-кодом, превращая серый монотонный текст в структурированный, легко читаемый код с цветовым кодированием.
Для разработчиков под MSX, использующих SDCC, это расширение должно быть в списке обязательных к установке сразу после самого VS Code . Без него работа с ассемблерными вставками превращается в угадайку: "А это директива или команда? А здесь я не закрыл строку? А этот символ что означает?"
С ним вы просто видите код и можете сосредоточиться на главном — создании быстрых и эффективных программ для любимых ретро-платформ.
P.S. Если вы разрабатываете под MSX, загляните в документацию MSX Game Library — там есть отличные рекомендации по настройке всего стека инструментов, включая это расширение .
P.P.S. Автору расширения, clcxce, спасибо за поддержку ASxxxx. Иногда самые простые инструменты приносят больше всего пользы.