Blame | Last modification | View Log | Download | RSS feed | ?url?
.TAP-файлы:
-----------
Эти файлы содержат блоки данных, сохраненных как бы на ленту. Все
блоки начинаются с двух байтов, в которых указано сколько байтов за
ними следует (не считая этих двух байтов). Затем идут сами данные,
включающие флаговый байт и байт контрольной суммы. Байт контрольной
суммы получается в результате последовательной операции XOR для всех
байтов, включая флаговый байт. Например, если вы захотите выгрузить
пару байтов из ПЗУ командой: SAVE "ROM" CODE 0,2, то получите в
результате:
|-----Данные, генерируемые Спектрумом--| |---------|
13 00 00 03 52 4f 4d 7x20 02 00 00 00 00 80 f1 04 00 ff f3 af a3
^^^^^...... длина первого блока (19б.=17б.хэдер+флаг+контр.сумма)
^^... флаговый байт (00 для хэдера, ff для блока данных)
^^ первый байт хэдера, указывающий на тип данных
имя файла ..^^^^^^^^^^^^^
информация в хэдере.......^^^^^^^^^^^^^^^^^
к.с. хэдера.................................^^
длина второго блока............................^^^^^
флаговый байт 2-го блока..............................^^
первые два байта ПЗУ....................................^^^^^
контрольная сумма первых двух байтов и флагового байта........^^
Эмулятор всегда считывает байты с начала блока. Если загружается
меньше байтов, чем есть в наличии, то лишние байты пропускаются и
последний загруженный байт рассматривается как контрольная сумма. Если
запрашивается на загрузку больше байтов, чем есть в наличии, то
загружающая процедура прерывается с включением флага,
свидетельствующего об ошибке ввода с ленты. Обработку ошибки
производит вызываемая Z80 процедура.
Обратите внимание на то, что можно объединять .ТАР-файлы простым
"пристегиванием" их друг к другу, например так:
COPY /B FILE1.TAP + FILE2.TAP ALL.TAP
Для полноты картины я включу сюда же и структуру хэдера. Он всегда
состоит из 17 байтов:
Байт Длина Описание
0 1 Тип файла (0,1,2 или 3)
1 10 Имя файла (если меньше 10 символов, вставляются
пробелы )
11 2 Длина блока данных
13 2 Параметр 1
15 2 Параметр 2
Тип файла 0,1,2,3 соответствует: программе, числовому массиву,
символьному массиву, блоку кодов. Экранные файлы SCREEN$
рассматриваются как файлы кодов, начинающиеся в 16384 и имеющие длину
6912 байтов. Если файл является программой, то параметр-1 содержит
номер строки автостарта или число, большее, чем 32768, если номер
строки автостарта не указан. параметр-2 содержит смещение адреса
программных переменных относительно адреса начала программы. Для блока
кодов параметр-1 содержит адрес, из которого этот блок выгружался, а
параметр 2 содержит число 32768. Для файлов данных (массивов) байт,
расположенный в позиции 14 содержит имя переменной.
Вcегда Ваш, RomanRom2