Håll-och-ändra

Original fullfärgsbild
Amiga HAM 4096 färgbild
Fragment av fullfärgsbild (vänster) vs Amiga HAM (höger)

Hold-And-Modify , vanligtvis förkortat HAM , är ett visningsläge för Commodore Amiga -datorn. Den använder en mycket ovanlig teknik för att uttrycka färgen på pixlar, vilket gör att många fler färger visas på skärmen än vad som annars skulle vara möjligt. HAM-läget användes ofta för att visa digitaliserade fotografier eller videoramar, bitmappskonst och ibland animationer. Vid tiden för Amigas lansering 1985 var denna nästan fotorealistiska skärm oöverträffad för en hemdator och den användes flitigt för att demonstrera Amigas grafiska kapacitet. HAM har dock betydande tekniska begränsningar som hindrar den från att användas som ett allmänt visningsläge.

Bakgrund

Den ursprungliga Amiga-kretsuppsättningen använder en plan skärm med en 12-bitars RGB-färgrymd som producerar 4096 möjliga färger.

Bitmappen för spelfältet hölls i en sektion av huvudminnet som kallas chip RAM , som delades mellan displaysystemet och huvudprocessorn . Displaysystemet använde vanligtvis ett indexerat färgsystem med en färgpalett .

Hårdvaran innehöll 32 register som kunde ställas in på vilken som helst av de 4096 möjliga färgerna, och bilden kunde komma åt upp till 32 värden med 5 bitar per pixel. Den sjätte tillgängliga biten skulle kunna användas av ett visningsläge som kallas Extra Half-Brite som reducerade ljusstyrkan för den pixeln med hälften, vilket ger ett enkelt sätt att producera skuggeffekter.

Håll-och-ändra-läge

Amiga-kretsuppsättningen designades med en HSV ( nyans , saturation och luminans ) färgmodell, vilket var vanligt för tidiga hemdatorer och spelkonsoler som förlitade sig på tv-apparater för visning. HSV mappar mer direkt till YUV -färgrymden som används av NTSC- och PAL -färg-TV-apparater, vilket kräver enklare konverteringselektronik jämfört med RGB-kodning .

När färg-tv sänds över en RF- eller kompositvideolänk använder den en mycket reducerad färgbandbredd (kodad som två färgskillnadskomponenter, snarare än nyans + mättnad) jämfört med den tredje komponenten, luma . Detta minskar avsevärt minnet och bandbredden som behövs för en given upplevd visningsfidelitet, genom att lagra och sända luminansen med full upplösning, men krominansen med en relativt lägre upplösning - en teknik som delas med bildkomprimeringstekniker som JPEG och MPEG , såväl som i andra HSV/YUV-baserade videolägen som YJK- kodningen av V9958 MSX-Video- chipet (används först i MSX2+ ).

