| La procedura
è parzialmente scritta in linguaggio
Assembly. E' probabile che il lettore, in questo momento, non sia in possesso delle
conoscenze di base della programmazione a basso
livello, per cui questa pagina può risultare
incomprensibile; desidero fornirtela comunque, come stimolo per approfondire questa potente tecnica di programmazione
(vedi Sezione
Tutorial Assembly).
| La procedura accede direttamente
alla Ram Video [per saperne di più consulta
la
Scheda nella Sezione
Dentro il Computer]. |
| La procedura calcola il valore esadecimale del byte di colore sulla base dei parametri forniti in ingresso e lo colloca
direttamente in Ram Video |
| Per calcolare l’indirizzo
fisico del carattere desiderato viene usato un algoritmo
in Pascal: poiché ciascuna colonna
porta il contributo di 2 bytes e
ciascuna riga, essendo composta da
80 colonne, contribuisce con 160 bytes,
il valore desiderato è così facilmente ottenibile a partire
dai parametri ‘rig’ e ‘col’. |
| Poiché questa procedura si occupa di cambiare
solo il codice di colore del carattere,
il valore calcolato dall’algoritmo viene incrementato al fine
di puntare sempre
locazioni dispari, così che la locazione dell’attributo del 1° carattere in alto a sinistra,
[1,1] vale B8001H, quella del 2°
alle coordinate [1,2] vale B8003H, e così via fino alla locazione del byte di colore dell’ultimo
carattere in basso a destra, [25,80], che
vale B8F9FH |
| Naturalmente è presente anche l’algoritmo che calcola l’attributo a partire da
‘txt’ e ‘sfo’. |
Codice Sorgente |
|
|
|
|
PROCEDURE
ATTRchr(rig,col,txt,sfo:byte);
VAR
indirizzo:word;
colore:byte;
BEGIN
indirizzo:=(col-1)*2+(rig-1)*160;
colore:sfo*16+txt;
asm
PUSH ES
;Salvataggio dei registri coinvolti
PUSH DI ;
MOV AX,0B800H ;Punta la locazione desiderata in
MOV ES,AX
;Ram Video, ES:DI = ES:indirizzo
MOV DI,indirizzo ;(osserva
che si punta una locazio-
INC DI
;ne dispari, cioè il secondo byte)
MOV AL,colore
;
MOV ES:[DI],AL ;Sposta
codice di Attributo in Ram
POP DI ;Recupero dei registri coinvolti
POP ES
;
end;
END;
|
|