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

Помните это чувство? Вы написали программу на Sinclair BASIC, запустили её... и пошли пить чай, потому что она будет выполняться несколько минут. Графика на экране появляется по пикселям, а простейшая анимация напоминает слайд-шоу. Всё потому, что классический Sinclair BASIC — это интерпретатор. Он читает каждую строчку кода, разбирает её и только потом выполняет — прямо во время работы программы.

В 80-е годы выход был один: учить ассемблер. Но это сложно, долго и требует глубокого понимания архитектуры Z80. И тут, как глоток свежего воздуха, появляется Boriel Basic.

Boriel Basic (ранее известный как ZX Basic) — это кросс-компилятор с открытым исходным кодом, созданный Хосе Родригесом (известным как Boriel) . Он работает на вашем современном ПК, берёт программу, написанную на Бейсике, и превращает её в оптимальный Z80-ассемблер, а затем — в готовый бинарный файл для ZX Spectrum . Результат? Ваша программа на Бейсике будет работать со скоростью ассемблера .

Это не просто "ещё один компилятор". Это революция в мире ретро-разработки, открывшая дорогу тысячам энтузиастов, которые всегда мечтали создавать быстрые игры для Spectrum, но боялись ассемблера.


🏗️ ЧТО ТАКОЕ BORIEL BASIC И ЗАЧЕМ ОН НУЖЕН?

Boriel Basic — это не просто компилятор, а целая экосистема для разработки под ZX Spectrum (и другие Z80-платформы, такие как Amstrad CPC или MSX) . Он написан на Python и использует инструмент PLY (Python Lex/Yacc) для синтаксического анализа .

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

  1. Компиляция в машинный код — ваши программы на Бейсике выполняются со скоростью, сравнимой с ассемблером .
  2. Современный синтаксис — вдохновлён FreeBASIC, C и Visual Basic . Забудьте про номера строк и GOTO.
  3. Структурное программирование — процедуры (SUB), функции (FUNCTION), циклы DO...LOOP, SELECT CASE и многое другое .
  4. Типизированные переменные — выбирайте тип (Byte, Integer, Float и др.) для экономии памяти и ускорения кода .
  5. Вставки на ассемблере — можно писать ассемблерный код прямо внутри BASIC-программы, обращаясь к BASIC-переменным .
  6. Многоуровневая оптимизация — компилятор убирает мёртвый код, оптимизирует математические операции и делает программу компактнее .
  7. Поддержка современного железа — отлично работает с ZX Spectrum Next, включая спрайты, слои и банки памяти .
  8. Активное сообщество — Telegram-канал, форум, сам автор регулярно помогает пользователям .

🧬 ИСТОРИЧЕСКИЙ КОНТЕКСТ: ПОЧЕМУ ЭТО ПРОРЫВ?

ЭпохаИнструментСкоростьУдобствоПорог входа
1980-еSinclair BASIC (интерпретатор)Очень низкаяСреднее (номера строк, GOTO)Низкий
1980-90-еАссемблер (ALASM, GENS, STS)МаксимальнаяНизкое (ручное управление)Очень высокий
1990-2000-еКомпиляторы Си (z88dk)ВысокаяСреднееВысокий
2010-е — н.в.Boriel BasicВысокая (до 50x быстрее BASIC)Высокое (современный синтаксис)Низкий

Boriel Basic занял уникальную нишу: он даёт производительность, близкую к ассемблеру, сохраняя простоту и доступность Бейсика . Это идеальный компромисс для тех, кто хочет создавать серьёзные проекты, не тратя годы на изучение ассемблера.


⚙️ УСТАНОВКА И НАСТРОЙКА: ТРИ ПУТИ К ЦЕЛИ

📥 Способ 1: Готовые бинарные сборки (рекомендуется для Windows)​

Для Windows доступны готовые исполняемые файлы. Это самый простой способ начать работу .
  1. Перейдите на официальную страницу загрузки или в раздел "Releases" на GitHub-репозитории проекта.
  2. Скачайте последнюю версию ZXBasic_Win32_<version>.zip.
  3. Распакуйте архив в удобную папку, например, C:\ZXBasic.
  4. В папке вы найдёте исполняемые файлы: zxbc.exe (компилятор), zxbasm.exe (ассемблер) и другие. Для компиляции программ нам понадобится в первую очередь zxbc.exe.

🐍 Способ 2: Универсальная Python-версия (для Linux, macOS и Windows)​

