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]
41
Lowlevel-Coding / A20Gate aktivieren in C
« am: 02. September 2004, 17:50 »
oh mann :-) lesen müßte ich können.
Das erklärt natürlich auch warum das flag nie gesetzt war.
Tut mir leid, daß ich dich damit so lang aufgehalten habe.
Dann kann ich ja jetzt doch meinen kernel weiter machen. Ich dachte schon ich könnte ihn einmotten, weil er nicht gut funktioniert.
Also dann vielen Dank nochmal.
Gruß sov21
42
Lowlevel-Coding / A20Gate aktivieren in C
« am: 01. September 2004, 20:19 »
Danke,
nur wie bekomme ich dieses blöde A20Gate jetzt an, wenn ich nicht mal das erste Flag an habe, bzw nicht ausgelesen wird???
43
Lowlevel-Coding / A20Gate aktivieren in C
« am: 01. September 2004, 16:05 »
Ha, jetzt stürzt nix mehr ab :-)
Hab einfach aus:
mov al, 02h ; Number of sectors to read = 1
das hier gemacht:
mov al, 03h ; Number of sectors to read = 1

somit scheint er mehr sektoren einzulesen und stürzt bei 2kb nicht mehr ab.
Aber das Prob mit dem nicht gesetzten Bit habe ich immer noch :-((
Und wie kann ich denn dynamisch festellen, wieviel Sektoren ich einlesen kann.
Geht das nur, wenn ich es wie bei eurem Fat12 Tut mache, oder gibts da sonst noch ne Möglichkeit??
Und wieviele Sektoren darf ich maximal auf einmal einlesen?
Wie groß ist denn ein Sektor?
Fragen über Fragen :-(
Gruß sov21
44
Lowlevel-Coding / A20Gate aktivieren in C
« am: 01. September 2004, 14:31 »
Ich glaube das ist es!
Das ist ein auszug aus dem Bootloader den ich verwende:
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, 02h             ; Number of sectors to read = 1
        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

Nur den verstehe ich nicht wirklich so gut. Bin ja noch anfänger.
Aber ich glaube, der liest doch nur einen Sektor uas oder??
Kannst du mir sagen, wie man das besser machen kann???
Oder vielleicht einfach noch was zu dem ab ; READ SECTOR-command
Zeilen mir erklären?? Ist aber bestimmt zu viel, oder??
Gruß sov21
45
Lowlevel-Coding / A20Gate aktivieren in C
« am: 01. September 2004, 13:31 »
Ach irgendwie geht bei mir gar nix. Und ich weiß nicht warum.
Ich habe das Gefühl, daß sobald mein Code 2 Kb oder mehr erreicht hat, dann stürzt bochs immer ab und startet neu.

Meine Funktion sieht jetzt so aus:
void A20gate_enable()
{
    //Var deklaration
    unsigned char RetVal;
    int AnzVersuche = 0;

    //A20-Gate aktivieren
    //A1:
    //RetVal = in(0x64);
    //while ((RetVal&0x02) != 0x2)
    //{
    //    RetVal = 0;
    //    RetVal = in(0x64);    //Tastatur-Controller Statusbyte lesen
        //AnzVersuche++;
    //    writeln("In Schleife!");
    //}
    writeln("Teste Mal was");
    writeln("HAllo");
    writeln("Neu hier");

    while (AnzVersuche == 0)
    {
        if ((in(0x64)&0x02) == 0x02)
        {
            writeln("Gesetzt!");
            AnzVersuche = 1;
        }
        else
        {
            writeln("Nicht gesetzt!");
        }
    }
    writeln("Fertig");
   
}

wenn ich die writeln über der schleife weg lasse gehts, und mit ihnen nicht mehr.
Wenn ich sie weg lassen und eine neue Funktion definiere die zu groß wird, dann geht auch nix mehr.
Woran kann das liegen.
Ich verzweifle mit dem blöden code hier noch :-((
Gruß sov21
46
Lowlevel-Coding / A20Gate aktivieren in C
« am: 01. September 2004, 13:23 »
Also ich habe jetzt folgendes:

while (AnzVersuche == 0)
    {
        if ((in(0x64)&0x02) == 0x02)
        {
            writeln("Gesetzt!");
            AnzVersuche = 1;
        }
        else
        {
            writeln("Nicht gesetzt!");
        }
    }
Der schreibt den ganzen Bildschirm voll mit "Nicht gesetzt!", durch die while.
Aber wenn das flag nicht gesetzt ist und das sich auch nicht ändert, dann kann ich doch auch nicht weiter machen oder??
Gruß sov21
47
Lowlevel-Coding / A20Gate aktivieren in C
« am: 31. August 2004, 21:03 »
Mhh hab dennoch das gleiche Prob.
Hab:
RetVal = in(0x64);
RetVal = RetVal&0x02;
writeln(RetVal);

und der gibt schon wieder S aus.
Das dürfte aber nicht sein.
Ist was an meiner Ausgabefunktion falsch??

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;
  }
Gruß sov21
48
Lowlevel-Coding / A20Gate aktivieren in C
« am: 31. August 2004, 20:38 »
Na logisch mann bin ich doof. hab ich das doch total vergessen.
Ich danke dir vielmals.
Jetzt kann ich endlich weiter machen.
Super :-)
Dann bis zur nächsten dummen Frage von mir.
Gruß sov21
49
Lowlevel-Coding / A20Gate aktivieren in C
« am: 31. August 2004, 16:20 »
Hallo,
ich habe schon wieder ein Problem.
Ich habe das A20Gate Tut gelesen und versuche nun es in meinem Kernel über
einen funktionsaufruf zu aktivieren.
Die funktion die ich aufrufe sieht folgendermaßen aus:

void A20gate_enable()
{
    unsigned char RetVal;

    //A20-Gate aktivieren
    //A1:
    RetVal = in(0x64);    //Tastatur-Controller Statusbyte lesen
    if (RetVal == 0x2)
    {
        writeln("War 2!");
    }
    else
    {
        writeln(RetVal);
    }
    writeln(0x2);
}
in ist eine andere Funktion, die aber funktioniert:
unsigned char in(unsigned short _port)
{
  // "=a" (result) means: put AL register in variable result when finished
  // "d" (_port) means: load EDX with _port
  unsigned char result;
  __asm__  ("in %%dx, %%al" : "=a" (result) : "d" (_port));
  return result;
}
Nun zu meinem Problem:
eigentlich möchte ich Retval auf 00000010b testen.
Wie kann ich das machen?? Geht das so wie ich es mit dem Hex 0x2 mache?
Irgendwie sagt der mir aber, das ich als rückgabewert allerdings nicht 0x2 habe.
Dann wollte ich sehen was zurück gegeben wird und habe Retval auf Bildschirm ausgeprintet und bekomme den Buchstaben "S".
Was geschieht da? Wie kann ich den Rückgabewert auf 00000010b testen?
Gruß sov21
50
Lowlevel-Coding / Fragen zu Bootloader Tut
« am: 30. August 2004, 21:00 »
Ah ja die Interruptliste sieht auf den ersten Blick vielversprechend aus.
Danke für alle Antworten und Infos.
Gruß sov21
51
Lowlevel-Coding / Fragen zu Bootloader Tut
« am: 26. August 2004, 21:54 »
Hey vielen Dank.
Jetzt weiß ich ne Menge mehr und denke ich kann jetzt weiter lernen wie das mit dem Os-Programming so läuft.
Nur noch eine Sache. Woher habt ihr erfahren, daß zB der int 13 nötig ist um Sektoren von FDD zu lesen und welche Register vorher welche werte haben müssen , bzw. in welchem was zurück gegeben wird. Wo kann man sowas nach lesen??
Ich meine wenn euer Tut nicht da wäre. Wie habt ihr selbst das rausgefunden?
52
Lowlevel-Coding / Fragen zu Bootloader Tut
« am: 26. August 2004, 20:23 »
Also noch mal zu dem Ausführen von Code.
Mal von ganz Anfang an, ob ich alles verstehe.
Also ich schreibe Assembler Befehle in eine Datei und compiliere das. Dadurch entsteht eine Datei mit Code, den der Prozessor versteht. Opcode?!
Wenn ich jetzt in meinem Bootloader diese Datei an eine ??beliebige?? freie Stelle in   ein Register schreib und dann springe ich von meinem Bootloader in diesen Code und er wird ausgeführt???
Was ist, wenn der Code größer ist als die Register an fassungsvermögen haben??
Wie geht das? Was passiert dann?
Wenn ich eine 1,5 MB große Datei hätte mit Code, wie bringe ich die zur Ausführung??
Vielen Dank für deine vorherige Antwort.
Gruß sov21
53
Lowlevel-Coding / Fragen zu Bootloader Tut
« am: 26. August 2004, 18:40 »
Hallo,
hab gerade das Bootloader Tut gelesen.
Und ein paar Dinge sind mir leider noch unklar, liegt wahrscheinlich daran, daß ich ein totaler noob bin.
Also:
1. zu func_ReadFatEntry:
Wenn der Kernel über mehr als einen Sektor geht, dann wird diese Funtion doch    mehrmals aufgerufen. Dann wird ax immer wieder überschrieben, und deshalb ax immer auf den Stack gepusht?! Meine Farge, wie wird denn nun sicher gestellt, daß alle Sektoren auf dem Stack genau hintereinander liegen un nichts dazwischen, bzw nichts überschrieben wird ??

2. Wenn ich jetzt die Datei vollständig auf dem Stack habe, wie wird denn dann der code der da nun liegt zur Ausführung durch den Prozessor gebracht? Wie geht sowas generell??

Also wie ihr seht hab ich nur echt dumme Fragen.
Hoffe mir kann dennoch jemand weiter helfen.
Gruß sov21
Seiten: 1 2 [3]

Einloggen