| 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
recuperare nella pagina video corrente
(Pagina 0)
una finestra (caratteri e attributi di colore)
precedentemente salvata in una Pagina alternativa
della Ram Video |
| Le
dimensioni (alto,
largo) del Box, in funzione dei
parametri passati alla procedura, sono calcolate in Pascal. |
| Anche
il recupero 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
RECUPbox(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:[SI]
;
MOV
ES:[DI],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;
|
|