Speicherbereich nach Hardware abscannen ???



  • Hallo,
    es heißt ja immer, man muss den Speicherbereich im Protected-Mode nach der Hardware abscannen? Wie geht das? Sind das die in der GDT angegebenen Ifo-Blöcke, nach denen gescannt wird? Und wo bekommt man eine große Anzahl dieser Blöcke her, wenn es so ist? Oder wie macht man sich die selber, denn woher soll ich wissen, wie so ein Diskriptor für zum Beispiel dem HDD-Controller aussehen muss? Und wie wird eigentlich ein CD-Rom/DVD-Rom Laufwerk behandelt? Wie eine Festplatte oder doh anders? Danke schonmla für eure Antworten. 😉



  • Hi.

    Also ganz ehrlich - Das einzige was mir zu deinen Fragen erstmal einfaellt ist, ist: Haeh??! 😕

    Also mal alles der Reihe nach:

    sevobal schrieb:

    es heißt ja immer, man muss den Speicherbereich im Protected-Mode nach der Hardware abscannen?

    Ist mir neu, dass es das immer heisst. Woher hast du das denn und was ist ueberhaupt mit "abscannen" gemeint?

    sevobal schrieb:

    Sind das die in der GDT angegebenen Ifo-Blöcke, nach denen gescannt wird?

    Was bitte sind "I(n?)fo-Bloecke"?

    sevobal schrieb:

    Oder wie macht man sich die selber, denn woher soll ich wissen, wie so ein Diskriptor für zum Beispiel dem HDD-Controller aussehen muss?

    Ein HDD-Controller braucht idR. keinen eigenen Deskriptor.

    sevobal schrieb:

    Und wie wird eigentlich ein CD-Rom/DVD-Rom Laufwerk behandelt? Wie eine Festplatte oder doh anders?

    AFAIK funktioniert das ein bisschen anders. Wie das mit dem ATAPI funktioniert steht aber auch bei den OSDev-Links in den FAQ.



  • Hi,
    naja das mit dem abscannen ist so gemeint, dass man innerhalb des Arbeitsspeicher nach der Haardware suchen soll. Wie das geth weiß ich nicht, deshalb frage ich ja. Sollte das falschs ein, vergib mir. Du kannst mich auch gerne aufklären wie das geht. Konkret breuchte ich Informationen, wie ich z.b. die Adresse der Vesa-Schnitstelle herausbekomme und mit ihr im Protected-Mode arbeite. Und wie finide ich die Adressen der anderen Hardware im Protected-Mode heraus? Ich habe mal gelesen in der VBE3 Dokumentation, dass man das wie mit Vesa wie folgt macht: (nur ein Beispiel zum setzen der auflösung)

    mov ah,4Fh
    mov al,02h
    mov bx,101h
    

    und nun anstatt

    int 10h
    

    folgendes:

    ES:DI ;Real Mode pointer to buffer
    

    und genau mit der letzten zeile kann ich nichts anfangen. Was ist damit gemeint, und wie würde so eine anweisung nun aussehen? Allerdings muss auch die letzte Zeile nicht stimmen, ich würde halt nur gerne wisssen, wie ich das realisiere. Danke dir schonmal! 😃



  • sevobal schrieb:

    naja das mit dem abscannen ist so gemeint, dass man innerhalb des Arbeitsspeicher nach der Haardware suchen soll. Wie das geth weiß ich nicht, deshalb frage ich ja. Sollte das falschs ein, vergib mir.

    Dir sei vergeben. 😃
    Durch reines Rumsuchen im Arbeitsspeicher kannst du hoechstens im BIOS-Datenbereich (00400h) ein bisschen was ueber vorhandene Hardware herausfinden.

    sevobal schrieb:

    Du kannst mich auch gerne aufklären wie das geht. Konkret breuchte ich Informationen, wie ich z.b. die Adresse der Vesa-Schnitstelle herausbekomme und mit ihr im Protected-Mode arbeite. Und wie finide ich die Adressen der anderen Hardware im Protected-Mode heraus?

    Vielleicht solltest du als erstes mal zwischen Softwareinterfaces und echter Hardware unterscheiden. VBE (VESA BIOS Extension) ist naemlich keine Hardware, sondern ein Standard zur Implementierung eines Treiberinterfaces fuer Grafikkarten. Praktisch handelt es sich dabei also um ein TSR-Programm (Software 😉 ), das entweder im BIOS der Graka liegt oder vom Betriebssystem nachgeladen werden kann.
    Die Arbeit mit der VBE und sonstiger Hardware sind also zwei verschiedene paar Schuhe.

    Wie du an die Resourcen von Hardware rankommst, haengt davon ab, an welchem BUS sie haengt. ISA hat PnP - ansonsten prueft man einfach bestimmte I/O-Ports auf fuer die Hardware typische Werte ab.
    Bei PCI gibt's einen PCI-Controller in der Southbridge, von dem man die Resourcen der eingebauten Hardware auslesen kann. Alle angesprochenen Methoden sind jede fuer sich schon ziemlich umfangreich, deshalb kann ich das alles hier nicht erklaeren - bitte dann nochmal zu entsprechenden Themen gezielt in einem eigenen Thread Fragen stellen.

    sevobal schrieb:

    Ich habe mal gelesen in der VBE3 Dokumentation, dass man das wie mit Vesa wie folgt macht[...]

    Die Adresse des VESA Funktionsinterpreters steht im PM-Infoblock und wie du die Adresse des PM-Infoblocks findest und wie der aufgebaut ist, steht in den VBE3.0-Spezifikationen ziemlich weit oben. Da steht auch, dass die Funktionen als FAR-Call aufgerufen werden sollen. Sinnvollerweise wuerde man sich dafuer das Offset der Funktion und das Segment/Selector, in dem das kopierte BIOS-Image liegt in einen FAR-Pointer packen, und ueber diesen die VBE-Calls machen. Was dann im PM auf diese Weise funktioniert und was nicht, steht da uebrigens auch noch. 😉
    Dazu sollte man vielleicht aber noch sagen, dass es diesen PM-Block nur bei VBE3-kompatiblen VBE-Implementationen gibt. Allerdings unterstuetzen nichtmal heute alle Grakas VBE3.0 (vor allem aktuelle ATI-Grakas haben alle auch heute nur VBE2.0), von daher solltest du dich vielleicht zunaechst darauf beschraenken, dir anzuschauen, wie das mit dem linearen FrameBuffer funktioniert - ansonsten musst du halt fuer VESA-Funktionsaufrufe in den RM oder V86 umschalten und dann normal ueber int 10h gehen.



  • okay, damit hast du mir geholfen. Nur eine Frage bleibt noch, wie geht das jetzt mit der hardware? habe mal was von dem IN und dem OUT Befehl gehört. Weißt du wie du funktionieren? danke!



  • Vielleicht solltest du dir mal eine Befehlsreferenz suchen...

    in/out ermoglichen den Zugriff auf Hardware I/O-Ports. Syntax:
    in al/ax/eax, Port - liest Daten von angegebenem Hardware-Port.
    out Port, al/ax/eax - schreibt Daten in angegebenen Hardware-Port.

    Ports > 255 (FFh) koennen nur ueber dx adressiert werden.
    Bsp.:

    mov    dx, 0226h
    mov    al, 01h
    out    dx, al
    ...
    in     al, 60h
    

Anmelden zum Antworten