После победы Bad Floppy в конкурсе пет-проектов Яндекса я дал интервью организаторам. Его опубликовали на внутреннем портале, а теперь хочу поделиться им и здесь.
Надо сказать, было интересно снова вспомнить, как всё начиналось: четыре дискеты, на которые ушло два вечера, первые эксперименты с драйвером и находки, ради которых хотелось читать дальше. Обычно я рассказываю о том, что удалось допилить за последнее время, а тут получился разговор о том, как вообще создавался Bad Floppy.
Четыре дискеты, два вечера
С чего начался Bad Floppy? Была ли конкретная дискета или данные, которые хотелось прочитать?
Идея читать дискеты возникала периодически. Я начинал программировать ещё в 80-х, и у меня остались рабочие дискеты из того времени. Конечно, хотелось их восстановить. Ещё я занимаюсь ретрокомпьютерами: восстанавливаю их, собираю реплики. Друзья, зная об этом, приносили что-то своё прочитать.
Но это всегда было непросто. Можно читать старым PC — у меня есть 80386, который я сам спаял. Но если дискета не от PC, а, скажем, от ZX Spectrum, программы чтения ужасны. На самом ZX Spectrum, который у меня тоже есть, сталкиваешься с ограничениями его софта. «Вынуть» с дискеты конкретный файл — то ещё приключение.
Ещё в школе я писал программу, которая читала дискеты Спектрума на PC. Года три назад попробовал повторить, но оказалось уже не так интересно, как в детстве, и я забросил.
Есть и устройства вроде FluxEngine или Greaseweazle: дисковод подключают к USB компьютера через микроконтроллер. Их я тоже собрал. Но и там софт требует кучу конвертаций, а с плохими дискетами не особенно дружит. Чтение снова было приключением. Я даже написал декодер сырых данных на Rust — возможно, чтобы заодно попрактиковаться в языке. Но и эта попытка была не слишком успешной.
В общем, мысль ходила где-то рядом. А когда в очередной раз я читал четыре спектрумовские дискеты целых два вечера, стало понятно: пожалуй, надо придумать что-то попроще.
А почему бы так же не сделать и с дискетой?
Как появилась первая рабочая версия?
Здесь уже речь об идее простого инструмента. Она пришла как-то сама собой: сложился пазл, и все части процесса чтения встали на свои места.
Это было в конце рабочего дня, когда я монтировал Аркадию. Подумал: «А почему бы так же не сделать и с дискетой? У меня же есть Greaseweazle, который может читать сырые битики. Надо только обрабатывать их иначе».
Составные части у меня уже были. Я умел декодировать магнитный поток, для работы с файловой системой точно существовала готовая библиотека, смонтировать данные через FUSE тоже было несложно.
Я подключил устройство, вставил заведомо живую дискету, запустил Claude Code и закинул все эти мысли. Дальше наблюдал, как агент что-то делает с дисководом: тот раскручивается, загорается лампочка — сама собой. Это было удивительно.
Мне казалось, что ничего не получится и идея глупая. Но оказалось, что можно чуть-чуть подкорректировать работу, направить агента в нужное русло, — и часам к десяти вечера у меня уже был прототип драйвера.
Я вставил другую дискету и удивился: она прочиталась как по волшебству. Из-за простоты идеи казалось, что так просто быть не может. Но вот факт: дисковод подключился к современному Mac, и я мог читать каждый сектор напрямую.

Первая сборка: дисковод, шлейф и контроллер Greaseweazle.
Дискета как флешка
Что нужно для чтения и с какими дискетами проект уже работает?
Нужно устройство Greaseweazle. Есть несколько его редакций разной сложности. Самая простая — Greaseweazle F1 — содержит микроконтроллер STM32, разъём дисковода и пять резисторов. Само устройство можно спаять самому за час. Эта версия отлично работает с распространёнными дисководами на 5,25 и 3,5 дюйма. Ещё понадобятся сам дисковод и шлейф к нему. Аппаратно это всё, дальше — программная часть.

Дисководы на 5,25 и 3,5 дюйма и контроллер Greaseweazle.
Самый простой сценарий — прочитать дискету. Ставим Bad Floppy Driver через Homebrew, даём команду монтирования, и файлы можно читать как с флешки. Драйвер выложен на GitHub.
Здесь есть оговорка: у разных платформ разные форматы дискет. Сейчас драйвер работает с MS-DOS — IBM PC, FAT12/16 — и ZX Spectrum, TR-DOS. В первую очередь потому, что именно такие дискеты мне приходилось вычитывать.

Старые дисководы рядом с современным Mac.
Есть и дальнейшее развитие — Bad Floppy Revival. Оно появилось, когда драйвер не смог прочитать дискету из-за её старости и понадобилось что-то более умное. Это отдельное приложение: оно умеет читать дискету, показывать содержимое и каждый байт. Неудачные чтения повторяются и комбинируются, меняются режимы чтения.
Помните звук «дрр-дррр-дрррр», который издавал дисковод, когда дискета не читалась? Это была программная уловка: при ошибке головку сдвигали, а потом ставили на место. Часто помогало. У меня реализовано несколько таких способов.
Дальше есть идея подключить машинное обучение: анализировать сырые биты и пробовать предсказывать данные в сбойных участках. У меня есть совсем сложные собственные дискеты, и хочется прочитать их с любыми ухищрениями — есть за что побороться. Рабочие дискеты сохранились хуже всего: они заезжены многократной перезаписью.
Цифровая археология
Что особенно запомнилось из найденного на старых носителях?
Когда я стал отлаживать восстановление, понадобилось найти, на чём тренироваться. Не добивать же собственные дискеты: цель всё-таки когда-нибудь их прочитать. Поэтому я стал покупать старые дискеты на Авито.
Случайно попалась коробка, в которой оказались тексты про какие-то соревнования. Я отдал их ИИ и узнал, что это соревнования по бриджу. По нескольким файлам ИИ предположил, кому мог принадлежать архив, и нашёл научные работы этого человека и даже математическую теорему, названную его именем. Я был искренне поражён.
Получилась цифровая археология, отославшая в середину 90-х. И на многих других дискетах находилось что-то оттуда: реклама совершенно неизвестных программ, буклеты, статьи. Но их авторство установить уже сложнее.
Что дальше — и можно ли попробовать
Как развивается проект и как к нему прикоснуться коллегам?
Попробовать, конечно, можно. Дискеты MS-DOS и TR-DOS можно читать с помощью драйвера: он выложен на GitHub, в проекте есть подробное описание. Надо спаять контроллер — при наличии навыков это делается примерно за час — и найти дисковод.
Самый простой вариант, возможно, — дать мне дискеты. Я прочитаю их и отдам образы и файлы.
Bad Floppy Revival пока больше похож на большой эксперимент. Надеюсь довести его до состояния, в котором приложение можно будет показать и использовать. Пока за проектом можно наблюдать на сайте Bad Floppy.
В первую очередь хочется получить максимум от существующего железа, не меняя его: применять математику и машинное обучение к данным, которые удаётся считать.
Второе направление — агентский подход к разбору форматов. Идея такая: вставляешь дискету от любого компьютера, LLM вместе с веб-поиском определяет формат, агент пишет скрипт для чтения — и дискету уже можно прочитать. А ещё создаётся PR: потом кодинг-агент обрабатывает его, и появляется полноценная поддержка нового формата.
Я сейчас над этим работаю. Не всё идеально, но пока выглядит реализуемо. Хочется, чтобы проект развивался по мере использования и сам формировал идеи.