Кіріспе

Commodore Amiga компьютерлерінде қолданылатын дисплей режимі Hold And Modify, көбінесе HAM деп қысқартылады, – Commodore Amiga компьютерінің дисплей режимі. Бұл пикселдердің түсін беру үшін өте ерекше техниканы пайдаланады, соның арқасында экранда мүмкіндік шегінен асып түсетін көптеген түстерді көрсетуге болады. HAM режимі көбінесе цифрланған фотосуреттер немесе бейне кадрларды, растрлік суреттерді және кейде анимацияны көрсету үшін қолданылды. 1985 жылы Amiga таныстырылған кезде, бұл дерлік фотореалистік дисплей үй компьютері үшін бұрынғысыздай жаңалық болды және Amiga-ның графикалық қабілеттерін көрсету үшін кеңінен пайдаланылды.

Ұстаңыз және өзгертіңіз режімі

Amiga чипсеті HSV (түс, қанығу және жарық) түстік кеңістік принципінде жасалды, бұл ерте үй компьютерлері мен дисплей үшін теледидарға сүйенетін ойын консольдары үшін қалыпты жағдай еді. HSV түстік кеңістігі NTSC және PAL түсті теледидарларында қолданылатын YUV түстік кеңістігіне тікелей сәйкес келеді, бұл RGB кодтауымен салыстырғанда қарапайым түрлендіру схемасын қажет етеді. Түсті теледидар, радиожиіліктік немесе композиттік бейне байланысы арқылы берілгенде, үшінші компонентке – жарықтылыққа қарағанда, хрома жолағының ені (екі түс айырмашылығы компоненті ретінде кодталған) әлдеқайда төмен болады. Бұл берілген бейне сапасы үшін қажетті жад пен жолақтылықты едәуір азайтады, өйткені жарықтылық толық ажыратымдылықта сақталады және беріледі, ал хроманың ажыратымдылығы салыстырмалы түрде төмен. Бұл техника бейнелерді сығымдау әдістерімен, мысалы JPEG және MPEG сияқты, сондай-ақ V9958 MSX бейне чипінің YJK кодтауында (алғаш MSX2+ жүйесінде қолданылған) қолданылатын басқа HSV/YUV негізделген бейне режимдерімен ортақ. HAM-нің бастапқы түрінде қолданылған HSV кодтамасының нұсқасы, түс пен әсіресе қанығуға қарағанда жарықтылық ақпаратын жаңартуға басымдық беруге мүмкіндік берді, қажет болған жағдайда үш компоненттің арасында ауысып, кейінгі цифрлық бейне стандарттарында қолданылатын толық ажыратымдылықтағы жарықтылықты жеке жарты немесе ширек ажыратымдылықтағы хромалармен (+) жиі араластырудан өзгеше болды. Бұл RGB-ге қарағанда тиімділік тұрғысынан айтарлықтай артықшылықтар берді. Amiga дизайны ойын консолінен жалпы мақсаттағы үй компьютеріне көшкен кезде, бейне чипсеті HSV-ден қазіргі заманғы RGB түстік моделіне ауыстырылды, бұл HAM режимінің көптеген артықшылықтарын жоққа шығарды. Amiga жобасын басқарған Джей Майнер былай дейді: Hold And Modify-дің соңғы нұсқасы, аппараттық тұрғыдан, бастапқы HSV тұжырымдамасымен бірдей болды, бірақ сол үш сипаттамалық компонентте жұмыс істеудің орнына (негізінен V компонентіне басымдық беру), ол үш RGB түс арнасының біреуін өзгертеді. HAM-ді JPEG-тің DCT сатысы алынғандағы жұмыс істеу және тиімділік тұрғысынан ұқсас, жоғалтулы сығымдау техникасы деп қарастыруға болады; HAM6 режимінде тиімді 4096 түстік (12 биттік) өріс қалыпты жағдайда қажет болатын жадтың жартысына кодталады, ал HAM8 оны одан әрі, шамамен 40%-ға дейін азайтады. Алайда, бұл қарапайым сығымдаудың бір кемшілігі бар: түстің жалпы сапасы көлденең артефакттардың есебінен жоғарылайды, себебі кез келген пикселді кездейсоқ 12 (немесе 18, 24) биттік мәнге орнату мүмкін емес. Ең нашар жағдайда, бір түстен екіншісіне ауысу үшін үш пиксел қажет болуы мүмкін, бұл осы кездегі тиімді ажыратымдылықты "320 пикселден" шамамен "106 пикселге" дейін азайтады және егер 16 палитралық тіркегіш жеткіліксіз болса, жоғары контрасттық элементтің оң жағына қарай скан сызығы бойымен дақтар мен көлеңкелердің таралуына әкеледі. HAM кодталған түстік кеңістіктің "декомпрессиясы" графикалық буфер деректері көрсетіліп жатқанда дисплей аппараттық құралдарымен нақты уақытта жүзеге асырылады. Әрбір кодталған пиксел түстік палитра тіркегіштеріне қалыпты индекс ретінде немесе шығыс DAC-де сақталған мәнді тікелей өзгерту үшін команда ретінде әрекет етеді (белсенді палитра тіркегішінң үштен бір бөлігін жаңарту сияқты) және ол чипсет арқылы өтетін кезде дереу орындалады.

