Днищевой А-Modify

Hold-And-Modify, обычно сокращенный как HAM, представляет собой режим отображения компьютера Commodore Amiga. Он использует необычную технику для выражения цвета пикселей, позволяя отображать на экране гораздо больше цветов, чем это было бы возможно. Режим HAM обычно использовался для отображения оцифрованных фотографий или видеокадров, растрового искусства и иногда анимации. Во время запуска Amiga в 1985 году этот почти фотореалистичный дисплей был беспрецедентным для домашнего компьютера, и он широко использовался для демонстрации графических возможностей Amiga. Тем не менее, HAM имеет значительные технические ограничения, которые не позволяют использовать его в качестве режима отображения общего назначения.

Задний план
Оригинальный чипсет Amiga использует планшетный дисплей с 12-битным цветовым пространством RGB, который дает 4096 возможных цветов.

Растровое изображение игрового поля было проведено в секции основной памяти, известной как чип RAM, которая была разделена между системой отображения и основным ЦП. Из-за соображений синхронизации чипсет только успел прочитать 6 бит на пиксель, прежде чем настало время рисовать следующий пиксель на экране. Чтобы уменьшить объем данных, необходимых для описания изображения и, таким образом, соответствовать этому ограничению, система отображения использовала индексированную систему цветов с цветовой палитрой.

Аппаратное обеспечение содержало 32 регистра, которые можно было установить на любой из 4096 возможных цветов, и изображение могло получить доступ к любому из этих 32 значений с использованием 5 бит на пиксель. Шестой доступный бит использовался режимом отображения, известным как Extra Half-Brite, который уменьшал яркость этого пикселя наполовину, обеспечивая простой способ создания эффектов затенения.

Режим Hold-And-Modify
Когда первый чипсет Amiga был спроектирован, он работал непосредственно в цветах, оттенках и яркостях сигнала NTSC, что было обычным для ранних домашних компьютеров, для которых телевизоры использовались для отображения. Это привело к значительному уменьшению объема памяти, необходимого для отображения одноцветного изображения, такого как черно-белое телевидение, путем установки значения цвета в начале строки сканирования, а затем значения растровых изображений изменяют только значение яркости. Так как аналоговые телевизионные изображения могут изменяться только от черного до белого на несколько пикселей, а не сразу от одного до следующего, было бы достаточно четырех пикселей, чтобы обеспечить надежное «черно-белое» изображение, вдвое уменьшив объем памяти, необходимый для хранения образ.

Поскольку проект Amiga перенесен с игровой консоли на домашний компьютер, чипсет также перешел от цветовой модели HSL к современной цветовой модели RGB. Процитировать Джей Майнера:

« Hold and Modify пришли из поездки, чтобы увидеть симуляторы полета в действии, и у меня была какая-то идея о примитивном типе виртуальной реальности. NTSC на чипе означал, что вы можете удерживать оттенок и изменять яркость, только изменяя четыре бита. Когда мы перешли на RGB, я сказал, что больше не нужен, поскольку он не был полезен, и я попросил парня с компоновкой микросхем снять его. Он вернулся и сказал, что это либо оставит большую дыру в середине чипа, либо займет трехмесячный редизайн, и мы не смогли бы этого сделать. Я не думал, что кто-нибудь его будет использовать. Я снова ошибался, поскольку это действительно дало Amiga свое преимущество в плане цветовой палитры. »
Hold-And-Modify по существу является модификацией оригинальной концепции только яркости, но на этот раз позволяет модифицировать один из трех цветовых компонентов: красный, зеленый или синий. HAM можно считать методом сжатия с потерями; в режиме HAM6 игровое поле кодируется в половине памяти, обычно требуемой для 12-битного цветового пространства. Большая общая точность цветопередачи достигается за счет горизонтального разрешения цветности. Цветовое пространство, закодированное HAM, «распаковывается» с помощью оборудования отображения в реальном времени, когда отображается графический буфер.

Применение
Когда Amiga была запущена в 1985 году, режим HAM обеспечил значительное преимущество перед конкурирующими системами. HAM позволяет отображать все 4096 цветов одновременно, хотя и с вышеупомянутыми ограничениями. Этот псевдо-фотореалистичный дисплей был беспрецедентным для домашнего компьютера того времени и позволил отображать оцифрованные фотографии и отображать 3D-изображения. Для сравнения, тогдашний стандарт EGA IBM EAC разрешил 16 цветов на экране из палитры 64. Последователь VGA EGA, выпущенный в 1987 году с его режимом флагманских игр, режим 13h, позволил 256 цветов на экране с 262 144. Режим HAM часто использовался для демонстрации способности Amiga на дисплеях магазина и торговых презентациях, поскольку конкурирующее оборудование не могло соответствовать глубине цвета. Из-за ограничений, описанных выше, HAM в основном использовался для отображения статических изображений, и разработчики в значительной степени избегали его использования с играми или приложениями, требующими анимации.

