feat: modification de toutes les fonctions utilisant de la mémoire afin qu'il utilisent les mecanismes de réservation de blocs mémoire.

This commit is contained in:
Nicolas Hordé 2004-11-05 00:58:45 +00:00
parent f47656fd88
commit 4a5372aa9d
1 changed files with 242 additions and 108 deletions

View File

@ -1578,30 +1578,35 @@ noadjusted:
;sauve l'ecran dans un bloc de mémoire
savescreen:
push ax cx dx si di bp ds es gs
;===================================sauve l'ecran rapidement================ mov bp,sp
SaveScreen: mov dx,ss:[bp+22]
push cx si di ds es mov ah,2
mov cx,0B800H
mov ds,cx
push cs
pop es
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 push cs
xor si,si pop ds
mov di,offset Copy2 mov si,offset data3
cld int 49h
rep movsd mov ah,6
pop es ds di si cx int 49h
push gs
pop es
xor di,di
call savescreento
pop gs es ds bp di si dx cx ax
ret ret
data3 db '/vgascreen',0
;===================================sauve l'ecran rapidement en es:di================ ;===================================sauve l'ecran rapidement en es:di================
SaveScreento: SaveScreento:
push cx si di ds push cx si di ds
mov cx,0B800H mov cx,0B800h
mov ds,cx mov ds,cx
xor ecx,ecx
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 shr cx,2
xor si,si xor si,si
@ -1610,136 +1615,269 @@ SaveScreento:
pop ds di si cx pop ds di si cx
ret ret
;===================================sauve l'ecran rapidement================ ;===================================sauve les parametres en es:di================
Savepage1: Saveparamto:
push cx si di ds es push ecx si di ds
mov cx,0B800H
mov ds,cx
push cs
pop es
mov cx,cs:pagesize
shr cx,2
xor si,si
mov di,offset Copy
cld
rep movsd
pop es ds di si cx
ret
;===================================sauve l'ecran rapidement================
RestoreScreen:
push cx si di ds es
mov cx,0B800H
mov es,cx
push cs push cs
pop ds pop ds
xor ecx,ecx
mov cx,datablocksize
mov si,offset datablock
cld
rep movsb
pop ds di si ecx
ret
;===================================restore les parametres depuis en ds:si================
Restoreparamfrom:
push ecx si di es
push cs
pop es
xor ecx,ecx
mov cx,datablocksize
mov di,offset datablock
cld
rep movsb
pop es di si ecx
ret
;sauve la page1 dans un bloc de mémoire
Savepage1:
push ax cx dx si di bp ds es gs
mov bp,sp
mov dx,ss:[bp+22]
mov ah,2
mov cx,cs:pagesize
push cs
pop ds
mov si,offset data4
int 49h
mov ah,6
int 49h
push gs
pop es
xor di,di
call Savepage1to
pop gs es ds bp di si dx cx ax
ret
data4 db '/vgapage1',0
;===================================sauve l'ecran rapidement================
Savepage1to:
push ecx si di ds
mov cx,0B800H
mov ds,cx
xor ecx,ecx
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 shr cx,2
mov si,offset Copy2 mov si,cs:pagesize
xor di,di
cld cld
rep movsd rep movsd
pop es ds di si cx pop ds di si ecx
ret
;RcupŠre l'ecran de la carte depuis son bloc mémoire
RestoreScreen:
push ax dx si bp ds gs
mov bp,sp
mov dx,ss:[bp+16]
push cs
pop ds
mov si,offset data3
mov ah,9
int 49h
push gs
pop ds
xor si,si
call restorescreenfrom
pop gs ds bp si dx ax
ret ret
;===================================restore l'ecran rapidement de ds:si================ ;===================================restore l'ecran rapidement de ds:si================
RestoreScreenfrom: RestoreScreenfrom:
push cx si di ds es push ecx si di ds es
mov cx,0B800H mov cx,0B800H
mov es,cx mov es,cx
xor ecx,ecx
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 shr cx,2
xor di,di xor di,di
cld cld
rep movsd rep movsd
pop es ds di si cx pop es ds di si ecx
ret ret
;===============================Page2to1============================ ;===============================Page2to1============================
Page2to1: Page2to1:
push cx si di ds es push ecx si di ds es
mov cx,0B800H mov cx,0B800H
mov es,cx mov es,cx
mov ds,cx mov ds,cx
xor ecx,ecx
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 shr cx,2
mov si,4000 mov si,cs:pagesize
xor di,di xor di,di
cld cld
rep movsd rep movsd
pop es ds di si cx pop es ds di si ecx
ret ret
;===============================Page1to2============================ ;===============================Page1to2============================
Page1to2: Page1to2:
push cx si di ds es push ecx si di ds es
mov cx,0B800H mov cx,0B800H
mov es,cx mov es,cx
mov ds,cx mov ds,cx
xor ecx,ecx
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 shr cx,2
mov di,4000 mov di,cs:pagesize
xor si,si xor si,si
cld cld
rep movsd rep movsd
pop ds es di si cx pop ds es di si ecx
ret ret
;===============================xchgPages============================ ;===============================xchgPages============================
xchgPages: xchgPages:
push cx si di ds es push ax cx dx si di bp ds es gs
call savepage1 mov bp,sp
call page2to1 mov dx,ss:[bp+22]
mov ah,2
mov cx,datablocksize
add cx,cs:pagesize
add cx,3*256
push cs
pop ds
mov si,offset data4
int 49h
mov ah,6
int 49h
push gs
pop es
xor di,di
call savescreento
call Page2to1
push gs
pop ds
xor si,si
mov cx,0B800H mov cx,0B800H
mov es,cx mov es,cx
push cs mov di,cs:pagesize
pop ds xor ecx,ecx
mov cx,cs:pagesize mov cx,cs:pagesize
shr cx,2 shr cx,2
mov si,offset Copy cld
mov di,4000
rep movsd rep movsd
pop es ds di si cx mov ah,01h
int 49h
pop gs es ds bp di si dx cx ax
ret ret
;Sauve l'tat de la carte en es:di
;Sauve l'tat de la carte dans un bloc mémoire
savestate: savestate:
push cx si di ds push ax cx dx si di bp ds es gs
mov bp,sp
mov dx,ss:[bp+22]
mov ah,2
mov cx,datablocksize
add cx,cs:pagesize
add cx,3*256
push cs push cs
pop ds pop ds
mov cx,datablocksize mov si,offset data
mov si,offset lines int 49h
cld mov ah,6
rep movsb int 49h
push gs
pop es
xor di,di
call saveparamto
add di,datablocksize
call savescreento call savescreento
pop ds di si cx add di,cs:pagesize
call savedacto
pop gs es ds bp di si dx cx ax
ret ret
;RcupŠre l'tat de la carte en ds:si data db '/vga',0
;RcupŠre l'tat de la carte depuis son bloc mémoire
restorestate: restorestate:
push ax cx si di es push ax dx si bp ds gs
mov al,[si+7] mov bp,sp
mov dx,ss:[bp+16]
push cs
pop ds
mov si,offset data
mov ah,9
int 49h
push gs
pop ds
mov al,ds:[7]
cmp cs:mode,al cmp cs:mode,al
je nochangemode je nochangemode
mov ah,0 mov ah,0
call setvideomode call setvideomode
nochangemode: nochangemode:
push cs xor si,si
pop es call restoreparamfrom
mov cx,datablocksize add si,datablocksize
mov di,offset lines
cld
rep movsb
call restorescreenfrom call restorescreenfrom
pop es di si cx ax add si,cs:pagesize
call restoredacfrom
pop gs ds bp si dx ax
ret ret
;sauve le DAC ;sauve le DAC dans un bloc de mémoire
savedac: savedac:
push ax cx dx si di bp ds es gs
mov bp,sp
mov dx,ss:[bp+22]
mov ah,2
mov cx,3*256
push cs
pop ds
mov si,offset data2
int 49h
mov ah,6
int 49h
push gs
pop es
xor di,di
call savedacto
pop gs es ds bp di si dx cx ax
ret
data2 db '/vgadac',0
;RcupŠre le dac depuis son bloc mémoire
restoredac:
push ax dx si bp ds gs
mov bp,sp
mov dx,ss:[bp+16]
push cs
pop ds
mov si,offset data2
mov ah,9
int 49h
push gs
pop ds
xor si,si
call restoredacfrom
pop gs ds bp si dx ax
ret
;sauve le DAC en es:di
savedacto:
push ax cx dx di push ax cx dx di
mov dx,3C7h mov dx,3C7h
mov cx,256 mov cx,256
mov di,offset dac
save: save:
mov al,cl mov al,cl
dec al dec al
@ -1747,13 +1885,13 @@ out dx,al
inc dx inc dx
inc dx inc dx
in al,dx in al,dx
mov cs:[di],al mov es:[di],al
inc di inc di
in al,dx in al,dx
mov cs:[di],al mov es:[di],al
inc di inc di
in al,dx in al,dx
mov cs:[di],al mov es:[di],al
inc di inc di
dec dx dec dx
dec dx dec dx
@ -1762,25 +1900,24 @@ jne save
pop di dx cx ax pop di dx cx ax
ret ret
;restore le DAC ;restore le DAC depuis ds:si
restoredac: restoredacfrom:
push ax cx dx si push ax cx dx si
xor ax,ax xor ax,ax
mov dx,3C8h mov dx,3C8h
mov cx,256 mov cx,256
mov si,offset dac
save2: save2:
mov al,cl mov al,cl
dec al dec al
out dx,al out dx,al
inc dx inc dx
mov al,cs:[si] mov al,ds:[si]
inc si inc si
out dx,al out dx,al
mov al,cs:[si] mov al,ds:[si]
inc si inc si
out dx,al out dx,al
mov al,cs:[si] mov al,ds:[si]
inc si inc si
out dx,al out dx,al
dec dx dec dx
@ -1814,8 +1951,5 @@ include ..\include\pol8x8.inc
font8x16: font8x16:
include ..\include\pol8x16.inc include ..\include\pol8x16.inc
copy equ $
copy2 equ $+8192
dac equ $+8192+8192
end start end start