Categories: Tecnologia

Hold and modify

Hold-And-Modify, solitamente abbreviato in HAM, è una modalità di visualizzazione del computer Commodore Amiga. Usa una tecnica molto insolita per esprimere il colore dei pixel, consentendo la visualizzazione di molti più colori sullo schermo di quanto sarebbe altrimenti possibile. La modalità HAM veniva comunemente utilizzata per visualizzare fotografie digitalizzate o frame video, immagini bitmap e occasionalmente animazioni. Al momento del lancio di Amiga nel 1985, questo display quasi fotorealistico non aveva precedenti per un computer di casa ed era ampiamente utilizzato per dimostrare la capacità grafica dell’Amiga. Tuttavia, HAM presenta notevoli limitazioni tecniche che ne impediscono l’utilizzo come modalità di visualizzazione generica.

sfondo
Il chipset originale Amiga utilizza un display planare con uno spazio colore RGB a 12 bit che produce 4096 possibili colori.

La bitmap del campo di gioco era contenuta in una sezione della memoria principale nota come RAM del chip, che era condivisa tra il sistema di visualizzazione e la CPU principale. A causa di considerazioni temporali, il chipset aveva solo il tempo di leggere 6 bit per pixel prima che fosse il momento di disegnare il prossimo pixel sullo schermo. Per ridurre la quantità di dati necessari per descrivere un’immagine e quindi rientrare in questa limitazione, il sistema di visualizzazione utilizzava un sistema di colori indicizzati con una tavolozza di colori.

L’hardware conteneva 32 registri che potevano essere impostati su uno qualsiasi dei 4096 possibili colori e l’immagine poteva accedere a uno qualsiasi di questi 32 valori usando 5 bit per pixel. Il sesto bit disponibile è stato utilizzato da una modalità di visualizzazione nota come Extra Half-Brite che ha ridotto la luminosità di quel pixel della metà, fornendo un modo semplice per produrre effetti di shadowing.

Modalità di attesa e modifica
Quando il chipset Amiga fu progettato per la prima volta, operò direttamente nei valori chroma, hue e luminance del segnale NTSC, come era comune per i primi computer domestici per i quali erano stati utilizzati televisori per la visualizzazione. Ciò ha portato alla possibilità di ridurre notevolmente la quantità di memoria necessaria per visualizzare un’immagine monocromatica come la televisione in bianco e nero impostando il valore del colore all’inizio di una linea di scansione e facendo in modo che i valori bitmap modificino solo il valore di luminanza. Poiché le immagini televisive analogiche possono solo cambiare da nero a bianco su un numero di pixel, non immediatamente da uno a quello successivo, basterebbero quattro pixel per fornire un’immagine credibile “in bianco e nero”, dimezzando la quantità di memoria necessaria per archiviare un Immagine.

Mentre il design di Amiga migrava da una console di gioco a un computer di casa, il chipset si spostava anche dal modello di colore HSL al moderno modello di colori RGB. Per citare Jay Miner:

“Hold and Modify è venuto da un viaggio per vedere i simulatori di volo in azione e ho avuto una specie di idea su un tipo primitivo di realtà virtuale. NTSC sul chip significava che si poteva tenere la tonalità e cambiare la luminanza modificando solo quattro bit. Quando abbiamo cambiato RGB, ho detto che non era più necessario poiché non era utile e ho chiesto al responsabile del layout del chip di toglierlo. È tornato e ha detto che questo avrebbe o lasciato un grosso buco nel mezzo del chip o prendere una riprogettazione di tre mesi e non potevamo farlo. Non pensavo che qualcuno lo avrebbe usato. Mi sono sbagliato di nuovo in quanto ciò ha davvero dato all’Amiga il suo vantaggio in termini di tavolozza dei colori. ”
Hold-And-Modify era essenzialmente una modifica del concetto di luminanza originale, ma questa volta permetteva la modifica di una delle tre componenti di colore, rosso, verde o blu. HAM può essere considerato una tecnica di compressione con perdite; in modalità HAM6 il campo di gioco è codificato in metà della memoria normalmente richiesta per uno spazio colore a 12 bit. La maggiore fedeltà cromatica complessiva è ottenuta a scapito della risoluzione cromatica orizzontale. Lo spazio colore codificato HAM viene “decompresso” dall’hardware del display in tempo reale mentre viene visualizzato il buffer grafico.

