понедельник, 4 сентября 2023 г.

Acorn DFS disc format

Предисловие переводчика (моё то есть - владельца этой страницы)


У меня на гитхабе лежит файловая система для флеш памяти, которую Самсунг электроникс разрабатывал в Москве несколько лет без моего участия. Когда я приехал в Москву в 2012 я уже не мог повлиять на ход процесса в основном из за укро-польских диверсантов, которые там окопались. В Частности Сабко и ещё одна дама. Сабко был уникальный в отделе человек тем что умел пить седжу с корейскими менеджерами и говорить хорошо на корейском языке.

А по роду своему был один из первых вайтишников в стране. Поэтому имел 5 ранг, как и все тим-лидеры. Но в отличии от остальных, был пустой как пробка.


Так вот можно, конешно, взять ту файловую систему и через адаптер подключить к старому компьютеру, но это не имеет смысла. Она хотя и бестолковая, но еще и объемная. Поэтому тут будем разбирать оригинальную файловую систему с которой работали создатели игры элита. Напоминаю что элита это не только те кто умеют быстро на клавиши нажимать, но еще и отличаются выдающимися умнственными аналитическими способностями. А именно могут удерживать в памяти человека одновременно сотни переменных и благодаря этому по сути собирать код без компилятора. Ну или хотя бы быстро находить решения по полноценному использованию кода.


Вот такие люди не занимались гриндерством. Не убивали по напрасну силы и тысячи часов детства и юнешества, а открыли для себя встроенный в элиту один из первых интерпретируемых асемблеров доменных, реализованных именно для задачи создания своей галактики, планеты, звезд, станции и кораблей. Посмотрим, были ли в этой файловой системе зацепки, которые давали не нулевой шанс выйти этим людям на след полного овладения игрой элита


Дисковый формат Acorn DFS


 https://beebwiki.mdfs.net/Acorn_DFS_disc_format


Acorn DFS — это простая система хранения данных, разработанная компанией Acorn Computer для линейки 8-битных микрокомпьютеров. Он обеспечивает хранение до 31 файла и 200 килобайт данных на одностороннем диске и до 124 файлов и 800 килобайт на полностью оборудованном BBC Micro с двумя двусторонними дисководами.

История

Формат Acorn DFS (система хранения дисков) был представлен в серии модульных компьютеров System в конце 1970-х годов. Карты интерфейса диска были основаны на контроллере гибких дисков Intel 8271 (FDC).


В 1981 году Acorn разработал интерфейс Proton (позже ставшего BBC Micro) практически без изменений. Это была серьезная ошибка для Acorn, поскольку в течение двух лет запасы 8271 оказались в дефиците, и на смену им пришли контроллеры двойной плотности. Ряд сторонних поставщиков предложили интерфейсные платы, соответствующие разъему 8271; по большей части они были совместимы с Acorn DFS, но также предлагали свои собственные форматы двойной плотности.


Acorn добилась успеха в 1985 году, установив контроллер WD1770 в модель B+, но не расширила DFS, чтобы воспользоваться преимуществами дополнительной емкости хранилища. Тем временем их пакет расширения Plus 3 для Electron включал в себя новый 3½-дюймовый дисковод и, эксклюзивно, ADFS следующего поколения, в котором в полной мере использовалась двойная плотность. И DFS, и ADFS были встроены в компьютеры серии Master до того, как серии Master Compact и Archimedes перешли на ADFS.


Физический формат

Acorn DFS — это односторонний формат с одинарной плотностью и 40 или 80 дорожками. Двусторонний диск может содержать два тома DFS. Каждая дорожка содержит десять секторов по 256 байт, пронумерованных от 0 до 9.


Стандартным физическим носителем является 5¼-дюймовая дискета, поскольку это был единственный разумный вариант в 1981 году. «Удобные для образования» 3-дюймовые и 3½-дюймовые форматы, хотя и продавались пользователям BBC в начале 1980-х годов, не прижились как DFS носители. Но с тех пор, как машины и ПК ADFS стали использовать последнее, у него появилась тайная и постоянная база пользователей.


Поскольку этот формат был впервые реализован на контроллере гибких дисков Intel 8271, он представляет собой вариант формата дискет IBM 3740, и большая часть терминологии была перенесена. Более подробную информацию на более низком уровне см. в техническом описании Intel 8271.


Идентификаторы секторов

Каждому сектору присваивается идентификатор во время форматирования; параметры идентификатора, перечисленные ниже, используются DFS и контроллером гибких дисков для адресации секторов.


C номер цилиндра варьируется от 0 на самой внешней дорожке до 39 или 79 на самой внутренней дорожке.

H, номер заголовка = 0. Acorn DFS игнорирует это после форматирования. Некоторые форматировщики DFS устанавливают значение 1 на верхней поверхности диска (что соответствует дискам 2 или 3).

R, номер записи идет последовательно от 0 до 9 внутри каждой дорожки. Стандартный перекос колеи равен 3; то есть сектора, имеющие R = 0, являются первым сектором первой дорожки, четвертым сектором второй дорожки, седьмым сектором третьей, десятым сектором четвертой и так далее.

N, длина записи = 1, что показывает, что длина сектора равна 27 + 1, или 256 байт.

Все эти параметры потенциально могут принимать любые значения от 0 до 255, что сбивает с толку Acorn DFS и некоторые нестандартные контроллеры. Некоторые схемы защиты от копирования используют эту функцию.


Размер Gap

Формат IBM 3740 определяет пять видов промежутков, которые появляются в начале и конце каждой дорожки, между секторами и внутри секторов, чтобы дать аппаратному обеспечению дискеты время для стабилизации и подготовки. При форматировании 8271 принимает параметры, определяющие длину трёх таких промежутков. Подробную информацию о зазорах и их расположении см. в техническом описании Intel 8271.


На практике параметры промежутков могут варьироваться в довольно широком диапазоне и по-прежнему работают, а некоторые сторонние форматировщики настраивают размеры промежутков, чтобы улучшить стандартный форматтер Acorn. Утилиты *FORM40 и *FORM80 на диске с утилитами форматируют с помощью команды &63 и параметров <номер дорожки>, &10, &2A, &00, &10. То есть они указывают gap3 = gap1 = &10, чтобы записать 16 байтов &FF плюс 6 байтов &00; и gap5 = 0, что устраняет пробел перед индексом и метку адреса индекса.


В некоторых сторонних форматах DFS для gap1 и gap3 установлено значение &12.


Формат каталога

Прежде чем Acorn DFS сможет надежно использовать диск, его необходимо отформатировать и записать пустой каталог в первые два сектора. Это делается автоматически утилитами *FORM40 и *FORM80 и их эквивалентами сторонних производителей. Чтобы создать пустой каталог, программе достаточно очистить два сектора, а затем инициализировать поле размера диска.


Поля упакованы в каталоге по следующей схеме:


Поля в файле описания диска

Disc titleUp to 12 printable ASCII characters, padded with NULs (&00) or spaces. The first eight characters are placed in sector 0 bytes 0 to 7, the last four characters in sector 1 bytes 0 to 3.
Cycle numberЗначение в двоично-десятичном формате (BCD), где каждый шестнадцатеричный полубайт принимает значение от 0 до 9. Оно начинается с &00 и увеличивается при каждой перезаписи каталога. Предоставляет простую систему контроля версий и позволяет приложениям проверять актуальность своих внутренних копий каталога. Номер цикла хранится в секторе 1 байте 4.
File offsetСмещение последней допустимой записи файла в каждом секторе каталога. Следовательно, это в 8 раз больше количества файлов. На диске может быть до 31 файла. Смещение файла хранится в секторе 1, байте 5.
Boot optionВыбор действия, которое будет выполняться при загрузке диска. Поле использует два бита байта 6 в секторе 1:
Bit 5Bit 4Action
00No action
01*LOAD $.!BOOT
10*RUN $.!BOOT
11*EXEC $.!BOOT
Disc sizeДо 12 печатных символов ASCII, дополненных NUL (&00) или пробелами. Первые восемь символов помещаются в байты от 0 до 7 сектора 0, последние четыре символа - в байты от 0 до 3 сектора 1.

