screenshot.png

inlay-hints.png

timing-hints.png

💡 ВСТУПЛЕНИЕ: ОТ СЕКУНДОМЕРА К ПРОФЕССИОНАЛЬНОМУ ИНСТРУМЕНТУ

Помните старые добрые времена, когда оптимизация кода под ZX Spectrum выглядела так: написали процедуру, запустили, смотрим — "тормозит". Начинаем в уме прикидывать такты, лезем в справочник Z80, ищем таблицы времени выполнения команд, складываем в столбик на бумажке... А если процедура большая? А если в ней циклы и ветвления? А если нужно уложиться в конкретное количество строк развёртки?

Это был настоящий ассемблерный шаманизм.

И тут, как глоток свежего воздуха, появляется Z80 Assembly Meter.

Z80 Assembly Meter — это расширение для Visual Studio Code от разработчика theNestruo, которое в реальном времени показывает, сколько тактов (t-states) занимает ваш код и сколько байтов он займёт в памяти .

Никаких больше табличек, никакого ручного подсчёта. Просто выделил код — и в статус-баре VS Code видишь: "123 t-states, 45 bytes". Это не просто удобно — это профессиональный подход к оптимизации.


🏗️ ЧТО ТАКОЕ Z80 ASSEMBLY METER И ЗАЧЕМ ОН НУЖЕН?

Z80 Assembly Meter — это специализированное расширение для VS Code, которое анализирует выделенный фрагмент ассемблерного кода Z80 и отображает в строке состояния:
  1. Количество тактов (t-states) — сколько процессорных циклов займёт выполнение этого кода.
  2. Размер в байтах — сколько памяти займёт скомпилированный код.
  3. Мнемонику инструкции — для сверки, правильно ли расширение поняло команду.

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

  1. Мгновенный подсчёт тактов — выделил блок кода, и сразу видишь его "вес" в тактах.
  2. Подсчёт размера — контроль за тем, сколько байтов займёт процедура в памяти.
  3. Поддержка разных платформ — Z80, MSX (с учётом M1 wait cycles), Amstrad CPC (в NOP-ах) и ZX Spectrum Next (с расширенным набором команд) .
  4. Копирование в буфер — кликнул на результат — и он скопирован в clipboard.
  5. Работа с выделением — если ничего не выделено, анализируется текущая строка.
  6. Поддержка псевдоинструкций SjASMPlus — для тех, кто использует этот ассемблер .

🧬 ИСТОРИЧЕСКИЙ КОНТЕКСТ: КАК СЧИТАЛИ ТАКТЫ РАНЬШЕ​

ЭпохаИнструментМетодТочностьУдобство
1980-еБумажные таблицыРучной подсчёт по таблицам Z80Средняя (ошибки счёта)Ужасно
1990-еКалькулятор + таблицаСуммирование вручнуюВысокаяДолго, нудно
2000-еExcel / электронные таблицыВбиваешь команды, Excel считаетВысокаяБыстрее, но всё ещё ручной ввод
2010-еОнлайн-калькуляторыВставка кода в браузерВысокаяТребует копипаста
2020-еZ80 Assembly MeterВыделил в редакторе — получил результатАбсолютнаяМгновенно

Z80 Assembly Meter — это эволюционный скачок. Он встраивает подсчёт тактов прямо в процесс написания кода, делая оптимизацию не отдельным этапом, а частью повседневной работы.


⚙️ УСТАНОВКА И НАСТРОЙКА: ПЯТЬ СЕКУНД — И ВЫ В ИГРЕ

📥 Установка расширения

  1. Запустите Visual Studio Code.
  2. Нажмите Ctrl+Shift+X (или иконку квадратиков слева).
  3. В поиске введите "Z80 Assembly Meter".
  4. Найдите расширение от автора theNestruo (иконка с синим микрочипом и циферблатом) и нажмите Install.

⚙️ Базовая настройка (почти ничего не нужно)

Расширение работает сразу после установки. Но для тонкой подстройки под ваш стиль есть несколько полезных опций в settings.json:
JSON:
{
    // Для какой платформы считаем такты
    "z80-asm-meter.platform": "z80", // Варианты: z80, msx, cpc, z80n
 
    // Показывать ли опкоды в статус-баре
    "z80-asm-meter.viewBytes": false,
 
    // Показывать ли распознанную инструкцию (полезно для отладки)
    "z80-asm-meter.viewInstruction": true,
 
    // Максимальное число инструкций для отображения в подсказке
    "z80-asm-meter.maxBytes": 16,
 
    // Поддержка псевдоинструкций SjASMPlus
    "z80-asm-meter.sjasmplusFakeInstructions": false,
 
    // Синтаксис меток (default или colonOptional)
    "z80-asm-meter.syntax.label": "default"
}

🔧 Выбор платформы: кому что


