Allora..dato che queste 2 genialate le ho approfondite studiando 68000 asm!
Allora,..inizio con l'HAM!
Come ha detto il caro Ivan,..significa Hold And Modify,ovvero un TRUCCO(genialata) che permette di visualizzare 4096 colori contemporaneamente da una palette di 4096 colori,..invece di 64 contemporaneamente da una palette di sempre 4096(modalita EHB, ovvero Extra Half Bright)!
Senza HAM, ogni pixel ha la profondita' di 6 bit, e quindi si possono visualizzare 64 colori contemporaneamente!
HAM funziona cosi':in modalita' HAM per ogni pixel si usano i 4 bit meno siginficativi per visualizzare un colore diverso, ma che indica parzialmente il colore da visualizzare, e con i 2 bit rimanenti si visualizza un colore con una variazione di tonalita' rispetto al pixel che gli sta accanto!
In questo modo pero', le immagini risultano un po' sfocate, percio' Miner era indeciso sull'implementazione di HAM nei chip DENISE(che dovevano ancora essere commercializzati)!
Poi tempo dopo Minter decise eliminare l'HAM, ma nn lo fece perche' senno' si doveva ri-progettare da capo Denise!
Amiga con HAM era la scelta MIGLIORE, perche' era avanti anni ad altri computer, e non costava relativamente poco!
(Cmq Samo79,..la perte storica spiegala tu che ne sai a pakki)!
Nell'Amiga 4000, in Daphne(evoluzione di Denise) introdussero l'AGA, che significa Advanced Graphic Adpater, che poteva visualizzare contemporaneamente 256 colori contemporaneamente da una palette di 16 milioni (circa) di colori!
Ma AGA poteva arrivare a visualizzarne pure 256000 contemporaneamente dalla stessa palette, con una modalita' SIMILE all'HAM, dei precedenti Amiga, ma di nome HAM8!
Poi c'e' anche la variabile Hi & Low res,..si' perche' (detta moolto velocemente) senza EHB e HAM in low res il massimo di colori visualizzati contemporaneamente e' 32(massimo), mentre in hi res e' 16!(massimo)!
I giochi sono quasi tutti in low res,..per il fatto che in questo modo ci sono + colori, il gioco e' + fluido, ed anche perche' in hi res ri rischierebbe di finire la memoria!
Ora , per siegare VERAMENTE come funziona il tutto, dovrei introdurre l'argomento BITPLANE (che bella parola eh?), cmq superficialmente, ogni colore ha un suo registro, a partire dal colore 0,ovvero il registro $dff180 !
Infatti uno dei primi esercizi che si fanno i Coder con 6800 asm, e' questo:
-----------------------------------
Decrunching:
move.w $dff006,$dff180
;nel punto e virgola si possono inserire i commenti,..e il compilatore non li caga!
Allora, Decrunching, e' il nome della label, che credo sappiate tutti cosa sia! Il comando move.w copia una word, ovvero 2 bytes,..senno' sarebbe move.b, da $dff006 a $dff180, tradotto in parole povere, $dff006 e' il VHPOSR, e $dff180 e' il colore 0!
Cioe', il pennello elettronico riscrive continuamente sullo schermo una word di colori, ovvero colori in successione, che vengono continuamente riscritti!
btst #6,$bfe001
;qui la cpu controlla parecchie volte al secondo se il tasto sinistro del mouse e' premuto, la faccenda funziona cosi',:
btst: Controlla se la cup ha premuto il tasto sinistro del mouse, e scrive, ogni volta che fa un controllo, se la condizione si e' verificata, lo scrive nel registro $bfe001, che si chiama CIAAPRA!
#6, e' il bit di CIAAPRA(si' perche' in asm, prima dei bit si deve mettere #, prima di un registro si mette $,...ecc..), ovvero il pulsante sinistro del mouse!
bne.s Decrunching
;bne significa Branch If Not Equal, ovvero salta se non e' uguale!
quindi il bne va a leggere il registro CIAAPRA, se nel CIAAPRA c'e' scritto che il tasto del mouse e' stato premuto, allora quando si arriva al bne, se la condizione e' vera, asm salta a leggere ed eseguire l'istruzione dopo, se invece la condizione non e' verificata, asm ritorna a controllare se il mouse e' stato premuto, quindi la cpu esegue vecolemente il btst e il bne finche' la condizione non e' avverata!
Ora, .s , sta er Short, che equivale al .b, pero' con una differenza che non sto a spiegare!
La scritta Decrunching dopo il bne , dice al compilatore che se la condizione non e' vera, ritorna a all'inizio, ovvero al nome della label!
rts
;quando la condizione e' verificata, amiga legge l'istruzione dopo, ovvero l'rts!
rts significa ReTurn from Subroutine, e come dice il nome, ritorna alla subroutine, e dato che il prgramma e' composto solo da una subroutine, l'rts in questo caso sta per esci dal programma!
----------------------------------
Avete capito quindi il programma cosa fa?
Eh,..che bei tempi quelli in cui durante il Decrunching c'era quella bella schermata colorata!
Cmq, se volete, compilatelo e provatelo!
Cmq,..forse mi sono dilungato un po' troppo,..ma non sapete quanto e' bello e gratificante spiegare 68000 ASM a qualcuno,..ed e' ancora + gratificante fare delle demo,..io nn ne ho mai ftta una,..pero' posso immaginare come ci si sente dopo...
Spero che la lezioncina vi sia piaciuta,..e che la convinzione (DI PARECCHIE PERSONE) che asm e' complicato, e per fare qualche animazione anche 3d, ci voglia il mondo!
Avete visto, come fare la classica schermata di Dech. in poche righe,..mentre con C,..gia' ad inserire le librerie non passa +!
Cmq,..non, confronto gli effetti grafici altro livello, questo che ho fatto e' una nullita'!
Byez Friends!
