«МК-61s»: TinyBASIC и High Noon

На днях решил навести порядок в высокоуровневых языках программирования внутри ретроконсоли «MK-61s». Там внутри сейчас аж три языка — «Бейсик», «Фокал» и собственный язык, который постепенно образовался из системы команд встроенного терминала.

Сначала я попытался сократить размер интерпретаторов, упростив синтаксический парсер, а потом занялся ревизией самих языков.

Начал с «Бейсика». Тот диалект, который сейчас используется, это реализация «Palo Alto Tiny BASIC v3» Ли-Чэнь Вана 1977 года — не побитовая эмуляция исторического интерпретатора, а компактный совместимый диалект с математикой и доступом к регистрам «МК-61».

Оказалось, что в прошлый раз я реализацию «не дожал», уже не помню почему, видимо не умещалось по памяти. Поменяв парсер на более компромиссный, удалось и оригинальный синтаксис реализовать в полном объёме, и все расширения сохранить.

И чтобы протестировать «Бейсик» более тщательно, я решил портировать игру «High Noon», точнее свой же порт, который я в 2020 году перевёл на «Фортран».

Эту игру написал американский школьник Крис Гайло из школы Сайоссета на Лонг-Айленде. Исходный текст датирован 9 декабря 1970 года и работал в системе коллективного доступа компании «Call-a-Computer». Пользователь общался с ней через телетайп, так что никакой графики в игре не было — только медленно печатающийся текст. Игра понравилась настолько, что её поместили в общую библиотеку системы.

По нынешним меркам это совсем простая игра.

Дело происходит на Диком Западе. Вас вызывает на дуэль ковбой-бандит Чёрный Барт. В начале противники стоят в ста шагах друг от друга, у каждого по четыре патрона, а меткость считается одинаковой. На расстоянии ста шагов попасть невозможно, в упор — невозможно промахнуться. Чем ближе вы подходите, тем выше ваши шансы, но ровно настолько же растут шансы Барта.

Игра High Noon на Bейсике: выбор хода, стратегия сближения с Черным Бартом и результат стрельбы.
Начало игры, список ходов и первые шаги к Чёрному Барту. Тут и дальше я склеил по три экрана для наглядности
Целиком игра в одну программу на местном языке «TinyBASIC» не поместилась: размер исходника у нас ограничен 3584 байтами. Пришлось разделить её на четыре части — вступление, ход игрока, ход Барта и награду. Все четыре программы лежат в одной папке, вход в которую запускает программу autoexec.m61 — такую схему я позаимствовал у сидиромов. Программа пишется на вышеупомянутом языке, выросшем из языка терминала.

autoexec.m61 работает дирижёром: запускает нужную часть, а состояние игры передаётся между ними через регистры «МК-61», у него есть такой синтаксис.

Заодно в папке игры появился свой узкий пиксельный шрифт. Сценарий загружает его перед стартом и возвращает прежний при выходе. Без этого длинные английские фразы просто не помещались бы на экране 192×64 (игра запускается только на консоли с графическим экраном).

В показанной партии я в основном шёл вперёд по десять шагов. Барт тоже приближался, несколько раз стрелял и в конце концов остался без патронов. Потом он умудрился пройти мимо меня — расстояние стало минус три шага. Эту странность исходной программы я тоже честно сохранил. Следующий выстрел попал Барту точно между глаз.

Чёрный Барт подходит вплотную, тратит последние патроны и получает пулю прямо между глаз.
Барт приближается, расходует все патроны и получает пулю между глаз

После победы появляется мэр Додж-Сити и от имени благодарных граждан вручает награду — чек на двадцать тысяч долларов. Номер чека и дата каждый раз случайные. На телетайпе 1970 года такой чек можно было получить на бумаге; на экране ретроконсоли он выводится в несколько строк, но всё равно вполне узнаваем.

Чек на 20 000 долларов за убийство Черного Барта в игре High Noon на ретро-консоли MK-61s.
Награда за Чёрного Барта. «Не трать всё в одном месте»

Я одно время планировал сделать «Фокал» основным языком, а «Бейсик» выкинуть, но, на мой взгляд, надо оставить оба. «Фокал» хоть и имеет плюсы в компактности и скорости набора, «Бейсик», всё же, многим привычнее, да и функциональности у него пока побольше.

Комментарии 2

alex № 1
А почему знак доллара именно
о такой? У меня в голове он с единицей спутался :)
Евгений Степанищев автор № 2
Это какой-то готовый шрифт, мне сейчас нейросеть его вообще не русский переделала, что позволило ещё дефекты найти.