home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC Interdit
/
pc-interdit.iso
/
memory
/
flat
/
rmemasm.asm
< prev
next >
Wrap
Assembly Source File
|
1994-10-31
|
5KB
|
145 lines
;****************************************************************************
;*** MICRO APPLICATION "PC INTERDIT" ***
;*** ================================= ***
;*** ***
;*** ***
;*** Auteur : Boris Bertelsons ***
;*** Nom de fichier : RMEM.PAS ***
;*** Dernière modif. : 28.04.1994 ***
;*** Version : 1.0 ***
;*** Compilateur : Turbo Pascal 6.0 et supérieur ***
;****************************************************************************
.386P
.model tpascal
.data
extrn GDT_Off : byte
extrn GDT : byte
.code
extrn xms_enable_a20 : far
public mem_lire
public mem_Write
public Enable_4Giga
public Multitache_actif
;*************************************************************************
;*** ***
;*** Vérifie s'il y a multitâche actif QEMM ou EMM386 ***
;*** ***
;*************************************************************************
Multitache_actif proc pascal
mov eax,cr0
and ax,1
ret
Multitache_actif endp
;*************************************************************************
;*** ***
;*** Copie un bloc de RMEM dans la mémoire principale ***
;*** ***
;*************************************************************************
mem_Lire proc near
push bp
mov bp,sp
source equ dword ptr ss:[bp+10] ; "Déclarer les variables"
ofscible equ word ptr ss:[bp+8]
segcible equ word ptr ss:[bp+6]
longueur equ word ptr ss:[bp+4]
call xms_Enable_A20
mov ax,segcible ; addy mémoire principale vers ES:SI
mov es,ax
mov di,ofscible
xor ax,ax ; Adresse source RMEM vers GS:EAX
mov gs,ax
mov eax,source
mov cx,longueur
lloop: mov bl,byte ptr gs:[eax] ; copie les octets
mov es:[di],bl
inc eax
inc di
loop lloop
pop bp
ret 10
mem_Lire endp
;*************************************************************************
;*** ***
;*** Copie un bloc de mémoire principale dans la RMEM ***
;*** ***
;*************************************************************************
mem_Write proc near
push bp
mov bp,sp
source equ dword ptr ss:[bp+10] ; Déclaration des "variables"
ofscible equ word ptr ss:[bp+8]
segcible equ word ptr ss:[bp+6]
longueur equ word ptr ss:[bp+4]
call xms_Enable_A20
mov ax,segcible ; addy de mémoire principale vers ES:SI
mov es,ax
mov di,ofscible
xor ax,ax ; Adresse source RMEM vers GS:EAX
mov gs,ax
mov eax,source
mov cx,longueur
nloop:
mov bl,es:[di] ; copie les octets
mov byte ptr gs:[eax],bl
inc eax
inc di
loop nloop
pop bp
ret 10
mem_Write endp
;*************************************************************************
;*** ***
;*** Fait passer le processeur en modèle flat ***
;*** ***
;*************************************************************************
Enable_4Giga proc near
mov GDT_Off[0],16
mov eax,seg GDT
shl eax,4
mov bx,offset GDT
movzx ebx,bx
add eax,ebx
mov dword ptr GDT_Off[2],eax
lgdt pword ptr GDT_Off ; charge GDT
mov bx,08h ; bx pointe la première entrée de la table GDT
push ds
cli ; Désactive les interruptions
mov eax,cr0 ; Passe en Protected mode
or eax,1
mov cr0,eax
jmp En_Protectedmode ; Efface Executionpipe
En_Protectedmode:
mov gs,bx ; Adapte les segments à 4 GB
mov fs,bx
mov es,bx
mov ds,bx
and al,0FEh ; Retour en Real-mode sans
mov cr0,eax ; reset du processeur
jmp En_Realmode ; Efface Executionpipe
En_Realmode:
sti ; Active à nouveau les interruptions
pop ds
ret
Enable_4Giga endp
code ends
END