Hallöchen popöchen, 
ich habe gerade den OS-Loader von OS-64 soweit fertig, dass er von einer FS64 formatierten Partition (welche steht in einer Datei) die OS Dateien lädt (auch diese stehen in einer Datei). Alles wunderbar und gut. Er lädt die Treiber, Bibliotheken, den Kernel und die Shell. Aber bis jetzt laufen die APIs alle über Interrupts (Kernel APIs über int 30h und Shell APIs über int 31h). Aber das mag ich überhaupt nicht. Denn jedes Programm soll noch mal eigene APIs mitbringen können. Und dann wären 1. 256 minus 30h Interrupts ein bisschen wenig und 2. wer sagt dass ein Programm welchen Interrupt benutzt.
Ja ich weiß, dass ist blöd ausgedrückt, aber auf jeden Fall möchte ich keine Interrupts benutzen. Jetzt frage ich mich die ganze Zeit wie ich das sonst machen kann. Da die Bibliotheken zwar immer im Speicher sind (sobald geladen und falls nicht beendet, also für jeden Task ansprechbar) aber nicht immer an derselben Adresse (Code wird größer/kleiner etc.), kann ich nicht einfach an einer Adresse springen um eine Funktion auszuführen. Ich weiß nicht wie das bei Windows funktioniert, denn da springt man doch über call MessageBoxA (z.B.) an eine feste Adresse?
?
Könnt ihr mir ein paar Verfahren nennen und ggf. erklären? Darüber wäre ich sehr dankbar. Zur Belohnung gibts dann auch bald eine neue OS-64 Version.
thx
bitmaster

ich habe gerade den OS-Loader von OS-64 soweit fertig, dass er von einer FS64 formatierten Partition (welche steht in einer Datei) die OS Dateien lädt (auch diese stehen in einer Datei). Alles wunderbar und gut. Er lädt die Treiber, Bibliotheken, den Kernel und die Shell. Aber bis jetzt laufen die APIs alle über Interrupts (Kernel APIs über int 30h und Shell APIs über int 31h). Aber das mag ich überhaupt nicht. Denn jedes Programm soll noch mal eigene APIs mitbringen können. Und dann wären 1. 256 minus 30h Interrupts ein bisschen wenig und 2. wer sagt dass ein Programm welchen Interrupt benutzt.
Ja ich weiß, dass ist blöd ausgedrückt, aber auf jeden Fall möchte ich keine Interrupts benutzen. Jetzt frage ich mich die ganze Zeit wie ich das sonst machen kann. Da die Bibliotheken zwar immer im Speicher sind (sobald geladen und falls nicht beendet, also für jeden Task ansprechbar) aber nicht immer an derselben Adresse (Code wird größer/kleiner etc.), kann ich nicht einfach an einer Adresse springen um eine Funktion auszuführen. Ich weiß nicht wie das bei Windows funktioniert, denn da springt man doch über call MessageBoxA (z.B.) an eine feste Adresse?
?Könnt ihr mir ein paar Verfahren nennen und ggf. erklären? Darüber wäre ich sehr dankbar. Zur Belohnung gibts dann auch bald eine neue OS-64 Version.

thx
bitmaster

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken


Gespeichert