uso
Quando l’Amiga fu lanciato nel 1985, la modalità HAM offrì un vantaggio significativo rispetto ai sistemi concorrenti. HAM consente la visualizzazione di tutti i 4096 colori contemporaneamente, sebbene con le limitazioni sopra menzionate. Questo display pseudo-fotorealistico era senza precedenti per un computer di casa dell’epoca e consentiva la visualizzazione di fotografie digitalizzate e immagini 3D renderizzate. In confronto, l’EGA standard dell’IBM-PC consentiva 16 colori su schermo da una palette di 64. Il successore VGA di EGA, rilasciato nel 1987 con la sua modalità di gioco di punta, la modalità 13h, consentiva 256 colori sullo schermo da 262.144. La modalità HAM è stata spesso utilizzata per dimostrare l’abilità di Amiga nelle visualizzazioni del punto vendita e nelle presentazioni commerciali, poiché l’hardware della concorrenza non poteva corrispondere alla profondità del colore. A causa delle limitazioni sopra descritte, HAM è stato utilizzato principalmente per la visualizzazione di immagini statiche e gli sviluppatori hanno evitato in gran parte il suo utilizzo con giochi o applicazioni che richiedevano animazione.

Con l’introduzione dell’architettura grafica avanzata, un’immagine planare convenzionale può avere una tavolozza di 256 colori, offrendo una fedeltà del colore significativamente più alta. La modalità HAM originale con la sua risoluzione a colori limitata divenne molto meno attraente per gli utenti di una macchina AGA, sebbene fosse ancora inclusa per compatibilità con le versioni precedenti. La nuova modalità HAM8 era molto meno utile per il chipset AGA rispetto alla modalità HAM rispetto al chipset originale, poiché una tavolozza di 256 colori planare aumentava notevolmente le opzioni per l’artista senza soffrire degli inconvenienti della modalità HAM. Una modalità planare affettata ben programmata potrebbe rivelarsi più utile di HAM8. Lo scopo originale di HAM, che doveva consentire una maggiore risoluzione del colore nonostante le dimensioni limitate del buffer video e la larghezza di banda della memoria limitata, non era più rilevante.

Poiché i computer moderni sono in grado di visualizzare truecolor ad alta risoluzione, non è più necessario utilizzare tecniche di visualizzazione come HAM. La grafica planare è ora obsoleta anche per il calcolo generico, dal momento che l’hardware grafico moderno ha una larghezza di banda sufficiente per utilizzare i pixel compressi.

limitazioni
La modalità HAM pone restrizioni sul valore dei pixel adiacenti su ogni linea orizzontale del campo di gioco. Al fine di rendere due colori arbitrari adiacenti, possono essere necessari fino a due pixel intermedi per passare al colore desiderato (se i componenti rosso, verde e blu devono essere tutti modificati). Nel peggiore dei casi questo riduce la risoluzione cromatica orizzontale da 704 pixel a un minimo di 240 (per confronto, le tecnologie contemporanee come VHS avevano una risoluzione cromatica di 40 a 0.4 MHz). Questo problema è particolarmente evidente nelle aree a forte contrasto (forti gradienti orizzontali dell’immagine), dove può apparire un artefatto multicolore indesiderato o “frangia”. Sono state utilizzate varie tecniche di rendering per ridurre al minimo l’impatto di “frange” e le schermate HAM sono state spesso progettate per incorporare sfumature di colore orizzontali sottili, evitando bordi e contrasti verticali.

