ВСТУПЛЕНИЕ: ОТ МЕДЛИТЕЛЬНОГО ИНТЕРПРЕТАТОРА К МОЛНИЕНОСНОМУ КОДУ
Помните это чувство? Вы написали программу на 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) для синтаксического анализа .
КЛЮЧЕВЫЕ ВОЗМОЖНОСТИ (ЧТО ОН ДАЁТ ПРОГРАММИСТУ)
- Компиляция в машинный код — ваши программы на Бейсике выполняются со скоростью, сравнимой с ассемблером .
- Современный синтаксис — вдохновлён FreeBASIC, C и Visual Basic . Забудьте про номера строк и GOTO.
- Структурное программирование — процедуры (SUB), функции (FUNCTION), циклы DO...LOOP, SELECT CASE и многое другое .
- Типизированные переменные — выбирайте тип (Byte, Integer, Float и др.) для экономии памяти и ускорения кода .
- Вставки на ассемблере — можно писать ассемблерный код прямо внутри BASIC-программы, обращаясь к BASIC-переменным .
- Многоуровневая оптимизация — компилятор убирает мёртвый код, оптимизирует математические операции и делает программу компактнее .
- Поддержка современного железа — отлично работает с ZX Spectrum Next, включая спрайты, слои и банки памяти .
- Активное сообщество — Telegram-канал, форум, сам автор регулярно помогает пользователям .
ИСТОРИЧЕСКИЙ КОНТЕКСТ: ПОЧЕМУ ЭТО ПРОРЫВ?
| Эпоха | Инструмент | Скорость | Удобство | Порог входа |
|---|---|---|---|---|
| 1980-е | Sinclair BASIC (интерпретатор) | Очень низкая | Среднее (номера строк, GOTO) | Низкий |
| 1980-90-е | Ассемблер (ALASM, GENS, STS) | Максимальная | Низкое (ручное управление) | Очень высокий |
| 1990-2000-е | Компиляторы Си (z88dk) | Высокая | Среднее | Высокий |
| 2010-е — н.в. | Boriel Basic | Высокая (до 50x быстрее BASIC) | Высокое (современный синтаксис) | Низкий |
Boriel Basic занял уникальную нишу: он даёт производительность, близкую к ассемблеру, сохраняя простоту и доступность Бейсика . Это идеальный компромисс для тех, кто хочет создавать серьёзные проекты, не тратя годы на изучение ассемблера.
УСТАНОВКА И НАСТРОЙКА: ТРИ ПУТИ К ЦЕЛИ
Способ 1: Готовые бинарные сборки (рекомендуется для Windows)
Для Windows доступны готовые исполняемые файлы. Это самый простой способ начать работу .- Перейдите на официальную страницу загрузки или в раздел "Releases" на GitHub-репозитории проекта.
- Скачайте последнюю версию ZXBasic_Win32_<version>.zip.
- Распакуйте архив в удобную папку, например, C:\ZXBasic.
- В папке вы найдёте исполняемые файлы: zxbc.exe (компилятор), zxbasm.exe (ассемблер) и другие. Для компиляции программ нам понадобится в первую очередь zxbc.exe.
Способ 2: Универсальная Python-версия (для Linux, macOS и Windows)
Если вы используете Linux, macOS или хотите всегда иметь самую свежую версию, вам подойдёт Python-версия .- Убедитесь, что у вас установлен Python версии 3.12 или выше .
- Скачайте архив с Python-скриптами (например, ZXBasic_Py_<version>.zip) со страницы релизов .
- Распакуйте его в любую папку.
- Основные скрипты — zxbc.py, zxbasm.py. Для их запуска вам потребуется интерпретатор Python.
Способ 3: NextBuild (для ZX Spectrum Next)
Если вы разрабатываете для ZX Spectrum Next, лучший способ — использовать готовый пакет NextBuild . Он включает не только Boriel Basic, но и эмулятор CSpect, библиотеки для работы с железом Next, и настроенные скрипты сборки .- Скачайте NextBuild с официального сайта или GitHub.
- Распакуйте архив.
- Откройте папку Sources в Visual Studio Code (рекомендуемая IDE) .
- Установите рекомендуемые расширения (включая em00k.nextbuild и maziac.asm-code-lens) .
НАСТРОЙКА СРЕДЫ РАЗРАБОТКИ
isual Studio Code + Boriel Basic Extension
Для максимально комфортной работы рекомендуется использовать Visual Studio Code со специальным расширением .Установка расширения:
- Запустите VS Code.
- Нажмите Ctrl+Shift+X, найдите "Boriel Basic" от rtorralba и установите .
- Расширение добавит:
- Подсветку синтаксиса 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 — имя выходного файла
Нажимаем Ctrl+Shift+B (если задача сборки настроена) или используем команду "Boriel Basic: Compile" из палитры команд .
Шаг 3: Запускаем и тестируем
Полученный game.tap можно:- Загрузить в любой эмулятор Spectrum (Fuse, ZEsarUX, CSpect)
- Перекинуть на реальный Spectrum через аудиокабель или DivMMC
- Запустить прямо из VS Code, если настроен эмулятор
РОДВИНУТЫЕ ВОЗМОЖНОСТИ
Типы данных
Одно из главных преимуществ Boriel — типизированные переменные . Вместо 5-байтовых Float, как в Sinclair BASIC, вы можете выбирать:| Тип | Размер | Диапазон | Когда использовать |
|---|---|---|---|
| Byte | 1 байт | -128..127 | Счётчики, флаги |
| UByte | 1 байт | 0..255 | Координаты, цвета |
| Integer | 2 байта | -32768..32767 | Основной тип для чисел |
| UInteger | 2 байта | 0..65535 | Адреса памяти |
| Long | 4 байта | ±2 миллиарда | Большие числа |
| Fixed | 4 байта | -32767.999..32767.999 | Деньги, проценты |
| Float | 5 байт | 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 2 | ShowLayer2(), 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 BASIC | Boriel Basic |
|---|---|---|
| Тип | Интерпретатор | Компилятор |
| Скорость | Очень низкая | В 20-50 раз быстрее |
| Номера строк | Обязательны | Опциональны |
| Метки | Нет | Есть |
| Типы переменных | Только Float | Byte, Integer, Long, Fixed, Float, String |
| Структуры | GOTO/GOSUB | SUB, FUNCTION, DO...LOOP, SELECT CASE |
| Ассемблерные вставки | Нет | Есть |
| Оптимизация | Нет | Многоуровневая |
| Поддержка Next | Нет | Полная (через NextBuild) |
ПЛЮСЫ И МИНУСЫ
Плюсы (Почему это гениально)
- Скорость ассемблера, простота Бейсика — идеальный баланс для создания игр .
- Современный синтаксис — забудьте про GOTO и номера строк .
- Типизация — контроль памяти и ускорение кода .
- Ассемблерные вставки — для критических участков .
- Поддержка ZX Spectrum Next — доступ ко всем возможностям современного железа .
- Активное сообщество — помощь от автора и других разработчиков .
- Отличная документация — подробная официальная документация на ReadTheDocs .
- Книга-бестселлер — существует исчерпывающее руководство на английском (678 страниц!) от Хуана Сегура Дурана, ставшее бестселлером в Испании и получившее восторженные отзывы .
Минусы (О чём нужно знать)
- Не 100% Sinclair-совместимость — некоторые старые программы могут требовать адаптации (особенно массивы с базой 1) .
- Нет INPUT в стандартной поставке — нужно использовать --sinclair флаг или писать свой ввод .
- Требует установки — это кросс-компилятор, нужно ставить на ПК, нельзя писать прямо на Spectrum.
- Порог входа для абсолютных новичков — хотя он ниже, чем у ассемблера, некоторые концепции (типы данных, компиляция) могут быть незнакомы.
СОВЕТЫ БЫВАЛОГО (ОПТИМИЗАЦИЯ РАБОТЫ)
- Всегда объявляйте типы переменных. Это не только ускоряет код, но и защищает от ошибок .
- Используйте самый маленький тип данных. Для координат — Byte (0-255), для счёта — UInteger .
- Включайте оптимизацию. Уровень 4 ('!opt=4) даёт максимальную производительность .
- Для Next используйте NextBuild. Он берёт на себя всю настройку и даёт готовые библиотеки .
- Пишите структурно. SUB и FUNCTION делают код понятным и переиспользуемым .
- Экспортируйте графику через ZX Graphics Editor. Есть специальный экспорт в формат Boriel Basic (DIM-стиль) .
- Читайте книгу Хуана Сегура Дурана. Это 678 страниц практических знаний, примеров и советов .
РЕСУРСЫ И ССЫЛКИ
- Официальная документация: zxbasic.readthedocs.io
- GitHub репозиторий: github.com/boriel-basic
- Расширение для VS Code: Boriel Basic на Marketplace
- NextBuild (для ZX Spectrum Next): wiki.specnext.dev/NextBuild:Main_Page
- Книга на Amazon: "Boriel Basic for ZX Spectrum: A guide for beginners…"
- Telegram-канал: "Boriel ZX Basic" (активное сообщество)
ЗАКЛЮЧЕНИЕ: НОВАЯ ЭРА 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 как основной язык.