Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - sov21

Seiten: 1 [2] 3
21
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 13. May 2005, 16:34 »
Ok, habe Texte und Infos zu Grub gefunden.
Werde mich die nächsten Tage mal damit rumschlagen.
Gruß sov21
22
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 13. May 2005, 16:13 »
Kumpel von mir meint, daß Bochs eventuell anderes Bios hat, bzw. evt. Fehler im Speicherschutz im Protected Mode ausbügelt.
Hab leider selbst nicht soviel Ahnung davon.
War auch kein Vorwurf.
Wie kann man denn Grub verwenden um den Kernel zu laden??
Dann würde ich das mal so probieren.
23
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 13. May 2005, 15:57 »
Was hat man davon, wenns auf Bochs läuft, aber auf PC net??
Dann ist das ganze doch etwas unsinnig oder?
Schließlich will man doch OS für PC und net für Bochs schreiben.
Aber schön, daß ich nicht der einzige bin, bei dem es nicht auf dem PC läuft.
Habe schon an mir gezweifelt.
Wäre wirklich gut, wenn roshl es auch noch mal an eine realen PC testet.
Würde so gerne daran etwas rumbasteln :-)
Gruß sov21
24
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 13. May 2005, 14:17 »
Also von Bochs habe ich nicht viel Ahnung, und hab ihn auch nicht gerade irgendwo rumliegen.
Aber es auf 4 rechnern Probiert überall das selbe Prob.
Selbst wenn es nun in Bochs laufen würde, bringt mir das nix, denn es soll schließlich auf richtigen PCs laufen.
Weiß jemand woran es sonst noch liegen könnte?
Gruß sov21
25
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 12. May 2005, 23:48 »
Hat noch jemand eine Idee??
Würde gerne das ganze zum laufen bekommen, damit ich mal etwas dran rumbasteln kann.
Gruß sov21
26
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 12. May 2005, 21:38 »
Hab ich schon.
Gleiches Prob.
27
tyndur / Bekomme Comm-OS nicht zum booten!
« am: 12. May 2005, 21:02 »
Hallo,
habe wie in der Anleitung die Files von Comm-Os compiliert und gelinkt.
Mit Rawwrite die Boot.bin auf disk kopiert und anschließend Boot.ini in disk kopiert.
Dann noch die kernel.bin reinkopiert.
Jetz hab ich das Laufenlassen wollen. Der rechner fährt seine Bios routinen, aber Nach "Searching for Boot Record from Floppy...OK"
Passiert nix mehr, außer daß ich einen blinkenden Cursor darunter sehe.
Der Bildschirm wurde nicht gelöscht. Ich kann alle Bios Infos noch sehen.
Nun habe ich den Vesa eintrag aus Boot.ini rausgenommen.
Gleiches Ergebnis. Dann habe ich Kernel mit einem von mir ersetz,der mittels ports etwas normalerweise auf den screen printed, jedoch hat sich nix getan.
Bekomme immer das selbe Ergebnis, so als ob er nix machen würde.
Was mache ich falsch??
Gruß sov21
28
Lowlevel-Coding / Os, was macht man wann und wie???
« am: 27. March 2005, 21:25 »
Alles klar.
Vielen Dank für eure Hilfe.
Werde mich dann demnächst bestimmt wegen diesen IDT und PIC usw. mal wieder melden müssen :-)
Gruß sov21
29
Lowlevel-Coding / Os, was macht man wann und wie???
« am: 27. March 2005, 19:40 »
Cool,
das hört sich gut an.
Das mit der Idt gehe ich später an.
Erst möchte ich eine gute Lösung für Loader + Kernel.
Kann man die 16bit Asm auch als 16bit C machen irgendwie, oder geht sowas wie Pm aktivieren nur in asm und nicht über Ports??
30
Lowlevel-Coding / Os, was macht man wann und wie???
« am: 27. March 2005, 17:18 »
Cool, jetzt weiß ich wieder etwas mehr.
Nur, wie ist das, wieso kann ich mir mit dem FAT12, den Rawwrite ersparen, und wie?? Weil den FAT12-fähigen Bootloader muß ich doch auch in den Bootsektor der Diskette bekommen. Brauche ich dafür kein Rawwrite?? Oder wie geht das?
Wenn ich zB den FAT fähigen Bootloader von TJ nehme, ist dann wirklich die Größe des Kernels egal??
Also egal wieviele Sektoren der benötigt??
Wenn ich einen 16 bit kernel und einen 32 bit kernel in C habe, kann ich dann von dem 16bit in den 32er nach dem Übergang in den PM einfach per Funktionsaufruf wechseln? Oder muß ich da irgenwas beachten??
Ich habe schon mal in C eine Datei geschrieben, die den PIC anspricht und am Ende wie in dem Tut hier im Forum die Ints ausschaltet. Aber für den IDT darf ich die doch nicht ausschalten, sondern muß die doch irgendwie umlegen oder so?!
Danke für die Antworten :-)
Gruß sov21
31
Lowlevel-Coding / Os, was macht man wann und wie???
« am: 27. March 2005, 14:08 »
Danke für die Antwort.
Ein paar fragen sind aber leider immernoch offen.
Also das in den PM schalten, kann man nicht im C-Kernel machen??
Wie ist das mit der Reihenfolge mit der IDT und dem PIC??
Für was ist es von Vorteil einen FAT 12 fähigen Bootloader zu haben???
Gruß sov21
32
Lowlevel-Coding / Os, was macht man wann und wie???
« am: 26. March 2005, 00:42 »
Hallo,
ich habe schon etwas rumprobiert mit dem thema Os-progrmming.
Aber immer noch kein Durchblick.
Also meine Frage(n), ob ich das so richtig sehe:

