- 1
Некроисторический экскурс в сидиромию
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Некроисторический экскурс в сидиромию
В общем я заморочился, и разобрался с сиди.
Один коммент -- одна питушня.
MAKAKA # 0
(CD-DA). Диск с одной длиной дорожкой от центра к окраине.
Диск начинается с Lead-In area, затем идет Program area, и Lead-out.
Диск разбит на сектора по 2352 байта каждый.
Такой сектор занимает 1/75 секунды, так что может адресоваться как по номеру,
так и по времени.
Часть сектора это синхронизационная последовательность, часть это ECC,
остальное это user data.
User data может быть разбита на подканалы.
В основном канале лежит музло в формате PCM.
Секторы объеденены в треки. В подканале q содержится адрес окончаия трека.
В lead-in есть особый трек (нулевой) где в канале q содержится TOC.
TOC это таблица треков, где для каждого трека указано:
* Тип терка (ред бук описывает только музыкальный)
* Начало трека (адрес сектора или временная метка)
* Конец трека
https://en.wikipedia.org/wiki/Compact_Disc_Digital_Audio#Technical_spe cifications
https://webstore.iec.ch/publication/3885
MAKAKA # 0
(CD-ROM).
Появился новый тип трека -- data. (да, все данные лежат в одном треке)
Размер сектора стал 2048 (кратен двойке) остальное ушло под ECC, потому что
для данных это важнее и под заголовок. Стандарт описывает несколько режимов (mode-1, mode-2,
mode-2 XA).
В mode-2 нет ECC, но он никогда и не используется, а в mode-2 XA уже опять
есть.
В заголовке указывается номер сектора, и mode.
И так, в yellow book можно хранить на диске кучу 2К секторов с данными.
https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-130.pdf
MAKAKA # 0
Потокол SCSI MMC описывает пакеты для общения хоста с приводом.
В ATA запустили тот же самый протокол (как и все прекрасное ATA и это спиздило
у SCSI).
ATAPI и означает Packet Interface.
В общем, тот же самый SCSI MMC работает поверх ATA и получается ATAPI.
Интерфейс описывает комманды типа UNLOAD (eject), READ TOC,READ
SUBCHANNEL, PLAY (начать
играть музыку в аналоговых выход) READ SECTOR итд.
При чтении можно указывать конкретный формат сектора, и тогда прривод
убедится, что сектор нужного типа и проверит ему ECC, а можно считать данные
на низком уровне вместе с ECC, и дальше разбираться самому.
http://www.13thmonkey.org/documentation/SCSI/x3_304_1997.pdf
MAKAKA # 0
Yellow Book дает нам блочное устройство, и поверх его можно наворотить
файловую систему.
Вендоры решили сделать ее обшепонятной, и так родилась High Sierra, которая
была стандартизована как is9660 или же ecma-119.
У спеки есть три ревизии: в последней файл может быть фрагментирован.
В начале тома идет пустое место (именно туда обычно пхают MBR у кентавров),
затем идут Volume Descriptors: такие таблицы с данными.
В каждой таблице указан её тип. Завершается всё Volume Descriptor с типом
Terminate.
Первый дескриптор имеет тип Primary. В нем указывается
* метка тома
* размер тома
* дата созданя
* дохуя всего
* адрес path table, где уже собственно и начинаются директории
https://www.ecma-international.org/publications/standards/Ecma-119.htm
guest # 0 ⇈
Partition centipede more like
MAKAKA # 0
Изначальный 9660 убог: только английски буквы в файлах, файлы не длинее 8.3
(чтобы везде работать итд)
Но
Каждая запись о директории содержит область system usage area, которую можно
использовать под свои нужны.
Формат SUSP (IEEE P1281) предлагает через эту область связать с записью
двухбуквенный ключ и значение.
Этим воспользовались авторы расширений:
Rock Ridge (UNIX) хранят там юниксовые таймстемпы, id пользователя и группы и
пермишены.
http://www.nextcomputers.org/NeXTfiles/Projects/CD-ROM/Rock_Ridge_Interchange_Protocol.pdf
Joilet (Windows) хранит там длинные юникодные имена, а еще делает отдельны
Volume Descriptor чтобы использовать уникодные имена и в метке тома.
Romeo тоже пытался хранить длинные имена, но он не нужен так как не может в
уникод.
MAKAKA # 0
Особый тип Volume Descritpr -- boot позволяет сообщать биосу как грузить
сидиром.
В этом дескрипторе есть указатель на Boot Catalog.
В Boot Catalog указан тип загрружаемой питушни.
* FDD Emulation: биос загужает образ дискеты в память, дает к ней доступ через
13h, и передает ей упарвление
* HDD Emulation: тоже самое, но только образ диска
* No emulation: BIOS загужает указанное количество кластеов в память, и
передает им управление. Код должен сам уметь найти CD-ROM и считать нужные
данные.
https://pdos.csail.mit.edu/6.828/2014/readings/boot-cdrom.pdf
MAKAKA # 0
Стандарт описывает CD-R и CD-RW разных скоростей (состоит из трех частей).
Физически они устроены сложнее CD, но нас интересует, что у них есть спец
область ПЕРЕД in-lead, недоступная обычным приводам (не пишушим)
Это область PMA (еще есть PCA, где указаны пааметры записи диска, и где привод
тренируется).
Ради этого стандарта были добавлены новые комманды в SCSI MMC (вышла новая
версия MMC), нужные для записи (SET SPEED, WRITE **, итд)
Стандарт описиывает три техники записи:
* Disk at once: диск записывается целиком, и резульат мало отличается от Red
book, и боль-мень всеми понимаем.
* Track at once: можно записать трек, и остановиться.
TOC в таком случае помещается не in-lead, а в PMA.
Такой диск считается "не закрытым", и обычные приводы его не видят.
После записи диск нужно закрыть: (коммманда CLOSE в SCSI MMC):
при этом TOC переносится из PMA в in-lead, и его уже могут читать приводы.
* Packet: при этой технике в треки можно дописывать изменяя TOC.
Книга так же вводит понятие сессий:
сессия имеет in-lead, треки и out-lead, и таких сессий может быть много.
TOC незакрытой сессии хранится в PMA. После закрытия сессии можно начинать
писать новую.
TOC сессии имеет ссылку на TOC следующей сессии.
Только современный софт и совеменные приводы поддерживают множественные
сессии.
Все варианты (кроме disk at once) имеют накладные расходы: между треками (или
сессиями) нужно пустое место, да и несколько TOCов занимают место.
Orange CD-R
https://www.ecma-international.org/publications/standards/Ecma-394.htm
CD-RW https://www.ecma-international.org/publications/standards/Ecma-395.htm
bormand # 0 ⇈
nemyx # 0 ⇈
Ещё если случайно поцарапать последнюю сессию, то может загрузиться Volume Descriptor из предпоследней сессии (ну или из последней среди тех, которые ещё не поцарапаны).
А ещё старые приводы не видели CD-RW диски. CD-R читали, а вот CD-RW — нет, потому что у них записывающий слой располагается на другой глубине, и лазер не мог на нём сфокусироваться.
MAKAKA # 0 ⇈
Если она закрыта и перенесена в In-Lead.
>потому что у них записывающий слой располагается на другой глубине
Да, физически они очень разные, и старые лазеры не могли в rw. Но в этом тредике мы больше про логическое, а не про физику. Иначе придется углубляться в pits and lands, положки и там вообще целый мир
MAKAKA # 0 ⇈
Так что если сессия не закрыта (и ее TOC лежит в PMA) то они вообще ничего не видели, либо видели предпоследнюю сессию (чей TOC остался в In-lead с прошлого раза)
> Only Finalized Sessions can in general be played back on conventional CD players.
https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-394.pdf
MAKAKA # 0
Это файловая система (ставшая де-факто для DVD) поддеживающая дописывание в
конкретный файл. Если скрестить ее с CD-RW в режиме Packet, то можно добиться
почти обычного блочного устойства, как HDD или дискета.
http://www.osta.org/specs/
MAKAKA # 0
Расширение Orange Book, позволяющее приводу самому очищать диск в фоновом
режиме: вставил, и сразу можно писать. Этот формат должен поддерживать
и привод, и SCSI MMC. Разбираться с ним мне лениво, досвидания.
MAKAKA # 0
guest # 0
guest # 0 ⇈
страдай
guest # 0