Autor Thema: API  (Gelesen 24035 mal)

T0ast3r

  • Gast
Gespeichert
« am: 05. June 2005, 14:03 »
API
Da man ohne API nicht viel anfangen kan, finde ich ist es jetzt Zeit sich mit ihr zu beschäftigen.
Am Anfang würde ich jeden API Aufruf über Interrupts machen.
(Später eine andere Lösung)
Dabei würde ich die API aber gleich in mehreren Teilen abgrenzen, und jeden Teil ein Interrupt zur Verfügung stellen.
z. B. Interrupt 30 = System Calls
Dann würde ich die Funtkionsnummer in AX oder EAX übergeben, und der Rest maht dan die API.
Es sollte halt bei jedem API Interrupt eine Art Teiler sein, der die API Funktionsnummer liest, und dann zur richtgen Funktion springt.
Zudem würde ich möglichst bald anfangen an ihr zu programmieren.
Schreibt eure Vorschläge hier rein....

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 05. June 2005, 14:14 »
API
Vorschlag:

1. API ab 0x30 INT anlegen
2. Aufrufnummer in EAX übergeben
3. API-Ints unterteilen
API0 (0x30) = Taskapi
Funktionen:
0x00000000: Taskwechsel einleiten
0x00000001: Task erzeugen
.
.
.
API1 (0x31) = Treiberapi
Funktionen
.
.
.

;)
J!N
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #2 am: 05. June 2005, 14:15 »
API
da wir ja einen mikrokernel in C++ haben finde ich, dass wir das ganze nicht ueber asm, sondern eher ueber normale C/C++-funktionen angehen sollten.
wie waers mit statischen libs (vorerst), und spaeter mal dynamischen (alà dlls)?
\\o
o//
\o/

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #3 am: 05. June 2005, 14:17 »
API
jo, aber worauf soll die STDLIB zugreifen? INTs brauchste.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

T0ast3r

  • Gast
Gespeichert
« Antwort #4 am: 05. June 2005, 14:19 »
API
Einen großen Teil müssen wir aber in asm mahen, da die API ja eine Schnittstelle zwischen den Computer und dessen Hardware ist, und das in C sehr müsam ist, alle Funktionen die man in asm schreiben muss zu implementieren.
Wobei wie gesagt, es gibt ja eine Unterteilun.
Da würde ich die System Calls eher in asm schreiben, und unwichtigere Teile dann in C.

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 05. June 2005, 15:38 »
API
Wäre ich auch dafür, auch in asm...schließlich ist ein C-Wrapper schnell geschrieben...

hannibal

  • Host
  • Beiträge: 400
    • Profil anzeigen
    • brainsware - the rock.
Gespeichert
« Antwort #6 am: 05. June 2005, 23:07 »
API
bloede frage, aber was genau soll denn die API beinhalten, was mit C nicht auch moeglich waere?

nicht, dass ich euch was dreinreden koennte bezueglich API in asm, aber mich wuerds hald interessieren ^^
\\o
o//
\o/

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #7 am: 06. June 2005, 12:36 »
API
Ist egal, womit mans schreibt. Ist eigendlich total egal. Man muss nur eine STDLIB für die API für C schreiben. Die muss dann die INTs und die echte API benutzen. Ich bin dafür, eine komplette STDLIB erstmal zu coden, basierend auf der API, und dann richtig an Konsole und ggf. GUI zu gehen. Dann hat man alles in der Tasche und kann auch Code portieren. ;)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #8 am: 06. June 2005, 13:14 »
API
Also ihr braucht eigentlich in ASM nur eine Funktion die man syscall nennen könnte zu schreiben. Diese nimmt einen Pointer auf eine Struktur mit den registern (oder die Struktur direkt selber?), lädt die alle, und ruft den Interrupt auf. Danach wird noch das Ergebnis gesichert. Der Rest kann dann in C unter Benutzung dieser Funktion gemacht werden.
*post*

T0ast3r

  • Gast
Gespeichert
« Antwort #9 am: 06. June 2005, 20:33 »
API
OK, dann erstellen wir zuerst eine STDLIB.
Wenn dass das ist was ich glaub dann eben eine Art Library die in asm geschrieben wird und dazu dient, den Code in C funtkionen bereit zu stellen, die nur in asm machbar sind.
Wenn's so ist, dann ist es gut. *lol*
Dann schreiben wir eben die eigentliche API in C. *grrrr*