Zu erst schreibt man einen bootloader und befindet sich im 16bit Modus (Realmode). Der Bootloader darf nicht größer als 512 byte sein?!
Dieser läd den Kernel in den Speicher und springt hinein?!
Wenn der Kernel nun in C geproggt ist, ist er dann automatisch 32bit?
Also muß ich vorher in den PM schalten, oder kann ich das in dem C-Kernel selbst machen??
Wie groß darf den dieser Kernel werden?? Kann es da Probs geben, wenn man die ganze zeit Module mit dem Kernel zusammenlinkt und dieser immer weiter wächst?

Wie ist das mit dem FAT 12 - Bootloader? Der läd doch einen kernel aus dem Dateisystem eine Diskette. Nur wie bekomme ich den bootloader in den bootsektor der diskette, ohne das Dateisystem zu zerschießen?
Wenn ich wie im forum vorgeschlagen den Rawwrite nehme, kann man denn dann die diskette in WinXP noch lesen und den Kernel rein kopieren?
Weil wenn das nicht mehr geht, was bringt mir dann das laden des kernels aus dem Dateisystem wenn ich eh Rawrite benötige?!

Ihr seht schon tausend Fragen.
Weiter:
Also wenn ich nun im PM in meinem C-Kernel bin.
Dann muß ich die Interrupts irgendwie umlenken auf die IDT oder so.
Wo muß ich denn die IDT anlegen? Im bootloader vor dem PM oder kann ich das auch im PM in meinem C kernel irgendwie mit einer Funktion oder so anlegen?
Wann muß ich den PIC umproggen? Vor erstellen der IDT und ISR oder danach?
Wie ist das mit dem A20-Gate? Das habe ich zu zeit im C-kernel nach betreten des PM direkt erledigt.

