Diskussion:Quåko OS

Aus Lowlevel
Wechseln zu:Navigation, Suche

Was meinst du mit int86() Funktion, die kenne ich nicht. Ist das was selbst geschriebenes oder etwas offizielles? --PNoob 12:35, 29. Dez. 2010 (CET)

Es ist seltsam,wie ich zu dieser Funktion kam: Ich fuhr mit der U-Bahn, und dort lag ein altes Buch, C für PCs, 2.überarbeitete Auflage, die wurde 1998 gedruckt! Da gab es eine Funktion, im Kapitel 19(Hardwarenahe Programmierung), und dort, auf den Seiten 356 und 357 stand da, was die Funktion int86() so alles kann. Ich war fasziniert und habe es gleich ausprobiert. Vergeblich, die war schon längst veraltert. Deshalb muss ich mit Assembler programmieren(Das Assembler im Dev-C++), um z.B.:den Videomodus zu setzen(die Funktion int86() ist etwas auf diese legendäre ax, ah, ... basiert). Ob es wirklich geklappt hat, weiß ich nicht weil wenn ich die Datei öffne, dann eine Fehlermeldung kommt, (Die Problembericht senden Meldung). Aber vielleicht wenn ich das OS zu Ende gebracht habe und ich es dann auf Virtual PC es teste, kommt was raus. Aber was meinst du, soll ich lieber diese Videomodus Programmierung auf NASM programmieren oder weiter auf Dev-C++? --Quåko 16:50, 29. Dez. 2010 (CET)

Egal, ich werde es auf NASM machen. Dort fällt es mir etwas leichter.--Quåko 16:55, 29. Dez. 2010 (CET)

Nette Geschichte :) Leider bringst du einige Dinge hier durcheiander:
  • DevC++ ist eine Entwicklungsumgebung und NASM ein Assembler. Das sind beides KEINE Programmiersprachen.
  • Wenn du von 'Assembler in DevC++' redest, meinst du wohl so etwas wie inline Assembler.
  • Die int86() Funktion, von der du sprichst, macht nichts anderes als einen Interrupt aufzurufen. Die könntest du dir sogar selbst programmieren, wenn du dich mit dem o.g. inline-Assembler ein wenig auskennst.
  • Wenn ich dich richtig verstehe, dann möchtest du mit der in86() Funktion auf die Funktionen des BIOS zugreifen, um in einen bestimmten Videomodus zu springen. Dir sollte an dieser Stelle aber klar sein, dass das nur im 16 Bit Real Mode funktioniert!
  • Das führt gleich zur nächsten Frage: Soll dein OS im Real Mode oder Protected Mode laufen?
  • Und zu guter Letzt: Du wirst dein OS nicht mit DevC++ programmieren können! Die Sprache C (bzw. C++) ist zwar eine gute Wahl, aber deine Entwicklungsumgebung musst du dir selbst 'zusammenbauen'.
Ich hoffe das bringt ein wenig Licht ins Dunkel. --Bjork 17:55, 29. Dez. 2010 (CET)

du meinst, dass ich eine eigene biblothek baue. das weiß ich doch XD --Quåko 18:12, 29. Dez. 2010 (CET)

Gemeint war eher, dass du selber Scripte und Konfigurationen zusammenstellen/schreiben musst, um dein System zu bauen. Eine IDE wird dir da zunächst nur im weg stehen. Siehe OS-Dev_für_Einsteiger bzw Teil_1_-_Entwicklungsumgebung --RedEagle 19:58, 29. Dez. 2010 (CET)

okay, aber assembler darf ich immer noch benutzen, oder??

Du darfst verwenden was immer du willst, den das wichtigste am OS deven ist Spaß.--Tev 21:42, 29. Dez. 2010 (CET)
Klar Assembler kann st du benutzen bei Java und C# wirds da schon problematischer. aber am besten du ließt dier Das von Redeagle verlinkte Tutorial mal durch. das sollte sehr viele fragen klären. wenn du weitere Fragen hast, dann kannst du sie natürlich gerne stellen.--PNoob 00:00, 30. Dez. 2010 (CET)

ja, aber mit c++ habe ich immer so gemacht:


<cpp>

  1. ifndef _CONSOLE_HPP___
  2. define _CONSOLE_HPP___
  3. include <iostream>
  4. include <windows.h>

using namespace std;


void qprintf(char *q){

   char *videomem = (char)* 0xb8000;
   int Colour=7+16*0; 
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),Colour); 
   videomem++;
   cout << q << endl;
   videomem++;

}

....

  1. endif

///////////////////////////

  1. include "console.hpp"