Қолданылуы

1985 жылы Amiga шығарылғанда HAM режимі бәсекелес жүйелерге қарағанда маңызды артықшылық ұсынды. HAM жоғарыда айтылған шектеулермен бірге, барлық 4096 түсті бір уақытта көрсетуге мүмкіндік береді. Сол кездегі үй компьютері үшін мұндай псевдофотореалистік дисплей бұрын-соңды болмаған және цифрланған фотосуреттер мен 3D бейнелерді көрсетуге мүмкіндік берді. Қарама салыстыру үшін, сол кездегі IBM PC стандарты EGA 64 түстік палитрадан 16 түсті экранда көрсетуге рұқсат берді. EGA-ның 1987 жылы шыққан VGA-ның мұрагері, Mode 13h флагмандық ойын режимімен, 262,144 түстік палитрадан 256 түсті экранда көрсетуге мүмкіндік берді. HAM режимі Amiga-ның дүкендердегі демонстрацияларында және саудалық презентацияларында мүмкіндіктерін көрсету үшін жиі қолданылды, себебі бәсекелес аппараттық құралдар мұндай түс тереңдігіне жете алмады. Жоғарыда сипатталған шектеулерге байланысты HAM көбінесе статикалық бейнелерді көрсету үшін қолданылды және әзірлеушілер оны анимация қажетті ойындарда немесе қосымшаларда пайдаланудан аулақ болды. Сілтемелер: The Challenge Of Golf, Overdrive (Infacto), Kang Fu, AMRVoxel, RTG, Zdzislav: Hero Of The Galaxy 3D, OloFight және Genetic Species. Advanced Graphics Architecture енгізілгеннен кейін, стандартты жазықты кескін 256 түстік палитраны пайдалана алады, бұл түстің айтарлықтай жоғары дәлдігін қамтамасыз етеді. Түпнұсқа HAM режимі, шектеулі түс ажыратымдылығымен, AGA машинасының пайдаланушылары үшін бұрынғыдан гөрі аз қызығушылық тудырды, бірақ ол кері үйлесімділік үшін сақталды. Жаңа HAM8 режимі AGA чипсеті үшін түпнұсқа чипсетке қарағанда әлдеқайда аз пайдалы болды, себебі 256 түстік индекстелген режим (сондай-ақ жоғары өнімділікпен жазықты 128 және 64 түстік режимдер) суретшіге HAM-нің кемшіліктеріне ұшырамастан көбірек мүмкіндіктер берді. Жақсы бағдарламаланған "бөлінген" палитра режимі HAM8-ден гөрі тиімдірек болуы мүмкін, әрбір жолға 256 бірегей түспен – егер 256 пикселдік ені бар бейне режимі анықталса, әрбір пиксель үшін ерекше түс тікелей анықталады, ал жоғары ажыратымдылықта тіпті бүкіл экранға арналған бір 256 түстік палитра да, әрбір жол туралы айтпағанда, 32 түспен ғана қол жеткізілетін түс тереңдігін симуляциялаудан әлдеқайда тиімді және дәл болады. HAM-нің бастапқы мақсаты, шектеулі бейне буферінің көлемі мен шектеулі жад еніне қарамастан, түс ажыратымдылығын арттыру болды, бірақ бұл шектеулердің алынуына байланысты маңыздылығын жоғалтты. Қазіргі заманғы компьютерлер ешқандай арнайы амалсыз жоғары ажыратымдылықтағы шынайы түсті дисплейлерді жасауға қабілетті болғандықтан, HAM сияқты дисплей техникасының қажеті жоқ; PC стильіндегі графикалық карталар 800x600 SVGA сияқты режимдерді ұсынатын болғандықтан (16 бит немесе 65536 тікелей таңдалатын түс), Amiga платформасының соңғы күндері осы техниканың одан әрі дамуы оның қазірге дейін сақталуына байланысты қиын болар еді.

