 | 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 consente di
stampare un’area quadrangolare riempita con il medesimo carattere e con lo stesso attributo di colore, sostituendo in
Ram Video i bytes relativi ai caratteri originali,
che sono dunque perduti. |
 | 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’. |
Codice Sorgente |
|
 |
 |
 |
PROCEDURE
STAchr(rig,col,txt,sfo:byte;
carat:char);
VAR
indirizzo:word;
BEGIN
indirizzo:=(col-1)*2+(rig-1)*160;
asm
PUSH ES
PUSH DI ;Salvataggio dei registri coinvolti
PUSH BX ;
MOV AX,0B800H ;Punta la locazione desiderata in
MOV ES,AX
;Ram Video, ES:DI = ES:indirizzo
MOV DI,indirizzo ;
MOV AL,carat
MOV BH,sfo
SHL BH,1 ;
SHL BH,1
;
SHL BH,1
;Converte
i valori dei parametri
SHL BH,1
;nel
byte esadecimale corrisponden-
MOV BL,txt
;te,
lasciato in AH
OR BH,BL
;
MOV AH,BH
;
MOV ES:[DI],AX
;Sposta
Carattere/Attributo in RamPOP BX">
POP BX
POP DI
;Recupero dei registri coinvolti
POP ES
;
end;
END;
|
|