La visualizzazione di un’immagine a colori in modalità HAM richiede un accurato pre-elaborazione. Poiché HAM può modificare solo uno dei componenti RGB alla volta, è possibile ottenere le transizioni di colore rapide lungo una linea di scansione utilizzando uno dei registri di colore preimpostati per queste transizioni. Per rendere un’immagine arbitraria, un programmatore può scegliere di esaminare prima l’immagine originale per la più evidente di queste transizioni e quindi assegnare quei colori a uno dei registri, una tecnica nota come tavolozze adattive. Tuttavia, con solo 16 registri disponibili nella modalità HAM originale, alcune perdite nella fedeltà dei colori sono comuni.

Inoltre, la modalità HAM non consente facilmente l’animazione arbitraria del display. Ad esempio, se una porzione arbitraria del campo di gioco deve essere spostata in un’altra posizione sullo schermo, i valori Hold-and-Modify potrebbero dover essere ricalcolati su tutte le linee di origine e di destinazione per visualizzare correttamente l’immagine (un’operazione non adatto all’animazione). In particolare, se il bordo più a sinistra dell’oggetto animato contiene pixel di ‘modifica’ o se l’immagine immediatamente a destra dell’oggetto contiene dei pixel ‘di modifica’, allora quei valori Hold-and-Modify devono essere ricalcolati. Un tentativo di spostare un oggetto sullo schermo (come con l’uso del blitter) creerà margini visibili a destra e a sinistra dell’immagine, a meno che la grafica non sia appositamente progettata per evitarlo. Per evitare di ricalcolare i valori di Hold-and-Modify e di eludere la frange, il programmatore dovrebbe assicurarsi che il pixel più a sinistra di ogni oggetto blitter e il pixel più a sinistra di ogni riga di un campo di scorrimento sia un pixel ‘set’. La tavolozza dovrebbe essere progettata in modo tale da incorporare tutti i pixel più a sinistra. In alternativa, una visualizzazione HAM può essere animata generando valori di pixel attraverso la generazione procedurale, sebbene ciò sia generalmente utile solo per le immagini sintetiche, ad esempio gli effetti “arcobaleno” usati nelle demo.

Si noti, tuttavia, che Hold-and-Modify si applica solo ai pixel del campo di gioco. 128 pixel di dati sprite (in modalità DMA) per scanline sono ancora disponibili per il posizionamento in cima al campo di gioco HAM.

implementazioni
Modalità HAM Chip Set originale (HAM6)
La modalità HAM6, denominata per i 6 bit di dati per pixel, è stata introdotta con il set di chip originale ed è stata mantenuta nel successivo set di chip avanzati e architettura grafica avanzata. HAM6 consente di visualizzare contemporaneamente fino a 4096 colori a risoluzioni da 320 × 200 a 360 × 576.

Related Post

La codifica HAM6 utilizza sei bit per pixel: due bit per il controllo e quattro bit per i dati. Se i due bit di controllo sono entrambi impostati su zero, i quattro bit rimanenti vengono utilizzati per indicizzare uno dei 16 registri di colore preimpostati, che funzionano come una normale bitmap indicizzata. Gli altri tre pattern di bit di controllo possibili indicano che il colore del pixel precedente (a sinistra) sulla linea di scansione dovrebbe essere usato e che i bit di dati dovrebbero invece essere usati per modificare il valore del componente rosso, verde o blu. Di conseguenza, ci sono quattro possibilità:

Set: usa i 4 bit di dati per indicizzare un colore dalla tavolozza dei 16 colori. Usa quel colore per questo pixel.
Modifica rosso: trattiene i componenti di colore verde e blu del pixel precedente. Usa i 4 bit di dati come il nuovo componente di colore rosso di questo pixel.
Modifica verde: mantieni le componenti del colore rosso e blu del pixel precedente. Usa i 4 bit di dati come il nuovo componente di colore verde di questo pixel.
Modifica blu: mantieni le componenti del colore rosso e verde del pixel precedente. Usa i 4 bit di dati come il nuovo componente di colore blu di questo pixel.
È disponibile anche una modalità simile, HAM5, ma è piuttosto inutile. In HAM5 il sesto bit è sempre zero, quindi è possibile modificare solo il componente di colore blu.

