Искра-226/Файлы данных BASIC 02
| Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0. |
Файлы данных BASIC 02 — способы записи и чтения данных программой на Искра-226: режимы доступа, устройство логической записи и форматы значений.
Файловая система, указатель каталога и концевая запись описаны в статье Файловая система. Формат рисунка, который программа записывает в файл как обычное символьное значение, — в статье Графический буфер BASIC 02.
Способы доступа
| Приставка | Режим | Адресация |
|---|---|---|
DC |
файл каталога | последовательная, от текущего сектора файла |
DA |
абсолютная адресация | начальный сектор задан в операторе |
BA |
блок 256 байт | то же, служебной разметки нет |
BT |
блочный обмен с устройством | диск не участвует |
Тип файла в записи каталога («данные») о внутреннем устройстве файла не говорит: он может содержать логические записи, сырые блоки от DATA SAVE BA либо и то и другое.
Таблица устройств
Файл открывается на одну из восьми строк таблицы устройств, #0…#7; строка выбирается программой оператором SELECT #n, а не выдаётся системой. У открытого файла строка содержит три адреса: начальный сектор, конечный сектор и текущий сектор.
Оператор DATA SAVE DC CLOSE обнуляет только эти три адреса; адрес самого устройства, назначенный оператором SELECT, сохраняется. Параметр ALL закрывает все открытые файлы.
Операторы
| Токен | Оператор | Действие |
|---|---|---|
1E |
IF END THEN <строка> | переход, если последнее чтение наткнулось на концевую запись |
66 |
DATA LOAD BT | принять блок с устройства |
68 |
DATA SAVE BT | передать блок на устройство |
6E |
DATA SAVE BA | записать 256-байтовый блок по абсолютному адресу |
6F |
DATA SAVE DA | записать логическую запись по абсолютному адресу |
70 |
DATA LOAD BA | прочитать 256-байтовый блок |
71 |
DATA LOAD DA | прочитать логическую запись по абсолютному адресу |
74 |
DATA LOAD DC | прочитать логическую запись с текущего сектора |
75 |
DATA LOAD DC OPEN | открыть существующий файл |
76 |
DATA SAVE DC | записать логическую запись с текущего сектора |
76 + D7 |
DATA SAVE DC END | записать концевую запись |
77 |
DATA SAVE DC CLOSE | закрыть файл |
78 |
DATA SAVE DC OPEN | завести файл в каталоге и открыть |
79 |
DBACKSPACE | сдвинуть текущий сектор назад |
7A |
DSKIP | сдвинуть текущий сектор вперёд |
7B |
LIMITS | выдать границы файла и число занятых секторов |
81 |
SCRATCH | вычеркнуть файл из каталога |
82 |
SCRATCH DISK | создать каталог |
83 |
VERIFY | проверить читаемость области |
Операнды всех перечисленных операторов описаны в статье Оттранслированное представление BASIC 02.
Последовательность работы
Запись в режиме каталога:
DATA SAVE DC OPENзаводит файл в указателе и заполняет строку таблицы устройств тремя адресами. В последний сектор файла записывается1C 00 01; больше при открытии не пишется ничего.DATA SAVE DCпишет логическую запись начиная с текущего сектора и двигает текущий за неё.DATA SAVE DC ENDкладёт концевую запись в текущий сектор и текущего не двигает: она помечает сектор, откуда можно продолжать запись, и следующая запись ляжет на её место.DATA SAVE DC CLOSEобнуляет адреса строки.
Чтение устроено так же, с DATA LOAD DC OPEN и DATA LOAD DC. Прочитав сектор с кодом 1C, оператор чтения ничего не делает, оставляет текущий сектор на концевой записи и взводит признак, который проверяет IF END THEN. Обычная запись признак снимает.
Параметры DSKIP и DBACKSPACE: число записей, BEG, END либо число с параметром S — в секторах.
Абсолютная адресация
Операторы DA и BA получают начальный сектор выражением в самом операторе; каталог при этом не нужен. Необязательный второй операнд — приёмник, куда возвращается адрес сектора за последним занятым; у символьного приёмника это два первых байта двоичным числом.
Диски, записанные только так, указателя каталога не имеют вовсе.
Блочный обмен
Операторы DATA SAVE BT и DATA LOAD BT передают блок байтов без всякой служебной разметки. Устройство задаётся приставкой /<адрес>, причём адрес — выражение, а не сырой байт; чаще всего это переменная.
Название группы устройств по умолчанию (TAPE) вводит в заблуждение: обмен идёт с любым устройством. Адреса из таблицы ФАУ:[1]
| Адрес | Устройство |
|---|---|
05 |
блок отображения символьной информации |
0C |
АЦПУ |
10 |
блок отображения графической информации |
14 |
графопостроитель |
34, 35 |
телекоммуникационный интерфейс: передатчик и приёмник |
Логическая запись
Сектор записи:
<код сектора> <тип> <длина> <данные> <тип> <длина> <данные> …
| Код | Значение |
|---|---|
02 |
первый сектор многосекторной записи |
03 |
последний сектор многосекторной записи |
1C |
концевая запись |
8B |
запись целиком в одном секторе |
8F |
промежуточный сектор |
Служебный заголовок сектора данных занимает один байт, а не два, как у программных секторов; под данные остаётся 255 байт.
Идентификатор значения — два байта:
| Тип | Длина | Значение |
|---|---|---|
00 |
всегда 08 |
число |
40 |
1…253 | строка символов, КОИ-8 |
Документация[1] описывает также целое значение длиной 2 байта, но на дисковых образах такие значения не встречаются: у типа 00 длина всегда 8.
Хвост сектора после последнего значения — нули. Значение, не помещающееся в сектор целиком, переносится в следующий сектор полностью; остаток предыдущего сектора при этом не затирается, и там остаётся копия ранее записанных значений.
Массив в списке записи и чтения разворачивается в свои элементы, строка за строкой.
Формат числа
Восемь байт, двоично-десятичный.
| Байт | Значение |
|---|---|
| 0–5 | цифры 1…12 мантиссы, BCD, старшая первой |
| 6 | порядок, знаковое двоичное (дополнительный код) |
| 7 | старшая тетрада — 13-я цифра мантиссы, младшая — знак: 0 плюс, 1 минус
|
значение = d1 d2 d3 . d4 … d13 × 1000 ^ порядок
Мантисса — 13 цифр с точкой после третьей, что даёт заявленные для машины 13 значащих разрядов. Порядок берётся по основанию 1000, а не 10: нормализованная мантисса лежит в диапазоне [1, 1000).
Первая значащая цифра стоит на позиции 1, 2 или 3, поэтому число значащих разрядов в записи на диск равно 13, 12 или 11 соответственно.
Примеры: 00 10 00 00 00 00 00 00 — единица, 00 80 00 00 00 00 00 00 — восьмёрка.
Десятично-упакованный формат
Операторы PACK( (токен 48) и UNPACK( (5D) укладывают числа в символьное поле по образу печати, вида [+|-] ### [.###] [^^^^].
- Две цифры на байт, старшая тетрада первой, разряды в порядке образа.
- Размер группы: число тетрад = знак плюс количество знаков
#, округлить вверх до целого байта, плюс байт порядка при^^^^. - Образ
####занимает ровно два байта.
Тетрада знака (0 плюс, 1 минус) и байт порядка со знаком на дисковых образах не встречаются и приняты по устройству восьмибайтового числа.
Поток значений переменных
Секторы, следующие за программой в оттранслированном программном файле, содержат значения переменных, записанные в том же формате логической записи. Для файла DIG DEM: сектор начинается идентификатором 02, за ним 25 записей по 10 байт (00 08 и восемь байт значения), последние 5 байт сектора не используются — 1 + 25 × 10 + 5 = 256.
Не установлено
- Кодирование целого значения длиной 2 байта, описанного в документации.
- Тетрада знака и байт порядка в десятично-упакованном формате.
- Токен формы
DATA SAVE DA … ENDи приёмника адреса в скобках уBAиDA: документация их описывает, в оттранслированных файлах они не встречаются. - Округляет или усекает машина разряды, не поместившиеся в восьмибайтовое число.
Примечания
Источники
- Баласанян В. Э., Богдюкевич С. В., Шахвердов В. А. Программирование на микроЭВМ «Искра 226». — М.: Финансы и статистика, 1987.
- Аладьев В. З. и др. Персональный компьютер «Искра-226». Архитектура и программное обеспечение. — Киев, 1988.
- Реконструкция по 65 файлам данных с 42 образов дисков; формат числа — по 12 132 значениям.