A repository devoted to MK 90 soviet computer
Первые 512 байт модуля памяти содержат программу-загрузчик, которую можно загрузить и выполнить, выбрав СМП0 или СМП1 в начальном меню. Код загружается в ячейки ОЗУ 0x0000-0x01FF, а затем выполняется с адреса 0x0000. Указатель стека (SP) инициализируется значением 0x0200. Первая инструкция (по адресу 0x0000) должна быть NOP (код операции 0x00A0).
Загрузчик по умолчанию, написанный командой INIT, просто выводит сообщение “SMP без загрузчика”, затем блокирует систему, но программатор дает возможность помещать туда собственные программы в кодах. На данный момент это единственный известный способ запуска машинного кода в системах BASIC 1.0 (BASIC 2.0 предоставляет эту возможность с помощью команды PATCH).
Исходный код можно собрать с помощью ассемблера PDPXASM.
Программа может автоматически выполнять любую предопределенную последовательность инструкций BASIC при загрузке из модуля памяти. В частности, он позволяет загружать и запускать программу BASIC всего двумя нажатиями клавиш.
В примере кода выполняется команда LOAD"SMx:AUTO",R
. Каждый символ x (в нижнем регистре) в командной строке заменяется загрузчиком на 0 или 1, в зависимости от слота, из которого он был загружен.
Примечание. В BASIC 2.0 опция R инструкции LOAD не работает, по крайней мере, на эмуляторе.
Эта программа навсегда отключает меню «Пуск» и сразу же переходит к интерпретатору BASIC после включения питания или перезагрузки. Он изменяет вектор сброса, хранящийся в ОЗУ с батарейным питанием в микросхеме часов реального времени, чтобы он указывал на «холодный запуск» интерпретатора BASIC вместо обычной процедуры «экран приветствия».
Похоже, что в ПЗУ нет других возможных точек входа.
Чтобы отменить изменения, батарейки должны быть извлечены из калькулятора на некоторое время.
Примечание. В отличие от реального MK-90, эмулятор намеренно не сохраняет содержимое ОЗУ с батарейным питанием между сеансами!
Набор подпрограмм, выполняющих основные графические функции:
Эта программа в кодах реализует игру “Жизнь” Конвея. Поскольку ее размер превышает 512 байт, ее придется хранить в области данных картриджа. Чтобы предотвратить перезапись системой, значение в ячейке 0x0412 (область каталога картриджа) изменено с 0x10 на 0x0D. На этом этапе выделяются три последних сектора для программ машинного кода размером до 1,5 КБайт, оставляя оставшееся пространство в 6,5 КБайт доступным для системы. Оригинальный загрузчик заменяется другим, который считывает код из трех последних секторов в оперативную память, а затем запускает его.
Поскольку программа не использует никаких вызовов ROM, она должна работать с любой версией BASIC. Программа может быть прервана только клавишей сброса или выключателем питания.
Программа загружается в память МК-90 и выполняет машинный код, сжатый алгоритмом DEFLATE. Это позволяет, например, хранить игру «Бокс» размером 12066 байт на картридже СМП-10 емкостью 10 кБ.
Адаптацию процедуры INFLATE, написанной Петром Фусиком на языке ассемблера 6502, выполнил Петр Пиатек.
Исходная версия 6502 распространяется с подходящей утилитой сжатия.