Примечание переводчика: Уже виден принцип структурирования. Данные размещаются сверху вниз. С заранее известными размерами каждого поля в дескрипторе. Допустимы переносы, чтоб не делать выравнивание по битам или байтам или блокам. Но зато задачи дефрагментирования не стоит в принципе. То есть принцип ростой. Если знать таблицу, её начало, и смещение к нужной строчке, то прочитать серию логически связанных данных довольно просто, но надо знать где данные этой серии заканчиваются. По тому же самому принципу размещены параметры игры в начале загружаемого файла элиты. Запуск игры осуществляет команда. 

*RUN  !BOOT

Просмотр доступных файлов:

*CAT

Мы видим что все команды отдаются заглавными буквами. Вот эта особенность важна. Мы уже знаем что в игре пользователи обычно набирают имена файлов и ассоциируют их с именем капитана. И делают это тоже большими буквами.

Поля дескриптора файла

В каталоге имеется место для 31 файловой записи. Каждая запись занимает восемь байт в каждом из двух секторов каталога. В приведенных ниже описаниях к смещениям байтов можно добавить любое число, кратное 8–240.

Файлы должны быть расположены в порядке убывания начального сектора без пробелов в каталоге. Пустым файлам должен быть присвоен начальный сектор 2. Файлы не могут быть фрагментированы, но между файлами могут быть свободные сектора.

File nameОт одного до семи допустимых символов имени файла, хранящихся в байтах сектора 0 с 8 по 14. Допустимыми символами являются печатаемые символы ASCII от &20 до &7E включительно, за исключением . : " # * и пробел. Поле дополняется пробелами. При открытии файла DFS ищет его по имени.
DirectoryОдин допустимый символ имени файла хранится в младших 7 битах сектора 0 байта 15. Идентифицирует каталог (пространство имен), которому принадлежит файл. Каталоги DFS аналогичны каталогам ADFS, DOS или Linux, за исключением того, что они не могут быть вложенными (все они являются корневыми каталогами) и используют общий каталог томов. Комбинация имени файла и каталога должна быть уникальной на томе.
AttributeЕсли установлен старший бит сектора 0 байта 15, то файл блокируется и не может быть изменен или удален.
Load address18-битный адрес в памяти, по которому файл должен быть *LOAD по умолчанию. Младшие 8 бит находятся в секторе 1, байт 8; следующие 8 бит в секторе 1, байт 9; два старших бита находятся в битах 2 и 3 байта 14 сектора 1. Если файл не предназначен для *ЗАГРУЗКИ (например, последовательный файл или текст), все 18 бит должны быть установлены.
Execution address18-битный адрес в памяти, по которому осуществляется переход, если файл имеет статус *RUN. Это не обязательно должно находиться в пределах загруженного файла. Младшие 8 бит находятся в секторе 1, байте 10; следующие 8 бит в секторе 1 байт 11; два старших бита находятся в битах 6 и 7 байта 14 сектора 1. Если файл представляет собой последовательный файл или текст, то должны быть установлены все 18 битов.
File length18-битное значение, указывающее количество байтов в файле. Младшие 8 бит находятся в секторе 1, байт 12; следующие 8 бит в секторе 1 байт 13; два старших бита находятся в битах 4 и 5 сектора 1 байта 14.
Start sector10-битный адрес логического блока первого сектора, содержащего файл. Младшие 8 бит находятся в секторе 1, байт 15; два старших бита находятся в битах 0 и 1 байта 14 сектора 1. Номера цилиндра и записи представляют собой результат и остаток, соответственно, когда LBA делится на 10. Начальный сектор 0 или 1 недействителен, как и файл. перекрывать каталог.

Примечание по адресам загрузки и выполнения: если установлены биты 16 и 17 адреса, адрес относится к памяти процессора ввода-вывода, и OSFILE вернет адрес, объединенный ИЛИ с &FFFF0000 в своем блоке параметров. В противном случае это адрес в памяти второго процессора, и OSFILE вернет адрес как есть. На практике биты иногда оказываются пустыми, когда их следует установить.

Обратие внимание на символ # диеза в названии файла, именно он будет ключевым символом для входа в тайный интерфейс игры. Вот мы нашли первый ключик для настоящего теста элиты.

Концепция имени файла и каталога так же используется в организации данных в оперативной памяти игры. Поэтому в своем транслируемом ассеммблере, доменном сокращенном варианте ассеммблера процессора 6502 создатели игры используют аналогию индекс-адрес и папка-файл. Посмотрим потом попробуют ли они использовать двухбуквенные мемоники сторочные, прописные или смешенные. 