Шектеулер

HAM режимі ойын алаңының әрбір көлденең сызығындағы жапсарлас пикселдердің мәнін шектейді. Екі кездейсоқ түсті қатар көрсету үшін, екі аралық пикселдің қажетті түске өтуі қажет болуы мүмкін (егер қызыл, жасыл және көк түстің компоненттерінің барлығы өгертілуі керек болса). Ең жаман жағдайда, бұл көлденең қолданылатын хромалық ажыратымдылықты 320–360 пикселден 106–120 пикселге дейін екі есеге дейін төмендетуі мүмкін. Дегенмен, бұл VHS сияқты заманауи бейне технологияларымен салыстырғанда жақсырақ, оның хромалық ажыратымдылығы шамамен 40 теледидарлық жолға, шамамен 80 пикселге тең. Мұндай кескіндерді композиттік бейне қосылысы арқылы көрсету түстің бұрмалануын азайтатын көлденең тегістеуді қамтамасыз етеді. Бірақ егер RGB мониторы қолданылса, бұрмаланулар контрасты жоғары аймақтарда (күшті көлденең кескін градиенттері) айқын байқалады, онда жағымсыз көп түсті бұрмалану немесе "шекара" пайда болуы мүмкін. "Шекараның" әсерін азайту үшін әртүрлі рендеринг әдістері қолданылды және HAM дисплейлері көбінесе тік жиектер мен контрасттардан аулақ болып, нәзік көлденең түсті градиенттерді қосу үшін жасалды. HAM режимінде толық түсті кескінді көрсету үшін мұқият алдын ала өңдеу қажет. HAM бір уақытта тек бір RGB компонентін ғана өзгерте алатындықтан, сканерлеу сызығы бойындағы жылдам түс өтулері осы өтулер үшін алдын ала орнатылған түс тіркелімдерінің біреуін пайдалану арқылы жақсырақ жүзеге асырылуы мүмкін. Кездейсоқ кескінді көрсету үшін бағдарламашы бастапқы кескінді ең байқалатын өтулер үшін тексеріп, содан кейін осы түстерді тіркелімдердің біріне тағайындауы мүмкін, бұл әдіс бейімделетін палитралар деп аталады. Алайда, бастапқы HAM режимінде тек 16 қол жетімді тіркелім болғандықтан, түстің нақтылығының жоғалуы жиі кездеседі. Сонымен қатар, HAM режимі дисплейдің кездейсоқ анимациясына оңай рұқсат бермейді. Мысалы, егер ойын алаңының кездейсоқ бөлігі экранның басқа орнына жылжырылса, кескінді дұрыс көрсету үшін барлық бастапқы және мақсатты сызықтардағы "Ұстап тұру" және "Өзгерту" мәндерін қайта есептеу қажет болуы мүмкін (бұл анимацияға жақсы сәйкес келмейтін операция). Атап айтқанда, егер анимацияланған нысанның сол жақ шетінде "өзгерту" пикселдері болса немесе нысанның оң жағындағы кескінде "өзгерту" пикселдері болса, онда осы "Ұстап тұру" және "Өзгерту" мәндерін қайта есептеу қажет. Экранда нысанды жылжытуға тырысу (мысалы, блиттерді пайдалану арқылы) сол және оң жақ шекараларында көрінетін шекараларды тудыруы мүмкін, егер графика осыдан аулақ болу үшін арнайы жасалмаса. "Ұстап тұру" және "Өзгерту" мәндерін қайта есептеуден және шекаралардан аулақ болу үшін бағдарламашы әр блиттер нысанының сол жақтағы ең шеткі пикселінің және жылжитын алаңның әрбір сызығының сол жақтағы ең шеткі пикселінің "орнатылған" пиксел екеніне көз жеткізуі керек. Палитра осы сол жақ пикселдердің барлығын қамтитындай етіп жасалуы керек. Сонымен қатар, HAM дисплейін процедуралық генерация арқылы пикселдік мәндерді жасау арқылы анимациялауға болады, бірақ бұл әдетте тек синтетикалық кескіндер үшін пайдалы, мысалы, демонстрацияларда қолданылатын "жаңбырлы" эффекттер. Алайда, "Ұстап тұру" және "Өзгерту" тек ойын алаңы пикселдеріне ғана қатысты екенін ескеріңіз. Скэн желісі бойынша 128 пиксел (DMA режимінде) HAM ойын алаңының үстіне орналастыру үшін әлі де қол жетімді.

