Каллисто-2: разработка быстродействующего Форта для МК-161

Каллисто-2 будет написана на SP-Forth! Подробнее см. соответствующую тему В Контакте.

Кусочек исходного кода — чтобы было понятно, как это сейчас выглядит:

0xD0 COP КИП0  0xD1 COP КИП1    0xD2 COP КИП2    0xD3 COP КИП3   0xD4 COP КИП4  0xD5 COP КИП5  0xD6 COP КИП6  0xD7 COP КИП7
0xD8 COP КИП8  0xD9 COP КИП9    0xDA COP КИПА    0xDB COP КИПВ   0xDC COP КИПС  0xDD COP КИПД  0xDE COP КИПЕ  0xDF 2OP РКИП
0xE0 COP Кx=00 0xE1 COP Кx=01   0xE2 COP Кx=02   0xE3 COP Кx=03  0xE4 COP Кx=04 0xE5 COP Кx=05 0xE6 COP Кx=06 0xE7 COP Кx=07
0xE8 COP Кx=08 0xE9 COP Кx=09   0xEA COP Кx=0А   0xEB COP Кx=0В  0xEC COP Кx=0С 0xED COP Кx=0Д 0xEE COP Кx=0Е 0xEF 2OP РКx=0

0xF2 COP РРВ/О
0xF4 3OP РРП
0xF6 3OP РРИП

\ -------------------------
\ Исходный код Каллисто-2

\ Инициализация
Cx
9 5 0 0 РРП 9042    \ Адрес таблицы свёрток
1 0 9 9 П6          \ RI := Начало шитого кода - 1
1 6 П9              \ Занесём в R9 адрес NEXT

A: NEXT
КИП6 ВП 2 КИП6 + П7 \ W := REGW[RI++], считываем CFA в R7
КИП7 РРП 9210       \ Находим по CFA адрес обработчика
П8 КБП8             \ Передаём на него управление

ORG 100             \ Обработчик 000
2 РРП 9010          \ Инициализация графического экрана
1 2 8               \ Код буквы "А"
РРП 9020            \ Вывод символа на графический экран
КГРФ                \ Обновляем индикатор
КБП9                \ NEXT

ORG 200             \ Обработчик 001
РРИП 9029           \ Чтение кода нажатой клавиши
КNOT                \ Проверка на 255
Fx≠0 00             \ Дождёмся чего-нибудь, отличного от 255
КБП9                \ NEXT

Полностью исходный код + результат качать отсюда: http://the-hacker.ru/2016/Callisto2-d4.zip

Черновик 4 выводит на экран букву, ждёт нажатия клавиши и выходит по С/П. Работает NEXT (адресный интерпретатор), но пока нет ни меток, ни имён слов. Использование SP Forth позволяет не только избежать ручной компиляции кода МК-161, но также автоматизировать множество вещей, которые в Каллисто Классик, написанной на MK.EXE, приходилось делать вручную.