Vielen Dank fürs lesen und ich hoffe auf viele Tipps und Hilfe :-(
Bin etwas verwirrt mit dem ganzen.
Gruß sov21
33
Lowlevel-Coding / Merkwürdiges Problem
« am: 13. September 2004, 23:47 »
@Roshl:
Also meinst du ich sollte den Stack vor vor dem einlesen der Daten von der Disk
initialisieren und den Kernel hinter den Stack legen??
Warum muß man sich um ebp kümmern??
Was passiert wenn ich es nicht mache??

Ich finde es toll, wenn man einen guten Code hat, aber immerhin bin ich noch totaler Anfänger. Habe Os-proggen erst vor 4 Wochen angefangen, und deshalb leider noch nicht so die Ahnung, was man optinieren kann.
Deshalb bin ich auch sehr dankbar, wenn du mir tipps gibst.
Leider kann es dann nur passieren, daß ich dann zur realisierung dieser noch ein paar mal Nachfragen muß.
Meinst du mein Prob könnte wirklich an diesen Dingen liegen??
Gruß sov21
34
Lowlevel-Coding / Merkwürdiges Problem
« am: 13. September 2004, 15:42 »
Die reichen schon aus.
Weil, wenn ich andere Module rausnehme,
und dann writeln in main aktiviere gehts auch nicht.
Und wenn writeln nicht aktiv ist, dann geht alles gut.
Also zu wenig platz für den Kernel hab ich nicht.
Gruß sov21
35
Lowlevel-Coding / Merkwürdiges Problem
« am: 12. September 2004, 22:30 »
Das ist ein großteil des Bootloaders, den ich verwende.
Hier hab ich nur am ende die gdt für das umschalten in den PM nicht mit gepostet.
Bootloader:

[BITS 16]       ; We need 16-bit intructions for Real mode

[ORG 0x7C00]    ; The BIOS loads the boot sector into memory location 0x7C00        


reset_drive:
        mov ah, 0               ; RESET-command
        int 13h                 ; Call interrupt 13h
        or ah, ah               ; Check for error code
        jnz reset_drive         ; Try again if ah != 0

        mov ax, 0
        mov es, ax
        mov bx, 0x1000          ; Destination address = 0000:1000

        mov ah, 02h             ; READ SECTOR-command
        mov al, 17              ; Number of sectors to read = 17
        mov ch, 0               ; Cylinder = 0
        mov cl, 02h             ; Sector = 2
        mov dh, 0               ; Head = 0
        int 13h                 ; Call interrupt 13h
        or ah, ah               ; Check for error code
        jnz reset_drive         ; Try again if ah != 0

        cli                     ; Disable interrupts, we want to be alone

        xor ax, ax
        mov ds, ax              ; Set DS-register to 0 - used by lgdt

        lgdt [gdt_desc]         ; Load the GDT descriptor

        mov eax, cr0            ; Copy the contents of CR0 into EAX
        or eax, 1               ; Set bit 0
        mov cr0, eax            ; Copy the contents of EAX into CR0

        jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe


[BITS 32]                       ; We now need 32-bit instructions
clear_pipe:
        mov ax, 10h             ; Save data segment identifyer
        mov ds, ax              ; Move a valid data segment into the data segment register
        mov ss, ax              ; Move a valid data segment into the stack segment register
        mov esp, 090000h        ; Move the stack pointer to 090000h

        jmp 08h:01000h          ; Jump to section 08h (code), offset 01000h

Danach springe ich in die Main.
Gruß sov21
36
Lowlevel-Coding / Merkwürdiges Problem
« am: 09. September 2004, 15:54 »
Danke für den Vorschlag, aber eigentlich dürfte das nicht mein Momentanes Prob sein, weil in den Unterfunktionen für a20Gate und PIC init kann ich ohne probs auf den VideoMem zugreifen und etwas auf den Screen printen,
nur in main nicht. Wenn ich das da mache stürzt er ab.
Dafür muß es doch einen Grund geben!
Gruß sov21
37
Lowlevel-Coding / Merkwürdiges Problem
« am: 08. September 2004, 16:06 »
Also hier mal meine funktionen:
void clrscr()
{
  unsigned char *vidmem = (unsigned char *)0xB8000;
  const long size = 80*25;
  long loop;

  // Clear visible video memory
  for (loop=0; loop<size; loop++) {
    *vidmem++ = 0;
    *vidmem++ = 0xF;
  }

  // Set cursor position to 0,0
  out(0x3D4, 14);
  out(0x3D5, 0);
  out(0x3D4, 15);
  out(0x3D5, 0);
}

//Print mit newline
void writeln(const char *_message)
{
  unsigned short offset;
  unsigned long i;
  unsigned char *vidmem = (unsigned char *)0xB8000;

  // Read cursor position
  out(0x3D4, 14);
  offset = in(0x3D5) << 8;
  out(0x3D4, 15);
  offset |= in(0x3D5);

  // Start at writing at cursor position
  vidmem += offset*2;

  // Continue until we reach null character
  i = 0;
  while (_message != 0) {
    *vidmem = _message[i++];
    vidmem += 2;
  }

  // Set new cursor position
  //offset += i;
  offset += 80;// - offset;
  out(0x3D5, (unsigned char)(offset));
  out(0x3D4, 14);
  out(0x3D5, (unsigned char)(offset >> 8));
}
Beide sind in Video.c die mit dem kernel gelinkt wird.
Dann noch einen Auszug aus A20gate, wo es ja funktioniert:
void A20gate_enable()
{
    //Var deklaration
    unsigned char RetVal;
    int weiter = 0;

    //A20-Gate aktivieren

    //A1:
    while (weiter == 0)
    {
        if ((in(0x64)&0x02) != 0x02)
        {
            writeln("Lesebefehl an Tastatur-Controller senden...");
            out(0x64, 0xD0);
            weiter = 1;
        }
        else
        {
            writeln("1.Tastatur-Controller nicht bereit, warten...");
        }
    }
    weiter = 0;
Ich weiß echt nicht woran es liegt, außer daß ich noch keine var habe in der ich cursor pos speichere, aber das kanns nicht sein, weil er stürzt ja ab und schreibt nicht in einen nicht sichtbaren Bereich.
Gruß sov21
38
Lowlevel-Coding / Merkwürdiges Problem
« am: 07. September 2004, 20:38 »
Das Problem mit dem clrscr ist jetzt weg, nach dem diePIC umprogrammeirung noch eingebunden habe.
Aber das writeln-Prob ist immer noch da.
Kann es sein, daß wenn man die Funtionen in zu viele Dateien aufspeltet und diese dann linkt, irgendwie eine funktion von einer anderen im Code zuweit weg liegt, so daß sie von dort nicht erreichbar ist??

Weil ich linke wie folgt:
ld -i -e _main -Ttext 0x1000 -o kernel.o main.o video.o ports.o A20Gate.o pic.o
Kann mir jemand helfen?? :-(
Gruß sov21
39
Lowlevel-Coding / Merkwürdiges Problem
« am: 07. September 2004, 19:43 »
Hi,
ich hab ein ganz merkwürdiges Problem an dem ich jetzt 6 std dran sitze und es einfach nicht verstehe:
Dies ist meine main.c:

const char *tutorial3;
const char *Test;
//extern unsigned int EnableA20Gate();

void main()
{
    //Bildschirm löschen
    //clrscr();
    //Begruessung
    //writeln("Wilkommen in Sovs Os");
    //A20Gate aktivieren
    //writeln("Versuche A20Gate zu aktivieren...");
      A20gate_enable();
      //Endlosschleife
      for(;;);
}

const char *tutorial3 = "Sov`s Os in Protected-Mode";
const char *Test = "Dies ist ein Test in Main.c";

Immer wenn ich das Kommentar vor clrscr weg nehme wird der screen geleert, jedoch die Writeln in A20gate_enable nicht mehr angezeigt.
Mit kommentar erscheinen dann die Ausgaben von A20gate.
Wenn ich das Kommentar vor writeln("Wilkommen in Sovs Os"); weg nehme
passiert in bochs folgendes: Panic Device CPU
Message: prefetch: running in bogus memory
Kill simulation und dann stürzt er ab.
Das gleiche passiert, wenn ich die kommentare vor //writeln("Versuche A20Gate zu aktivieren..."); weg nehme.
Aber in der funktion a20gate... habe ich auch ausgaben mit writeln("Text");
und die werde einwandfrei ausgegeben.
Help!!!
Wer weiß was das sein könnte??
Ich habe echt keine Ahnung mehr woran es liegen könnt.
Gruß sov21
40
Lowlevel-Coding / A20Gate aktivieren in C
« am: 02. September 2004, 18:44 »
So A20Gate erfolgreich aktiviert in C ;-)
Wie ist das eigentlich, könnt ihr den Source für eure Homepage gebrauchen?
Weil wenn bedarf ist würde ich ihn posten.
Muß aber nicht sein, wenn ihr ihn nicht braucht, ist es auch kein Prob.
Vielen Dank noch mal für die schnelle Hilfe Roshl.
Gruß sov21
Seiten: 1 [2] 3

Einloggen