Thoreau BASIC 3.2: язык в духе GW-BASIC запускается и без ОС, из UEFI

Thoreau BASIC, язык и его реализация, которые начинаются с синтаксиса в духе GW-BASIC, но, по словам автора, «не застряли в 1983 годе». В списке возможностей на странице проекта: 64-битная память, 24-битная графика, спрайты, ввод с мыши, TCP/IP и HTTP, полная волновая таблица GM/GS (wavetable) с воспроизведением MIDI, WAV, FLAC и Opus, комплексные числа, кватернионы и октонионы, отладчик, профилировщик, инструменты для работы с исходным кодом, многоядерный PARFOR и нативная x64 JIT-компиляция. Имя автора в тексте страницы не названо.

Главная особенность, по заявлению автора: один и тот же язык работает как обычная программа Windows или напрямую из прошивки UEFI, без операционной системы. Программы на BASIC можно упаковать в самостоятельные EXE-файлы для Windows или загрузочные приложения EFI. Сборка для UEFI загружается прямо на машинах x64: она использует графику GOP, клавиатуру через прошивку или сырой HID, мышь (с запасными вариантами), сеть через протоколы прошивки или собственный стек Thoreau на основе SNP, звук PCM через HDA/Azalia там, где он доступен, и тот же интерпретатор, JIT и волновую таблицу GM, что и версия для Windows. Графика, сеть и звук, подчёркивает автор, остаются обычными командами BASIC, а не отдельными фреймворками.

В версии 3.2 файловые браузеры и меню стали обычными командами. GETFILES собирает файлы, каталоги и родительскую запись с необязательной маской. SELECTBOX превращает строковый массив в селектор с управлением с клавиатуры и мыши: несколько столбцов, необязательные цвета, одинарные или двойные рамки из символов псевдографики. В файловых командах имена сохраняют исходное написание и регистр, маски чувствительны к регистру, а полный путь может занимать до 4 095 байт вместе с добавленным расширением (ограничения файловой системы на отдельные имена сохраняются).

STATEWRITE и STATELOAD сохраняют выбранные переменные в два чередующихся поколения с контрольными суммами. FLUSH, FILECOMMIT и FILECOPY поддерживают поэтапное сохранение и проверенные резервные копии. CRC32 проверяет байтовые строки, TEXTSTATS считает слова и символы в диапазоне строкового массива. SYSTEMINFO$ сообщает сведения о процессоре и прошивке, доступность AVX2 или SSE2, мощность PARFOR, откалиброванную частоту счётчика TSC, графический бэкенд и данные о сборке. Точечные изменения в JIT сокращают работу при вычислении INT с плавающей точкой и при нативной арифметике комплексных чисел, кватернионов и октонионов. RUN умеет перезапускать программу без роста стека хоста, а заголовки категорий в HELP теперь выводятся один раз.

Звуковая часть прежняя: волновая таблица Opus и воспроизведение WAV, FLAC, Opus и MIDI. Звуковые банки разворачиваются в PCM до начала воспроизведения, и во время музыки распаковки нет. Самостоятельные приложения EXE и EFI могут обойтись без банка с помощью NOGM. Загрузка THOREAU_GM.TBGM, сжатая без потерь волновая таблица размером 513,5 МБ. На странице есть пример программы (вывод строки в цикле, затем проигрывание MIDI-файла тремя командами) и игра Pixel Prose: она входит в примеры и доступна как отдельные сборки EXE и EFI, а исходные версии для DOS, Commodore 64 и Amstrad CPC лежат вместе с другими ретро-проектами автора на itch.io. Там же страница проекта и загрузки. Автор просит присылать сообщения об ошибках, заметки о совместимости и «странные пограничные случаи BASIC», а поддержать разработку можно через PayPal; по его словам, назойливых экранов и закрытых функций нет.

Ключевые факты

  • Thoreau BASIC использует синтаксис в духе GW-BASIC, но с 64-битной памятью, 24-битной графикой, TCP/IP и HTTP, многоядерным PARFOR и нативным x64 JIT.
  • Один и тот же язык работает как программа Windows и напрямую из прошивки UEFI без ОС; программы можно упаковать в EXE или загрузочные EFI-приложения.
  • В версии 3.2 появились команды GETFILES и SELECTBOX для файловых браузеров и меню, а также STATEWRITE/STATELOAD с двумя чередующимися поколениями с контрольными суммами.
  • Добавлены FILECOPY для проверенных копий, SYSTEMINFO$ со сведениями о процессоре и прошивке, CRC32 и TEXTSTATS; в JIT внесены точечные изменения для INT и арифметики комплексных чисел, кватернионов и октонионов.
  • Звуковая таблица GM/GS занимает 513,5 МБ; в самостоятельных EXE и EFI её можно не включать с помощью NOGM.

Почему это важно

Проект интересен как попытка вернуть BASIC в современные условия, сохранив привычный синтаксис. По заявлению автора, один язык охватывает и обычную программу Windows, и запуск прямо из прошивки UEFI без операционной системы, а графика, сеть и звук доступны обычными командами. Версия 3.2 добавляет прикладные команды (файловые браузеры, меню, сохранение состояния, проверенное копирование). Это нишевый хобби-проект, и значимость его ограничена кругом любителей ретро-программирования.

Кому это важно

Любителям ретро-вычислений и BASIC, тем, кто экспериментирует с программами для UEFI и загрузочными EFI-приложениями, а также тем, кто хочет писать небольшие утилиты, игры и музыкальные программы в стиле GW-BASIC на современных компьютерах x64.

Как это применить

Загрузки и страница проекта размещены на itch.io. Программу можно запускать как обычное приложение Windows или в виде UEFI-сборки, которая загружается на машинах x64. Готовые программы упаковываются в самостоятельные EXE или загрузочные EFI-приложения; звуковой банк (файл на 513,5 МБ) в них можно исключить командой NOGM. Полный синтаксис и изменения описаны в руководстве и примечаниях к выпуску. Цена в тексте страницы не названа: сказано лишь, что поддержать разработку можно через PayPal, а закрытых функций и назойливых экранов нет.

Можно ли доверять

Все сведения взяты с самой страницы проекта и представляют собой заявления автора, имя которого в тексте не названо. Данных о тестах, замеров скорости JIT, PARFOR или интерпретатора, списка проверенного оборудования и прошивок, а также откликов пользователей в тексте нет. Проверить работу UEFI-сборки можно только самостоятельно.

Риски и подводные камни

Запуск программ из прошивки UEFI зависит от конкретного оборудования; сведений о проверенных машинах и прошивках на странице нет. Загрузка звукового банка велика (513,5 МБ), хотя в самостоятельные приложения его можно не включать. Маски файловых команд чувствительны к регистру, а лимиты файловой системы на отдельные имена сохраняются даже при допустимой длине пути до 4 095 байт. Лицензия и доступность исходного кода в тексте не указаны, а поддержка систем, кроме Windows и UEFI, не упомянута.

«Thoreau BASIC начинается с синтаксиса в духе GW-BASIC, но не застрял в 1983 году.»

— страница проекта Thoreau BASIC