Der Funktionshandler ist über den PMMU-Cookie erreichbar, und wird von Programmen wie Outside oder VRAM angelegt. Der Aufruf des Handlers ist nur im Supervisor-Modus erlaubt, und geschieht über eine Funktionsnummer, die im Datenregister D0 abgelegt wird. Eventuelle Rückgabewerte finden sich ebenfalls in diesem Register wieder. Andere Prozessorregister werden nicht verändert.
Zur Zeit stehen die folgenden Funktionen zur Verfügung:
Wichtiger Hinweis: Diese Funktionen sind nur für einige wenige Programme aus dem Bereich der Systemsoftware von Bedeutung, und haben in Anwenderprogrammen nichts zu suchen.
Name: | »ClearPageMode« - PMMU Modus für einen Bereich löschen. | ||||||||
Nummer: | 2 | ||||||||
Deklaration: | ULONG ClearPageMode ( ULONG mode, ULONG start_address, ULONG length ); | ||||||||
Beschreibung: | Die Funktion löscht den PMMU-Modus für einen bestimmten
Speicherbereich. Es gilt:
Hinweis: Alle anderen Bits sind für zukünftige Zwecke reserviert. Ein Programm darf nur die Bits löschen, die es vorher selbst gesetzt hat. | ||||||||
Ergebnis: | Die Funktion liefert bei fehlerfreier Ausführung den Wert Null zurück. Anderenfalls wird ein Wert zurückgeliefert, bei dem die Bits gesetzt sind, die nicht manipuliert werden konnten. | ||||||||
Gruppe: | PMMU-Funktionshandler | ||||||||
Querverweis: | GetHdv_inuse GetPageSize pmem_size PMMUversion SetPageMode vmem_size |
Name: | »GetHdv_inuse« - Aktivität des Plattentreibers ermitteln. |
Nummer: | 4 |
Deklaration: | UWORD *GetHdv_inuse ( VOID ); |
Beschreibung: | Die Funktion ermöglicht es festzustellen, ob der Plattentreiber
gerade dabei ist, eine Seite ein- oder auszuswappen. Hinweis: Eine Überprüfung dieses Wortes muß erfolgen, bevor aus einer Interruptroutine heraus ein Zugriff auf das virtuelle RAM stattfindet. Der Plattentreiber darf nämlich nicht durch einen Zugriff auf eine nicht existente Speicherseite unterbrochen werden, falls gerade eine andere Seite ausgelagert wird. Ist das Statuswort ungleich Null, muß der Zugriff verschoben werden. |
Ergebnis: | Die Funktion liefert einen Zeiger auf das hdv_inuse-Wort zurück. |
Gruppe: | PMMU-Funktionshandler |
Querverweis: | ClearPageMode GetPageSize pmem_size PMMUversion SetPageMode vmem_size |
Name: | »GetPageSize« - Größe der Speicherseiten ermitteln. |
Nummer: | 3 |
Deklaration: | ULONG GetPageSize ( VOID ); |
Beschreibung: | Die Funktion ermittelt die aktuelle Größe einer Speicherseite. Hinweis: Beim MC-68030 kann die Größe zwischen 256 Bytes und 32 Kbyte liegen. |
Ergebnis: | Die Funktion liefert Größe einer Speicherseite zurück. |
Gruppe: | PMMU-Funktionshandler |
Querverweis: | ClearPageMode GetHdv_inuse pmem_size PMMUversion SetPageMode vmem_size |
Name: | »pmem_size« - Gesamtgröße des vom Speichermanagers verwalteten physikalischen Speichers ermitteln. |
Nummer: | 6 |
Deklaration: | ULONG pmem_size ( VOID ); |
Beschreibung: | Die Funktion ermittelt die Gesamtgröße des physikalischen
Speichers, der vom Speichermanager verwaltet wird. Hinweis: Diese Funktion steht erst ab Version 1.01 des PMMU-Cookies zur Verfügung. |
Ergebnis: | Die Funktion liefert die genannte Größe zurück. |
Gruppe: | PMMU-Funktionshandler |
Querverweis: | ClearPageMode GetHdv_inuse GetPageSize PMMUversion SetPageMode vmem_size |
Name: | »PMMUversion« - ermittelt die Versionsnummer des Handlers |
Nummer: | 0 |
Deklaration: | UWORD PMMUversion ( VOID ); |
Beschreibung: | Die Funktion ermittelt die Versionsnummer des PMMU-Handlers. Dabei wird in den Bits 8..15 die Version, und in den Bits 0..7 die Revision abgelegt. Ein Wert von 0x102 steht demnach für Version 1.02 |
Ergebnis: | Die Funktion liefert die Versionsnummer des Handlers im o.g. Format zurück. |
Gruppe: | PMMU-Funktionshandler |
Querverweis: | ClearPageMode GetHdv_inuse GetPageSize pmem_size SetPageMode vmem_size |
Name: | »SetPageMode« - PMMU Modus für einen Bereich setzen. | ||||||||||||||||||||
Nummer: | 1 | ||||||||||||||||||||
Deklaration: | ULONG SetPageMode ( ULONG mode, ULONG start_address, ULONG length ); | ||||||||||||||||||||
Beschreibung: | Die Funktion setzt den PMMU-Modus für einen bestimmten
Speicherbereich. Es gilt:
Hinweis: Die restlichen Bits sind reserviert und müssen auf Null gesetzt werden. Für die virtuelle Speicherverwaltung ist in erster Linie das SwapInhabit-Bit von Bedeutung, da es die Möglichkeit bietet, bestimmte Speicherbereiche gegen Auslagern abzusichern. Beim Schreibschützen von Speicherbereichen ist unbedingt zu beachten, daß der Speicher in Seiten unterteilt ist, die die kleinste Einheit für einen Schreibschutz darstellen. Es muß sichergestellt werden, daß sich der Schreibschutz nicht auch auf einen Bereich erstreckt, der nicht geschützt werden darf, weil er beispielsweise nicht zum eigenen Programm gehört. | ||||||||||||||||||||
Ergebnis: | Die Funktion liefert bei fehlerfreier Ausführung den Wert Null zurück. Anderenfalls wird ein Wert zurückgeliefert, bei dem die Bits gesetzt sind, die nicht manipuliert werden konnten. | ||||||||||||||||||||
Gruppe: | PMMU-Funktionshandler | ||||||||||||||||||||
Querverweis: | ClearPageMode GetHdv_inuse GetPageSize pmem_size PMMUversion vmem_size |
Name: | »vmem_size« - Gesamtgröße des virtuellen Speichers erfragen. |
Nummer: | 5 |
Deklaration: | ULONG vmem_size ( VOID ); |
Beschreibung: | Die Funktion ermittelt die Gesamtgröße des virtuellen Speichers. |
Ergebnis: | Die Funktion liefert die genannte Größe zurück. |
Gruppe: | PMMU-Funktionshandler |
Querverweis: | ClearPageMode GetHdv_inuse GetPageSize pmem_size PMMUversion SetPageMode |