Aeris Projekt launched!

Präsentation und Organisation von eigenen Projekten
Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Aeris Projekt launched!

Beitrag von cloidnerux » Do Okt 09, 2008 5:22 pm

Nja das Leben der Informatiker
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aeris Projekt launched!

Beitrag von Dirty Oerti » Do Okt 09, 2008 9:16 pm

Ok, es folgen einige Vorschläge.
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
}
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).

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++;
}
}
Hier gilt das gleiche. Versuche Polling zu vermeiden.

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;
}
ä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:
Dirty Oerti hat geschrieben:Eine kleine Frage nebenbei: Wie gut ist dein Englisch?
Diese Frage hatte Hintergrund.
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.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Aeris Projekt launched!

Beitrag von cloidnerux » Fr Okt 10, 2008 7:47 am

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aeris Projekt launched!

Beitrag von Dirty Oerti » Fr Okt 10, 2008 2:22 pm

cloidnerux hat geschrieben:Aber gehört die GDT nicht zum Protected mde, in dem ich ja schon drinn bin durch GRUB?
GRUB bastelt dir nur eine "SpielGDT" zusammen. Mit der kannst du wenig anfangen.
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.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Aeris Projekt launched!

Beitrag von cloidnerux » Fr Okt 10, 2008 3:04 pm

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Aeris Projekt launched!

Beitrag von Dirty Oerti » Fr Okt 10, 2008 3:11 pm

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
Der komplette "features.h" ist auf Englisch.

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.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Aeris Projekt launched!

Beitrag von cloidnerux » Fr Okt 10, 2008 3:28 pm

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Aeris Projekt launched!

Beitrag von cloidnerux » So Okt 12, 2008 11:10 am

Hab ein neues mitglied in unserem Entwicklerteam.
Auch ahebn wir jezt eine Windowscompilation des Projekts ermöglicht
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Aeris Projekt launched!

Beitrag von cloidnerux » Mi Nov 26, 2008 9:13 pm

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
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Aeris Projekt launched!

Beitrag von Xin » Mi Nov 26, 2008 10:18 pm

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
Nice... und wieviele seid ihr inzwischen?
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.

Antworten