Искра-226/Файловая система: различия между версиями
Panther (обсуждение | вклад) (Новая страница: «{{emuverse}} '''Формат файлов BASIC 02''' — способ хранения программ на дисках Искра-226. Файловая система унаследована от Wang 2200, представление программы — оригинальное и с Wang несовместимо. Программа может храниться в двух видах: '''текстовом''' (плоский текст в...») |
Panther (обсуждение | вклад) мНет описания правки |
||
| (не показано 12 промежуточных версий этого же участника) | |||
| Строка 1: | Строка 1: | ||
{{emuverse}} | {{emuverse}} | ||
''' | '''Файловая система Искры 226''' — способ хранения файлов на дисках [[Искра-226]]. Унаследована от [[Wang 2200]] и совпадает с ней побайтово; содержимое файлов — оригинальное и с Wang несовместимо. | ||
Статья описывает файловую систему, указатель каталога и текстовое представление программ. Отдельно вынесены: | |||
* [[Искра-226/Кодирование BASIC-файлов]] — токенизированная запись программы; | |||
* [[Искра-226/Файлы данных BASIC 02]] — записи, значения и способы доступа; | |||
* [[Искра-226/Графический буфер BASIC 02]] — формат рисунка. | |||
== Диск == | |||
Физический сектор — 128 байт; 77 дорожек по 26 секторов, одна сторона. Физические сектора попарно объединены в логические по 256 байт со сквозной нумерацией. Далее везде подразумеваются логические сектора. Полный объём тома — 1001 сектор, 256 256 байт. | |||
Типы файлов: | |||
* '''ПФ''' — программный файл: программа на Бейсике в текстовом либо оттранслированном виде; | |||
* '''ФД''' — файл данных. | |||
Файлу выделяется непрерывный диапазон секторов, границы записаны в указателе каталога. | |||
{| class="wikitable" | {| class="wikitable" | ||
| Строка 16: | Строка 27: | ||
| следующие N || поток содержимого | | следующие N || поток содержимого | ||
|- | |- | ||
| … || резерв, | | … || резерв, нули | ||
|- | |- | ||
| последний выделенный || | | последний выделенный || концевая запись | ||
|} | |} | ||
Размер файла на диске не меняется, поэтому при перезаписи более коротким содержимым '''хвост не затирается''': там остаются фрагменты предыдущих версий, иногда в другом представлении. Обработку следует прекращать на первой встреченной концевой записи. | |||
Диски прямого доступа (запись по абсолютным адресам секторов) указателя каталога не имеют; формат содержимого таких дисков задаёт программа пользователя. Загрузочные диски с интерпретатором имеют собственный формат: нулевой сектор начинается сигнатурой <code>06 90 09 90 07 90</code>, за ней 18 знаков имени и даты версии. | |||
== Указатель каталога == | |||
Начинается с сектора 0. Первые 16 байт нулевого сектора — параметры диска: | |||
{| class="wikitable" | |||
! Смещение !! Размер !! Значение | |||
|- | |||
| 0–1 || 2 || размер указателя каталога в секторах (<code>LS</code>), старший байт первым | |||
|- | |||
| 2–3 || 2 || текущий конец каталога — первый свободный сектор | |||
|- | |||
| 4–5 || 2 || конец области каталога | |||
|- | |||
| 6–15 || 10 || нули | |||
|} | |||
Размер указателя задаётся при создании каталога оператором <code>SCRATCH DISK</code> параметром <code>LS=</code>, по умолчанию 24, допустимо 1…255; в дальнейшем не меняется. В нулевом секторе помещается 15 записей, в остальных 16. Неиспользованные записи заполнены нулями. | |||
Записи '''не сгруппированы''' в начале указателя и не упорядочены по секторам файлов: номер сектора, в который попадает запись, вычисляется хешированием имени. Для чтения каталога надо пройти все его секторы, пропуская нулевые записи. | |||
=== Хеш имени файла === | |||
Номер сектора указателя вычисляется по «старому» хешу Wang 2200: | |||
имя дополнить пробелами до восьми байт | |||
tmp = 0 | |||
для каждого байта имени: tmp = tmp XOR байт | |||
tmp = 3 × tmp | |||
tmp = (tmp mod 256) + (tmp div 256) | |||
сектор = tmp mod LS | |||
Свёртка выполняется исключающим ИЛИ, не сложением. «Новый» хеш Wang, введённый в MVP OS 2.5, на Искре не применяется. | |||
Хеш '''вырождается при <code>LS</code>, кратном трём''': после умножения на 3 и складывания половинок результат всегда кратен трём, поэтому занятыми оказываются только каждый третий сектор указателя. При <code>LS = 24</code> все записи попадают в секторы 0, 12, 15 и 18. | |||
Запись кладётся в первый свободный слот своего сектора, слоты заполняются подряд от начала. Правило переполнения сектора неизвестно. | |||
Освобождение слота выполняется '''обнулением первых восьми байт''' записи; имя при этом остаётся на диске. Оператор <code>SCRATCH</code> запись не обнуляет, а помечает. | |||
== Запись каталога == | == Запись каталога == | ||
16 байт, | 16 байт, совпадает с Wang 2200. | ||
{| class="wikitable" | {| class="wikitable" | ||
! Смещение !! Размер !! Значение | ! Смещение !! Размер !! Значение | ||
|- | |- | ||
| 0 || 1 || статус | | 0 || 1 || статус, битовое поле; '''бит 0''' — файл вычеркнут | ||
|- | |- | ||
| 1 || 1 || тип файла: <code>80</code> — программа, <code>00</code> — данные | | 1 || 1 || тип файла: <code>80</code> — программа, <code>00</code> — данные | ||
| Строка 43: | Строка 95: | ||
|} | |} | ||
Байт типа '''не различает''' текстовое и | Наблюдаемые значения статуса: <code>10</code> — активна, <code>11</code> и <code>21</code> — вычеркнута, <code>00</code> — свободна. Сравнивать статус на точное равенство нельзя, значим только бит 0. Бит 5 (значение <code>21</code>) предположительно помечает переименование. | ||
Байт типа '''не различает''' текстовое и оттранслированное представление программы: у обоих <code>80</code>. | |||
Оператор <code>LIST DC</code> выводит типы как <code>P</code> (программный), <code>D</code> (данные), <code>SP</code> и <code>SD</code> (вычеркнутые), что соответствует сочетанию байта статуса и байта типа.<ref name="balasanyan" /> | |||
Тип «данные» ничего не говорит о внутреннем устройстве файла: он может содержать как логические записи, так и сырые блоки, записанные оператором <code>DATA SAVE BA</code>. | |||
=== Пример === | === Пример === | ||
0 1 2 3 4 5 6 7 8 9 A B C D E F | |||
10 80 00 31 00 3F 00 00 44 49 47 20 44 45 4D 20 | |||
└───┘ └───┘ └───┘ └─────────────────────┘ | |||
Активная запись, программа, секторы 49…63, имя <code>DIG DEM</code>. | |||
== Размещение файлов == | |||
* Файлы лежат подряд в порядке создания, диапазоны секторов не пересекаются. | |||
* Место вычеркнутого файла заново не занимается: <code>SCRATCH</code> только помечает запись. | |||
* Первый файл начинается с сектора <code>LS</code>, сразу за указателем. | |||
* Поле «текущий конец» равно последнему занятому сектору плюс единица, но обрезается по концу области каталога; при разборе границу надёжнее брать по записям каталога. | |||
== Заголовочный сектор == | == Заголовочный сектор == | ||
| Строка 64: | Строка 125: | ||
| 1–8 || имя файла, дополнено пробелами | | 1–8 || имя файла, дополнено пробелами | ||
|- | |- | ||
| 9 || признак формата записи | | 9 || признак формата записи | ||
|- | |- | ||
| 10–255 || нули | | 10–255 || нули | ||
|} | |} | ||
Байт 9 | Байт 9 (в справочнике<ref name="vtoraya" /> назван «признак защиты») — битовое поле, единственный признак, различающий два представления программы: '''бит 0''' — программа оттранслирована (параметр <code>T</code> оператора <code>SAVE DC</code>), '''бит 2''' — защищена (параметр <code>P</code>); оба вместе соответствуют параметру <code>G</code>. | ||
{| class="wikitable" | {| class="wikitable" | ||
| Строка 101: | Строка 144: | ||
|} | |} | ||
Значения <code>22</code> и <code>23</code> не используются. Текстовое представление — режим по умолчанию, оттранслированное включается явным параметром <code>T</code>. | |||
Защищённая программа после загрузки может только выполняться; режим снимается оператором <code>CLEAR</code>. | |||
== Секторы потока == | == Секторы потока == | ||
Первые два байта каждого сектора потока — служебные, в содержимое не входят. | Первые два байта каждого сектора программного потока — служебные, в содержимое не входят. У секторов файла данных служебный заголовок занимает '''один''' байт. | ||
'''Байт 0''' — позиция сектора: | '''Байт 0''' — позиция сектора: | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! Код !! Смысл | ||
|- | |- | ||
| <code>02</code> || первый сектор потока | | <code>02</code> || первый сектор потока | ||
|- | |- | ||
| <code> | | <code>03</code> || последний сектор потока | ||
|- | |- | ||
| <code> | | <code>1C</code> || концевая запись | ||
|- | |||
| <code>8B</code> || запись целиком в одном секторе (только файлы данных) | |||
|- | |||
| <code>8F</code> || промежуточный сектор | |||
|} | |} | ||
В | В оттранслированных программах все секторы потока идут с маркером <code>02</code>. Позиционная разметка <code>02</code>/<code>8F</code>/<code>03</code> наблюдается в текстовых файлах и в потоках данных. | ||
'''Байт 1''' | '''Байт 1''' программных секторов равен <code>80</code>. Как признак «программа или данные» он непригоден: у секторов данных на позиции 1 стоит первый байт идентификатора значения. Надёжные признаки — байт 9 заголовочного сектора и байт типа записи каталога. | ||
== Концевая запись == | |||
1C <длина: 2 байта, старший первым> | 1C <длина: 2 байта, старший первым> | ||
Остаток сектора — нули. | Остаток сектора — нули. Соответствует по роли байту <code>20</code> в Wang. | ||
Счётчик равен '''собственной позиции записи от начала файла''', считая с единицы, то есть числу занятых секторов вместе с заголовком. Он же — графа «Использовано» в выдаче <code>LIST DC</code>. | |||
* У программных файлов концевую запись пишет сам оператор <code>SAVE DC</code>; она есть всегда. | |||
* У файлов данных её пишет прикладная программа оператором <code>DATA SAVE DC END</code>. Если признак конца не записан, в графе «Использовано» стоит 00001. | |||
* Оператор <code>DATA SAVE DC OPEN</code> пишет в '''последний''' сектор файла запись <code>1C 00 01</code> — единственный случай, когда счётчик не равен позиции. | |||
Запись лежит не обязательно в последнем выделенном секторе: если файлу дали запас или его положили на место вычеркнутого файла большего размера, за ней остаётся нулевой хвост. | |||
Счётчик — не инвариант файловой системы и при разборе ненадёжен: у файлов, записанных не операторами <code>DATA SAVE DC</code>, он произволен. Границы файла следует брать из каталога. | |||
== Текстовое представление == | == Текстовое представление == | ||
Программа хранится плоским текстом. Кодировка — КОИ-8 (ГОСТ 19768-74): прописная кириллица в | Программа хранится плоским текстом. Кодировка — [[КОИ-8]] (ГОСТ 19768-74): прописная кириллица в <code>E0</code>–<code>FF</code>, строчная в <code>C0</code>–<code>DF</code>. Номера строк записаны обычными цифрами. | ||
* Разделитель строк — байт '''<code>85</code>'''. | * Разделитель строк — байт '''<code>85</code>'''. | ||
| Строка 165: | Строка 196: | ||
* Байт <code>24</code> (<code>$</code>) отображается на экране Искры как <code>¤</code>. | * Байт <code>24</code> (<code>$</code>) отображается на экране Искры как <code>¤</code>. | ||
Байт <code>85</code> свободен потому, что диапазон <code>80</code>–<code>9F</code> в КОИ-8 не занят. Тем же байтом машина разделяет строки в символьном буфере операторов <code>SAVE</code> и <code>LOAD</code> и выдаёт нажатие клавиши CR/LF. | |||
Разбор: склеить содержимое секторов, отбрасывая по два служебных байта, разбить по <code>85</code>, отбросить нули. | Разбор: склеить содержимое секторов, отбрасывая по два служебных байта, разбить по <code>85</code>, отбросить нули. | ||
| Строка 175: | Строка 206: | ||
Заголовок сектора, затем <code>5 REM ПЕТРЕНКО …</code>, разделитель, <code>8 PRINT …</code>. | Заголовок сектора, затем <code>5 REM ПЕТРЕНКО …</code>, разделитель, <code>8 PRINT …</code>. | ||
== | == Виды дисков == | ||
{| class="wikitable" | {| class="wikitable" | ||
! | ! Вид !! Признак | ||
|- | |- | ||
| | | с каталогом || байты 0–1 нулевого сектора — разумный <code>LS</code>, дальше 16-байтовые записи | ||
|- | |- | ||
| | | загрузочный || сектор 0 начинается с <code>06 90 09 90 07 90</code> | ||
|- | |- | ||
| <code> | | пакет ассемблера || сектор 0 начинается с <code>7E E1 F3 ED E2</code> (<code>~АСМБ</code>) | ||
|- | |- | ||
| | | прямого доступа || каталога нет, есть заголовочные секторы <code>01 <имя> <признак></code> | ||
|- | |- | ||
| | | пустой || нули | ||
|} | |} | ||
== Отличия от Wang 2200 == | == Отличия от Wang 2200 == | ||
| Строка 510: | Строка 229: | ||
| Запись каталога || 16 байт || совпадает побайтово | | Запись каталога || 16 байт || совпадает побайтово | ||
|- | |- | ||
| Маркер | | Хеш имени || «старый» и «новый» || только «старый» | ||
|- | |||
| Маркер концевой записи || <code>20</code> || <code>1C</code> | |||
|- | |- | ||
| Маркер заголовка || <code>40</code> (<code>50</code> для защищённых) || <code>01</code> | | Маркер заголовка || <code>40</code> (<code>50</code> для защищённых) || <code>01</code> | ||
| Строка 516: | Строка 237: | ||
| Маркеры секторов || битовое поле в старшей тетраде || отдельные значения <code>02</code>/<code>8F</code>/<code>03</code> | | Маркеры секторов || битовое поле в старшей тетраде || отдельные значения <code>02</code>/<code>8F</code>/<code>03</code> | ||
|- | |- | ||
| | | Представление программы || ключевые слова в токенах, остальное ASCII || несовместимо, см. [[Оттранслированное представление BASIC 02]] | ||
|} | |} | ||
Совпадает только уровень файловой системы. Инструментарий Wang для разбора самих программ непригоден. | |||
== Примечания == | == Примечания == | ||
<references> | <references> | ||
<ref name="balasanyan">Баласанян В. Э., Богдюкевич С. В., Шахвердов В. А. Программирование на микроЭВМ «Искра 226». — М.: Финансы и статистика, 1987. — 264 с.: ил | <ref name="balasanyan">Баласанян В. Э., Богдюкевич С. В., Шахвердов В. А. Программирование на микроЭВМ «Искра 226». — М.: Финансы и статистика, 1987. — 264 с.: ил.</ref> | ||
<ref name="vtoraya">Аладьев В. З. и др. Персональный компьютер «Искра-226». Архитектура и программное обеспечение: справочное руководство. — Киев, 1988 | <ref name="vtoraya">Аладьев В. З. и др. Персональный компьютер «Искра-226». Архитектура и программное обеспечение: справочное руководство. — Киев, 1988.</ref> | ||
</references> | </references> | ||
== Источники == | == Источники == | ||
* Баласанян В. Э., Богдюкевич С. В., Шахвердов В. А. Программирование на микроЭВМ «Искра 226». — М.: Финансы и статистика, 1987 | * Баласанян В. Э., Богдюкевич С. В., Шахвердов В. А. Программирование на микроЭВМ «Искра 226». — М.: Финансы и статистика, 1987. | ||
* Аладьев В. З. и др. Персональный компьютер «Искра-226». Архитектура и программное обеспечение. — Киев, 1988. | |||
* [http://www.wang2200.org/disk_org.html Wang 2200 Disk Organization] — файловая система и хеш имени для сопоставления. | |||
* Аладьев В. З. и др. Персональный компьютер «Искра-226». Архитектура и программное обеспечение | * Реконструкция по 42 образам дисков: 303 записи каталога, 94 файла программ. | ||
* | |||
[[Категория:Искра-226]] | [[Категория:Искра-226]] | ||
Текущая версия от 18:38, 26 августа 2026
| Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0. |
Файловая система Искры 226 — способ хранения файлов на дисках Искра-226. Унаследована от Wang 2200 и совпадает с ней побайтово; содержимое файлов — оригинальное и с Wang несовместимо.
Статья описывает файловую систему, указатель каталога и текстовое представление программ. Отдельно вынесены:
- Искра-226/Кодирование BASIC-файлов — токенизированная запись программы;
- Искра-226/Файлы данных BASIC 02 — записи, значения и способы доступа;
- Искра-226/Графический буфер BASIC 02 — формат рисунка.
Диск
Физический сектор — 128 байт; 77 дорожек по 26 секторов, одна сторона. Физические сектора попарно объединены в логические по 256 байт со сквозной нумерацией. Далее везде подразумеваются логические сектора. Полный объём тома — 1001 сектор, 256 256 байт.
Типы файлов:
- ПФ — программный файл: программа на Бейсике в текстовом либо оттранслированном виде;
- ФД — файл данных.
Файлу выделяется непрерывный диапазон секторов, границы записаны в указателе каталога.
| Сектор | Содержимое |
|---|---|
| первый | заголовок файла |
| следующие N | поток содержимого |
| … | резерв, нули |
| последний выделенный | концевая запись |
Размер файла на диске не меняется, поэтому при перезаписи более коротким содержимым хвост не затирается: там остаются фрагменты предыдущих версий, иногда в другом представлении. Обработку следует прекращать на первой встреченной концевой записи.
Диски прямого доступа (запись по абсолютным адресам секторов) указателя каталога не имеют; формат содержимого таких дисков задаёт программа пользователя. Загрузочные диски с интерпретатором имеют собственный формат: нулевой сектор начинается сигнатурой 06 90 09 90 07 90, за ней 18 знаков имени и даты версии.
Указатель каталога
Начинается с сектора 0. Первые 16 байт нулевого сектора — параметры диска:
| Смещение | Размер | Значение |
|---|---|---|
| 0–1 | 2 | размер указателя каталога в секторах (LS), старший байт первым
|
| 2–3 | 2 | текущий конец каталога — первый свободный сектор |
| 4–5 | 2 | конец области каталога |
| 6–15 | 10 | нули |
Размер указателя задаётся при создании каталога оператором SCRATCH DISK параметром LS=, по умолчанию 24, допустимо 1…255; в дальнейшем не меняется. В нулевом секторе помещается 15 записей, в остальных 16. Неиспользованные записи заполнены нулями.
Записи не сгруппированы в начале указателя и не упорядочены по секторам файлов: номер сектора, в который попадает запись, вычисляется хешированием имени. Для чтения каталога надо пройти все его секторы, пропуская нулевые записи.
Хеш имени файла
Номер сектора указателя вычисляется по «старому» хешу Wang 2200:
имя дополнить пробелами до восьми байт tmp = 0 для каждого байта имени: tmp = tmp XOR байт tmp = 3 × tmp tmp = (tmp mod 256) + (tmp div 256) сектор = tmp mod LS
Свёртка выполняется исключающим ИЛИ, не сложением. «Новый» хеш Wang, введённый в MVP OS 2.5, на Искре не применяется.
Хеш вырождается при LS, кратном трём: после умножения на 3 и складывания половинок результат всегда кратен трём, поэтому занятыми оказываются только каждый третий сектор указателя. При LS = 24 все записи попадают в секторы 0, 12, 15 и 18.
Запись кладётся в первый свободный слот своего сектора, слоты заполняются подряд от начала. Правило переполнения сектора неизвестно.
Освобождение слота выполняется обнулением первых восьми байт записи; имя при этом остаётся на диске. Оператор SCRATCH запись не обнуляет, а помечает.
Запись каталога
16 байт, совпадает с Wang 2200.
| Смещение | Размер | Значение |
|---|---|---|
| 0 | 1 | статус, битовое поле; бит 0 — файл вычеркнут |
| 1 | 1 | тип файла: 80 — программа, 00 — данные
|
| 2–3 | 2 | первый сектор файла, старший байт первым |
| 4–5 | 2 | последний сектор файла, старший байт первым |
| 6–7 | 2 | не используются |
| 8–15 | 8 | имя файла, дополнено пробелами справа |
Наблюдаемые значения статуса: 10 — активна, 11 и 21 — вычеркнута, 00 — свободна. Сравнивать статус на точное равенство нельзя, значим только бит 0. Бит 5 (значение 21) предположительно помечает переименование.
Байт типа не различает текстовое и оттранслированное представление программы: у обоих 80.
Оператор LIST DC выводит типы как P (программный), D (данные), SP и SD (вычеркнутые), что соответствует сочетанию байта статуса и байта типа.[1]
Тип «данные» ничего не говорит о внутреннем устройстве файла: он может содержать как логические записи, так и сырые блоки, записанные оператором DATA SAVE BA.
Пример
0 1 2 3 4 5 6 7 8 9 A B C D E F 10 80 00 31 00 3F 00 00 44 49 47 20 44 45 4D 20 └───┘ └───┘ └───┘ └─────────────────────┘
Активная запись, программа, секторы 49…63, имя DIG DEM.
Размещение файлов
- Файлы лежат подряд в порядке создания, диапазоны секторов не пересекаются.
- Место вычеркнутого файла заново не занимается:
SCRATCHтолько помечает запись. - Первый файл начинается с сектора
LS, сразу за указателем. - Поле «текущий конец» равно последнему занятому сектору плюс единица, но обрезается по концу области каталога; при разборе границу надёжнее брать по записям каталога.
Заголовочный сектор
| Смещение | Значение |
|---|---|
| 0 | 01
|
| 1–8 | имя файла, дополнено пробелами |
| 9 | признак формата записи |
| 10–255 | нули |
Байт 9 (в справочнике[2] назван «признак защиты») — битовое поле, единственный признак, различающий два представления программы: бит 0 — программа оттранслирована (параметр T оператора SAVE DC), бит 2 — защищена (параметр P); оба вместе соответствуют параметру G.
| Значение | Символ | Защита | Представление |
|---|---|---|---|
20 |
пробел | нет | текстовое |
21 |
! |
нет | оттранслированное |
24 |
¤ |
есть | текстовое |
25 |
% |
есть | оттранслированное |
Значения 22 и 23 не используются. Текстовое представление — режим по умолчанию, оттранслированное включается явным параметром T.
Защищённая программа после загрузки может только выполняться; режим снимается оператором CLEAR.
Секторы потока
Первые два байта каждого сектора программного потока — служебные, в содержимое не входят. У секторов файла данных служебный заголовок занимает один байт.
Байт 0 — позиция сектора:
| Код | Смысл |
|---|---|
02 |
первый сектор потока |
03 |
последний сектор потока |
1C |
концевая запись |
8B |
запись целиком в одном секторе (только файлы данных) |
8F |
промежуточный сектор |
В оттранслированных программах все секторы потока идут с маркером 02. Позиционная разметка 02/8F/03 наблюдается в текстовых файлах и в потоках данных.
Байт 1 программных секторов равен 80. Как признак «программа или данные» он непригоден: у секторов данных на позиции 1 стоит первый байт идентификатора значения. Надёжные признаки — байт 9 заголовочного сектора и байт типа записи каталога.
Концевая запись
1C <длина: 2 байта, старший первым>
Остаток сектора — нули. Соответствует по роли байту 20 в Wang.
Счётчик равен собственной позиции записи от начала файла, считая с единицы, то есть числу занятых секторов вместе с заголовком. Он же — графа «Использовано» в выдаче LIST DC.
- У программных файлов концевую запись пишет сам оператор
SAVE DC; она есть всегда. - У файлов данных её пишет прикладная программа оператором
DATA SAVE DC END. Если признак конца не записан, в графе «Использовано» стоит 00001. - Оператор
DATA SAVE DC OPENпишет в последний сектор файла запись1C 00 01— единственный случай, когда счётчик не равен позиции.
Запись лежит не обязательно в последнем выделенном секторе: если файлу дали запас или его положили на место вычеркнутого файла большего размера, за ней остаётся нулевой хвост.
Счётчик — не инвариант файловой системы и при разборе ненадёжен: у файлов, записанных не операторами DATA SAVE DC, он произволен. Границы файла следует брать из каталога.
Текстовое представление
Программа хранится плоским текстом. Кодировка — КОИ-8 (ГОСТ 19768-74): прописная кириллица в E0–FF, строчная в C0–DF. Номера строк записаны обычными цифрами.
- Разделитель строк — байт
85. - Строка не пересекает границу сектора; хвост сектора заполняется нулями.
- Байт
24($) отображается на экране Искры как¤.
Байт 85 свободен потому, что диапазон 80–9F в КОИ-8 не занят. Тем же байтом машина разделяет строки в символьном буфере операторов SAVE и LOAD и выдаёт нажатие клавиши CR/LF.
Разбор: склеить содержимое секторов, отбрасывая по два служебных байта, разбить по 85, отбросить нули.
Пример
02 80 35 20 52 45 4D 20 F0 E5 F4 F2 E5 EE EB EF … 85 38 20 50 52 49 4E 54 …
Заголовок сектора, затем 5 REM ПЕТРЕНКО …, разделитель, 8 PRINT ….
Виды дисков
| Вид | Признак |
|---|---|
| с каталогом | байты 0–1 нулевого сектора — разумный LS, дальше 16-байтовые записи
|
| загрузочный | сектор 0 начинается с 06 90 09 90 07 90
|
| пакет ассемблера | сектор 0 начинается с 7E E1 F3 ED E2 (~АСМБ)
|
| прямого доступа | каталога нет, есть заголовочные секторы 01 <имя> <признак>
|
| пустой | нули |
Отличия от Wang 2200
| Wang 2200 | Искра-226 | |
|---|---|---|
| Запись каталога | 16 байт | совпадает побайтово |
| Хеш имени | «старый» и «новый» | только «старый» |
| Маркер концевой записи | 20 |
1C
|
| Маркер заголовка | 40 (50 для защищённых) |
01
|
| Маркеры секторов | битовое поле в старшей тетраде | отдельные значения 02/8F/03
|
| Представление программы | ключевые слова в токенах, остальное ASCII | несовместимо, см. Оттранслированное представление BASIC 02 |
Совпадает только уровень файловой системы. Инструментарий Wang для разбора самих программ непригоден.
Примечания
Источники
- Баласанян В. Э., Богдюкевич С. В., Шахвердов В. А. Программирование на микроЭВМ «Искра 226». — М.: Финансы и статистика, 1987.
- Аладьев В. З. и др. Персональный компьютер «Искра-226». Архитектура и программное обеспечение. — Киев, 1988.
- Wang 2200 Disk Organization — файловая система и хеш имени для сопоставления.
- Реконструкция по 42 образам дисков: 303 записи каталога, 94 файла программ.