Articolo pubblicato sul n. 59 di MCmicrocomputer (Edizioni Technimedia Srl - Roma) nel gennaio 1987

MCmicrocomputer


Commodore 128:
Video Display Controller 8563

(seconda parte)

di Andrea de Prisco

Questo mese vedremo una dozzina di registri interni all'8563 che ci permetteranno di effettuare lo scroll fine orizzontale e verticale della pagina video, di cambiare il colore di fondo di questa e come sia possibile rilocare la mappa video e/o quella colore in un altro punto della video-ram nascosta dentro a tale integrato video. Infine un paio di programmi in linguaggio macchina che, "infiltrati" nelle routine di interrupt (mascherabile e non) del 128, permettono di cambiare colore di schermo o l'intero contenuto di questo con la pressione di un solo tasto.Copertina del numero di MCmicrocomputer contenente l'articolo

 

12 registri

 

La tabella 1, che a dire il vero sarebbe dovuta apparire sul numero scorso, mostra i registri già visti nella puntata precedente. In tabella 2, questa volta puntualmente, sono mostrati i 12 registri che andiamo a descrivere questo mese.

I registri 2 e 3 servono per centrare lo schermo in senso orizzontale: il primo spostandolo ad intervalli di un carattere (ovvero otto pixel) il secondo mezzo carattere alla volta (quattro pixel). Per effettuare tali "tarature" ci avvarremo del programma di figura 1, col quale potremo leggere o scrivere in qualunque dei registri dell'8563.

Il suo funzionamento è assai semplice: dapprima si indica a quale registro siamo interessati, successivamente alla domanda "value" (valore) se indichiamo un numero si effettuerà un'operazione di scrittura se invece battiamo [return] avremo una lettura e il valore del registro sarà "printato" sullo schermo.

Tornando ai nostri registri 2 e 3, basterà variare i loro contenuti per vedere tutto lo schermo spostarsi a destra o a sinistra di un carattere o di mezzo, a seconda del registro interessato. Per l'esattezza, immetteremo un valore compreso tra 0 e 120 nel registro 2 (di default è 102) o un valore compreso tra 66 e 79 nel registro 3 (default 73). Si badi bene che molti dei registri dell'8563, se manipolati a casaccio possono provocare la scomparsa del video a 80 colonne sino al ripristino degli stessi o, meglio, al prossimo reset del sistema. A tal proposito, se qualche lettore intende esplorare l'8563 con la routine di figura 1, prima di modificare il contenuto di ogni registro sarebbe opportuno che prendesse nota del suo contenuto iniziale, in modo da poterlo ripristinare anche alla cieca, in caso di perdita del video.

Degli otto bit di cui è formato il registro 5, i tre meno significativi servono per centrare lo schermo in senso verticale, un pixel alla volta. Avendo a disposizione soli tre bit, potremo scegliere tra 8 posizioni diverse, pari dunque all'altezza di un carattere. I valori che possono essere immessi in tale registro sono compresi (da una analisi abbastanza sommaria... chi sa di più si faccia vivo) tra 224 e 231, e di default è presente il valore 224.

 

Scroll fine e Reverse Video

 

Più che un vero e proprio scroll fine, come già successo su altri Commodore, il 128 dispone solo di due registri per far scrollare di pochi pixel la pagina video nelle quattro direzioni, ferma restando una cornice dello stesso colore del fondo tipo il bordo delle 40 colonne. Ciò significa che per far scrollare più righe di testo occorre usare una routine in linguaggio macchina che terminato lo scroll, ad esempio, di 8 pixel in sù, velocemente resetta il registro, sposta tutto il testo una riga più in alto e riempe la nuova riga formatasi in basso col nuovo testo da far apparire lentamente.

 Il difficile sta nel fatto che la routine in linguaggio macchina deve essere o così veloce da non farcene accorgere (di solito si ha uno sfarfallio di schermo) oppure sincronizzata col quadro in modo da effettuare tutte le operazioni quando il "pennello" elettronico è fuori campo (sta ad esempio costruendo il bordo superiore o inferiore. Considerato poi che una routine in linguaggio macchina, nel 128, per veloce che sia dovrà in ogni caso combattere coll'indirizzamento indiretto dei registri che indirizzano indirettamente la memoria (vedi puntata precedente) non resta che concludere che lo scroll fine, inteso come lo era nel 64, non è (praticamente) possibile. A meno che qualcuno non ci riesca e ce lo segnali. Grazie.

Ad ogni modo, i registri interessati allo scroll sono per il verso verticale il 24 e per quello orizzontale il 25. In figura 2 è mostrato un semplice programmino che permette di muovere lo schermo video sotto la cornice esterna, nelle quattro direzioni, usando i quattro tasti cursore.

Colpo di scena: il bit 6 del registro 24 permette di ottenere lo schermo in reverse: caratteri colore di fondo su fondo colore dei caratteri. Settandolo si ha l'effetto di veder apparire anche per le 80 colonne un bordo attorno allo schermo: il reverse video agisce solo sulle posizioni dei caratteri.

 

Pagina video e Pagina colore

 

La mappa di memoria dell'8563 descritta il mese scorso e mostrata in figura 3, può essere in parte riconfigurata. Possiamo ad esempio spostare la pagina video da tutt'altra parte così come per la pagina colore, meglio detta degli attributi. I registri interessati sono: 12,13,20 e 21. I primi due (12 parte alta e 13 parte bassa) permettono di spostare la pagina video, gli altri due, con lo stesso formato, la pagina degli attributi. Possiamo ad esempio spostare una di queste due mappe (o ambedue) mella zona libera della memoria video, a partire cioè dall'indirizzo 4096. Se ad esempio vogliamo spostare la mappa video a tale indirizzo e la mappa degli attributi a 6144 (4096+2048), basterà immettere nel registro 12 il valore 16 (4096/256) e nel registro 20 il valore 24 (6144/256) le rispettive "parti-basse" resteranno a zero.

Oltre a questo, occorre informare il sistema operativo di tale cambiamento, in modo da ottenere letture e scritture effettivamente nello schermo desiderato. Per fare questo sarà sufficiente ricopiare il valore "pok-ato" nel registro 12, nella locazione Ram 2606 del 128, il valore "pok-ato" nel registro 20 nella locazione 2607. Più avanti mostreremo una applicazione di tale possibilita, comandata dal tasto restore.

 

Colore di schermo

 

Il registro 26 del Video Display Controller serve per cambiare colore. I 4 bit meno signigicativi sono riferiti al colore di fondo, i 4 più significativi il colore della "penna" in alta risoluzione. 4 bit equivalgono a 16 possibili combinazioni diverse, il numero di colori di cui il 128 dispone.

Per colorare diversamente lo schermo, come per le celle della mappa colore vista lo scorso mese, seguendo le specifiche RGBI, indicheremo per il colore che vogliamo usare di quali componenti cromatiche esso è composto e se desideriamo o meno l'intensità doppia. Un colore è dunque codificato con la sequenza di bit:

 

Bit 0 : intensità

Bit 1 : blu

Bit 2 : verde

Bit 3 : rosso

 

Se ad esempio desideriamo un colore di schermo blu chiaro, setteremo il bit 0 e il bit 1 del registro colore (blu chiaro = blu + intensità doppia). Il bianco è composto da tutte e tre le componenti cromatiche più l'intensità doppia (quindi setteremo tutt'e quattro i bit), mentre per le altre combinazioni di colori abbiamo che:

 

Blu+ Verde  =  Cyan

Verde + Rosso  =  Giallo

Rosso + Blu=  Magenta

 

Cyan, per la cronaca è un quasi-azzurro mentre magenta assomiglia molto a un rosa intenso.

Se settiamo solo il bit Intensità, il "nero-chiaro" che dovremmo ottenere è un grigio scuro, mentre settando solo le componenti cromatiche e non l'intensità, il "bianco-scuro" così ottenuto è il grigio chiaro.

 

Posizione cursore

 

 Terminiamo la nostra carrellata sui registri dell'8563 (l'alta risoluzione sul prossimo numero, promesso) con i registri 14 e 15 nei quali possiamo leggere la posizione del cursore. Tanto per cambiare la parte alta nel primo dei due, la parte bassa nel secondo. Si noti che per posizione cursore non si intende riga-colonna, ma l'effettiva locazione di video ram dove si trova il carattere sotto il cursore che vediamo sullo schermo. Tant'è che se spostiamo la mappa video col procedimento visto prima, anche i registri 14 e 15 si aggiorneranno automaticamente al nuovo range di valori.

 

Figura 5 e seguenti

 

 Il listato di figura 5 implementa un rapido metodo per cambiare colore di schermo: è sufficiente infatti la pressione del tasto ALT per vedere cambiare ciclicamente tutti i colori possibili (16). Oltre a questo, con la sequenza CONTROL SHIFT è possibile effettuare il reverse di schermo che, come detto, avviene settando o resettando il bit 6 del registro 24. Come visibile in figura 5, il listato è composto da alcune istruzioni e da un po' di linee data contenenti la routine in linguaggio macchina disassemblata in figura 6. Apriamo a questo punto una piccola parentesi per tutti quelli che non hanno già militato precedentemente nella fila dei Vic-hingi o dei post-vichinghi (classe millenovecento...64).

 Il centoventotto, come i suoi nobili predecessori, relega la gestione della tastiera ad una apposita routine che parallelamente a quanto avviene nel computer (es. l'esecuzione di un programma) provvede a scandire i tasti per vedere quale di questi è stato premuto. Parallelamente nel senso simulato del termine, per la precisione col meccanismo delle interruzioni: qualsiasi cosa stia facendo il processore, ogni 60-esimo di secondo, viene mandato a questo un interrupt mascherabile. A questo punto, se il processore non ha settato la mascherazione delle interruzioni, molla tutto ed esegue la scansione della tastiera.

Detto ciò, per implementare qualcosa che alla pressione di un determinato tasto deve essere eseguita, l'unico modo  è di "incunearsi" nella gestione della tastiera, cambiando il puntatore alla routine che la gestisce. Ovvero, scriveremo da qualche parte in memoria in nostro bravo programmino in linguaggio macchina, il puntatore alla gestione della tastiera viene fatto puntare alla nostra routine, la quale a sua volta terminerà con un salto alla normale routine di manipolazione delle interruzioni che, come detto, controlla quale tasto è stato premuto.

La nostra routine per vedere se il tasto interessato è stato premuto farà sicuramente riferimento ad alcune celle di memoria come avviene nel programma di figura 6 che andiamo a commentare.

Le prime 9 istruzioni ("linee" 1300-1310) servono per inizializzare il programma: viene cambiato l'indirizzo della routine di manipolazione delle interruzioni (agendo sulle celle $314 e $315) e posto uguale a zero la cella $FE che ci serve per mantenere il colore di schermo attuale. Come si vede, l'inizio della manipolazione delle interruzioni è stata portata all'indirizzo $1311, dove effettivamente ci occuperemo di cambiare colore ad ogni ALT e di invertire il video se si digita CONTROL SHIFT. La routine di $1311 per prima cosa salva i registri A, X, Y nello stack dopodiché accede alla cella di memoria $D3 che al termine di ogni scansione indica quale o quali tasti-prefisso sono stati premuti. La corrispondenza bit-tasto è mostrata qui di seguito:

 

bit 0  SHIFT

bit 1  COMMODORE

bit 2  CONTROL

bit 3  ALT

bit 4  CAPS LOCK

 

 Tornando al disassemblato, prima di procedere si controlla se tale cella è uguale al contenuto di $FA in modo da non avere repeat su questi tasti che ci creerebbe non pochi problemi per azzeccare il colore giusto. Dopo di ciò si controlla se il valore di $D3 è uguale a 8 (è stato premuto l'ALT) o uguale a 5 (sono stati premuti CONTROL e SHIFT). A seconda di questi due casi, come prevedibile, si provvede a mandare il contenuto di $FE al registro 26 dell'8563 e a incrementare $FE oppure si complementa il bit 6 del registro 24, che fa passare da schermo normale a reverse e viceversa. Al termine, "linee" 133A-133F, si ripristinano i registri Y, X, A e si salta a $FA65 per effettuare la normale scansione della tastiera.

In figura 7 è listato il programma che implementa due schermi a 80 colonne, switch-abili tramite il tasto Restore. Attenzione: il tasto restore non è un tasto normale. Esso infatti non è, come gli altri, scandito dal processore, ma è collegato a questo direttamente (a meno di qualche integratuccio di comodo) tramite il suo piedino NMI. L'acronimo sta per interrupt non mascherabile e ciò sta a significare che il processore non può fare a meno di ascoltarlo. Come per gli interrupt normali, anche quello mascherabile ha la sua routine di gestione in memoria, la quale non fa altro che controllare se è stato premuto anche il run/stop nel qualcaso viene eseguita la ben nota routine di re-inizializzazione del sistema. Analogamente al caso precedente, per implementare l'algoritmo di scambio schermo ci "incuneeremo" nella routine di NMI, cambiando il puntatore a questa per farlo puntare al  nostro programmino in linguaggio macchina e facendo terminare quest'ultimo con salto alla normale manipolazione dell'NMI.

In figura 8 è disassemblato il programma in linguaggio macchina presente in figura 7 sotto forma di linee data.

Tale programma è dunque attivato ad ogni pressione del tasto restore o, alternativamente, da programma tremite una SYS 5120. Le linee 140 e 150 di figura 7 provvedono a spostare il puntatore alla routine di NMI. Quello che fa il programma di figura 8 è assai semplice, a seconda di quale schermo è attivo, sposta i puntatori 12, 13 20 e 21 dell'8563 e cambia il contenuto delle celle 2606, 2607 della ram in modo da passare allo schermo, in quel momento, nascosto. Infine un Cursor-Down e un Cursor-Up sono "sparati" sul video in modo da avere il cursore sempre sullo schermo selezionato. Fine.


Impaginato originale...


Clicca per ingrandire... Clicca per ingrandire...
Clicca per ingrandire... Clicca per ingrandire...

Articolo pubblicato su www.digiTANTO.it - per ulteriori informazioni clicca qui