ПлатформаЗначениеОсобенности
Классический Z80z80Стандартные такты для Z80 без дополнительных задержек
MSXmsxУчитывает M1 wait cycles (ожидание выборки команд)
Amstrad CPCcpcСчитает в "количестве NOP-ов" (для синхронизации с видеосистемой CPC)
ZX Spectrum Nextz80nВключает расширенный набор команд Next (слоты, умножение и т.д.)

🚀 ИНТЕРФЕЙС И РАБОЧИЙ ПРОЦЕСС

🖥️ Как это выглядит в редакторе

Вы пишете код как обычно. Расширение не мешает, не подсвечивает, не отвлекает. Оно просто ждёт внизу, в статус-баре.

Сценарий 1: Анализ одной строки
  1. Ставите курсор на любую строку с ассемблерной командой.
  2. Смотрите в правый нижний угол статус-бара.
  3. Видите: LD A,(HL) — 7 t-states, 1 byte.
Сценарий 2: Анализ блока кода
  1. Выделяете мышкой целую процедуру (например, цикл копирования экрана).
  2. Статус-бар мгновенно обновляется: 892 t-states, 124 bytes.
  3. Если блок большой, можно кликнуть на результат — откроется детальный разбор по каждой команде.
Сценарий 3: Копирование результата
  1. Кликнули левой кнопкой по показаниям в статус-баре.
  2. В буфере обмена: "892 t-states, 124 bytes".
  3. Вставили в комментарий к процедуре — готово, документировали.

🔍 Что именно показывается

В статус-баре VS Code появляются элементы:
⏱️ 892 t-states | 📦 124 bytes | 🔍 LD A,(HL)
  • ⏱️ 892 t-states — общее количество тактов на выделенный блок.
  • 📦 124 bytes — размер в байтах.
  • 🔍 LD A,(HL) — текущая инструкция (если включено viewInstruction). Помогает убедиться, что расширение правильно поняло синтаксис.

💡 Как читать детали

Если кликнуть по показаниям, откроется окно с поинструкторным разбором:
Assembler Z80:
Инструкция                    Такты   Байты
-------------------------------------------
    ld hl, 16384             10      3
    ld de, 16385             10      3
    ld bc, 6911              10      3
    ld (hl), 0               7       2
    ldir                      21/16?  2
-------------------------------------------
ИТОГО:                        58 + 21*6910?  13 байт

Для команд с повторением (LDIR, OTIR) расширение показывает базовую стоимость одного шага и помечает, что итог зависит от счётчика.


🛠️ ДИРЕКТИВЫ И ПОДДЕРЖИВАЕМЫЙ СИНТАКСИС

📚 Что понимает Z80 Assembly Meter

Расширение поддерживает:
  1. Полный набор команд Z80 — все стандартные инструкции, включая битовые операции, блочные передачи, индексные режимы (IX, IY) .
  2. Расширенный набор Z80N — для ZX Spectrum Next: MUL D,E, JP (C), SLOT и другие .
  3. Псевдоинструкции SjASMPlus — если включить опцию sjasmplusFakeInstructions, расширение будет понимать директивы вроде EXIT, CONTINUE, MODULE .
  4. Разные стили меток — можно настроить, обязательны ли двоеточия после меток (label: или просто label) .

🔌 Интеграция с другими расширениями

Z80 Assembly Meter не заменяет ассемблер, не даёт автодополнения и не проверяет синтаксис. Он работает в связке с :
  • Z80 Macro-Assembler (mborik) — для написания кода.
  • Z80 Assembly (Imanolea) — альтернативная подсветка.
  • MSX Z80 (Yeoungman Seo) — для MSX-разработчиков.
  • pasmo (BouKiChi) — поддержка синтаксиса Pasmo.
  • DeZog (Maziac) — для отладки.
Вместе они создают полноценную среду:
  1. Z80 Macro-Assembler — пишешь код с автодополнением.
  2. Z80 Assembly Meter — видишь стоимость каждой строчки.
  3. DeZog — отлаживаешь результат.

📊 СРАВНЕНИЕ: Z80 ASSEMBLY METER VS ТРАДИЦИОННЫЕ МЕТОДЫ


МетодТочностьСкоростьУдобствоИнтеграция с редакторомОшибки
Бумажные таблицыСредняяМинуты на блокНизкоеНетЧастые (сложение)
Excel/калькуляторВысокаяМинутыСреднееНетРедкие (опечатки)
Онлайн-калькуляторыВысокаяСекундыВыше среднегоКопипастРедкие
Z80 Assembly MeterАбсолютнаяМгновенноМаксимальноеПрямо в редактореИсключены

🏆 Почему это победа

  • Скорость: не нужно переключаться между окнами.
  • Точность: расширение использует официальные таблицы тактов из авторитетных источников :
    • Grauw MSX Assembly Page для Z80.
    • cpctech.org.uk для Amstrad CPC.
    • Официальная вики ZX Spectrum Next.
  • Наглядность: видно стоимость прямо над кодом.
  • Документирование: можно сразу вставить результат в комментарий.