С внедрением усовершенствованной графической архитектуры обычное плоское изображение может иметь палитру из 256 цветов, предлагая значительно более высокую точность цвета. Оригинальный режим HAM с его ограниченным цветовым разрешением стал гораздо менее привлекательным для пользователей машины AGA, хотя он все еще был включен для обратной совместимости. Новый режим HAM8 был гораздо менее полезен для чипсета AGA, чем режим HAM для исходного набора микросхем, поскольку плоская 256-цветная палитра значительно увеличила возможности для художника, не страдая от недостатков режима HAM. Хорошо запрограммированный разрезанный планарный режим может оказаться более полезным, чем HAM8. Первоначальная цель HAM, которая должна была обеспечить большее разрешение цвета, несмотря на ограниченный размер видеобумага и ограниченную пропускную способность памяти, уже не была актуальной.

Поскольку современные компьютеры способны отображать изображения с высоким разрешением, больше нет необходимости в таких методах отображения, как HAM. Планарная графика теперь также устарела для вычислений общего назначения, поскольку современное графическое оборудование имеет достаточную пропускную способность памяти для использования упакованных пикселей.

Ограничения
Режим HAM помещает ограничения на смежные пиксели на каждой горизонтальной линии игрового поля. Для смещения двух произвольных цветов может потребоваться до двух промежуточных пикселей, чтобы они изменились до намеченного цвета (если все компоненты красного, зеленого и синего будут изменены). В худшем случае это уменьшает разрешение горизонтальной цветопередачи от 704 пикселей до 240 (для сравнения, современные технологии, такие как VHS, имеют разрешение цветности 40 на частоте 0,4 МГц). Эта проблема особенно заметна в областях с резким контрастом (сильные горизонтальные градиенты изображения), где может возникнуть нежелательный многотоновый артефакт или «бахрома». Для минимизации влияния «окантовки» использовались различные методы рендеринга, а дисплеи HAM часто были разработаны с учетом тонких горизонтальных градиентов цвета, избегая вертикальных краев и контрастов.

Отображение полноцветного изображения в режиме HAM требует некоторой тщательной предварительной обработки. Поскольку HAM может изменять только один из компонентов RGB за раз, быстрые цветовые переходы вдоль линии сканирования могут быть наилучшим образом достигнуты за счет использования одного из предустановленных цветовых регистров для этих переходов. Чтобы сделать произвольное изображение, программист может сначала изучить исходное изображение для наиболее заметного из этих переходов, а затем присвоить эти цвета одному из регистров, методу, известному как адаптивные палитры. Однако, только с 16 доступными регистрами в исходном режиме HAM, некоторые потери в цветовой точности являются общими.

Кроме того, режим HAM нелегко разрешает произвольную анимацию дисплея. Например, если произвольная часть игрового поля должна быть перемещена в другое положение на экране, значения Hold-and-Modify, возможно, придется пересчитать по всем исходным и целевым линиям, чтобы правильно отобразить изображение (операция не хорошо подходит для анимации). В частности, если самый левый край анимированного объекта содержит любые «модифицирующие» пиксели или если изображение, находящееся справа от объекта, содержит любые «модифицирующие» пиксели, то эти значения Hold-and-Modify должны быть пересчитаны. Попытка перемещения объекта по экрану (например, с использованием блитра) создаст заметную окантовку в левой и правой границах этого изображения, если только графики не разработаны специально для этого. Чтобы избежать пересчета значений Hold-and-Modify и обхода fringing, программист должен был бы обеспечить самый левый пиксель каждого объекта blitter, а самый левый пиксель каждой строки прокручиваемого игрового поля был «установленным» пикселем. Палитра должна быть спроектирована так, чтобы она включала каждый такой самый левый пиксель. В качестве альтернативы, дисплей HAM может быть анимирован путем генерации значений пикселей посредством процедурной генерации, хотя это обычно полезно только для синтетических изображений, например, эффектов «радуги», используемых в демонстрационных примерах.