int main(){

   qprintf("hi");
   return 0;

} </cpp>

Und dabei kam raus:

hi

also meisntu es so ungefähr mit eigenen skripten? darf ich die z.B.: iostream biblothek verwenden?

Nein, darfst du nicht (solange du Sie nicht portiert, d.h. für dein OS angepasst hast). Im Allgemeinen musst du jede Funktion/Klasse/Typ/Enum, die du benutzt selbst definieren und damit jede Header die du inkludieren möchtest selbst schreiben. Mit eigenen Skripten war gemeint, dass du z.B. eigene Makefiles oder Batchdateien erstellen musst, die den Compiler und Linker aufrufen, d.h. das machen, was eine IDE teilweise übernimmt. Der Grund dafür ist, dass man Compiler/Linker mit speziellen Flags aufrufen muss (siehe auch die OS-Dev für Einsteiger Reihe, Teil 4). Ich kann nur empfehlen erstmal diese Reihe versuchen durchzuarbeiten (nicht nur lesen, sondern auch wirklich nachvollziehen). --Bluecode 11:25, 30. Dez. 2010 (CET)

ja, aber bewim hello world kernel(ausgabe vier) ist void nicht definiert

void ist immer definiert (genauso wie char, short, int, long, long long und die signed/unsigned Variante davon), das sind Typen die bereits von der Sprache C vorgeschrieben werden (und nicht erst in der Standardbibliothek auftauchen). Was man daran erkennen kann, dass man um die Typen zu nutzen nichts inkludieren muss. --Bluecode 11:38, 30. Dez. 2010 (CET)

achso, ich dachte, man muss

<cpp>

  1. define void function

</cpp>

machen --Quåko 11:39, 30. Dez. 2010 (CET)

Eine Funktion/Typ/Enum definieren hat nichts mit #define zu tun. Bitte schau dir z.B. diesen Thread dazu an bzw. den gelinkten Beitrag und den eins darunter. --Bluecode 11:48, 30. Dez. 2010 (CET)

da gäbe es noch eine frage: wie macht man die Eingabeaufforderung?--Quåko 11:43, 30. Dez. 2010 (CET)

Erstmal brauchst du dazu einen Treiber, der für die Ausgabe auf dem Bildschirm zuständig ist (nochmals: bitte die Tutorialreihe dazu von vorne beginnend lesen), dann einen Treiber für die Tastatur (die meisten machen nur PS/2 und lassen USB erstmal weg, weil es unglaublich kompliziert ist). Und dann natürlich die Shell (also das Programm, welches die Eingabe verarbeitet und irgendwas daraufhin tut) selbst. Das ganze braucht aber schon ein massives Framework an anderen Sachen, damit das einigermaßen gut funktioniert (zB Speicherverwaltung, Multitasking denn man möchte ja auch Prozesse haben, ein Interface zu den beiden oben erwähnten Treibern).--Bluecode 11:48, 30. Dez. 2010 (CET)

Vielen Dank! Und noch eine Frage: Wie kriege ich die Laufwerksnummer raus?

Was soll eine Laufwerksnummer sein? Und die Laufwerksnummer von welchem Laufwerk?--Bluecode 11:51, 30. Dez. 2010 (CET)

http://www.lowlevel.eu/wiki/Interrupt_13h

Vom Diskettenlaufwerk B:(dies ist ein virtuelles Laufwerk, weil ich kein Laufwerk A: in meinem Computer eingebaut habe und es leider trotzdem noch reserviert ist, falls ich irgendwann mal brauche

Den Interrupt (bzw. alle BIOS-Interrupts) würde ich an deiner Stelle ganz schnell wieder vergessen, die kann man im Protected Mode (also dem 32Bit Modus) bzw. dem Long Mode (dem 64Bit Modus) nicht verwenden. Und du willst ganz ganz ganz sicher einen der beiden Modi für dein OS nutzen ;-) --Bluecode 11:56, 30. Dez. 2010 (CET)

Gut, hab nur aus reinem Interesse gefragt. Achja, ich werde den Long Mode benutzen!

Wenn du neu im OSDev bist, kann ich nur davon abraten. Hier im Wiki (bzw. bei osdev.org) gibt es dazu kein wirkliches Tutorial das für Anfänger gedacht ist. --Bluecode 12:02, 30. Dez. 2010 (CET)

okay...

Achso nochwas, so ein Gespräch kann man im IRC (euirc, Channel #lost) weit besser führen, da sind dann auch ein paar mehr, die gerne ihren Senf dazugeben *g* --Bluecode 12:04, 30. Dez. 2010 (CET)