|
 |
Programmazione |
VIDEO 13/59
[33 di 79] |
 |
Gestione BIOS del Video -
INT 10H
- Funzione 0EH
|
INT
10H |
Funzione 0EH |
Stampa un carattere in Modo TTY |
|
 |
Scrive un
carattere nella posizione di stampa e
nella pagina video corrente e
aggiorna la posizione del cursore. |
 | In
ingresso:
 | AH è posto
a 0EH |
 | AL
indica il codice Ascii del carattere da
stampare |
 | BL
indica il colore dello sfondo (solo nei Modi Grafici,
nei quali il codice in
BL
deve esser ribadito ogni volta che si chiama la Funzione) |
 | BH specifica
la pagina video nella quale stampare 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 |
|
|
 | In uscita lascia:
 | nulla. |
|
 | La Funzione
si chiama in questo modo: |
 | Nei
Modi Testo che supportano più
pagine video il carattere può essere scritto in una qualunque di esse senza
influenzare quella correntemente visualizzata. |
 | Il Driver di Console di default
del MS-DOS (CON:) usa questa
Funzione per scrivere sullo schermo. |
 | La caratteristica importante
di questa Funzione
è quella di trattare alcuni per
i primi 32 caratteri Ascii
non per mettere a video la loro
matrice di punti (quella prevista dal
Set coinvolto, come fanno le consorelle
Funzioni 09H e
0AH
di
INT 10H)
ma per esercitare l'azione di controllo ad
essi associata. |
 |
Essa
si comporta in modo analogo a quello in uso nelle
nelle vecchie telescriventi;
per questo la sua tecnica di stampa è detta TTY
(TeleTYpe); i caratteri Ascii di
controllo trattati in modo funzionale sono:
 | il codice Ascii 07H
(=BELL=campanello)
costringe il PC ad emettere un beep
(invece di stampare •) |
 | il codice Ascii 08H
(=BK=BackSpace)
sposta il cursore indietro di una posizione (invece di stampare
◘) |
 | il codice Ascii 0AH
(=LF=LineFeed)
sposta il cursore in avanti di una riga (invece di stampare
◙) |
 | il codice Ascii 0DH
(=CR=CarriageReturn
) sposta il cursore nella prima posizione di stampa a sinistra (invece di
stampare
♪) |
|
 | I più ricorrenti tra essi sono la coppia 0D/0AH, solitamente aggiunta automaticamente
dagli editor al termine di ciascuna riga digitata e corrisponde alla
pressione del tasto Invio; tutti i
rimanenti codici Ascii sono semplicemente posti a video nella loro forma
consueta. |
 | In effetti si potrebbe pensare che altri codici Ascii
di controllo
possano essere interpretati da
questa Funzione: tra questi il più
comune è il codice Ascii 09H
(=TAB=Tabulate)
in presenza del quale, di norma, gli applicativi spostano il cursore a
destra di 8 spazi; nella stesura originale di questa pagina esso era
erroneamente incluso nell'elenco
precedente, sebbene non risultasse tra quelli documentati ufficialmente. |
 | In definitiva la
Funzione 0EH di
INT 10H
tratta dunque in modo diretto solo i
codici Ascii BELL (07H), BK
(08H), LF
(0AH) e CR
(0DH), lasciando al programmatore il
compito di assicurare un degno servizio per gli altri; in particolare il
codice Ascii TAB (09H),
per altro utilizzato raramente in un programma
assembly, nel quale la necessità di fissare delle colonne di
riferimento è quasi sempre affidata al posizionamento diretto del cursore,
controllando eventualmente che le stringhe ad essa precedenti non superino
questo limite. In mancanza di servizio dedicato il codice Ascii
09H sarà posto a video con il carattere
○. |
 | Di norma il servizio TAB
è utilizzato dagli editors, spesso
in modo programmabile, lasciando cioè
all'utente la possibilità di stabilire il numero di spazi da inserire tra
una colonna TAB e la successiva. |
 | Tra l'altro è facile capire che si tratta di una
caratteristica tutt'altro che banale, dovendo il programma inserire un
numero di spazi comunque dipendente dai caratteri già inseriti tra un TAB e
il successivo, indipendentemente dalla sua quantità massima (tipica della
distanza tra un TAB e il successivo in assenza di caratteri tra di essi)
|
 | Una seconda importante
caratteristica della Funzione
è quella di assicurare l'aggiornamento
automatico della posizione del cursore,
carattere dopo carattere, occupandosi nel contempo di aggiornare la
corrispondente variabile di sistema
a partire da quella (tra le otto previste, riservate alla posizione del
cursore) posta a
0000:0450H. |
 | Anche in questo si distingue dalle
Funzioni 09H
e 0AH
di
INT 10H,
che non aggiornano il cursore. |
 | L'aggiornamento del cursore
produce il ritorno automatico a capolinea ogni volta che esso si trova in alla
fine di una riga; questo fatto creare problemi quando si
trova, in basso a destra, nell'ultima posizione possibile, in riga 24, colonna 79. |
 | La stampa del carattere successivo provoca anch'essa il
ritorno automatico a capolinea ma, contemporaneamente,
sposta verso l'alto di una riga (scrolling) tutto il
contenuto dello schermo, inserendo in basso un'intera riga di spazi che nei
Modi Testo sono colorati con l'attributo
dell'ultimo carattere scritto sulla riga precedente! (nei Modi Grafici
l'effetto è meno evidente dato che l'attributo di colore usato per riempire la
riga è il nero). |
 | L'ultima caratteristica
della Funzione
è quella di non consentire di colorare
i caratteri posti a video:
|
 | Il fatto di non consentire la
gestione del colore rende
questa
Funzione simile alla 0AH; la dove la cosa sia necessaria entrambe devono
essere sostituite dalla
Funzioni 09H
(che per altro non aggiorna il cursore). |
 |
La Libreria
Giobe.LIB utilizza
questa Funzione
per la stampa di un carattere
normale, resa disponibile con la procedura
BIOSchr;
le procedure
Acapo
e
BIObeep
utilizzano a loro volta la procedura
BIOSchr
per mandare a capo il cursore e per emettere un beep. |
 | Le procedure di Libreria
potranno essere chiamate con
efficienza anche nei modi nei Modi
Grafici, anche se in esse il cursore non è visibile.
|
 | Gli eseguibili
B10_0E__.COM (nei
Modi Testo)
e
B10_0Egr.COM (nei
Modi
Grafici) mostrano l’effetto
della Funzione
0EH 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
|