Обратите внимание, однако, что Hold-and-Modify применяется только к пикселям игрового поля. 128 пикселей данных спрайтов (в режиме DMA) на каждую строку сканирования по-прежнему доступны для размещения поверх игрового поля HAM.

Реализации
Режим первоначальной настройки чипа HAM (HAM6)
Режим HAM6, названный для 6 бит данных на пиксель, был представлен с помощью оригинального набора чипов и был сохранен в более позднем расширенном наборе микросхем и усовершенствованной графической архитектуре. HAM6 позволяет отображать до 4096 цветов одновременно с разрешением от 320 × 200 до 360 × 576.

Кодирование HAM6 использует шесть бит на пиксель: два бита для управления и четыре бита для данных. Если оба бита управления установлены равными нулю, четыре оставшихся бита используются для индексации одного из 16 предустановленных регистров цвета, работающих в режиме нормального индексированного растрового изображения. Остальные три возможных шаблона управляющих бит указывают, что цвет предыдущего пикселя (слева) на линии сканирования должен использоваться, и вместо этого биты данных должны использоваться для изменения значения красного, зеленого или синего компонента. Следовательно, существует четыре возможности:

Set: Используйте 4 бита данных для индексации цвета из 16 цветовой палитры. Используйте этот цвет для этого пикселя.
Изменить красный: удерживайте компоненты зеленого и синего цвета предыдущего пикселя. Используйте 4 бита данных в качестве нового компонента красного цвета этого пикселя.
Изменить зеленый: удерживайте компоненты красного и синего цвета предыдущего пикселя. Используйте 4 бита данных как новый компонент зеленого цвета этого пикселя.
Изменить синий: удерживайте красные и зеленые компоненты цвета предыдущего пикселя. Используйте 4 бита данных в качестве нового компонента синего цвета этого пикселя.
Аналогичный режим, HAM5, также доступен, но он бесполезен. В HAM5 шестой бит всегда равен нулю, поэтому только синий компонент цвета может быть изменен.

Нарезанный режим HAM (SHAM)
Набор микросхем Original Amiga включал в себя чип поддержки, известный как «Медь», который обрабатывал прерывания и другие функции времени и домашнего хозяйства независимо от процессора и видеосистемы. Используя Copper, можно было вернуться в CPU для выполнения коротких задач, в то время как видеодисплей обрабатывал вертикальное или горизонтальное прерывание (HBI). Это позволило программистам привязать машинный код к дисплею, не вызывая визуальных артефактов, что значительно упростит многие видеоэффекты.

Используя этот метод, программисты разработали режим Sliced ​​HAM или SHAM, также известный как динамический HAM. SHAM использовал компьютерный код, который вызывался в выбранных линиях сканирования, или все они, которые изменяли палитру во время HBI. Это означало, что каждая строка сканирования может иметь свой собственный набор из 16 базовых цветов. Это значительно упростило выбор палитры, которая теперь может быть сделана для каждой строки, а не для каждого изображения. Единственным недостатком этого подхода является то, что изображение больше не хранилось только в чип-памяти, так как управляющая программа должна была содержать несколько палитр, и была некоторая сложность в настройке режима SHAM.

Этот метод не ограничивался HAM и широко использовался с более обычными графическими режимами машины. Dynamic HiRes использует аналогичную технику смены палитры для создания 16 цветов на линию в моделях с высоким разрешением, тогда как HAM ограничен низким разрешением, но позволяет как 16 индексированных цветов, так и их модификацию.

Идея SHAM была устаревшей, когда был введен HAM8, так как даже нешлифованное изображение HAM8 имеет гораздо большее разрешение цвета, чем нарезанное изображение HAM6. Тем не менее, SHAM остается лучшим доступным режимом HAM на этих Amigas с оригинальным набором микросхем.

Режим расширенной графической архитектуры HAM (HAM8)
С выпуском Advanced Graphics Architecture (AGA) в 1992 году оригинальный режим HAM был переименован в «HAM6», и был введен новый режим «HAM8» (нумерованный суффикс представляет собой битовые плоскости, используемые в соответствующем режиме HAM). С AGA вместо 4 бит на цветной компонент Amiga теперь имела до 8 бит на цветной компонент, что привело к 16 777 216 возможных цветов (24-битное цветовое пространство).

HAM8 работает так же, как HAM6, используя два «контрольных» бита на пиксель, но с шестью битами данных на пиксель вместо четырех. Операция set выбирает из палитры из 64 цветов вместо 16. Операция изменения изменяет шесть наиболее значимых бит либо красного, зеленого, либо синего цветового компонента — два наименее значимых бита цвета не могут быть изменены этой операцией и остаются как установлено последней заданной операцией. По сравнению с HAM6, HAM8 может отображать много цветов на экране. Максимальное количество цветов на экране с использованием HAM8, как сообщается, было 262 144 цветов (18-битное цветовое пространство RGB). Фактически, максимальное количество уникальных цветов на экране может быть больше 262,144, в зависимости от двух младших значащих бит каждого цветового компонента в 64 цветовой палитре. Теоретически все 16,7 млн. Цветов могут отображаться с достаточно большим экраном и соответствующей базовой палитрой, но на практике ограничения в достижении полной точности означают, что два младших значащих бита обычно игнорируются. В общем, воспринимаемая глубина цвета HAM8 примерно эквивалентна цветному дисплею.

Разрешения для вертикального отображения для HAM8 такие же, как для HAM6. Горизонтальное разрешение может быть 320 (360 с сверхскоростью), как и прежде, удвоено до 640 (720 с сверхсканированием) или даже в четыре раза до 1280 пикселей (1440 с сверхсканированием). Чипсет AGA также представил еще более высокие разрешения для традиционных плоскостных режимов отображения. Общее количество пикселей в изображении HAM8 не может превышать 829,440 (1440 × 576) с использованием режимов PAL, но может превышать 1,310,720 (1280 × 1024) с использованием аппаратного оборудования стороннего производителя (Fliker-fixer Indivision AGA).

Как и в режиме оригинального режима HAM, экран HAM8 не может отображать произвольный цвет в произвольной позиции, поскольку каждый пиксель использует либо ограниченную палитру, либо полагается на две цветовые компоненты предыдущего пикселя. Как и в оригинальном режиме HAM, дизайнеры могут также выбрать «разрезать» дисплей (см. Ниже), чтобы обойти некоторые из этих ограничений. Режим HAM7 также доступен, но не широко используется.

Эмуляция HAM
HAM уникален для Amiga и чистых чипсетов. Для обеспечения прямой рендеринга устаревших изображений, закодированных в формате HAM, были разработаны программные эмуляторы HAM, которые не требуют оригинального оборудования для отображения. Пред-4.0 версии AmigaOS могут использовать режим HAM в присутствии встроенного чипсета Amiga. AmigaOS 4.0 и выше, предназначенные для совершенно другого оборудования, обеспечивают эмуляцию HAM для использования на современных графических аппаратных средствах. Выделенные эмуляторы Amiga, работающие на не-родном оборудовании, могут отображать режим HAM путем эмуляции аппаратного обеспечения дисплея. Однако, поскольку никакая другая компьютерная архитектура не использовала технику HAM, просмотр изображения HAM на любой другой архитектуре требует программной интерпретации файла изображения. Верное декодирование на основе программного обеспечения даст одинаковые результаты, отбросив вариации в цветовой точности между настройками дисплея.

Однако, если целью является просто отображение изображения SHAM на платформе, отличной от Amiga, требуемые значения цвета могут быть предварительно рассчитаны на основе записей палитры, которые запрограммированы через медный список, независимо от того, была ли изменена палитра в в середине линии сканирования. Всегда можно без проблем конвертировать изображение HAM или SHAM в 32-битную палитру.

Сторонние реализации HAM
Устройство, созданное Black Belt, известное как HAM-E, смогло производить изображения с глубиной цвета HAM8 при низком разрешении по горизонтали от Amiga с помощью оригинального набора микросхем.

Амига будет настроена для получения изображений с высоким разрешением (640 пикселей в ширину, 720 с избыточным разрешением). Это потребовало использования четырех битовых плоскостей с частотой 70 нс на пиксель. Первые несколько строк кодированной информации изображения для настройки блока HAM-E. Затем каждая пара пикселей была закодирована с информацией для блока HAM-E, которая преобразует информацию в один пиксель размером 140 нс (генерирует изображение 320 пикселей в ширину или 360 с помощью сверхсканирующего изображения с глубиной цвета 8 битплоскостей). Качество HAM-E было таким образом сопоставимо с изображением HAM8 с низким разрешением. Технология HAM-E использовала тот факт, что изображение с высоким разрешением с четырьмя битовыми плоскостями обеспечивает еще одну пропускную способность памяти и, следовательно, еще треть данных, чем изображение с низким разрешением с шестью битовыми плоскостями.