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,168 +1578,306 @@ noadjusted:
;sauve l'ecran dans un bloc de mémoire
savescreen:
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 data3
int 49h
mov ah,6
int 49h
push gs
pop es
xor di,di
call savescreento
pop gs es ds bp di si dx cx ax
ret
data3 db '/vgascreen',0
;===================================sauve l'ecran rapidement================
SaveScreen:
push cx si di ds es
mov cx,0B800H
mov ds,cx
push cs
pop es
mov cx,cs:pagesize
shr cx,2
xor si,si
mov di,offset Copy2
cld
rep movsd
pop es ds di si cx
ret
;===================================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
cld cld
rep movsd rep movsd
pop ds di si cx pop ds di si cx
ret
;===================================sauve l'ecran rapidement================
Savepage1:
push cx si di ds es
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 ret
;===================================sauve l'ecran rapidement================ ;===================================sauve les parametres en es:di================
RestoreScreen: Saveparamto:
push cx si di ds es push ecx si di ds
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 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
;===================================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 cx,0B800H mov ah,2
mov es,cx mov cx,datablocksize
push cs add cx,cs:pagesize
pop ds add cx,3*256
mov cx,cs:pagesize push cs
shr cx,2 pop ds
mov si,offset Copy mov si,offset data4
mov di,4000 int 49h
rep movsd mov ah,6
pop es ds di si cx int 49h
ret push gs
pop es
;Sauve l'tat de la carte en es:di xor di,di
savestate: call savescreento
push cx si di ds call Page2to1
push cs push gs
pop ds pop ds
mov cx,datablocksize xor si,si
mov si,offset lines mov cx,0B800H
mov es,cx
mov di,cs:pagesize
xor ecx,ecx
mov cx,cs:pagesize
shr cx,2
cld cld
rep movsb rep movsd
call savescreento mov ah,01h
pop ds di si cx int 49h
pop gs es ds bp di si dx cx ax
ret ret
;RcupŠre l'tat de la carte en ds:si
restorestate:
push ax cx si di es
mov al,[si+7]
cmp cs:mode,al
je nochangemode
mov ah,0
call setvideomode
nochangemode:
push cs
pop es
mov cx,datablocksize
mov di,offset lines
cld
rep movsb
call restorescreenfrom
pop es di si cx ax
ret
;sauve le DAC ;Sauve l'tat de la carte dans un bloc mémoire
savestate:
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
pop ds
mov si,offset data
int 49h
mov ah,6
int 49h
push gs
pop es
xor di,di
call saveparamto
add di,datablocksize
call savescreento
add di,cs:pagesize
call savedacto
pop gs es ds bp di si dx cx ax
ret
data db '/vga',0
;RcupŠre l'tat de la carte depuis son bloc mémoire
restorestate:
push ax dx si bp ds gs
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
je nochangemode
mov ah,0
call setvideomode
nochangemode:
xor si,si
call restoreparamfrom
add si,datablocksize
call restorescreenfrom
add si,cs:pagesize
call restoredacfrom
pop gs ds bp si dx ax
ret
;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