Varianten av HSV-kodning som användes i den ursprungliga formen av HAM gjorde det möjligt att prioritera uppdateringen av luminansinformation framför nyans och särskilt mättnad, växla mellan de tre komponenterna efter behov, jämfört med den mer regelbundna interfolieringen av luma med full upplösning ( Y { ) med individuella halv- eller kvartsupplösningsfärger ( + \ ) som används av senare digitala videostandarder. Detta erbjöd avsevärda effektivitetsfördelar jämfört med RGB.

När Amiga-designen migrerade från en spelkonsol till en mer allmän hemmadator, ändrades själva videochipset från HSV till den moderna RGB-färgmodellen , vilket till synes förnekade mycket av fördelarna med HAM-läget. Amiga-projektledaren Jay Miner berättar:

Hold and Modify kom från en resa för att se flygsimulatorer i aktion och jag hade en slags idé om en primitiv typ av virtuell verklighet . NTSC på chipet innebar att du kunde hålla nyansen och ändra luminansen genom att bara ändra fyra bitar. När vi bytte till RGB sa jag att det inte behövdes längre eftersom det inte var användbart och jag bad chiplayoutkillen att ta av den. Han kom tillbaka och sa att detta antingen skulle lämna ett stort hål i mitten av chippet eller ta en tre månaders omdesign och det kunde vi inte göra. Jag trodde inte att någon skulle använda den. Jag hade fel igen eftersom det verkligen har gett Amiga sin kant vad gäller färgpaletten.

Den slutliga formen av Hold-And-Modify var, hårdvarumässigt, funktionellt densamma som det ursprungliga HSV-konceptet, men istället för att arbeta på dessa tre beskrivande komponenter (för det mesta prioriterar V-komponenten), modifierar den en av de tre RGB-färgkanalerna . HAM kan betraktas som en förlustbringande kompressionsteknik , liknande funktion och effektivitet som JPEG minus DCT -steget; i HAM6-läge kodas ett effektivt spelfält med 4096 färger (12-bitars) i halva minnet som normalt skulle behövas - och HAM8 minskar detta ytterligare, till ungefär 40%. Det finns dock en vinst för denna förenklade komprimering: en större övergripande färgtrohet uppnås på bekostnad av horisontella artefakter, orsakade av oförmågan att ställa in en enskild pixel till ett godtyckligt 12- (eller 18, 24) bitars värde. I det yttersta kan det ta tre pixlar att ändra från en färg till en annan, vilket minskar den effektiva upplösningen vid den punkten från ett läge "320 pixlar" till ungefär "106 pixlar" och orsakar att utsmetningar och skuggor sprids längs en skanningslinje till höger om en högkontrastfunktion om de 16 tillgängliga palettregistren visar sig vara otillräckliga.

"Dekompression" av den HAM-kodade färgrymden uppnås i realtid av displayhårdvaran, när grafikbuffertdata visas. Varje kodad pixel fungerar antingen som ett normalt index till färgpalettregistren, eller som ett kommando för att direkt ändra värdet som hålls i utdata- DAC (något som att uppdatera bara en tredjedel av det aktiva palettregistret), och omedelbart ageras som som den passerar genom chipsetet.

Användande

När Amiga lanserades 1985 erbjöd HAM-läget en betydande fördel jämfört med konkurrerande system. HAM tillåter visning av alla 4096 färger samtidigt, dock med de ovan nämnda begränsningarna. Denna pseudofotorealistiska visning var oöverträffad för en dåtida hemdator och tillät visning av digitaliserade fotografier och renderade 3D-bilder. Som jämförelse tillät den dåvarande IBM-PC-standarden EGA 16 färger på skärmen från en palett på 64. EGA:s efterföljare VGA släpptes 1987 med sitt flaggskeppsspelläge, Mode 13h , tillät 256 färger på skärmen från 262 144. HAM-läge användes ofta för att demonstrera Amigas förmåga i butiksdisplayer och handelspresentationer, eftersom konkurrerande hårdvara inte kunde matcha färgdjupet. På grund av de ovan beskrivna begränsningarna användes HAM främst för att visa statiska bilder och utvecklare undvek till stor del att använda det med spel eller applikationer som kräver animering.

HAM-läget användes endast för spel i tolv spel, från och med Pioneer Plague 1988. Andra HAM-titlar inkluderar Knights of the Crystallion , Links : The Challenge Of Golf , Overdrive (Infacto) , Kang Fu , AMRVoxel , RTG , Zdzislav: Hero Of Galaxy 3D , OloFight och genetiska arter .

Med introduktionen av Advanced Graphics Architecture kan en konventionell plan bild ha en palett på 256 färger, vilket ger betydligt högre färgåtergivning. Det ursprungliga HAM-läget med sin begränsade färgupplösning blev mycket mindre attraktivt för användare av en AGA-maskin, även om det fortfarande ingick för bakåtkompatibilitet. Det nya HAM8-läget var mycket mindre användbart för AGA-kretsuppsättningen än HAM-läget var för det ursprungliga chipsetet, eftersom de mer enkla indexerade 256-färgslägena (liksom högre prestanda, plana 128- och 64-färgslägen) avsevärt ökade alternativen. till konstnären utan att lida av nackdelarna med HAM. Ett välprogrammerat palettläge med "skivor" kan visa sig vara mer användbart än HAM8, med upp till 256 unika färger per linje - tillräckligt för att direkt definiera en distinkt färg för varje pixel om ett 256-pixelbrett videoläge definierades, och i högre upplösningar tillät till och med en enda 256-färgspalett för hela skärmen, än mindre varje rad, mycket mer effektiv och exakt simulering av högre färgdjup med hjälp av vibrering än vad som kunde uppnås med endast 32.

Det ursprungliga syftet med HAM, som var att tillåta mer färgupplösning trots begränsad videobuffertstorlek och begränsad minnesbandbredd, hade blivit i stort sett irrelevant tack vare upphävandet av dessa gränser. Eftersom mer moderna datorer i sig är kapabla till högupplösta äkta färgskärmar utan några speciella knep, finns det inte längre något behov av visningstekniker som HAM; eftersom PC-liknande grafikkort som erbjuder lägen som 800x600 SVGA i hi-color (16 bpp eller 65536 direkt valbara färger) redan fanns tillgängliga för Amiga under plattformens döende dagar, är det osannolikt att någon ytterligare utveckling av tekniken skulle ha varit störd om den hade överlevt till våra dagar.

Begränsningar

Ett exempel på HAM-färgkanter: vitt och svart finns i paletten, de andra färgerna är det inte, så de kräver horisontella övergångssteg.

HAM-läget sätter begränsningar på värdet av intilliggande pixlar på varje horisontell linje på spelfältet. För att återge två godtyckliga färger bredvid varandra kan det ta upp till två mellanliggande pixlar att ändra till den avsedda färgen (om de röda, gröna och blå komponenterna alla måste ändras). I värsta fall minskar detta den horisontella användbara färgupplösningen till hälften, från 320~360 pixlar till 106~120. Trots det jämför den sig bra med modern videoteknik som VHS , som har en färgupplösning på cirka 40 tv-linjer , ungefär motsvarande 80 pixlar.

Att visa sådana bilder över en sammansatt videoanslutning ger viss horisontell utjämning som minimerar färgartefakter. Men om en RGB-monitor används, blir artefakter särskilt märkbara i områden med skarp kontrast (starka horisontella bildgradienter ), där en oönskad artefakt med flera nyanser eller "fransar" kan uppträda. Olika renderingstekniker användes för att minimera effekten av "fransar" och HAM-skärmar designades ofta för att inkludera subtila horisontella färggradienter, vilket undviker vertikala kanter och kontraster.

Att visa en fullfärgsbild i HAM-läge kräver noggrann förbearbetning. Eftersom HAM bara kan modifiera en av RGB-komponenterna åt gången, kan snabba färgövergångar längs en skanningslinje bäst uppnås genom att använda ett av de förinställda färgregistren för dessa övergångar. För att rendera en godtycklig bild kan en programmerare välja att först undersöka originalbilden för att se den mest märkbara av dessa övergångar och sedan tilldela dessa färger till ett av registren, en teknik som kallas adaptiva paletter . Men med endast 16 tillgängliga register i det ursprungliga HAM-läget är viss förlust i färgåtergivning vanligt.

Dessutom tillåter HAM-läget inte lätt godtycklig animering av skärmen. Till exempel, om en godtycklig del av spelfältet ska flyttas till en annan position på skärmen, kan håll-och-ändra-värdena behöva beräknas om på alla käll- och mållinjer för att visa bilden korrekt (en operation som inte väl lämpad för animering). Specifikt, om den vänstra kanten av det animerade objektet innehåller några "modifiera"-pixlar, eller om bilden omedelbart till höger om objektet innehåller några "modifiera"-pixlar, måste dessa Hold-and-Modify-värden beräknas om. Ett försök att flytta ett objekt runt på skärmen (som med hjälp av blitter ) kommer att skapa märkbara fransar vid den vänstra och högra kanten på den bilden, såvida inte grafiken är speciellt utformad för att undvika detta. För att undvika omräkning av håll-och-ändra-värden och kringgå kantlinjer, måste programmeraren se till att pixeln längst till vänster på varje blitter-objekt och att pixeln längst till vänster på varje rad på ett rullande spelfält är en "inställd" pixel. Paletten skulle behöva utformas så att den innehåller varje sådan pixel längst till vänster. Alternativt kan en HAM-skärm animeras genom att generera pixelvärden genom procedurgenerering , även om detta i allmänhet endast är användbart för syntetiska bilder, till exempel "regnbågseffekterna" som används i demos .

Observera dock att Hold-and-Modify endast gäller för spelfältspixlar. 128 pixlar spritedata (i DMA -läge) per skanningslinje är fortfarande tillgängliga för placering ovanpå HAM-spelfältet.

Genomföranden

Original Chip Set HAM-läge (HAM6)

Ett exempel på Commodore Amigas Hold-And-Modify Mode 6 med 12-bitars färgdjup, 16 palettfärger och 5 bitplan (HAM5). Eftersom endast den blå komponenten kan modifieras utan ett SET-kommando, blir horisontella kantartefakter uppenbara och återgivningskvaliteten för bilden är dålig.

HAM6-läget, uppkallat efter 6 bitar av data per pixel, introducerades med Original Chip Set och behölls i den senare Enhanced Chip Set och Advanced Graphics Architecture . HAM6 tillåter att upp till 4096 färger visas samtidigt i upplösningar från 320×200 till 360×576.

HAM6-kodning använder sex bitar per pixel: två bitar för kontroll och fyra bitar för data. Om de två styrbitarna båda är inställda på noll, används de fyra återstående bitarna för att indexera ett av de 16 förinställda färgregistren, som arbetar på samma sätt som en normal indexerad bitmapp. De andra tre möjliga kontrollbitmönstren indikerar att färgen på föregående pixel (till vänster) på skanningslinjen ska användas och databitarna ska istället användas för att modifiera värdet på den röda, gröna eller blå komponenten. Följaktligen finns det fyra möjligheter:

  • Set : Använd de 4 bitarna med data för att indexera en färg från paletten med 16 färger. Använd den färgen för denna pixel.
  • Ändra rött : Håll kvar de gröna och blå färgkomponenterna för föregående pixel. Använd de fyra databitarna som den nya röda färgkomponenten i denna pixel.
  • Ändra grönt : Håll i de röda och blå färgkomponenterna för föregående pixel. Använd de fyra databitarna som den nya gröna färgkomponenten i denna pixel.
  • Ändra blått : Håll i de röda och gröna färgkomponenterna för föregående pixel. Använd de fyra databitarna som den nya blå färgkomponenten i denna pixel.

HAM5

Ett liknande läge, HAM5, är också tillgängligt där endast 5 bitar data per pixel används. Den sjätte biten är alltid noll, så endast den blå färgkomponenten kan modifieras. Det här läget är inte lika flexibelt som HAM6 och används inte flitigt.

Skivad HAM-läge (SHAM)

Original Amiga Chipset inkluderade ett stödchip som kallas "Copper" som hanterar avbrott och andra timing- och hushållsuppgifter oberoende av CPU och videosystemet. Med hjälp av Copper är det möjligt att modifiera chipsetregister eller avbryta CPU:n vid valfri visningskoordinat synkront med videoutgången. Detta tillåter programmerare att använda Copperlist eller CPU-kod för videoeffekter med mycket låg overhead.

Med denna teknik utvecklade programmerare läget Sliced ​​HAM eller SHAM , även känt som dynamisk HAM . SHAM ändrar några eller alla färgregister på valda skanningslinjer för att ändra paletten under visning. Detta innebar att varje skanningslinje kan ha sin egen uppsättning med 16 basfärger. Detta tar bort vissa begränsningar orsakade av den begränsade paletten, som sedan kan väljas per rad istället för per bild. De enda nackdelarna med detta tillvägagångssätt är att Copperlist använder extra klockcykler för chip-RAM-minnet för registerändringarna, att bilden inte är enbart bitmapp, och den extra komplexiteten att ställa in SHAM-läget.

Denna teknik är inte begränsad till HAM, och användes också i stor utsträckning med maskinens mer konventionella grafiklägen. Dynamic HiRes använder en liknande palettförändringsteknik för att producera 16 färger per linje i högupplösta lägen, medan HAM är begränsad till låg upplösning men tillåter både 16 indexerade färger såväl som modifieringar av dem.

SHAM-idén förkastades när HAM8 introducerades med AGA-kretsuppsättningen, eftersom även en oslipad HAM8-bild har mycket mer färgupplösning än en skivad HAM6-bild. SHAM är dock fortfarande det bästa tillgängliga HAM-läget på de Amigas med original- eller ECS-chipset.

Advanced Graphics Architecture HAM-läge (HAM8)

320x200 HAM8 demobild

Med lanseringen av Advanced Graphics Architecture (AGA) 1992 döptes det ursprungliga HAM-läget om till "HAM6", och ett nytt "HAM8"-läge introducerades (det numrerade suffixet representerar bitplanen som används av respektive HAM-läge). Med AGA, istället för 4 bitar per färgkomponent, hade Amiga nu upp till 8 bitar per färgkomponent, vilket resulterade i 16 777 216 möjliga färger (24-bitars färgrymd).

HAM8 fungerar på samma sätt som HAM6, med två "kontroll"-bitar per pixel, men med sex bitar data per pixel istället för fyra. Inställningsoperationen väljer från en palett med 64 färger istället för 16. Modifieringsoperationen modifierar de sex mest signifikanta bitarna av antingen den röda, gröna eller blå färgkomponenten - de två minst signifikanta bitarna av färgen kan inte ändras av denna operation och förblir kvar som ställts in av den senaste inställningsoperationen. Jämfört med HAM6 kan HAM8 visa många fler färger på skärmen. Det maximala antalet färger på skärmen med HAM8 rapporterades allmänt vara 262 144 färger (18-bitars RGB-färgrymd). Faktum är att det maximala antalet unika färger på skärmen kan vara större än 262 144, beroende på de två minst signifikanta bitarna av varje färgkomponent i paletten med 64 färger. I teorin skulle alla 16,7 miljoner färger kunna visas med en tillräckligt stor skärm och en lämplig baspalett, men i praktiken innebär begränsningarna för att uppnå full precision att de två minst signifikanta bitarna vanligtvis ignoreras. I allmänhet motsvarar det upplevda HAM8-färgdjupet ungefär en hög färgskärm.

De vertikala skärmupplösningarna för HAM8 är desamma som för HAM6. Den horisontella upplösningen kan vara 320 (360 med överskanning) som tidigare, fördubblad till 640 (720 med överskanning) eller till och med fyrdubblad till 1280 pixlar (1440 med överskanning). AGA-kretsuppsättningen introducerade även ännu högre upplösningar för de traditionella plana visningslägena. Det totala antalet pixlar i en HAM8-bild får inte överstiga 829 440 (1 440 × 576) med PAL-lägen men kan överstiga 1 310 720 (1 280 × 1 024) med tredjeparts skärmhårdvara (Indivision AGA flimmer-fixer ) .

Liksom det ursprungliga HAM-läget kan en HAM8-skärm inte visa någon godtycklig färg vid någon godtycklig position, eftersom varje pixel förlitar sig på antingen en begränsad palett eller förlitar sig på upp till två färgkomponenter från den föregående pixeln. Som med det ursprungliga HAM-läget kan designers också välja att "skära" skärmen (se nedan) för att kringgå några av dessa begränsningar. Ett HAM7-läge är också tillgängligt men används inte i stor utsträckning.

HAM-emulering

HAM är unik för Amiga och dess distinkta styrkretsar. För att möjliggöra direkt rendering av äldre bilder kodade i HAM-format har mjukvarubaserade HAM-emulatorer utvecklats som inte kräver den ursprungliga displayhårdvaran. Före 4.0-versioner av AmigaOS kan använda HAM-läge i närvaro av den inbyggda Amiga-kretsuppsättningen. AmigaOS 4.0 och senare, designad för radikalt annorlunda hårdvara, tillhandahåller HAM-emulering för användning på modern chunky grafikhårdvara. Dedikerade Amiga-emulatorer som körs på icke-inbyggd hårdvara kan visa HAM-läge genom emulering av skärmhårdvaran. Men eftersom ingen annan datorarkitektur använde HAM-tekniken, kräver visning av en HAM-bild på någon annan arkitektur programmatisk tolkning av bildfilen. Trogen mjukvarubaserad avkodning kommer att ge identiska resultat och avsätta variationer i färgåtergivning mellan bildskärmsinställningar.

Men om målet bara är att visa en SHAM-bild på en icke-Amiga-plattform, kan de erforderliga färgvärdena förberäknas baserat på palettposterna som programmeras via kopparlistan, oavsett om paletten är modifierad i mitten av en scanline. Det är alltid möjligt att uppkonvertera en HAM- eller SHAM-bild förlustfritt till en 32-bitars palett.

HAM-implementationer från tredje part

En enhet producerad av Black Belt känd som HAM-E kunde producera bilder med HAM8 färgdjup vid låg horisontell upplösning från en Amiga med ett originalchipset.

Amiga skulle ställas in för att producera högupplösta bilder (640 pixlar breda, 720 med överskanning). Detta krävde användningen av fyra bitplan med 70 ns per pixel. De första raderna i bilden kodade information för att konfigurera HAM-E-enheten. Sedan kodades varje pixelpar med information för HAM-E-enheten, som omvandlade informationen till en 140 ns pixel (genererade en bild 320 pixlar bred, eller 360 med överskanning, vid ett färgdjup av åtta bitplan). Kvaliteten på HAM-E var alltså jämförbar med en lågupplöst HAM8-bild. HAM-E-tekniken utnyttjade det faktum att en högupplöst bild med fyra bitplan ger en tredjedel mer minnesbandbredd, och därför en tredjedel mer data, än en lågupplöst bild med sex bitplan.

HAM-tekniken implementerades också på HAM256- och HAM8x1-lägena i ULAplus för ZX Spectrum , där den ger möjlighet att visa 256 färger på skärmen, genom att modifiera en basfärgpalett med 64 färger.

Se även

Vidare läsning

  • Specifikation för Advanced Amiga (AA) Chip Set , Commodore-Amiga

externa länkar