🎨 ПЛЮСЫ И МИНУСЫ

✅ Плюсы (Почему это must-have)​

  • Мгновенная обратная связь: написал строку — увидел стоимость. Оптимизация становится частью процесса написания кода, а не отдельным этапом.
  • Простота: не нужно ничего настраивать. Установил — работает.
  • Поддержка трёх платформ: Z80, MSX, CPC, Next — универсальный солдат.
  • Интеграция с экосистемой: работает вместе с другими расширениями, не конфликтует.
  • Копирование в clipboard: кликнул — вставил в комментарий. Идеально для документирования критичных по времени процедур.
  • Открытый исходный код: можно посмотреть, как считает, и даже исправить, если что-то не так .
  • Вдохновлён классикой: автор упоминает, что создавал расширение, вдохновляясь утилитой Rafael Jannone BiT — дань уважения старой школе.

❌ Минусы (О чём нужно знать)

  • Только для VS Code: если вы пишете в другом редакторе — не подойдёт.
  • Не анализирует динамику: расширение считает статическую стоимость блока, но не может предсказать, сколько раз выполнится цикл (это зависит от данных). Для циклов нужно умножать в уме.
  • Может путаться с макросами: если вы используете сложные макросы, расширение может не развернуть их полностью. Лучше анализировать уже развёрнутый код.
  • Не поддерживает все ассемблеры: если вы используете экзотический синтаксис, возможно, придётся подстраивать настройки languageIds .
  • Нет GUI для настроек: все опции правятся в JSON-файле, что для новичков может быть неочевидно.

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

  1. Всегда держите статус-бар на виду. Если вы не видите показаний, проверьте, включено ли расширение для вашего языка (в настройках z80-asm-meter.languageIds).
  2. Анализируйте критические участки. Для процедур, выполняющихся в прерываниях или в активной игре, каждая микросекунда на счету. Пройдитесь по ним с метром.
  3. Сравнивайте варианты. Написали процедуру двумя способами? Выделите первый блок — запишите такты. Выделите второй — сравните. Выбирайте быстрейший.
  4. Документируйте результат. Кликнули по статус-бару — скопировали результат — вставили в комментарий над процедурой. Через полгода скажете себе спасибо.
  5. Учитывайте повторения. Для блоков с LDIR или циклами расширение покажет стоимость одной итерации. Умножьте на количество итераций вручную.
  6. Используйте правильную платформу. Если пишете под MSX, не забудьте переключить platform на msx — такты с учётом M1 wait отличаются от классических .
  7. Для Next включайте z80n. Расширение поддерживает команды ZX Spectrum Next, так что можно сразу видеть, насколько быстрее умножение нативным MUL по сравнению с софтовым.

🧩 ЭКОСИСТЕМА: ИДЕАЛЬНЫЙ КОМБО​

Для максимальной эффективности используйте Z80 Assembly Meter вместе с:
ИнструментРоль
Z80 Macro-AssemblerНаписание кода с автодополнением
Z80 Assembly MeterМгновенная оценка стоимости
DeZogПошаговая отладка и проверка времени
Hex Hover ConverterПеревод чисел при наведении
Z80 Instruction SetПодсказки по командам под курсором

Этот квартет превращает VS Code в профессиональную IDE для ретро-разработки, где вы не только пишете код, но и постоянно видите его "вес" и стоимость.


📖 ЗАКЛЮЧЕНИЕ: МАЛ, ДА УДАЛ

Z80 Assembly Meter — это пример идеального расширения: оно делает одну вещь, но делает её идеально.

Оно не пытается заменить ассемблер, отладчик или редактор. Оно просто встраивается в ваш рабочий процесс и даёт ту информацию, которая раньше требовала минут (а то и часов) ручного подсчёта, мгновенно и без ошибок.

Для спектрумиста, который хочет писать быстрый код, это не просто удобство — это необходимость. Особенно когда речь идёт о демо-эффектах, играх или любых процедурах, критичных ко времени.

Если ALASM когда-то дал нам "молоток и гаечный ключ" для сборки, DeZog — "рентгеновский аппарат" для отладки, Zx-Ide — "стерильный хирургический блок", то Z80 Assembly Meter — это точный хронометр, который всегда под рукой и никогда не врёт.

Установите его прямо сейчас, выделите кусок своего старого кода и удивитесь, сколько тактов вы "накрутили" там, где можно было сделать в два раза быстрее. А потом перепишите и сравните результат. В этом и есть магия оптимизации.

Ссылка на аддон - Z80 Assembly meter


P.S. Автору расширения, theNestruo, спасибо за этот маленький шедевр. Иногда самые простые инструменты приносят больше всего пользы.

P.P.S. Если вы пишете под MSX или CPC — не забудьте переключить платформу в настройках. Разница в подсчёте тактов есть, и она существенна для точной синхронизации.