Если вы используете Linux, macOS или хотите всегда иметь самую свежую версию, вам подойдёт Python-версия .
  1. Убедитесь, что у вас установлен Python версии 3.12 или выше .
  2. Скачайте архив с Python-скриптами (например, ZXBasic_Py_<version>.zip) со страницы релизов .
  3. Распакуйте его в любую папку.
  4. Основные скрипты — zxbc.py, zxbasm.py. Для их запуска вам потребуется интерпретатор Python.

📦 Способ 3: NextBuild (для ZX Spectrum Next)​

Если вы разрабатываете для ZX Spectrum Next, лучший способ — использовать готовый пакет NextBuild . Он включает не только Boriel Basic, но и эмулятор CSpect, библиотеки для работы с железом Next, и настроенные скрипты сборки .
  1. Скачайте NextBuild с официального сайта или GitHub.
  2. Распакуйте архив.
  3. Откройте папку Sources в Visual Studio Code (рекомендуемая IDE) .
  4. Установите рекомендуемые расширения (включая em00k.nextbuild и maziac.asm-code-lens) .

🖥️ НАСТРОЙКА СРЕДЫ РАЗРАБОТКИ

📝 isual Studio Code + Boriel Basic Extension

Для максимально комфортной работы рекомендуется использовать Visual Studio Code со специальным расширением .

Установка расширения:
  1. Запустите VS Code.
  2. Нажмите Ctrl+Shift+X, найдите "Boriel Basic" от rtorralba и установите .
  3. Расширение добавит:
    • Подсветку синтаксиса Boriel Basic .
    • Автодополнение команд и функций .
    • Компиляцию прямо из редактора (Ctrl+Shift+B) .
    • Запуск в эмуляторе одной кнопкой .
    • Отображение ошибок прямо в коде .

📁 Структура проекта

Типичный проект на Boriel Basic может выглядеть так:
Код:
MyGame/
├── src/
│   ├── main.bas          # Основной файл программы
│   ├── sprites.bas        # Данные спрайтов
│   └── music.bas          # Музыкальные данные
├── assets/
│   ├── graphics/          # Исходники графики
│   └── sounds/            # Исходники звуков
├── build/                  # Сюда компилируется .tap/.nex
└── .vscode/
    └── tasks.json          # Настройка задач сборки

🚀 РАБОЧИЙ ПРОЦЕСС (ДЕНЬ ОПЛАТЫ)

✍️ Шаг 1: Пишем код

Создаём файл game.bas и пишем современный, структурированный код:
Бейсик ZX:
' Современный Boriel Basic (комментарии через апостроф)
'!org=32768    ' Директива компилятора: адрес загрузки

' Определяем типизированные переменные
DIM score AS UInteger = 0
DIM lives AS Byte = 3
DIM player_x AS Byte = 128
DIM player_y AS Byte = 96

' Процедура инициализации
SUB init()
    BORDER 0: PAPER 0: INK 7: CLS
    PRINT AT 0,0; "SCORE:"; score
    PRINT AT 0,20; "LIVES:"; lives
END SUB

' Главная процедура обновления
SUB update()
    ' Проверка клавиш
    IF INKEY$ = "q" THEN player_x = player_x - 1
    IF INKEY$ = "w" THEN player_x = player_x + 1
    
    ' Отрисовка
    PLOT player_x, player_y
END SUB

' Основная программа
init()

DO
    update()
    PAUSE 2    ' Небольшая задержка
LOOP

🔨 Шаг 2: Компилируем

Из командной строки:
Bash:
zxbc.exe game.bas -t -B -a -o game.tap
  • -t — создать TAP-файл (образ ленты)
  • -B — добавить BASIC-загрузчик
  • -a — автозапуск после загрузки
  • -o game.tap — имя выходного файла
Из VS Code:
Нажимаем Ctrl+Shift+B (если задача сборки настроена) или используем команду "Boriel Basic: Compile" из палитры команд .

🏃 Шаг 3: Запускаем и тестируем

Полученный game.tap можно:
  • Загрузить в любой эмулятор Spectrum (Fuse, ZEsarUX, CSpect)
  • Перекинуть на реальный Spectrum через аудиокабель или DivMMC
  • Запустить прямо из VS Code, если настроен эмулятор

🧠 РОДВИНУТЫЕ ВОЗМОЖНОСТИ

📚 Типы данных

