| 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 pụ 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
salvare in una Pagina alternativa
della il
contenuto di una finestra
(caratteri e attributi di colore) attualmente posta nella pagina video
corrente (Pagina 0). |
| Le
dimensioni (alto,
largo) del Box, in funzione dei
parametri passati alla procedura, sono calcolate in Pascal. |
| Anche il salvataggio
dei bytes viene gestito in Pascal da un ciclo Repeat .. Until,
all'interno del quale l’indirizzo fisico
corrente è calcolato a partire dai parametri ‘ri’
e ‘co’.sulla base del fatto che ciascuna
colonna porta il contributo di 2 bytes e
ciascuna riga, essendo composta da 80 colonne,
contribuisce con 160 bytes. |
Codice Sorgente |
|
|
|
|
PROCEDURE
SALVAbox(ri,co,ri1,co1,numPAG:byte)
VAR
indirizzo,n,alto,largo:word;
BEGIN
n:=0;
alto:=ri1-ri+1;
largo:=co1-co+1;
REPEAT
indirizzo:=(co-1)*2+(ri-1+n)*160;
n:=n+1;
asm
PUSH
ES ;
PUSH DI ;Salvataggio dei registri coinvolti
PUSH
SI ;
PUSH CX ;
MOV CL,numPAG ;Costruisce
il puntatore alle loca-
MOV CH,00H
;zioni di destinazione in Ram Video
MOV AX,1000H
;
MUL CX
MOV SI,AX
ADD SI,indirizzo
MOV AX,0B800H
;Punta la locazione desiderata in
MOV ES,AX
;Ram Video, ES:DI = ES:indirizzo
MOV DI,indirizzo ;
MOV CX,largo
@@1:MOV AX,ES:[DI]
;
MOV
ES:[SI],AX ;
INC DI
;
INC DI
;
INC SI
;Sposta Ascii/Attributo in Ram
INC SI
;
LOOP @@1
;
POP CX
POP
SI ;Recupero dei registri coinvolti
POP DI
;
POP ES
;
end;
UNTIL
n=alto;
END; |
|