Загрузка и запись файлов на магнитофон
Как правило, файл, записанный на магнитной ленте, состоит из двух блоков, первый из которых называется заголовком и содержит информацию о файле (тип, длина и т. п.), второй — собственно данные. Подпрограмма ПЗУ загружает и обрабатывает заголовок и на основе полученной информации загружает данные.
Длина заголовка составляет 17 байт:
байт 0 — тип файла:
0 — бейсик-программа;
1 —числовой массив;
2 — символьный массив ;
3 — двоичный (кодовый) файл.
байты 1...10 — имя файла;
байты 11, 12 —длина блока данных;
байты 13, 14 — для типа 0: номер строки автозапуска;
— для типа 3: начальный адрес загрузки;
байт 14 — для типов 1 и 2 — имя и тип массива в
следующей форме:
биты 0...4 — имя массива (А...Z);
бит 5 — 0, если массив числовой;
бит 6 — 1, если массив символьный;
бит 7 — всегда установлен;
байты 15,16 — длина бейсик-программы.
Загрузка файла без заголовка: CALL 1366 (#0556)
Процедура предназначена для загрузки с ленты блока кодов и проверки записи. Она используется следующим образом:
LD IХ,<начальный адрес>
LD DЕ,<длина блока>
LD А,<флаг>
SCF
CALL 1366 ;вызов процедуры загрузки
RET
В индексный регистр IX загружается адрес ячейки памяти, начиная с которой будет производиться проверка или загрузка блока кодов. В регистровую пару DE помещается длина загружаемого файла в байтах, а в регистр А — так называемый флаговый байт. Он равен нулю, если ожидается заголовок, и 255 — если тело файла (возможны и другие значения флагового байта). Загрузка кодового блока будет производиться, если перед выполнением процедуры был установлен флаг CY, проверка блока — если CY сброшен.
По возврату из процедуры, если загрузка (проверка) произведена успешно, флаг CY устанавливается, в противном случае — сбрасывается.
Прервать загрузку (проверку) блока можно, нажав клавишу Break, при этом на экран выдается сообщение BREAK — CONT repeats. Для запрещения прерывания загрузки нужно несколько изменить программу вызова процедуры:
LD IХ,<начальный адрес>
LD DE,<длина блока>
LD А,<флаг>
SCF
INC D
ЕХ AF,AF'
DEC D
DI
LD A,15 ;номер начального цвета бордюра + 8
OUT (254),A
CALL 1378
LD А,7 ;восстановление цвета бордюра
OUT (254),А
EI
RET
Если при возврате из этой подпрограммы флаг переноса равен нулю,
то это означает, что либо загрузка (проверка) произведена с ошибкой, либо во время загрузки была нажата клавиша Break. Более точно установить причину ошибочного завершения операции можно, опросив клавиатуру.
Запись файла без заголовка; CALL 1218 (#04С2)
Подпрограмма служит для записи данных на магнитофон и вызывается аналогично процедуре загрузки:
LD IХ,<начальный адрес>
LD DЕ,<длина блока в байтах>
LD А,<флаг>
CALL 1218
RET
При нажатии клавиши Break выполнение процедуры будет прервано и выдано сообщение BREAK — CONT repeats, чего можно избежать, запустив процедуру не с адреса 1218, а с 1222.
[свернуть]