Этот сайт — моя персональная записная книжка. Интересны мне, по большей части, программирование, история и события из моей жизни.

Язык высокого уровня для «МК-61»

Я тут довольно большой проект начал — язык высокого уровня для программируемого калькулятора «Электроника МК-61». В прошлом я с ним немного сталкивался и даже писал десять лет назад «Песню о пиве» для него.

Программирую вайбкодингом, разумеется, лучшими нейросетями из доступных — «Опусом 4.8» и «ГПТ 5.5». Вручную это проект на годы, без сеток я бы его даже не начинал.

Основная сложность — скромные возможности. На программу выделено всего 105 байт и несколько регистров, которыми можно оперировать, поэтому все лучшие программы написаны просто с нереальным количеством хаков, использующих как универсальные вещи (вроде возвратно-ориентированного программирования), так и специфические вещи, основанные на аппаратных особенностях и багах и багах калькулятора.

Калькулятор «Электроника МК-61» по версии сети «Нанабанана-2»

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

Сейчас я, например, разбираюсь с упаковкой нескольких переменных в один регистр. Идея простая, но позволяет иногда экономить очень много: если у нас есть три переменные и каждая принимает значение от нуля до десяти, то можно хранить их в одном регистре поразрядно от «00.0» до «99.9».

Так, например, переписывается в текущем синтаксисе игра «Охота на лис» из блога Дениса Монатко:

program FoxHuntMK61 {
  field: board(0..9, 0..9)

  state {
    cell: coord(field)
    foxes: coord_list(field, 9) = random_unique()
    bearing: counter 0..9 = 0
  }

  loop {
    cell = read()

    if cell in foxes {
      found_fox()
    }

    scan_from_cell()
    show("--", cell:02, "--", bearing)
  }

  fn found_fox() {
    show(-20)
  }

  fn scan_from_cell() {
    bearing = line_count(foxes, cell)
  }
}

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

1 комментарий
Сергей Король 6 дн

Тот самый из «Мама, папа я — и микрокалькулятор»?

Евгений Степанищев 6 дн

Таких книг много издавалось :-) Но для меня сейчас полезнее короткие справочники.

Добавлено: добавил, кстати, игры оттуда в свой репозиторий!