|
 |
Programmazione |
CURSORE 2/5
[17 di 79] |
-
Gestione BIOS del cursore
Hardware -
INT 10H
- Funzione 01H
|
INT
10H |
Funzione 01H |
Controllo della dimensione del Cursore |
- Fissa la dimensione
del
cursore
lampeggiante, prodotto dall'hardware
della scheda video tracciando una o più linee di Pixel nello spazio riservato al
carattere che sta per essere scritto.
- In ogni caso il cursore
lampeggiante è
visibile solo nei
Modi Testo; nei Modi
Grafici viene spento
automaticamente, pur mantenendo la completa gestibilità della posizione di
stampa in
ognuna delle pagine video
previste dall'adattatore disponibile e dal Modo Video.
- In
ingresso:
- AH è posto
a 01H
- CL
consente di specificare la linea di pixel finale,
posta nella parte bassa:
- ai 5 bit meno significativi
(bit4÷bit0)
è
affidato il compito di esprimere il numero
della linea di scansione
finale, con valori che vanno da
0 (00000) a
15 (01111)
- i 3 bit più significativi
(bit7÷bit5)
di CL non sono significativi, per cui
possono essere assunti tutti a 0:
|
CL |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
0 |
0 |
0 |
F |
F |
F |
F |
F |
- CH
consente di specificare la linea di pixel di
partenza, posta nella parte alta:
- ai 5 bit meno significativi
(bit4÷bit0)
è
affidato il compito di esprimere il numero
della linea di scansione
iniziale, con valori che vanno da
0 (00000) a
15 (01111)
- delle possibili 8 combinazioni dei rimanenti
3 bit più significativi (bit7÷bit5)
producono effetto (su schede EGA/VGA) solo i valori
000 e 001; la prima (bit5=0)
assicura la normale presenza
fisica del Cursore, mentre la seconda (bit5=1)
consente la possibilità di far sparire
(nasconde) il Cursore
|
CH |
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
0 |
0 |
■ |
I |
I |
I |
I |
I |
- la funzionalità di questi 3 bit di
CH non è per altro
documentata con sicurezza e questa tecnica potrebbe non funzionare su tutti i
computer.
- In particolare alcuni cloni affidano alla coppia
bit6,bit5
una particolare attività, purtroppo difficilmente riscontrabile: le prime combinazioni ribadiscono il
controllo sulla visibilità appena
descritto (bit6,bit5
= 00, Cursore Normale, bit6,bit5
= 01, Cursore Invisibile); le rimanenti
combinazioni agiscono sulla
velocità di lampeggio (bit6,bit5
= 10, Cursore Lento, bit6,bit5
= 11, Cursore Veloce)
- il valore massimo per
CH (=inizio) e CL
(=fine) dipende dal tipo di scheda grafica,
in funzione del numero massimo di linee di
scansione previste:
- 07 per la CGA (n° massimo di
linee previste = 08, da 0 a 7)
- 13 per la MDA e l'EGA (n° massimo di
linee previste = 14, da 0 a 13)
- 15 per la MCGA e la VGA (n° massimo di
linee previste = 16, da 0 a 15)
- la dimensione di default del cursore è prefissata dalla ROM BIOS
in fase di inizializzazione; i valori di default sono, di norma:
- CH=06/CL=07,
adatti alla matrice 8*8 della CGA
- per effetto della cosiddetta
emulazione del Cursore, la ROM BIOS modifica (rimappa)
automaticamente tali valori per adattarli alle dimensioni del carattere
realmente disponibile:
- CH=11/CL=12
per MDA e EGA
- CH=13/CL=14
per MCGA e VGA
- se l'emulazione è attiva (cosa che si verifica per default)
il programmatore non deve preoccuparsi del problema e continuerà a
specificare i valori CGA, CH=06/CL=07
- In uscita lascia:
- nella variabile di sistema posta a
0000:0460H, il valore
predisposto in CX, riservata appunto
alle dimensioni del Cursore.
- La Funzione
si chiama dunque in questo modo:
 |
Il cursore può dunque
essere eliminato dal video fissando i valori
CH=20H/CL=00H. |
- Come detto all'inizio il lampeggio
del cursore è generato dall'hardware della scheda
video e non può essere spento da hardware.
- In alternativa è possibile
nascondere il Cursore anche fissandolo in una posizione di
stampa non appartenente alla pagina video corrente, per esempio forzandolo
sulla ipotetica riga 25, cioè sulla prima riga all'inizio della pagina video successiva,
con l'aiuto della Funzione 02H
di
INT 10H.
- La Funzione
12H dell'INT 10H
offre una SottoFunzione 34H
che consente il controllo di questa opportunità, abilitando o meno l'emulazione
del Cursore alfanumerico; essa controlla e riflette il valore del
bit0 della variabile di sistema posta a
0000:0487H; all'accensione
l'emulazione del Cursore è abilitata (bit0
= 0).
- Se si desidera impostare
le linee di partenza
e di arrivo
del Cursore ad un qualunque valore compreso tra 0 e il numero massimo di linee
previsto dalla risoluzione corrente meno uno (15
per la VGA) è necessario forzare a 1 il
bit0 della variabile di sistema posta a
0000:0487H
o chiamare
opportunamente la su citata SottoFunzione 34H
della Funzione
12H di
INT 10H,
prima di modificare le dimensioni
con la Funzione 01H che
sto descrivendo.
- Vediamo l'aspetto del cursore con diverse coppie di valori
per
CH (=inizio) e CL
(=fine):
|
CH=0
→ |
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F |
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■ |
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
← CL=15 |
|
CH=7
→ |
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F |
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■ |
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
← CL=15 |
|
CH=15
→ |
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F |
■■■■■■■■ |
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
← CL=15 |
- L'eseguibile
B10_01__.COM mostra l’effetto
della manipolazione diretta della
dimensione del cursore con la
Funzione 01H
di
INT 10H:
facendo crescere e decrescere i valori di
CH e CL:
come preannunciato emerge una piccola delusione..., ci sono errori
inaspettati..
- Guarda la differenza cliccando sull'eseguibile
B10_1234.COM ... basato
invece sulla SottoFunzione 34H
della Funzione
12H di
INT 10H,
che discuteremo tra non molto: ogni difetto è sparito!
- I sorgenti sono documentati nella sezione ASM
(clicca sull'icona
,
nel menu a sinistra).
 |
La Libreria
Giobe.LIB gestisce
(ovviamente nei Modi Testo) la scomparsa del cursore con
la procedura
Via_cur
e ne riattiva il lampeggio con la procedura
Rip_cur. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|