| 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 stampa il carattere "carat"
saltando ogni intermediario software,
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 Ascii del carattere,
il valore calcolato dall’algoritmo viene incrementato al fine
di puntare sempre
locazioni pari, così che la locazione
del codice Ascii del 1° carattere in alto a sinistra,
[1,1] vale B8000H, quella del 2°
alle coordinate [1,2] vale B8002H, e così via fino alla locazione del byte di colore dell’ultimo
carattere in basso a destra, [25,80], che
vale B8F9EH |
Codice Sorgente |
|
|
|
|
PROCEDURE
ONLYchr(rig,col:byte;
carat:char);
VAR
indirizzo:word;
BEGIN
indirizzo:=(col-1)*2+(rig-1)*160;
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-
;ne pari, cioè il primo byte)
MOV AL,carat
MOV ES:[DI],AL ;Sposta
codice Ascii in Ram Video
POP DI ;Recupero dei registri coinvolti
POP ES
;
end;
END;
|
|