Ein Wort zur API
Viele haben schon nach dem Konzept der API gefragt.
Nun möchte ich das Konzept hier veröffentlichen:
1. Die API besteht aus mehreren DLLs.
DLL steht für Dynamic Link Library, also für Librarys, die dynamisch in den Speicher geladen werden.
Bei der API werden aber viele DLLs beim Start in den Speicher geladen, also nicht dynamisch.
Dynamisch geladen werden nur DLLs der API, die NICHT wichtig für das System sind.
So würde eine DLL, die Funktionen für den Joystick unterstützt, NUR bei BEDARF in den Speicher geladen.
2. Jede DLL wird in den Speicher in ein Segment geladen, welches in der GDT beschrieben ist.
Die Art des Segmentes MUSS ein Call-Gate sein, welches bei "normalen" DLLs der API ein Call von einer Privilegstufe 3 erlauben muss.
Dann kann es je nach Anwendungsgebiet mit einer Privilegstufe 0 weiterarbeiten oder auch eine andere.
3. Jede DLL (bzw. Library) besitzt einen Header, in dem wichtige Informationen abgespeichert werden, die das System über Größe, Funktionen usw. informiert.
Weiters kann an dem Header erkannt werden, ob es sich bei der betreffenden Datei tatsächlich um eine DLL oder Library handelt, die eben ausführbar ist.
Der Header ist zu diesen Zeitpunkt noch nicht vollständig definiert, jedoch gibt es schon (von mir) erste Niederschriften und Überlegungen, die jedoch noch in Arbeit sind.
4. Um eine DLL zu laden, muss man den Interrupt 80h mit der passenden Funktionsnummer aufrufen. (Funktion: Load Library)
Die Dokumentation des Interrupt 80h (mit der Funktionsliste usw.) ist (derweil) bei mir zu kriegen.
Wenn sie fertig ist, und der Code dazu natührlich auch, werde ich sie dann auf den ftp Server posten.
(bis dahin sind sie ausschließlich bei mir zu bekommen)
5. Das mit den Fuktionen (bzw. Unterfunktionen) ist noch nicht so ganz geklärt.
Höchst wahrscheinlich ist folgendes Szenario:
Wer nun die Funktion XY der DLL "Drive" aufrufen will, muss als erstes die Library wie oben beschrieben laden.
Mit dem bekommten Handle, wird die Funktion GetProcAdress des Int 80hs aufgerufen, und schon griegt man den Einspringpunkt.
Den sichert man sich in einer Variable und man kann wie folgt die Funktion aufrufen:
call dword [Variable_die_Einspringpunkt_beinhaltet]
Das wird das Grundkonzept sein.
Wie nun genau Int 80h aussehen wird, plus die Fuktionsnummern und der ganze bla bla bla werde ich noch ausarbeiten.
Hier noch der aktuelle Stand der LAPI:
Derzeit exisitiert erst eine Library, die allerdings noch als DLL umgeschrieben werden muss, da ursprünglich von Interrupt-Handler Librarys die Rede war.
Wie gesagt, diese Lib heißt "Drive" und managed Laufwerkszugriffe mit oder ohne Handle.
Wer mehr wissen will oder die (schon längst fertige) Doku, der soll eine E-Mail an T0ast3r@gmx.at schicken oder hier im Forum das schreiben.
Übrigens leitet sich LAPI von CommOS API ab, also (eigentlich) LOST API.
@DDR_RAM: Wie sieht es eigentlich mit den Interrupts aus? Wann und wodurch werden die Interrutps initialisiert?
@hannibal: Ich erwarte noch eine Reaktion in Form von einer Mail.
Wer mit an der API proggen will, soll sich hier im Forum (eindeutig) melden!