Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
385 | savelij | 1 | |
2 | .TAP-файлы: |
||
3 | ----------- |
||
4 | |||
5 | Эти файлы содержат блоки данных, сохраненных как бы на ленту. Все |
||
6 | блоки начинаются с двух байтов, в которых указано сколько байтов за |
||
7 | ними следует (не считая этих двух байтов). Затем идут сами данные, |
||
8 | включающие флаговый байт и байт контрольной суммы. Байт контрольной |
||
9 | суммы получается в результате последовательной операции XOR для всех |
||
10 | байтов, включая флаговый байт. Например, если вы захотите выгрузить |
||
11 | пару байтов из ПЗУ командой: SAVE "ROM" CODE 0,2, то получите в |
||
12 | результате: |
||
13 | |||
14 | |-----Данные, генерируемые Спектрумом--| |---------| |
||
15 | |||
16 | 13 00 00 03 52 4f 4d 7x20 02 00 00 00 00 80 f1 04 00 ff f3 af a3 |
||
17 | |||
18 | ^^^^^...... длина первого блока (19б.=17б.хэдер+флаг+контр.сумма) |
||
19 | ^^... флаговый байт (00 для хэдера, ff для блока данных) |
||
20 | ^^ первый байт хэдера, указывающий на тип данных |
||
21 | |||
22 | имя файла ..^^^^^^^^^^^^^ |
||
23 | информация в хэдере.......^^^^^^^^^^^^^^^^^ |
||
24 | к.с. хэдера.................................^^ |
||
25 | длина второго блока............................^^^^^ |
||
26 | флаговый байт 2-го блока..............................^^ |
||
27 | первые два байта ПЗУ....................................^^^^^ |
||
28 | контрольная сумма первых двух байтов и флагового байта........^^ |
||
29 | |||
30 | |||
31 | Эмулятор всегда считывает байты с начала блока. Если загружается |
||
32 | меньше байтов, чем есть в наличии, то лишние байты пропускаются и |
||
33 | последний загруженный байт рассматривается как контрольная сумма. Если |
||
34 | запрашивается на загрузку больше байтов, чем есть в наличии, то |
||
35 | загружающая процедура прерывается с включением флага, |
||
36 | свидетельствующего об ошибке ввода с ленты. Обработку ошибки |
||
37 | производит вызываемая Z80 процедура. |
||
38 | |||
39 | Обратите внимание на то, что можно объединять .ТАР-файлы простым |
||
40 | "пристегиванием" их друг к другу, например так: |
||
41 | |||
42 | COPY /B FILE1.TAP + FILE2.TAP ALL.TAP |
||
43 | |||
44 | Для полноты картины я включу сюда же и структуру хэдера. Он всегда |
||
45 | состоит из 17 байтов: |
||
46 | |||
47 | Байт Длина Описание |
||
48 | |||
49 | 1 10 Имя файла (если меньше 10 символов, вставляются |
||
50 | пробелы ) |
||
51 | 11 2 Длина блока данных |
||
52 | 13 2 Параметр 1 |
||
53 | 15 2 Параметр 2 |
||
54 | |||
55 | Тип файла 0,1,2,3 соответствует: программе, числовому массиву, |
||
56 | символьному массиву, блоку кодов. Экранные файлы SCREEN$ |
||
57 | рассматриваются как файлы кодов, начинающиеся в 16384 и имеющие длину |
||
58 | 6912 байтов. Если файл является программой, то параметр-1 содержит |
||
59 | номер строки автостарта или число, большее, чем 32768, если номер |
||
60 | строки автостарта не указан. параметр-2 содержит смещение адреса |
||
61 | программных переменных относительно адреса начала программы. Для блока |
||
62 | кодов параметр-1 содержит адрес, из которого этот блок выгружался, а |
||
63 | параметр 2 содержит число 32768. Для файлов данных (массивов) байт, |
||
64 | расположенный в позиции 14 содержит имя переменной. |
||
65 | |||
66 | Вcегда Ваш, RomanRom2 |