Aeris Projekt launched!
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Aeris Projekt launched!
Nja das Leben der Informatiker
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Aeris Projekt launched!
Ok, es folgen einige Vorschläge.
Lies sie dir durch oder ignoriere sie.
Diese Funktion gibt dir ein Zeichen.
Das macht sie auch gut.
Was dir aber evtl. nicht auffällt ist, dass diese Funktion mit VOLLER CPU-Auslastung laufen muss.
Das Prinzip das du hier verwendest nennt man Polling.
Dieses Prinzip ist eigntl nicht gerade geeignet.
Die CPU ist in der Lage, um Polling zu vermeiden, auf Interrupts (Unterbrechungen) zu reagieren.
Heißt: Die CPU führt ganz normal ihre Aufgaben aus.
Dann kommt ein Interrupt (z.B. ein Tastendruck), die CPU bemerkt das, wechselt in einen InterruptHandler und von diesem aus dann zu einer Funktion, die etwas mit der gedrückten Taste anfängt.
Wenn du gerade keine Tastendrücke lesen möchtest, dann beendet sich diese Funktion einfach wieder.
Wenn du aber einen Tastendruck erwartest, dann wird die Information, die der InterruptHandler erhält ausgewertet und verarbeitet (z.B. wird ein entsprechender Buchstabe auf den Bildschirm gebracht).
Hier gilt das gleiche. Versuche Polling zu vermeiden.
ähnliches.
Ich rate dir außerdem dich ersteinmal zu informieren, wie denn ein Betriebssystem so funktioniert.
Mit deiner jetzigen Strukturierung/Aufbau wird es nahezu unmöglich, über Sachen wie Paging (DAZU brauchst du Interrupts!) oder gar Multitasking nachzudenken.
Ich rate dir auch, ersteinmal grundlegene Einstellungen beim Start vorzunehmen.
Du setzt weder eine GDT noch eine IDT.
Damit wird es unmöglich, Multitasking/User Mode oder Interrupts zu verwenden.
Ohne Interrupts kann dein Computer SEHR wenig.
Die Maus, die Tastatur, die Laufwerke, der Timer. Alles Interrupts.
Damit ich dich hier nicht so mit gar nichts rumstehen lasse, gebe ich dir ein gutes Tutorial auf den Weg:
http://osdever.net/bkerndev/Docs/intro.htm
Ich hoffe dir geholfen zu haben.
MfG
Daniel
EDIT:
Noch eine Anmerkung, die dir noch weniger gefallen wird:
Ich denke (aufgrunf der großen Menge an Englisch, dass mir doch etwas bekannt vorkommt) du solltest mehr selbst schreiben.
Ein bisschen kopieren ist ok, aber nur, wenn man weiß, was man tut.
Lies sie dir durch oder ignoriere sie.
Code: Alles auswählen
char get_scancode()
{
char status, scancode;
outb(0x21, 0x02); //IRQ1 speren
while(1)
{
status=inb(0x64); //Statusregister lesen
if(status & 0x01) break; //Wenn er ein zeicehn enth�lt, dann verlassen und abfragen
}
scancode = inb(0x60); //Zeichen Abfragen
return scancode;
outb(0x21, 0x00); //IRQ1 wieder anschalten
}
Das macht sie auch gut.
Was dir aber evtl. nicht auffällt ist, dass diese Funktion mit VOLLER CPU-Auslastung laufen muss.
Das Prinzip das du hier verwendest nennt man Polling.
Dieses Prinzip ist eigntl nicht gerade geeignet.
Die CPU ist in der Lage, um Polling zu vermeiden, auf Interrupts (Unterbrechungen) zu reagieren.
Heißt: Die CPU führt ganz normal ihre Aufgaben aus.
Dann kommt ein Interrupt (z.B. ein Tastendruck), die CPU bemerkt das, wechselt in einen InterruptHandler und von diesem aus dann zu einer Funktion, die etwas mit der gedrückten Taste anfängt.
Wenn du gerade keine Tastendrücke lesen möchtest, dann beendet sich diese Funktion einfach wieder.
Wenn du aber einen Tastendruck erwartest, dann wird die Information, die der InterruptHandler erhält ausgewertet und verarbeitet (z.B. wird ein entsprechender Buchstabe auf den Bildschirm gebracht).
Code: Alles auswählen
void getstring(char *target_var)
{
char buf;
while(1)
{
buf=get_zeichen();
if(buf=='|'){
putchr(buf);
break;
}
putchr(buf);
*target_var=buf;
target_var++;
}
}
Code: Alles auswählen
while(1)
{
print(bchsbe);
getstring(command);
if(strcomp(command,"help"))print(help_massage);
else if(strcomp(command,"system"))print(system_massage);
else if(strcomp(command,"exit")){
print("Ihr System wird jezt heruntergefahren");
cpu_reset();
}
else print(unknown);
}
return 0;
}
Ich rate dir außerdem dich ersteinmal zu informieren, wie denn ein Betriebssystem so funktioniert.
Mit deiner jetzigen Strukturierung/Aufbau wird es nahezu unmöglich, über Sachen wie Paging (DAZU brauchst du Interrupts!) oder gar Multitasking nachzudenken.
Ich rate dir auch, ersteinmal grundlegene Einstellungen beim Start vorzunehmen.
Du setzt weder eine GDT noch eine IDT.
Damit wird es unmöglich, Multitasking/User Mode oder Interrupts zu verwenden.
Ohne Interrupts kann dein Computer SEHR wenig.
Die Maus, die Tastatur, die Laufwerke, der Timer. Alles Interrupts.
Damit ich dich hier nicht so mit gar nichts rumstehen lasse, gebe ich dir ein gutes Tutorial auf den Weg:
http://osdever.net/bkerndev/Docs/intro.htm
Ich hoffe dir geholfen zu haben.
MfG
Daniel
EDIT:
Noch eine Anmerkung, die dir noch weniger gefallen wird:
Diese Frage hatte Hintergrund.Dirty Oerti hat geschrieben:Eine kleine Frage nebenbei: Wie gut ist dein Englisch?
Ich denke (aufgrunf der großen Menge an Englisch, dass mir doch etwas bekannt vorkommt) du solltest mehr selbst schreiben.
Ein bisschen kopieren ist ok, aber nur, wenn man weiß, was man tut.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Aeris Projekt launched!
Naja Danke für den Tipp.
Die Funktion "get_scancode()" gibt ja nur den scancode zurück.
Aber gehört die GDT nicht zum Protected mde, in dem ich ja schon drinn bin durch GRUB?
Wie würdest DU das polling in der get_scancode() funktion zu vermeiden, denn schlieslcih muss ich ja werten bis ein zzeichen eingegeben wurde, denn sonst würden alle anderen funkrionen ja nicht funktionieren.
Außerdem hab ich nur die "get_scancode()" funktion aus einem buch und der rest alles selber gemacht. Zwar auch ein bisschen aus Tutoials kopiert, aber die meiten nutzen sowieso Assemblerbefhele. Ich hab mal bisschen mit funktionen aus anderen OS heruprobiert und nicht alees wieder gelöscht
Die Funktion "get_scancode()" gibt ja nur den scancode zurück.
Aber gehört die GDT nicht zum Protected mde, in dem ich ja schon drinn bin durch GRUB?
Wie würdest DU das polling in der get_scancode() funktion zu vermeiden, denn schlieslcih muss ich ja werten bis ein zzeichen eingegeben wurde, denn sonst würden alle anderen funkrionen ja nicht funktionieren.
Außerdem hab ich nur die "get_scancode()" funktion aus einem buch und der rest alles selber gemacht. Zwar auch ein bisschen aus Tutoials kopiert, aber die meiten nutzen sowieso Assemblerbefhele. Ich hab mal bisschen mit funktionen aus anderen OS heruprobiert und nicht alees wieder gelöscht
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Aeris Projekt launched!
GRUB bastelt dir nur eine "SpielGDT" zusammen. Mit der kannst du wenig anfangen.cloidnerux hat geschrieben:Aber gehört die GDT nicht zum Protected mde, in dem ich ja schon drinn bin durch GRUB?
Außerdem weißt du nicht, wo im Speicher sie liegt!!
Heißt es ist fast vorrausprogrammiert, dass du sie irgendwann überschreibst.
Und passiert das, dann funktioniert NICHTS mehr und der Computer startet neu.
Stelle eine eigene GDT auf und zwar dort, wo du weißt das sie ist und wo du sie vor Überschreiben schützen kannst.
Multitasking geht ohne GDT auch nicht, denn in der GDT werden Task State Segmente gespeichert, von denen du mindestens eines zum Taskwechseln benötigst.
Ich würde das Polling per Interrupts vermeiden.
Setze lauffähige Interrupts auf, baue einen Handler für Keyboard (Tastaturtreiber) ein, der die gedrückten Tasten in einen Puffer sichert, aus dem du dann lesen kannst.
Diesen Puffer aktivierst du mit Aufruf der Funktion get_scancode (wobei du damit gleich ganze Zeichenketten einlesen kannst), welche dann WARTET (warten, keine while-schleife) bis der Puffer "voll" ist (z.B. wenn Enter gedrückt wurde) und den String aus dem Puffer extrahiert.
Wie genau du das implementierst ist deine Sache.
Aus einem Buch?
Ich schätze ein Buch zu DOS?
Oder was für ein Buch ist das?
Naja...ein bisschen. Aber wie du willst. Denke nur: mach so viel wie möglich (am besten alles) selbst.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Aeris Projekt launched!
Es heißt "PC-Hardware Aufbau, Funtionsweise. Programmierung" von Hans-Peter Messmer
Und wo hastt du ne menge Englisch gesehen, der dir Bekannt vorkommt.
Ich finde keinen Einzigen Komentar auf English, und nur weil irgendeine funktion einen namen hat, der in einem Tutorial vorkam, muss es nich theice das ich Copy+Paste nutze
Und wo hastt du ne menge Englisch gesehen, der dir Bekannt vorkommt.
Ich finde keinen Einzigen Komentar auf English, und nur weil irgendeine funktion einen namen hat, der in einem Tutorial vorkam, muss es nich theice das ich Copy+Paste nutze
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Aeris Projekt launched!
Der komplette "features.h" ist auf Englisch.cloidnerux hat geschrieben:Und wo hastt du ne menge Englisch gesehen, der dir Bekannt vorkommt.
Ich finde keinen Einzigen Komentar auf English, und nur weil irgendeine funktion einen namen hat, der in einem Tutorial vorkam, muss es nich theice das ich Copy+Paste nutze
Aus io.h:
Code: Alles auswählen
__BEGIN_DECLS
/* If TURN_ON is TRUE, request for permission to do direct i/o on the
port numbers in the range [FROM,FROM+NUM-1]. Otherwise, turn I/O
permission off for that range. This call requires root privileges.
Portability note: not all Linux platforms support this call. Most
platforms based on the PC I/O architecture probably will, however.
E.g., Linux/Alpha for Alpha PCs supports this. */
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Aeris Projekt launched!
Das ist ne standartdatei von LINUX.
Steht sogar oben drin und in der README.
ICh ahb die nur in das Projektverzeichnis kopiert um leuten unter Winows die möglickeit geben es zu Compiliren.
genauso wie io.h, auch aus der GCC lib, Musste ich nur ein bisschen verändern um fehler zu vermeiden.
Diese Header habe ich nicht selbstprogrammiert und auch nicht kopiert. Ich nutze sie nur
Steht sogar oben drin und in der README.
ICh ahb die nur in das Projektverzeichnis kopiert um leuten unter Winows die möglickeit geben es zu Compiliren.
genauso wie io.h, auch aus der GCC lib, Musste ich nur ein bisschen verändern um fehler zu vermeiden.
Diese Header habe ich nicht selbstprogrammiert und auch nicht kopiert. Ich nutze sie nur
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Aeris Projekt launched!
Hab ein neues mitglied in unserem Entwicklerteam.
Auch ahebn wir jezt eine Windowscompilation des Projekts ermöglicht
Auch ahebn wir jezt eine Windowscompilation des Projekts ermöglicht
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Aeris Projekt launched!
Haben jezt Interrupts, GDT, protectetd Mode und sind in der Verion 0.21.
Aktuell sind wir bei 2500 zeilen code und werden jezt mit Speicherverwaltung beginnen
Aktuell sind wir bei 2500 zeilen code und werden jezt mit Speicherverwaltung beginnen
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Aeris Projekt launched!
Nice... und wieviele seid ihr inzwischen?cloidnerux hat geschrieben:Haben jezt Interrupts, GDT, protectetd Mode und sind in der Verion 0.21.
Aktuell sind wir bei 2500 zeilen code und werden jezt mit Speicherverwaltung beginnen
Screenshots?

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.