MK90

A repository devoted to MK 90 soviet computer

View the Project on GitHub Yprits/MK90

Карта памяти картриджа Электроника МК-90 (BASIC V1.0)

структуры данных совместимы с файловой системой RT-11

Диапазон адресов          Содержание
-------------------------------------------
  0x0000-0x03FF       Область загрузчика
  0x0400-0x07FF       Область каталога
  0x0800-0x27FF       Область данных

Загрузчик

Стартовое меню MK-90 предлагает три варианта выбора: BASIC, СМП0, СМП1. При выборе СМП0 (или СМП1) калькулятор считывает код загрузчика с картриджа 0 (или 1) и выполняет его. Картриджи, отформатированные с помощью INIT, содержат код, отображающий сообщение “СМП без загрузчика”:

000000: nop 
000002: jsr r7, @#153700 
000006: jsr r7, @#120536 
000012: mov @#034022, @#164000 
000020: mov #104306, @#164002 
000026: jsr 
00 02 016\r\n smp БЕЗ ЗАГРУЗ^ИКА" 
000061: 
.even 000062: movb (r0)+, r2 
000064: beq 000064 
000066: jsr r7, @#116542 
000072: br 000062

Каталог (директория)

Пример hex-дампа каталога (файл MK90.BIN в архиве mk90prog.zip):

0400: 01 00 00 00 01 00 00 00 04 00
040A: 00 02 EA 27 00 00 BB 0C 01 00 00 00 36 89  ;1-я запись каталога
0418: 00 04 3A 14 A5 14 BB 0C 01 00 00 00 36 89  ;2-я запись каталога
0426: 00 04 9B 54 B8 38 BB 0C 01 00 00 00 36 89  ;3-я запись каталога
0434: 00 02 20 20 20 20 20 20 0D 00 20 20 20 20  ;4-я запись каталога
0442: 00 08

Каждая запись каталога занимает 7 слов (=14 байт). Младший байт в слове располагается перед старшим.

Схема записи каталога

Смещение   Размер                               Содержание
----------------------------------------------------------------------------------------
    0         1     Атрибут

    1         2     Имя файла (2 группы по 3 символа), дополненное пробелами

    3         1     Расширение имени файла (группа из 3-х символов), по умолчанию BAS

    4         1     Количество блоков (секторов), принадлежащих записи каталога. Сумма
                    этих слов для всех записей должна быть равна 16.
                    0x0001 + 0x0001 + 0x0001 + 0x000D = 16
                    
    5         1     Неизвестно

    6         1     Неизвестно

Атрибут записи каталога

  Код             Значение
--------------------------------------
0x0200  Удаленная или свободная запись
0x0400  Занятая запись
0x0800  Конец каталога

Кодировка имени файла

Имена и расширения файлов хранятся в сжатом виде — 3 символа по 2 байта.

      Коды символов (десятичные)
Code Char | Code Char | Code Char | Code Char
   0 blank    10 J        20 T        30 0
   1 A        11 K        21 U        31 1
   ...        ...         ...         ...
   7 G        17 Q        27 $        37 7
   8 H        18 R        28 .        38 8
   9 I        19 S        29 /        39 9

Например, вторая запись каталога по адресу 0x0418 содержит имя файла CIRCLE.BAS . Каждая группа из трех символов кодируется следующим образом:

  1. CIR - коды символов: 3, 9, 18
    • 40×40×3 + 40×9 + 18 = 5178 = 0x143A
  2. CLE - коды символов: 3, 12, 5
    • 40×40×3 + 40×12 + 5 = 5285 = 0x14A5
  3. BAS - коды символов: 2, 1, 19
    • 40×40×2 + 40×1 + 19 = 3259 = 0x0CBB

Эти слова можно найти по адресам от 0x041A до 0x041F. Эту схему кодирования можно рассматривать как числа с основанием 40. Она также известна как Radix-50 (спасибо Алеку Воропаю за это обнаружение).

Область данных

Область данных состоит из 16 блоков (секторов) по 512 байт каждый. Программы хранятся в простом ASCII (ключевые слова не размечены). Они начинаются с пустой строки (последовательность CR,LF) и заканчиваются маркером конца 0x00.

Система не поддерживает фрагментированные файлы, т.е. требует непрерывной группы свободных блоков памяти достаточного размера для хранения файла.