Golum

  • Beiträge: 96
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 07. June 2005, 19:38 »
API
Zitat
Dann schreiben wir eben die eigentliche API in C. *grrrr*

Ist ja eigentlich egal nur musst du dann einen header für C schreiben.
Mann kann ja auch assemblercode zu C dazu linken.

T0ast3r

  • Gast
Gespeichert
« Antwort #11 am: 16. June 2005, 14:41 »
API
Gibt's von eurer Seite irgendwelche Vorschläge wegen der Unterteilung der API?
Also welchen Ints würdets ihr welhce API-Teile zuordnen?

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 16. June 2005, 22:53 »
API
Hi,

bei mir implementiere ich Syscalls folgendermaßen:
Assembler funktion "_syscall" wird von einem Int 0x80 aufgerufen, mit den Parametern in eax,ebx,ecx,edx,esi und edi: Diese Funktion pusht alle Werte und ruft die C Funktion
"syscall(int r1,int r2,int r3,int r4,int r5,int r6);" auf. Und in den Werten wird dann über ein beliebiges Register die Funktionsnummer und in dem Rest die Parameter übergeben. Fertig!

Warum mehrere Interrupts nehmen? mit o.g. Methode hast du alles übersichtlich in einer Funktion.

Gruß GhostCoder
A man, a legend!

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 17. June 2005, 13:19 »
API
Wenn man verschiedene Interrupts nimmt hat man mehr Register für Parameter zur Verfügung ;-)
Agieren statt Konsumieren!

T0ast3r

  • Gast
Gespeichert
« Antwort #14 am: 17. June 2005, 19:54 »
API
Das man mehrere Register hat hab ich gewusst.......  :wink:
Ich wollt's halt mit merheren Ints machen, damit alles schön übersichtlich bleibt.
Wobei ich immer die Meinung der Mehrheit unterstütze, also sollten sich jetzt auch mal andere melden.  :wink:
Bei mehreren Ints könnte man dann so schön sagen, dass Int 30h Taskapi ist, 31h Systemcalls, 32h .......

Netmaster

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 29. June 2005, 12:19 »
API
Ich finde die Lösung mit Interrupts auch besser und als Sprache sollte man ASM nehmen, weil Assembler deutlich schneller und flexibler als C ist. Eine Frage, weiß jemand wie Windows die DLL's verwaltet? Man könnte die API nochmals unterteilen, zu einem die grundliegenden Funktionen mithilfe von Int's implementieren und die GUI- und Zusatzfunktionen mithilfe von dynamischen Bibliotheken(like DLL), die wiedrum auf Grund-Api aufsetzen, so könnte man GUI-Elemente schnell ersetzen, ohne ganze API neu kompilieren zu müssen..... Außerdem sollte man mit der Anzahl der Interrupts nicht übertreiben, nicht so dass jeder Int nur 2-3 Funktionen enthält.....
Chaos ist die höchste Form der Ordnung ;)

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 29. June 2005, 14:10 »
API
Zitat

Wenn man verschiedene Interrupts nimmt hat man mehr Register für Parameter zur Verfügung

Klar, wenn man für jeden Systemcall einen INT nimmt, sonst net :)

Zitat

weil Assembler deutlich schneller und flexibler als C ist.

Öhm, ja natürlich... :)

Nochwas:
Ich macht doch einen Mikrokernel, oder? Wenn ja, müssen die einzigen Syscalls doch Messaging Funktionen sein.

Gruß, GhostCoder
A man, a legend!

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #17 am: 29. June 2005, 16:23 »
API
Also ihr solltet per Syscall Möglichkeiten bereitstellen mit einer einheitlichen(!) Abstraktion der Treiber und anderen Funktionen zu arbeiten.

Sowas direkt per Int zu machen -> siehe DOS.
*post*

T0ast3r

  • Gast
Gespeichert
« Antwort #18 am: 29. June 2005, 18:39 »
API
Jap, das ist aber das sollte eigentlich kein Problem sein.
Jetzt sollten wir bald mal eine Unterteilung machen...

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 29. June 2005, 20:40 »
API
@Legend:
Und Messaging(IPC) ist genau diese Abstraktion. Eigentlich alle Microkernel basieren auf diesem Prinzip

Zitat

Sowas direkt per Int zu machen -> siehe DOS.

Sorry, wenn das jetzt blöd klingt:  Was meinst du damit?

Gruß GhostCoder
A man, a legend!

 

Einloggen