Что характерно массивы описания кораблей и пилота так же были вначале 32 байта, как и общее количество DFS файлов на дискете , включая нулевой служебный сектор. Затем уже они стали 34 и добавилось еще 2 байта специального смешенного назначения. 

Если не знать о тайной консоли то не всегда понятно для чего в структуре переменных в памяти есть те или иные дополнительные байты, а они могут служить пробелами или нулевыми символами для облегчения выбора данных из памяти. Ровно так ы между секторами.Старший бит сектора 15 байта в файловой системе блокирующий изменения. 

Точно так же в памяти игры по завершению данных корабля есть байт якобы для выбора кегля шрифта из 3 вариантов. Смотрится довольно загадочно, но нам это подсказка и второй ключь о том как включить возможность изменения данных в игре, прямо в памяти. Очень может быть, что создатели игры использовали части кода этой операционной ситемы в игре, чтоб не усложнять себе отладку и экономить время на разработку. Ну или хотя бы заглядывали в код ОС DFS, как в поварскую книгу.

Двоично-десятичная форма числа позволяет просто отбрасывать младшие разряды для округления. этим же приемом пользовались создатели игры при переносе реальных адресов кораблей и планет точных в справочно-имформационные которые отображаются на радаре, компасе и в информационной системе корабля (экраны с текстами по состоянию в контексте ситуации - атака, пауза, станция, космос, пространство ведьм и т.д.)


Идентификация и проверка образа диска DFS

В отличие от своего преемника ADFS, формат DFS не содержит строк самоидентификации или контрольных сумм, поэтому распознавание диска или образа диска как Acorn DFS — сложный и ненадежный процесс.

Если у вас есть дискета в руках, часто бывает достаточно убедиться, что ее физический формат тот же (см. выше), поскольку Acorn DFS является основным производителем. С другой стороны, файлы образов дисков DFS обычно имеют расширение .ssd или .dsd, что указывает на односторонний или двусторонний образ диска соответственно.

Часто задача состоит в том, чтобы определить, какой вариант формата содержит диск или образ. Это скорее вопрос поиска действительных каталогов в соответствующих местах.



ASCII

ASCII, американский стандартный код обмена информацией, представляет собой 7-битный набор символов, используемый в сериале BBC Micro.

Он включает в себя набор управляющих кодов для передачи данных, которые не имели отношения к дисплею BBC Micro и поэтому повторно использовались в качестве команд VDU.

Серия BBC Micro поддерживает 8-битные символы, поэтому символы более высокого порядка (значения от 128 до 255) могут определяться пользователем во всех РЕЖИМАХ, кроме РЕЖИМА 7. ОС RISC заранее определяет набор символов ISO Latin 1, который представляет собой 8-битный набор символов.

