Bs0Dd 206 Опубликовано: 6 июня, 2021 (изменено) Мод Computronics существует уже более 5 лет. Однако почему-то и по сей день нет ни одной более-менее рабочей файловой системы для кассет из этого мода. Будем исправлять ситуацию))) На сей раз я и представляю вашему вниманию файловую систему для этих самых кассет. TapFAT (Tape File Allocation Table) является функционально полной ФС с возможностью фрагментированного хранения данных. Первые идеи о написании ФС для кассет меня посетили еще в октябре, но время появилось лишь к концу декабря, тогда же я начал обдумывать основу системы. К январю начал писать основную библиотеку, вспомогательные утилиты, отлавливал баги, оптимизировал и упорядочивал код. Наконец, к июню месяцу готова первая версия драйвера. ПРЕДУПРЕЖДАЮ! Файловая система - вещь сложная и довольно серьезная. Я постарался устранить все обнаруженные баги, но не исключено, что некоторые могли проскользнуть мимо глаз. Поэтому я не несу ответственности за порчу данных на кассете в следствии сбоя драйвера. Сохраняя данные на кассетах вы действуете на свой страх и риск! Скажу сразу, ФС довольно медленная (виной тому буферы в операционках, ибо запись на кассету больших и мелких кусков занимает, как ни странно, одинаковое количество времени), поэтому она больше подходит для архивации данных. Учитывая, что самая крутая кассета дает нам около 30МБ, туда можно заархивировать очень много информации (не знаю, нужно ли кому столько). Первые 8КБ кассеты зарезервированы под саму таблицу FAT. Она представляет собой обычную сериализоваyную таблицу Lua, которую при желании можно сжать двумя способами, поскольку она немного не экономична. Так при разных режимах в 8КБ таблицы может уместиться: Без сжатия - около 150 файлов Сжатие LZSS - около 580 файлов Сжатие Картой Данных - около 720 файлов Также можно сэкономить пространство таблицы, отключив хранение даты изменения файла, в таком случае все записанные файлы будут иметь дату изменения 0 (т.е. 00:00:00, 1 Января 1970 года). Краткое руководство: Скрытый текст Запуск драйвера 1. Запустите инсталлятор командой 2. Установите файлы драйвера 3. Для инициализации драйвера и монтирования стримеров пользуйтесь утилитой tfatinit 4. Рекомендуется прописать ее в файл .shrc для автоматического запуска при загрузке ОС Подготовка кассеты Для работы с кассетой сначала следует отформатировать ее 1. Запустите утилиту tfattool 2. Выберите пункт Format tape 3. Затем пункт Quick format 4. Подтвердите форматирование 5. Теперь кассета готова для записи файлов на нее Утилита tfattool также способна изменять параметры привода, отображать базовую информацию о кассете, изменять ее имя и выборочно демонтировать приводы. Помимо стандартного filesystem API, драйвер предоставляет дополнительные функции. Подробнее о них можно почитать тут. Загрузка ОС с кассет: Скрытый текст Если вы особый мазохист и хотите использовать кассету вместо жесткого диска, тогда вам поможет DiskTape Lua BIOS. Подробнее тут. Установка: pastebin run Tq3hbpaz Драйвер также доступен в MineOS App Market Репозиторий на GitHub Планы на будущее: Нормальное кодирование таблицы Шифрование таблицы. Сжатие и шифрование файлов. Ускорение работы файловой системы Изменено 1 июля, 2021 пользователем Bs0Dd 12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd Автор темы 206 Опубликовано: 1 июля, 2021 (изменено) Обновление - Версия 1.50 ВНИМАНИЕ!!! Данная версия драйвера несовместима с предыдущей, поэтому перед обновлением необходимо сохранить данные с кассет и отформатировать их новой версией. Исправлен критический баг с параметрами стримера Небольшое количество мелких фиксов Изменена структура файловых блоков, поэтому данная версия несовместима с предыдущей. Теперь драйвер доступен для операционной системы MineOS. Управление осуществляется графическим приложением. Изменено 1 июля, 2021 пользователем Bs0Dd 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 1 июля, 2021 8 часов назад, Bs0Dd сказал: Версия 1.05 8 часов назад, Bs0Dd сказал: данная версия несовместима с предыдущей. Может ли быть что major-ый индекс должен инкрементироваться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 154 Опубликовано: 1 июля, 2021 1 час назад, NEO сказал: Может ли быть что major-ый индекс должен инкрементироваться? В случае, например, семантического версионирования должен. Но в общем случае не обязан. Тут сначала хорошо было бы понять, какую систему нумерации версий использует автор, и почему отказался от семантического версионирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd Автор темы 206 Опубликовано: 1 июля, 2021 (изменено) 1 час назад, NEO сказал: Может ли быть что major-ый индекс должен инкрементироваться? Я собирался, но эта версия все же имеет более промежуточный характер, я сейчас думаю над реализацией нормальной и экономной таблицы, тогда будет вторая версия, а эти две... следовало бы назвать тестовыми. Вообще в делах версионирования я нуб, вот и выходит как-то так(. P.S.: переверсионировал обновление до версии 1.50, так, пожалуй, будет корректнее Изменено 1 июля, 2021 пользователем Bs0Dd 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ECS 1 903 Опубликовано: 2 июля, 2021 В 01.07.2021 в 23:15, Bs0Dd сказал: Вообще в делах версионирования я нуб, вот и выходит как-то так( Он скромничает, хе-хе. В маркете с каждым обновлением публикации происходит автоинкремент версии с шагом 0.01, и вручную мажорку не выставишь. Но вообще это всё он виноват, честно-честно. Вините его 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd Автор темы 206 Опубликовано: 25 августа, 2021 Обновление - Версия 1.52 Исправлен критический баг в функции makeDirectory (при попытке создать папку происходила ошибка). Исправлен критический баг в функции remove (при попытке удалить папку происходила ошибка). 2 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Bs0Dd Автор темы 206 Опубликовано: 21 ноября, 2021 Обновление - Версия 1.54 Исправлен баг, при котором вызов lastModified("") возвращал nil (критичный для MineOS). Исправлен баг, возникающий при попытке чтения неформатированной кассеты. (Обновление вышло еще месяц назад, но я так и забыл об этом написать ) 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах