Projection d'une Addresse Physique
Convertit une adresse physique en adresse linéaire . Cette fonction
permet au pilotes de périphériques qui s'exécutent sous des hôtes DPMI
qui utilisent la pagination pour atteindre la mémoire physique qui
est associée à ces périphériques au dessus du premier Mo.
Des exemples de ces périphériques sont le coprocesseur numerique Weitek
(usuellement projeté at 3 GB), les buffers qui recoivent les bitmaps des
scanner, et certains adaptateur graphiques qui peuvent être configurés pour
faire apparaitre la mémoire écran en mémoire étendue.
Appel avec
AX = 0800H
BX:CX = adresse physique de la mémoire
SI:DI = taille de la région à projeter (octets)
Retourne
si la fonction réussit
Carry flag = 0
BX:CX = adresse linéaire qui peut être utilisée pour accéder la
mémoire physique
si la fonction échoue
Carry flag = 1
AX = code d'erreur
8003H | integrité du système (région mémoire
de l'hôte DPMI) |
8021H | valeur invalide (adresse en dessous du 1er Mo
) |
Notes
- Il est de la responsabilité de l'appelant d'allouer et d'initialiser un
descripteur pour l'accès à la mémoire.
- Cette fonction doit seulement être utilisée par les clients qui
requièrent un accès direct à un périphériques projeté en mémoire à une
adresse physique au dessus de 1 Mo. Les clients ne doivent pas utiliser
pour acceder à la mémoire en dessous du premier Mo . Voir aussi
l'Int 31H Fonctions 0002H, 0508H, et 0509H.
- Quand cette fonction est appelée, l'hôte DPMI crée une table d'entrés
des pages qui projète directement les adresses physiques requises et
retourne l'adresse linéaire de la table des page crée, sinon
retourne juste l'adresse linéaire de la région mémoire qui est
déjà utilisée pour projeter le périphérique requis. Par exemple, si le client
tente de projeter un coprocesseur Weitek et que l'hôte a déjà une région linéaire
prète à acceuillir le chip Weitek et à le virtualiser, il retournera simplement
l'adresse linéaire de la région existante . Si l'hôte ne virtualise
pas le chip Weitek , il créera 16 entrées dans la table des pages qui représentent
les 64 Ko d'espace d'adressage Weitek et retourne une adresse linéaire
qui correspond à la nouvelle table d'entrées des pages .
- Si l'hôte ne virtualise pas le périphérique, il doit désactiver les
caches mémoire sur les pages projetées; en particulier, sur le 80486
l'hôte doit poser le bit PCD (page cache disable) dans la table d'entrées
des pages.
- L'hôte est autorisé à rater les appels de projection en mémoire.
Neanmoins l'hôte doit supporter cette fonction autant que possible, pour
permettre la compatibilité avec les applications qui utilisent les périphériques
projetés en mémoire et dont l'hôte n'est pas averti. Un indice
uitile est que l'hôte echouera dans toute tentative de projection d'adresses
en dessous de 1 Mo, ou celles qu'il considère d'emploi general. Tenter
de projeter d'autres adresses physiques devrait réussir, puisque l'hôte
soit (a) connait déjà le périphérique et est capable de renvoyer une adresse
linéaire utilisée pour accéder au périphérique, ou (b)supposer que le programme
tente de projeter un périphérique legitime dont l'hôte n'a pas connaissance.