MK90

A repository devoted to MK 90 soviet computer

View the Project on GitHub Yprits/MK90

Программирование МК-90 в машинных кодах

Первые 512 байт модуля памяти содержат программу-загрузчик, которую можно загрузить и выполнить, выбрав СМП0 или СМП1 в начальном меню. Код загружается в ячейки ОЗУ 0x0000-0x01FF, а затем выполняется с адреса 0x0000. Указатель стека (SP) инициализируется значением 0x0200. Первая инструкция (по адресу 0x0000) должна быть NOP (код операции 0x00A0).

Загрузчик по умолчанию, написанный командой INIT, просто выводит сообщение “SMP без загрузчика”, затем блокирует систему, но программатор дает возможность помещать туда собственные программы в кодах. На данный момент это единственный известный способ запуска машинного кода в системах BASIC 1.0 (BASIC 2.0 предоставляет эту возможность с помощью команды PATCH).

Примеры программ

Исходный код можно собрать с помощью ассемблера PDPXASM.

Автозапуск для BASIC-программ

Программа может автоматически выполнять любую предопределенную последовательность инструкций BASIC при загрузке из модуля памяти. В частности, он позволяет загружать и запускать программу BASIC всего двумя нажатиями клавиш.

В примере кода выполняется команда LOAD"SMx:AUTO",R. Каждый символ x (в нижнем регистре) в командной строке заменяется загрузчиком на 0 или 1, в зависимости от слота, из которого он был загружен.

Примечание. В BASIC 2.0 опция R инструкции LOAD не работает, по крайней мере, на эмуляторе.

💾 версия для BASIC 1.0

💾 версия для BASIC 2.0

Выключение стартового меню

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

Похоже, что в ПЗУ нет других возможных точек входа.

Чтобы отменить изменения, батарейки должны быть извлечены из калькулятора на некоторое время.

Примечание. В отличие от реального MK-90, эмулятор намеренно не сохраняет содержимое ОЗУ с батарейным питанием между сеансами!

💾 версия для BASIC 1.0

💾 версия для BASIC 2.0

Простые графические процедуры

Набор подпрограмм, выполняющих основные графические функции:

💾 Графические процедуры

Игра “Жизнь”

Эта программа в кодах реализует игру “Жизнь” Конвея. Поскольку ее размер превышает 512 байт, ее придется хранить в области данных картриджа. Чтобы предотвратить перезапись системой, значение в ячейке 0x0412 (область каталога картриджа) изменено с 0x10 на 0x0D. На этом этапе выделяются три последних сектора для программ машинного кода размером до 1,5 КБайт, оставляя оставшееся пространство в 6,5 КБайт доступным для системы. Оригинальный загрузчик заменяется другим, который считывает код из трех последних секторов в оперативную память, а затем запускает его.

Поскольку программа не использует никаких вызовов ROM, она должна работать с любой версией BASIC. Программа может быть прервана только клавишей сброса или выключателем питания.

mk90life

💾 Игра “Жизнь”

Декомпрессор INFLATE

Программа загружается в память МК-90 и выполняет машинный код, сжатый алгоритмом DEFLATE. Это позволяет, например, хранить игру «Бокс» размером 12066 байт на картридже СМП-10 емкостью 10 кБ.

Адаптацию процедуры INFLATE, написанной Петром Фусиком на языке ассемблера 6502, выполнил Петр Пиатек.

Исходная версия 6502 распространяется с подходящей утилитой сжатия.

💾 Декомпрессор INFLATE