1 Отредактировано garnizon (21-10-2021 22:18)

Тема: Список: T I A B S R A B

Вы вероятно знаете что эпловская DOS 3.3 использовала 8 типов обозначения файлов T I A B S R A B
Агатовский вариант : T I A B S П К Д

Почему эпловцы сделали такой ограниченный список??? там места для их хранения достаточно, можно было несколько десятков типов запилить, но , видно, че-то экономили опять. Не знаю что там можно сэкономить - всё равно под тип 7 бит отводится - 128 комбинаций.

Агатовские ДОСы тоже пилили на основе Эпловских исходников, там процедура распаковки этих 7 бит в буквы.

ADE8 - BD C8 B4 "=H4" LDA B4C8, X
ADEB - 29 7F .. ".ъ" AND #7F
ADED - A0 07 .. " ." LDY #07
ADEF - 0A .. .. "." ASL A
ADF0 - 0A .. .. "." ASL A
ADF1 - B0 03 .. "0." BCS ADF6
ADF3 - 88 .. .. "." DEY
ADF4 - D0 FA .. "PЗ" BNE ADF0
ADF6 - B9 A7 B3 "9'3" LDA B3A7, Y

1) отбрасывает старший бит (там бит защиты)
2) если получился 0 - переходит на шаг 8
3) сдвигает байт вправо
4) переходи на шаг 2
8) выводит букву номер N из списка "TIABSПКД" , где N - число выполненных сдвигов на шаге 3

Т.е. старший бит - признак защиты (lock), а дальше ищется наиболее старший единичный бит и по его номеру ставиться тип.

Кажется, что проще было бы в младших разрядах просто хранить код буквы - можно было бы все знаки использовать эпловских.
Всё равно при поиске файлов внутри ДОСа , при вызове процедуры поиска , ей передаётся этот внутренний код в виде байта, какая разница - букву передать или вот эти константы - 2 - A , 4 - B, 1 - I, 0 - T......  Ничего не упрощается и не улучшается.

Т.е. почему используется такое сложное преобразование кода в букву, хотя можно было просто хранить ASCII-код буквы?
Почему просто не взять LDA b4C8,X / and #7F и остальное убрать? Тогда можно было бы обойтись без таблицы b3a7...

2

Re: Список: T I A B S R A B

Тут два возможных объяснения:

  1. во-первых, в 2018 году, зная историю, легко говорить о десятках типов файлов. Но в 1978 году никто не ожидал никаких десятков типов. Я думаю, у разработчиков и времени особо раздумывать не было - DOS 3.0 был написан с января 1978 по июнь 1978. В DOS 3.1 было всего 4 типа файлов - TIAB.

  2. поле типа - это битовое поле. Каждый бит - один тип файла. Битовые поля используются, когда нужно задавать независимые однобитные значения. Например, признак блокировки файла - он никак не зависит от типа файла и его изменение не должно менять другие признаки.
    Думаю, в момент создания DOS никто не знал, как лучше использовать эти биты. Может - понадобятся новые флаги, а может - новые типы. Типов файлов изначально было 4, еще 4 бита оставались свободными - место для расширения есть. Поэтому комбинацию 1 бит блокировки + 7 бит для номера типа использовать не стали, хотя с современной точки зрения она выглядит более выгодной.
    Позже, в ProDOS, поле типа примерно так переделали и сделали 256 типов плюс еще специальное двухбайтовое поле для подтипа. А в DOS все оставили как есть.