Бастапқы чип-топ HAM режімі (HAM6)

HAM6 режимі, пикселге 6 бит дерек арналғандықтан, Original Chip Set-пен енгізілді және кейінірек Enhanced Chip Set және Advanced Graphics Architecture (AGA) жүйелерінде де сақталды. HAM6 320×200-ден 360×576 дейінгі ажыратымдылықта 4096 түске дейін бір мезгілде көрсетуге мүмкіндік береді. HAM6 кодтамасы пикселге алты бит қолданады: басқару үшін екі бит және деректер үшін төрт бит. Егер екі басқару биті де нөлге орнатылса, қалған төрт бит 16 алдын ала орнатылған түс тізілімінің бірін таңдау үшін пайдаланылады, бұл әдеттегі индекстелген биттік карта сияқты жұмыс істейді. Басқару биттерінің қалған үш мүмкін комбинациясы сканерлеу жолындағы алдыңғы пикселдің (сол жақта) түсін пайдалану керектігін және дерек биттерін қызыл, жасыл немесе көк түстің құраушысын өзгерту үшін қолдану керектігін көрсетеді. Осының салдарынан төрт мүмкіндік бар: пикселге 5 бит дерек қолданғанда да қол жетімді. Тек көк түстің құраушысын SET командасынсыз өзгертуге болатындықтан, әсері көк-сары түстердің көлемін орташа деңгейде арттырумен шектеледі. Бұл режим HAM6 сияқты икемді емес және кеңінен қолданылмайды. Басқару биті Дерек биттері Әсері 0XXXX Орнату: 16 түсті палитрадан түс таңдау үшін 4 битті пайдаланыңыз. Бұл пиксел үшін сол түсті пайдаланыңыз. 1BBBB Көк түсті өзгерту: Алдыңғы пикселдің қызыл және жасыл түстің құраушыларын сақтаңыз. Бұл пикселдің жаңа көк түстің құраушысы ретінде 4 бит дерек пайдаланыңыз. AGA чипсетінде HAM5 енді қолданылмайды.

HAM4

Сонымен қатар, HAM режимін 4 биттік жазықтықта пайдалануға болады. Практикалық қолданысы шектеулі, бірақ бұл техника демонстрацияларда қолданылды. AGA чипсетінде HAM7 енді қолжетімді емес. Немесе SHAM режимі, сондай-ақ динамикалық HAM деп те аталады. SHAM, көрсету барысында палитраны өзгерту үшін таңдалған сканерлеу сызықтарындағы кейбір немесе барлық түс тізілімдерін өзгертеді. Бұл әрбір сканерлеу сызығының өзіне тән 16 негізгі түстің жиынтығына ие болуы мүмкін дегенді білдіреді. Бұл шектеулі палитра тудыратын кейбір шектеулерді жояды, осылайша палитраны сурет емес, әрбір желіге қарай таңдауға болады. Бұл тәсілдің жалғыз кемшілігі – Copperlist тізілімдерін өзгерту үшін чип жадының қосымша сағат циклдарын пайдалану, сурет тек биттік карта емес, сондай-ақ SHAM режимін орнатудың күрделілігі. Бұл техника тек HAM-мен ғана шектелмейді, машинаның дәстүрлі графикалық режимдерімен де кеңінен қолданылды. Динамикалық HiRes жоғары ажыратымдылық режимдерінде бір желіге 16 түс шығару үшін палитраны өзгертудің ұқсас әдісін қолданады, ал HAM төменгі ажыратымдылықпен шектеледі, бірақ 16 индекстелген түсті де, олардың өзгеруін де мүмкін етеді. SHAM идеясы HAM8 AGA чипсетімен енгізілген кезде қолданудан шығарылды, себебі тілімделмеген HAM8 суреті тілімделген HAM6 суретінен әлдеқайда жоғары түс ажыратымдылығына ие. Дегенмен, OCS немесе ECS чипсеттері бар Amiga компьютерлерінде SHAM әлі де ең жақсы HAM режимі болып табылады.

