Введение
Unified Emulator Format (UEF) — это контейнерный формат для сжатого хранения аудиокассет, ROM, дискет и снимков состояния машин для 8-битных компьютеров, выпускавшихся компанией Acorn Computers. Впервые реализованный в эмуляторе ElectrEm, разработанном Томасом Хартом, и сопутствующих инструментах, он теперь поддерживается основными эмуляторами машин Acorn и используется двумя онлайн-архивами программного обеспечения Acorn, содержащими тысячи наименований. UEF стремится точно воспроизводить сигналы, переносимые носителями информации, а не просто данные, которые они представляют, с целью создания точного архива оригинальных носителей, а не только возможности воспроизведения файлов, хранящихся на них. Можно включать различные метаданные, такие как оценки совместимости, маркеры позиций, изображения упаковки и текст руководств пользователя. Компьютеры Acorn используют стандарт Kansas City (KCS) для кодирования данных на магнитной ленте, поэтому формат файла подходит для создания резервных копий оригинальных носителей для ряда машин, отличных от Acorn. Начиная с версии 0.10, формат файла также поддерживает сигналы BASICODE. TZX — это блочный формат с аналогичным назначением для серии ZX Spectrum.
История
До разработки UEF архивы программного обеспечения для компьютеров Acorn в сети Интернет придерживались стандарта размещения ZIP-архивов с исходными файлами, имитирующими содержимое магнитной ленты. Каждый исходный файл сопровождался дополнительным файлом с расширением .inf, содержащим адреса загрузки и выполнения, извлеченные из заголовка файла. Стандарт INF, описанный и реализованный Вутером Шолтеном в bbcim (1995), расширяет формат вывода команды *INFO (встроенной в Acorn DFS и ADFS, которая отображает длину файлов и другие метаданные, связанные с файлами на диске) для включения контрольных сумм CRC и порядка файлов на ленте. Хотя этот стандарт вполне подходит для хранения пользовательских файлов, он не сохраняет скорость передачи данных при записи, точную информацию о времени или нестандартные потоки данных, используемые в программах с защитой от копирования. Для программного обеспечения, распространяемого на дисках, стало более удобным передавать дамп секторов диска, и к моменту появления UEF расширения файлов .ssd и .dsd уже стали общепринятыми для односторонних и двусторонних образов дисков DFS соответственно. Распространяемые как отдельные файлы или в ZIP-архивах, они по-прежнему популярны на архивных сайтах.
Цели
В 2010 году Харт в сообщении на форуме Stardot подробно объяснил причины создания формата: будучи первым, кто занялся эмуляцией Acorn Electron и его основного носителя – кассеты, – Харт стремился к созданию детального и технически оптимального представления данных, в отличие от существовавших ранее спонтанных форматов; а также к объединению нескольких элементов медиаконтента программного обеспечения в один файл, чтобы загрузка UEF была "более похожа на получение оригинального продукта". Он также отметил, что именно доступные инструменты и "потребности пользователей" определяли реальное применение UEF.
Структура
Файл UEF состоит из заголовка фиксированной длины, идентифицирующего его, за которым следует связный список блоков, содержащих интересующие данные. Заголовок включает в себя магическую строку "UEF File!", завершающий нулевой символ и двухбайтовый номер версии используемой спецификации UEF. Приложению для чтения необходимо учитывать номер версии, поскольку единица измерения в некоторых блоках различается в зависимости от версии спецификации, а один блок был переопределен между версиями. Каждый блок состоит из двухбайтового идентификатора, определяющего его назначение, четырехбайтовой длины тела и самого тела. Приложение может легко пропускать тела блоков, которые не требуется обрабатывать. После последнего блока файл просто заканчивается. В настоящее время блоки UEF не вложены. Весь файл UEF, включая заголовок, может быть опционально сжат в формате gzip. Проверяя начало файла на наличие заголовка gzip или UEF, можно вызвать соответствующую библиотеку декомпрессии.
Содержание
Формат единого эмулятора моделирует программное обеспечение на кассете как последовательную последовательность сегментов, которые могут быть несущими тонами, модулированными асинхронными сигналами обычных блоков данных, циклами безопасности (модулированные синхронные сигналы, которые, как утверждается, являются "идентификационной особенностью") и одним примером – 256-цветной улучшенной Daredevil Dennis, доступной на StairwayToHell.com для запуска в ElectrEm. Многократно скомпонованные фрагменты данных предназначены для следования за обычными фрагментами данных в любом из вышеуказанных классов, дополняя их. Их содержимое не предназначено для отображения на компьютере Acorn, будь то реальном или эмулированном, однако их значение в остальном не определено. Фрагменты, предоставляющие информацию о содержимом, включают фрагмент происхождения файла, который идентифицирует приложение, создавшее UEF-файл. Фрагменты сканирования обложки, предназначенные для предварительного просмотра файла, содержат растровое изображение обложки, хотя любой размер, превышающий эскиз, может занимать больше данных, чем типичная игра. Автор UEF также может предоставить текст инструкции или URL-адрес для получения дополнительной информации, короткое название для отображения, минимальные системные требования и схему управления клавиатурой для прилагаемого программного обеспечения; а если игра не использует весь экран, могут быть указаны координаты видимой области. Лишь небольшая часть UEF-файлов, доступных в сети, содержит что-либо, кроме фрагмента происхождения. UEF-файл может содержать несколько классов данных одновременно, как и задумывал Харт; "профессиональный" класс принимает только файлы CSW, представляющие волны, предварительно обработанные в прямоугольные импульсные последовательности, но он кодирует всю аудиоинформацию, поддерживаемую спецификацией UEF. MakeUEF утверждает, что был единственным создателем всех UEF-файлов, доступных в сети до ноября 2004 года, месяца выпуска версии 1.0. До версии 1.0 MakeUEF сохранял только "программные данные". С ноября 2004 года точность MakeUEF улучшилась, а спецификация файла была доработана, и было принято расширение hq.uef ("высокое качество") для отражения этого. Скрипт UEFwalk на Perl проверяет и извлекает данные из UEF-файлов. Пакет XVUEF расширяет функциональность редактора изображений Xv для поддержки малоиспользуемых фрагментов сканирования обложки UEF.
Использование на реальных BBC Micros
Аппаратные расширения GoMMC и GoSDC, разработанные Джоном Кортинком начиная с 2004 года, обеспечивают возможность эмуляции магнитофона. Сопутствующие компьютерные программы импортируют данные с кассет из файлов UEF и сохраняют извлеченный поток данных на карту памяти. В феврале 2012 года Мартин Барр выпустил версию 5.0 UPURS – набор утилит, работающих на основе ROM, для облегчения передачи данных на реальные компьютеры BBC Micro. В рамках этого релиза состоялся первый выпуск инструмента UPCFS, который обеспечил заявленную совместимость в 86% с существующими распакованными файлами UEF, позволяя передавать их на реальный BBC Micro с использованием пользовательского кабеля для User Port, предоставляющего RS-232 соединение с ПК.