Одно из главных преимуществ Boriel — типизированные переменные . Вместо 5-байтовых Float, как в Sinclair BASIC, вы можете выбирать:
ТипРазмерДиапазонКогда использовать
Byte1 байт-128..127Счётчики, флаги
UByte1 байт0..255Координаты, цвета
Integer2 байта-32768..32767Основной тип для чисел
UInteger2 байта0..65535Адреса памяти
Long4 байта±2 миллиардаБольшие числа
Fixed4 байта-32767.999..32767.999Деньги, проценты
Float5 байтSinclair-совместимыйСовместимость со старым кодом

Рекомендация: используйте самый маленький тип, который может вместить ваши данные — это ускоряет код и экономит память .

🔄 Управляющие конструкции

Циклы:
Бейсик ZX:
FOR i = 0 TO 255 STEP 2
    PRINT i
NEXT i

DO
    ' Бесконечный цикл
LOOP

DO WHILE a < 10
    a = a + 1
LOOP

Условия:
Бейсик ZX:
IF score > 1000 THEN
    lives = lives + 1
    score = 0
ELSEIF lives = 0 THEN
    PRINT "GAME OVER"
ELSE
    PRINT "Keep going!"
END IF

Выбор:
Бейсик ZX:
SELECT CASE keypress
    CASE 1 TO 4
        PRINT "Movement key"
    CASE 13
        PRINT "ENTER"
    CASE ELSE
        PRINT "Other key"
END SELECT

📦 Процедуры и функции

Бейсик ZX:
' Процедура (не возвращает значение)
SUB draw_player(x AS Byte, y AS Byte)
    PLOT x, y
END SUB

' Функция (возвращает значение)
FUNCTION max(a AS Integer, b AS Integer) AS Integer
    IF a > b THEN
        RETURN a
    ELSE
        RETURN b
    END IF
END FUNCTION

' Использование
draw_player(player_x, player_y)
LET highest = max(100, 200)

⚙️ Вставки на ассемблере

Когда стандартных средств не хватает, можно вписать ассемблерный код прямо в программу :
Assembler Z80:
SUB fast_copy(src AS UInteger, dst AS UInteger, len AS UInteger)
    ASM
        ; HL = источник, DE = приёмник, BC = длина
        ld hl, (src)
        ld de, (dst)
        ld bc, (len)
        ldir           ; Быстрое копирование
    END ASM
END SUB

Важно: Из ассемблера можно обращаться к BASIC-переменным по их именам!

🆕 Директивы компилятора

В начале файла можно указать специальные директивы, управляющие компиляцией :
ДирективаОписаниеПример
'!org=nnnnАдрес загрузки программы'!org=32768
'!heap=nnnnРазмер кучи (для динамических данных)'!heap=2048
'!opt=nУровень оптимизации (0-4)'!opt=4
'!bmp=file.bmpЗагрузочный экран (для NEX)'!bmp=loading.bmp
'!asmВыдавать только ассемблерный код'!asm
'!noemuНе запускать эмулятор после компиляции'!noemu

🧩 ЭКОСИСТЕМА: BORIEL BASIC И ZX SPECTRUM NEXT

Отдельного внимания заслуживает работа Boriel Basic с ZX Spectrum Next. Благодаря проекту NextBuild, вы получаете полный доступ к аппаратным возможностям этого современного ретро-компьютера .

🔥 NextLib — библиотека для работы с железом Next

NextBuild включает мощную библиотеку nextlib.bas, которая даёт доступ ко всем функциям Next :
КатегорияФункции
SD-картаLoadSDBank(), LoadSD(), SaveSD(), LoadBMP()
Layer 2ShowLayer2(), CLS256(), ScrollLayer(), ClipLayer2()
ТайлыDoTileBank8(), DoTileBank16()
СпрайтыInitSprites(), UpdateSprite(), RemoveSprite()
ПалитрыPalUpload()
ЗвукInitMusic(), InitSFX(), PlaySFX()
ТаймингWaitRetrace(), WaitRetrace2()

Пример использования спрайтов на Next:
Бейсик ZX:
'!org=32768
'!heap=2048

#define NEX
#include <nextlib.bas>

' Загружаем спрайты с SD-карты в банк 34
LoadSDBank("sprites.spr", 0, 0, 0, 34)

' Инициализируем спрайты
InitSprites2(64, $C000, 34)

DO
    ' Обновляем позицию спрайта
    UpdateSprite(player_x, player_y, 0, 0, 0, 128)
    WaitRetrace(1)   ' Ждём обратный ход луча
LOOP

📊 СРАВНЕНИЕ: BORIEL BASIC VS SINCLAIR BASIC


КритерийSinclair BASICBoriel Basic
ТипИнтерпретаторКомпилятор
СкоростьОчень низкаяВ 20-50 раз быстрее
Номера строкОбязательныОпциональны
МеткиНетЕсть
Типы переменныхТолько FloatByte, Integer, Long, Fixed, Float, String
СтруктурыGOTO/GOSUBSUB, FUNCTION, DO...LOOP, SELECT CASE
Ассемблерные вставкиНетЕсть
ОптимизацияНетМногоуровневая
Поддержка NextНетПолная (через NextBuild)

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

✅ Плюсы (Почему это гениально)

  • Скорость ассемблера, простота Бейсика — идеальный баланс для создания игр .
  • Современный синтаксис — забудьте про GOTO и номера строк .
  • Типизация — контроль памяти и ускорение кода .
  • Ассемблерные вставки — для критических участков .
  • Поддержка ZX Spectrum Next — доступ ко всем возможностям современного железа .
  • Активное сообщество — помощь от автора и других разработчиков .
  • Отличная документация — подробная официальная документация на ReadTheDocs .
  • Книга-бестселлер — существует исчерпывающее руководство на английском (678 страниц!) от Хуана Сегура Дурана, ставшее бестселлером в Испании и получившее восторженные отзывы .

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

  • Не 100% Sinclair-совместимость — некоторые старые программы могут требовать адаптации (особенно массивы с базой 1) .
  • Нет INPUT в стандартной поставке — нужно использовать --sinclair флаг или писать свой ввод .
  • Требует установки — это кросс-компилятор, нужно ставить на ПК, нельзя писать прямо на Spectrum.
  • Порог входа для абсолютных новичков — хотя он ниже, чем у ассемблера, некоторые концепции (типы данных, компиляция) могут быть незнакомы.

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

  1. Всегда объявляйте типы переменных. Это не только ускоряет код, но и защищает от ошибок .
  2. Используйте самый маленький тип данных. Для координат — Byte (0-255), для счёта — UInteger .
  3. Включайте оптимизацию. Уровень 4 ('!opt=4) даёт максимальную производительность .
  4. Для Next используйте NextBuild. Он берёт на себя всю настройку и даёт готовые библиотеки .
  5. Пишите структурно. SUB и FUNCTION делают код понятным и переиспользуемым .
  6. Экспортируйте графику через ZX Graphics Editor. Есть специальный экспорт в формат Boriel Basic (DIM-стиль) .
  7. Читайте книгу Хуана Сегура Дурана. Это 678 страниц практических знаний, примеров и советов .

📚 РЕСУРСЫ И ССЫЛКИ


📖 ЗАКЛЮЧЕНИЕ: НОВАЯ ЭРА BASIC-ПРОГРАММИРОВАНИЯ

Boriel Basic — это не просто инструмент. Это мостик между эпохами. Он берёт простоту и ностальгию старого доброго Бейсика и соединяет её с мощью, скоростью и современными подходами программирования.

Благодаря Boriel, тысячи энтузиастов по всему миру смогли осуществить свою мечту — написать быструю игру для ZX Spectrum, не становясь при этом гуру ассемблера. А с появлением ZX Spectrum Next и проекта NextBuild, возможности стали поистине безграничными: спрайты, слои, аппаратный звук, банки памяти — всё это доступно из простого и понятного Бейсика.

Если вы всегда хотели создать свою игру для Spectrum, но вас останавливала скорость Sinclair BASIC или сложность ассемблера — Boriel Basic ваш идеальный выбор. Установите расширение для VS Code, откройте книгу Хуана Сегура Дурана и начните творить. Ваш проект может стать следующим хитом на распродажах itch.io или даже попасть на реальный кассетный релиз!


P.S. Автору компилятора, Jose Rodriguez "Boriel", огромное спасибо за этот замечательный инструмент. Отдельное спасибо Хуану Сегура Дурану за исчерпывающее руководство, ставшее настольной книгой для многих разработчиков.

P.P.S. Если вы пишете под ZX Spectrum Next, обязательно попробуйте NextBuild. Это "всё включено" для разработки под Next, и он использует Boriel Basic как основной язык.