Advanced Graphics Architecture HAM режимі (HAM8)

1992 жылы Advanced Graphics Architecture (AGA) шығарылымымен бастапқы HAM режимі "HAM6" деп аталды, ал жаңа "HAM8" режимі енгізілді (номерленген жұрнақ тиісті HAM режимі қолданатын бит жазықтығын білдіреді). AGA-мен әр түс компоненті үшін 4 биттің орнына Amiga-да әр түс компоненті үшін 8 битке дейін болды, нәтижесінде 16 777 216 ықтимал түс болды (24 биттік түс кеңістігі). HAM8, HAM6 сияқты, әр пикселге екі "бақылау" битті пайдаланады, бірақ төрт емес, алты биттік деректерді қолданады. Орнату операциясы 16 емес, 64 түстің палитрасынан таңдайды. Modify операциясы қызыл, жасыл немесе көк түс компонентінің ең маңызды алты битін өзгертеді. Түстің ең кіші екі биті осы операциямен өзгертілмейді және соңғы орнату операциясымен орнатылған күйінде қалады.

Control bits Data bits Effect
00XXXXXX Set: 64 түстің палитрасынан түс индекстеу үшін 6 бит деректерді пайдаланыңыз. Бұл пиксел үшін сол түсті пайдаланыңыз.
01BBBBBB Modify Blue: Алдыңғы пикселдің қызыл және жасыл түс компоненттерін сақтаңыз. Осы пикселдің жаңа көк түс компоненті ретінде 6 бит деректерді пайдаланыңыз.
10RRRRRR Modify Red: Алдыңғы пикселдің жасыл және көк түс компоненттерін сақтаңыз. 6 бит деректерді осы пикселдің жаңа қызыл түс компоненті ретінде пайдаланыңыз.
11GGGGGG Modify Green: Алдыңғы пикселдің қызыл және көк түс компоненттерін сақтаңыз. 6 бит деректерді пикселдің жаңа жасыл компоненті ретінде пайдаланыңыз.

HAM6-мен салыстырғанда, HAM8 экранда көбірек түс көрсете алады. HAM8 қолданатын экран түстерінің ең көп саны 262,144 түс (18 бит RGB түс кеңістігі) деп кеңінен хабарланды. Шын мәнінде, экрандағы бірегей түстердің ең көп саны 262,144-тен артық болуы мүмкін, бұл 64 түстің палитрасындағы әр түс компонентінің ең кіші екі битіне байланысты. Теориялық тұрғыдан алғанда, барлық 16,7 миллион түсті жеткілікті үлкен экранмен және тиісті базалық палитрамен көрсетуге болады, бірақ іс жүзінде толық дәлдікке қол жеткізудің шектеулері екі ең кіші биттерге мән берілмейді. Жалпы алғанда, HAM8 түс тереңдігі жоғары түсті дисплейге шамамен тең. HAM8 вертикальді дисплейдің ажыратымдылығы HAM6 сияқты. Көлденең ажыратымдылығы 320 (360 overscan-мен) бұрынғыдай, 640-қа (720 overscan-пен) екі есеге дейін немесе тіпті 1280 пикселге (1440 overscan-пен) төрт есеге дейін болуы мүмкін. AGA чипсеті дәстүрлі жазық дисплей режимдеріне тіпті жоғары ажыратымдылықтарды енгізді. HAM8 кескініндегі пикселдердің жалпы саны PAL режимдерін пайдаланып 829,440 (1440 × 576) аспауы керек, бірақ үшінші тараптың дисплейлік жабдығын (Indivision AGA flicker fixer) пайдаланып, 1,310,720 (1280 × 1024) аспауы мүмкін. Бастапқы HAM режимі сияқты, HAM8 экраны кез келген кездейсоқ орнында кез келген түсті көрсетуге қабілетсіз, өйткені әрбір пиксел шектеулі палитраға немесе алдыңғы пикселдің екі түс компонентіне сүйенеді. Бастапқы HAM режиміндегідей, дизайнерлер осы шектеулердің кейбіреулерін айналып өту үшін дисплейді "бөлуге" (жоғарыда қараңыз) таңдауы мүмкін.