Существуют некоторые различия между стандартным ASCII и двумя наборами символов BBC Micro. В РЕЖИМАХ от 0 до 6 обратная галочка (`) заменяется знаком решетки (£), а вертикальная черта (|) прерывается (¦). С другой стороны, РЕЖИМ 7 — это режим телетекста, набор символов которого в основном представляет собой ASCII с несколькими замененными и перемещенными символами. OSWRCH преобразует три символа ASCII в их эквиваленты телетекста перед сохранением их в экранной памяти MODE 7.

В BASIC ASC возвращает значение символа ASCII. CHR$ создает символ из его значения ASCII, а VDU печатает символы по значению.

Standard ASCII character set
0010203040506070
00NULDLE  (Space)0@P`p
01SOHDC1 !1AQaq
02STXDC2"2BRbr
03ETXDC3#3CScs
04EOTDC4$4DTdt
05ENQNAK %5EUeu
06ACKSYN&6FVfv
07BELETB'7GWgw
08BSCAN(8HXhx
09HTEM)9IYiy
0ALFSUB* :JZjz
0BVTESC+ ;K[k{
0CFFFS,<L\l|
0DCRGS-=M]m}
0ESORS.>N^n~
0FSIUS/ ?O_oDEL
Differences in standard ASCII and BBC character sets
ASCII value (hex)(decimal)Standard characterIn MODES 0 to 6In MODE 7Teletext value (hex)
2335###5F
5B91[[5B
5C92\\½5C
5D93]]5D
5E94^^5E
5F95__60
6096`££23
7B123{{¼7B
7C124|¦7C
7D125}}¾7D
7E126~~÷7E

По АСКИИ кодам и символам есть один ньюанс. Некоторые символы по коду совпадают с недокументируемыми командами микропроцессора 6502. Так же в этом процессоре есть особенности адресации. Если их не знать и читать исходный код, не проверяя каждый алгоритм на железе. А тестов тогда было мало автоматических. То по сути можно не правильно интерпритировать исходные коды. Что и случилось с большим количеством доморощенных маменьких хакеров без опыта. Мало кто смог взломать эту игру понастоящему.

Чтобы проверить, что пара секторов содержит действительный стандартный каталог DFS.

Сначала убедитесь, что все биты, отмеченные белым или кремовым на приведенной выше диаграмме, являются нулями; в противном случае каталог может быть немедленно отклонен.
Проверьте также, что смещение файла кратно 8.
Размер диска должен составлять от 2 до 800 секторов включительно, хотя формат допускает до 1023 секторов, а образы дисков могут содержать до этого количества.
Название диска состоит из печатных символов ASCII, дополненных NUL или пробелами.
Для каждой используемой записи файла:
Поле имени файла должно содержать от одного до семи допустимых символов и быть дополнено пробелами. Допустимыми символами являются печатные символы ASCII от &20 до &7E включительно, за исключением . : " # * и пробел.
Символ каталога (без бита атрибута) должен быть допустимым символом имени файла.
Имя файла (с учетом символа каталога) должно быть уникальным.
Начальный сектор должен быть больше 1 и меньше размера диска.
Пропуск файлов нулевой длины:
Стартовые сектора должны идти строго по убыванию.
Ни один файл не может перекрывать предыдущий в каталоге. То есть start_sector_2 + ((length_2 + 255) DIV 256) ≤ start_sector_1.
Ни один файл не может выходить за край диска. То есть start_sector + ((длина + 255) DIV 256) ≤ размер_диска. Аналогично, первый файл в каталоге не должен перекрывать воображаемый файл, поле начального сектора которого является полем размера диска.


Дальнейшая эвристика

Любой каталог, соответствующий вышеуказанному, является действительным каталогом DFS; однако лишь небольшая часть из них похожа на каталоги, увиденные в реальной жизни. В качестве неформального теста пара секторов, которые соответствуют многим из следующих значений, скорее всего, будет каталогом:


Размер диска составляет 400 секторов (40 дорожек) или 800 секторов (80 дорожек).

В каталоге $ есть файл с именем !BOOT.

16-й и 17-й биты адресов загрузки и выполнения (exec) полностью очищены или установлены в каждой записи файла.

В нескольких каталогах мало каталогов или несколько уникальных имен.

Большинство символов каталога — $ (по умолчанию).

Некоторые файлы имеют адреса загрузки в виде &3nn00 (nn=0E, 11, 19, 1B, 1D, 1F или 21) и адреса выполнения &3801F или &38023. (БАЗОВЫЕ программы.)

Некоторые файлы имеют одинаковые адреса загрузки и выполнения, обычно &xx00 или &3xx00, и часто имеют длину &yy00. (Дампы экрана и изображения машинного кода.)

Некоторые файлы имеют адреса загрузки и выполнения 0, &30000 или &3FFFF (текстовые и последовательные данные).

Размер многих файлов меньше 2 КБ; несколько файлов размером более 20К; никаких файлов размером более 64 КБ, кроме текста и последовательных данных.

В именах файлов очень мало строчных букв.

Имена файлов содержат часто встречающиеся пары букв. 


Как видим режим написания текста смешенным кеглем это что то экстроординарное. Маленькие строчные буквы то же встречаются редко. Так же обращается внимание на частые пары букв, которые по факту в игре выводятся одним символом, который транслируется в 2 буквы. И за счет этого таблица кодов в игре более расширенная. это третий ключ для победы - надо смотреть какие именно коды были НЕ ВЫБРАНЫ для всех надписей на экране. Потому что те которые часто встречаются, пошли на название планет в Галактиках.


Варианты

Acron cистема DFS

Диски серии System имеют тот же формат каталога, что и формат каталога BBC Micro, за исключением того, что все записи находятся в каталоге " " (пробел), диски не имеют номера цикла, а файлы не имеют битов 16 и 17 загрузки и адреса выполнения[1]. Места, которые они могли бы занять, зарезервированы и должны быть очищены. Эту задачу выполняет программа BASIC под названием DCONV, находящаяся на диске с утилитами.


Уотфорд 62 DFS

Эта система размещает второй каталог в секторах 2 и 3 дорожки 0, позволяя разместить 62 файла на одном томе. Чтобы идентифицировать второй каталог, он устанавливает его заголовок размером 12 × &AA байт.


Без должной осторожности система, на которой работает Acorn DFS, может повредить диск Watford, поскольку она не знает о дополнительных файлах. В такой системе пользователь может запустить утилиту *SWAP для обмена каталогами. На практике в первом каталоге есть специальная запись (каталог!, имя!!!!!!!, длина &200, начальный сектор 2), защищающая второй от перезаписи.


Если какой-либо файл в первом каталоге начинается перед сектором 4 и не является специальным файлом, диск не является диском Watford DFS.


Опус DDOS

Это формат двойной плотности, но он упоминается здесь, поскольку каталоги томов основаны на Acorn DFS.


Диски DDOS разделены на от одного до восьми томов. Трек 0 зарезервирован для каталогов томов в стиле DFS, а также каталога диска, уникального для DDOS.


В каждом томе каталога:


Начальный сектор может быть на любое число меньше размера диска, поскольку DDOS добавляет смещение раздела, и поэтому каталог не находится в том же пространстве, что и файлы.

Размер диска — это размер текущего тома. Это 11-битная величина, старший бит находится в бите 2 сектора 1, байте 6.

Если и только если этот бит установлен:

Длина файла крадет дополнительный бит из адреса выполнения каждого файла (бит 6 сектора 1, байт 14+n).

Начальный сектор крадет дополнительный бит из адреса загрузки каждого файла (бит 2 сектора 1, байт 14+n).


Уотфорд DDFS

Это также формат двойной плотности с каталогами, похожими на Acorn DFS. Он использует 19-битную длину файлов и 11-битные LBA, но «лишние» биты хранятся в верхних битах названия диска и имен файлов, которые очищаются в Acorn DFS. 


Приложения, поддерживающие формат Acorn DFS

On physical discs

  • DFS Xfer, part of DFS Explorer by Jon Welch, runs between a BBC Micro fitted with DFS and a PC, and transfers images of physical discs over a serial link.
  • Xfer in C, by Jon Welch and others, is the CLI based predecessor of DFS Xfer and also transfers individual files.
  • Omnidisk / Omniflop, by Sherlock Consulting, reads and writes several native formats, including Acorn DFS, on compatible PCs.
  • DiskToImg and ImgToDisk, runs on BBC/Master or RISC OS.
  • Anadisk, by Sydex, Inc. is an older shareware utility to produce a disc image from a physical disc on compatible PCs.
  • Plenty of utility ROMsmagazine listings and PD programs for the BBC Micro have built-in support for the DFS catalogue; primarily because Acorn DFS's API does not offer a machine readable catalogue of all files on the drive.

In disc images

  • DFS Explorer, by Jon Welch, is a GUI-driven Windows application to manipulate DFS disc images including those transferred by DFS Xfer.
  • Omnidisk / Omniflop, by Sherlock Consulting, will also display, add and extract files from DFS disc images.
  • bbcim, by W.H.Scholten, is a versatile, CLI-based Linux tool to manipulate many types of BBC disc image.
  • MkImg and UnImg, runs on BBC/Master, RISC OS or Windows.

Вот с таких Синглетонов или Глобальных переменных начинается каждая страница програмы в игре.  Две первые буквы в их названии  - значат скорее всего Открытый Стандарт. Они служили для взаимопонимания программистов и нженеров по железу. А так же людей разных стран, если железо производили в отличной компании или стране от самого завода производителя железа. Или для взаимопонимания между отделами компании расположенных в различных странах.





Комментариев нет: