|
 |
Programmazione |
VIDEO 08/59
[28 di 79] |
 |
Gestione BIOS del Video -
INT 10H
- Funzione 09H
|
INT
10H |
Funzione 09H |
Stampa uno o più caratteri a colori |
|
 | Scrive una o più volte
un determinato carattere a colori,
a partire dalla posizione di stampa e
nella pagina video corrente
|
 | In
ingresso:
 | AH è posto
a 09H |
 | AL
indica il codice Ascii del carattere da
stampare |
 | BL
indica il valore dell'attributo di colore
del carattere da stampare |
 | BH specifica
la pagina video nella quale stampare, una o più volte, il carattere a colori; i possibili valori
dipendono dal
Modo Video Corrente:
 | pagine
0÷3 o
0÷7, per i
Modi Testo |
 | nei Modi Grafici il
valore di BH
viene generalmente ignorato |
|
 | CX
indica quante volte deve essere scritto, in sequenza, il carattere
desiderato; in ogni caso:
 | il valore
CX =0000
va assolutamente evitato: porterebbe alla stampa di 65536 caratteri,
bloccando praticamente il computer per lungo tempo |
 | il numero posto in
CX non dovrebbe
inoltre essere maggiore di quello dei caratteri ancora collocabili sulla
riga corrente:
nei Modi Testo la differenza tra
CX
e questi ultimi viene messa automaticamente sulla riga
successiva.
nei Modi Grafici questo non è
possibile: i caratteri in eccedenza non vengono messi automaticamente
sulla riga successiva, generando effetti imprevedibili. |
|
|
 | In uscita lascia:
 | nulla |
|
 | La Funzione
si chiama in questo modo: |
 | La
Funzione 0AH
di
INT 10H
è molto simile a quella che stiamo trattando: l'unica differenza consiste nel
fatto che non gestisce il colore, lasciando
al carattere quello ereditato dal carattere che occupava la stessa posizione. |
 | La gestione del colore è qui invece affidata al byte
predisposto in BL:
 | nei
Modi Testo
è il
classico byte diviso in 3 campi, in grado di gestire sia lo
Sfondo che il Primo Piano, secondo lo schema (Il colore associato a ciascun
campo è descritto
in questa pagina; la combinazione degli 8 bit da luogo a 28 =
256 diversi accoppiamenti: puoi vederne
l'effetto ed impararne il codice consultando la pagina dei
Colori
Assembly in Modo Testo): |
|
bit7 |
bit6 |
bit5 |
bit4 |
bit3 |
bit2 |
bit1 |
bit0 |
|
flash |
Sfondo |
Primo Piano |
|
F |
S2 |
S1 |
S0 |
P3 |
P2 |
P1 |
P0 |
 |
In quasi tutti i
Modi Grafici
il valore di
BL
va inteso come colore dei
Pixel che formano il carattere (Primo
Piano) ma non lo Sfondo,
assunto sempre nero, a meno che il
bit7 del codice posto in
BL
sia forzato a 1; in
questo caso il colore dei caratteri
stampati sarà il risultato della XOR del
valore passato in
BL
e quello del colore del carattere attualmente presente in
quel punto; il codice in
BL
deve esser ribadito ogni volta che si chiama la
Funzione. |
 |
Fa eccezione il
ModoGrafico
13H (320x200 a 256 colori, VGA) per il
quale, per ciascun carattere, è possibile selezionare sia il
Primo Piano (ancora con
BL) che lo Sfondo
(con BH,
che ora non seleziona più la pagina come negli altri
Modi), scelto tra uno
dei 64 possibili . |
|
 | Va sottolineato che questa Funzione
è in grado di interpretare
semigraficamente ogni carattere ASCII, cioè mette a video la
matrice di punti prevista per ognuno dei 256
caratteri dal Set coinvolto; la cosa è
particolarmente utile per
i primi 32 caratteri Ascii
(detti di controllo), di solito utilizzati
per esercitare azioni di controllo (come
la messa a capo del cursore..). |
 | In realtà anche questi caratteri hanno un loro
simbolo grafico, spesso accattivante (come i
semi delle carte,
♠♣♥♦, i
simboli delle frecce,
←↑→↓, le
note musicali,
♫♪,...) e questa funzione consente
la loro messa a video. |
 | In altre parole, per esempio, caratteri Ascii di controllo
come 0DH=CR=Carriage
Return e 0AH=LF=Line
Feed, di solito coinvolti per mandare a
capo il cursore, gestiti da questa Funzione
mettono a video rispettivamente i simboli
♪ e ◙. |
 | In questo differisce dalla
Funzione 0EH
di
INT 10H che, invece di stampare ♪
e ◙, esegue la messa a
capo del cursore. |
 |
Un
difetto di questa Funzione
sta nel fatto che, dopo la messa
a video del carattere, la posizione del cursore non viene
aggiornata; è dunque necessario
spostarlo dopo ogni chiamata con l'aiuto della
Funzione 02H
di
INT 10H. |
 |
La Libreria
Giobe.LIB utilizza
questa Funzione
per la stampa di un carattere a
colori, resa disponibile con la procedura
BIOchr1;
la procedura
STAsp
utilizza a sua volta la procedura
BIOchr1
per la stampa di uno spazio. |
 | Le procedure di Libreria
potranno essere chiamate con
efficienza anche nei Modi
Grafici, anche se in esse il cursore non è visibile.
|
 | La BIOchr1
è molto sofisticata:
 | legge la posizione di stampa
corrente, con la
Funzione 03H
di
INT 10H |
 | utilizza questa
Funzione per
stampare il carattere Ascii ricevuto in
AL |
 | utilizza per il codice di colore
il contenuto dalla variabile ATTRIB, che
deve essere dunque definita e
dichiarata EXTRN
dal programma chiamante |
 | aggiorna la posizione del cursore, controllando le nuove
coordinate di riga e di colonna al fine di dare una corretta nuova posizione
di stampa |
 | fissa
la nuova posizione di stampa, con la
Funzione 02H
di
INT 10H |
|
 | La BIOchr1
inizializza BH
a 0; questa scelta suggerisce le seguenti
considerazioni:
 | nei
Modi Testo
le impone di funzionare rigorosamente dentro la Pagina video principale,
Pagina0 |
 |
nei
Modi
Grafici
il valore di
BH è
irrilevante, con eccezione per il
ModoGrafico
13H (320x200 a 256 colori, VGA) che,
come visto poco fa, consente di specificare in esso il colore dello
Sfondo: se si rende necessario l'uso di
un colore diverso da nero è necessario utilizzare una versione modificata di
BIOchr1,
senza l’istruzione MOV BH,00H,
lasciando poi al programma chiamante il compito di fornirle in
BH un
diverso valore, come parametro. |
|
 | Gli eseguibili
B10_09__.COM (nei
Modi Testo)
e
B10_09gr.COM (nei
Modi
Grafici) mostrano l’effetto
della Funzione
09H dell'INT 10H |
 | I sorgenti sono documentati nella sezione ASM
(clicca sull'icona ,
nel menu a sinistra). |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|