HAM эмуляциясы

HAM Amiga-ға және оның ерекше чипсеттеріне тән. HAM форматында кодталған бұрынғы суреттерді тікелей көрсету үшін, бастапқы дисплейлік аппаратты қажет етпейтін бағдарламалық HAM эмуляторлары жасалды. AmigaOS-тің 4.0 нұсқасына дейінгілері Amiga чипсеті болғанда HAM режимін пайдалана алады. 4.0 және одан жоғары AmigaOS нұсқалары, мүлдем басқа аппараттық құрылғылар үшін жасалғандықтан, қазіргі заманғы графикалық аппараттық құрылғыларда пайдалану үшін HAM эмуляциясын ұсынады. Басқа аппараттық құрылғыда жұмыс істейтін арнайы Amiga эмуляторлары дисплейлік аппараттық құрылғыны эмуляциялау арқылы HAM режимін көрсетуге қабілетті. Дегенмен, ешбір басқа компьютерлік архитектура HAM техникасын қолданбағандықтан, HAM суретін басқа архитектурада қарау үшін сурет файлын бағдарламалық түрде түсіндіру қажет. Дәл бағдарламалық кодтау дисплейлер арасындағы түс айырмашылықтарын ескермей, бірдей нәтиже береді. Бірақ, мақсат тек SHAM суретін Amiga емес платформада көрсету болса, қажетті түс мәндерін Copperlist арқылы бағдарламаланған палитра жазбаларына сүйене отырып алдын ала есептеуге болады, тіпті палитра сканерлеу жолының ортасында өзгерсе де. HAM немесе SHAM суретін жоғалтусыз 32-биттік палитраға түрлендіруге әрқашан болады.

Үшінші тараптың HAM-ті іске асыруы

Black Belt компаниясы шығарған HAM E деп аталатын құрылғы, Original чипсеті бар Amiga компьютерінен HAM8 түстер тереңдігімен төмен көлденең ажыратымдылықта суреттерді шығара алды. Amiga жоғары ажыратымдылықтағы суреттерді (640 пиксел ені, 720 пиксел биіктігі overscan-мен) шығару үшін конфигурацияланды. Бұл үшін пикселге 70 нс жылдамдықпен төрт биттік жазылымдар қолданылуы керек болды. Суреттің алғашқы бірнеше жолы HAM E құрылғысын конфигурациялауға қажетті ақпаратты кодтады. Содан кейін әрбір пиксел жұбы HAM E құрылғысы үшін ақпаратпен кодталды, ол ақпаратты 140 нс пикселге айналдырды (сегіз биттік жазылымдардың түстер тереңдігімен 320 пиксел ені немесе overscan-мен 360 пиксел ені бар сурет жасалды). Осылайша, HAM E сапасы төмен ажыратымдылықтағы HAM8 суретімен салыстыруға болады. HAM E әдісі төрт биттік жазылымдарды қолданатын жоғары ажыратымдылықтағы сурет, алты биттік жазылымдарды қолданатын төмен ажыратымдылықтағы суретке қарағанда үш есе көп жад ені және үш есе көп дерек беретінін пайдаланды. HAM техникасы ZX Spectrum үшін ULAplus / HAM256 / HAM8x1 режимдеріндегі HAM256 және HAM8x1 режимдерінде де іске асырылды, ол 64 түстік палитраны өзгерту арқылы экранда 256 түс көрсету мүмкіндігін ұсынады. Amiga HAM8-ге өте ұқсас HAM, ZX Spectrum компьютерлері үшін түпкілікті бейне схемасының (ULA) FPGA кеңейтуі түрінде ұсынылған жазылымдық HGFX жүйесінің бір бөлігі болып табылады. 2021 жылы eLeMeNt ZX компьютерінде іске асырылған HGFX/Q ретінде LnxSpectrum эмуляторында ұсынылып, сынақтан өтті.