Modalità HAM a fette (SHAM)
L’Original Chipset Amiga includeva un chip di supporto noto come “Copper” che gestiva gli interrupt e altri compiti di timing e di manutenzione indipendentemente dalla CPU e dal sistema video. Utilizzando Copper, è stato possibile richiamare la CPU per eseguire operazioni brevi mentre il display video gestiva l’interrupt vuoto verticale o orizzontale (HBI). Ciò ha permesso ai programmatori di legare il codice macchina al display senza causare artefatti visivi, il che rende molto più semplice l’implementazione di molti effetti video.

Usando questa tecnica, i programmatori hanno sviluppato la modalità HAM o SHAM a fette, nota anche come HAM dinamico. SHAM ha utilizzato il codice del computer che è stato chiamato su linee di scansione selezionate, o tutte, che ha cambiato la tavolozza durante l’HBI. Ciò significava che ogni linea di scansione poteva avere il proprio set di 16 colori di base. Ciò ha reso molto più semplice scegliere la tavolozza, che ora potrebbe essere eseguita per riga anziché per immagine. L’unico svantaggio di questo approccio è che l’immagine non era più contenuta esclusivamente nella RAM del chip, in quanto il programma di controllo doveva contenere più tavolozze e c’era una certa complessità nell’impostare la modalità SHAM.

Questa tecnica non era limitata a HAM ed era ampiamente utilizzata anche con le modalità grafiche più convenzionali della macchina. Dynamic HiRes utilizza una tecnica di modifica della tavolozza simile per produrre 16 colori per riga nei modelli ad alta risoluzione, mentre HAM è limitato a bassa risoluzione ma consente sia 16 colori indicizzati che modifiche di essi.

L’idea SHAM è stata deprecata quando è stato introdotto HAM8, dal momento che anche un’immagine HAM8 senza file ha una risoluzione del colore molto maggiore rispetto a un’immagine HAM6 affettata. Tuttavia, SHAM rimane la migliore modalità HAM disponibile su quegli Amiga con chipset originale.

Modalità HAM dell’architettura grafica avanzata (HAM8)
Con il rilascio di Advanced Graphics Architecture (AGA) nel 1992, la modalità HAM originale fu ribattezzata “HAM6”, e fu introdotta una nuova modalità “HAM8” (il suffisso numerato rappresenta i bitmap usati dalla rispettiva modalità HAM). Con AGA, invece di 4 bit per componente di colore, l’Amiga ora aveva fino a 8 bit per componente di colore, risultando in 16.777.216 possibili colori (spazio colore a 24 bit).

HAM8 funziona allo stesso modo di HAM6, usando due bit “di controllo” per pixel, ma con sei bit di dati per pixel anziché quattro. L’operazione set viene selezionata da una tavolozza di 64 colori anziché 16. L’operazione di modifica modifica i sei bit più significativi del componente di colore rosso, verde o blu: i due bit meno significativi del colore non possono essere modificati da questa operazione e rimangono come impostato dall’ultima operazione impostata. Rispetto a HAM6, HAM8 può visualizzare molti più colori sullo schermo. Il numero massimo di colori su schermo che utilizza HAM8 è stato ampiamente riportato come 262.144 colori (spazio colore RGB a 18 bit). In effetti, il numero massimo di colori sullo schermo univoci può essere maggiore di 262.144, in base ai due bit meno significativi di ciascun componente di colore nella tavolozza dei colori 64. In teoria, tutti i 16,7 milioni di colori potrebbero essere visualizzati con uno schermo abbastanza grande e una tavolozza di base appropriata, ma in pratica le limitazioni per ottenere la massima precisione significano che i due bit meno significativi sono tipicamente ignorati. In generale, la profondità di colore HAM8 percepita è approssimativamente equivalente a un display a colori elevato.

Le risoluzioni di visualizzazione verticale per HAM8 sono le stesse di HAM6. La risoluzione orizzontale può essere 320 (360 con overscan) come prima, raddoppiata a 640 (720 con overscan) o anche quadruplicata a 1280 pixel (1440 con overscan). Il chipset AGA ha anche introdotto risoluzioni ancora più elevate per le tradizionali modalità di visualizzazione planare. Il numero totale di pixel in un’immagine HAM8 non può superare 829.440 (1440 × 576) utilizzando le modalità PAL ma può superare 1,310,720 (1280 × 1024) utilizzando hardware di visualizzazione di terze parti (fissatore di sfarfallio di Indivision AGA).

Come la modalità HAM originale, una schermata HAM8 non può visualizzare alcun colore arbitrario in nessuna posizione arbitraria, poiché ogni pixel si basa su una tavolozza limitata o si basa su un massimo di due componenti colore del pixel precedente. Come per la modalità HAM originale, i progettisti possono anche scegliere di “affettare” il display (vedi sotto) per aggirare alcune di queste restrizioni. È disponibile anche una modalità HAM7, ma non ampiamente utilizzata.

Emulazione HAM
HAM è unico per Amiga e per i suoi chipset distinti. Per consentire il rendering diretto di immagini legacy codificate in formato HAM, sono stati sviluppati emulatori HAM basati su software che non richiedono l’hardware di visualizzazione originale. Le versioni pre-4.0 di AmigaOS possono utilizzare la modalità HAM in presenza del chipset nativo Amiga. AmigaOS 4.0 e versioni successive, progettati per hardware radicalmente diversi, forniscono l’emulazione HAM per l’utilizzo su hardware grafico chunky moderno. Emulatori dedicati Amiga in esecuzione su hardware non nativo sono in grado di visualizzare la modalità HAM emulando l’hardware del display. Tuttavia, poiché nessun’altra architettura di computer ha utilizzato la tecnica HAM, la visualizzazione di un’immagine HAM su qualsiasi altra architettura richiede l’interpretazione programmatica del file di immagine. La fedele decodifica basata su software produrrà risultati identici, mettendo da parte le variazioni di fedeltà del colore tra le impostazioni dello schermo.

Tuttavia, se l’obiettivo è semplicemente visualizzare un’immagine SHAM su una piattaforma non Amiga, i valori dei colori richiesti possono essere precalcolati in base alle voci della tavolozza programmate tramite la lista rame, indipendentemente dal fatto che la tavolozza venga modificata in al centro di una scanline. È sempre possibile eseguire il up-conversion di un’immagine HAM o SHAM senza perdita su una tavolozza a 32 bit.

Implementazioni HAM di terze parti
Un dispositivo prodotto da Black Belt noto come HAM-E è stato in grado di produrre immagini con profondità di colore HAM8 a bassa risoluzione orizzontale da un Amiga con un Chipset originale.

L’Amiga verrebbe impostato per produrre immagini ad alta risoluzione (640 pixel di larghezza, 720 di overscan). Ciò ha richiesto l’uso di quattro bit bit a 70 ns per pixel. Le prime righe dell’immagine codificate per configurare l’unità HAM-E. Quindi ogni coppia di pixel è stata codificata con informazioni per l’unità HAM-E, che ha convertito l’informazione in un pixel da 140 ns (generando un’immagine di 320 pixel di larghezza o 360 con overscan, con una profondità di colore di otto bit bit). La qualità di HAM-E era quindi paragonabile a un’immagine HAM8 a bassa risoluzione. La tecnica HAM-E ha sfruttato il fatto che un’immagine ad alta risoluzione con quattro bit bit offre una terza maggiore larghezza di banda di memoria, e quindi un terzo più dati, rispetto a un’immagine a bassa risoluzione con sei bitmap.

Share