finde kein PMInfoBlock fuer VESA VBE



  • hallo..

    da jetz meine console fuer mein pmode prograemmle grob fertig ist, hab ich mich an die pmode VESA specifics rangewagt. .
    in den spec. steht drin, dass man erst ein copy vom gesamten BIOS image machen soll und dannach innerhalb dieses BIOS images nach dem PMInfoBlock suchen soll, welches mit der Signatur "PMID" beginnt...
    das bios soll an der adresse 0c0000h beginnen..
    ich bin jetz hingegangen und hab das bios dort gelasssen wo es ist..
    warum sollte man ein copy machen, wenn es schon im ram bereits ist ???

    ok.. zum eigentlichen problem:
    entweder mein eigener code ist falsch, der nach diese signatur suchen soll, oder mein BIOS unterstuetzt kein PMInfoBlock
    (aus der Spez. : if this information block is not found, then the bios does not support this new feature)

    PMID equ 0504D4944h

    mov esi, 0c0000h

    findPM: lodsd
    cmp esi, 0c8000h
    jz noVBE

    sub esi, 3
    cmp eax, PMID
    jnz findPM

    bei mir springt er immer zu noVBE
    ich hab schon mein ganzes ram durchsucht von 0 bis 200000000h
    ich finde kein PMID !

    liegts am bios oder an mir ??
    ich hoffe an mir !

    mfg haMMer



  • Hi.

    Deine PMID-Variable ist falsch. Wenn man das im Speicher ablegen und hintereinander betrachten wuerde, stuende da "DIMP" , anstatt "PMID".
    Wenn du das als DWord ablegen willst, musst du die Reihenfolge der Zeichen umdrehen.
    Du kannst uebrigens auch gleich schreiben

    PMID equ "DIMP" ;man beachte die umgekehrte Zeichenreihenfolge!
    

    , dann sieht das auch nicht mehr so kryptisch aus.

    Du solltest uebrigens eine Kopie vom BIOS Immage in einen beschreibbaren Bereich erstellen, da du Aenderungen im InfoBlock vornehmen musst.

    BTW: Grafikkarten, die vor 1998 hergestellt wurden, haben wohl offensichtlich keine VBE3.0-Unterstuetzung. Damit duerfte es schon schwieriger werden im PMode umzugehen. Eine Unterstuetzung dieser Karten waere auf jeden Fall anzuraten, wenn du dein "Programm" veroeffentlichen willst. Einige dieser alten Karten sind tatsaechlich noch im Einsatz. 😉
    [edit]Im Code da oben stehen natuerlich am Anfang und Ende des Strings ". Werden anscheinend faelschlicherweise als "und' angezeigt... 🙄 [/edit]



  • @Nobuo T
    habe hier zwei PCs mit einmal ATI 9500 und einmal ATI 9600 Pro ... beide haben leider nur Vesa 2.0 ... weiß ja net ob dir die info helfen kann ... oder so.

    Gruß KC



  • also ein "DIMP" finde ich nirgends..
    aber ein "PMID" an der stelle 0c005eh

    PMID equ "PMID"

    cmp eax, PMID

    in der struct is die signatur so definiert:

    dd "PMID"
    ..
    ..

    im speicher mueste es so stehen:

    0c005e P
    M
    I
    0c0061 D

    also entweder ich schreibe "PMID" ins register oder DIMP als zahl

    jetz probier ich noch die Checksum rauszubekommen, ob die 0 is

    das problem von gestern war, dass ich das image immer im falschen verzeichnis abgespeichert hab und er damit immer das alte genommen hat ...
    *schnell wegrenn*



  • @KC25m: naja in dem rechner wo ich den code probiere habe ich ne geforce2 mx

    im hauptrechner allerdings ne ati radeon 9600 pro

    hmmmmmmm...



  • hammer_ schrieb:

    also ein "DIMP" finde ich nirgends..

    Natuerlich nicht. Wieso auch... 😕

    hammer_ schrieb:

    aber ein "PMID" an der stelle 0c005eh

    aha, bei mir steht's bei C00C0 => egal 😉

    hammer_ schrieb:

    in der struct is die signatur so definiert:

    dd "PMID"
    ..
    ..

    Ich habe es nochmal ueberprueft:
    NASM und TASM handeln das unterschiedlich.
    Beim NASM kommt's mit dd "PMID" hin, beim TASM muesste es dd "DIMP" heissen.

    KC25m schrieb:

    habe hier zwei PCs mit einmal ATI 9500 und einmal ATI 9600 Pro ... beide haben leider nur Vesa 2.0 ...

    Bestaerkt mich nur mal wieder in meinem Glauben, dass ATI-Produkte einfach Schrott sind. 😉



  • also da scheint was dran zu sein
    aufm rechner mit der gforce gehts, also checksum is 0 und er findet den block

    aufm notebook mit ner ati findet er nix..

    warum sollte vbe 3.0 zu vbe 2.0 schon bei der detection anders sein ??
    was spricht dagegen vbe 2.0 zu verwenden ?
    gibts da die specifics ? auch pmode support ?
    hab bis jetz noch net gegoogelt ...

    hab was von VBE/AF gelsesen, aber das sind anscheinend so fertige hardcore treiber
    mit krassem code.. ich verwende nichts, wo ich den code nicht verstehe..
    deshalb werde ich aus prinzip das nicht verwenden

    ich bleibe bei standard vbe oder gar nix

    mfg
    haMMer



  • VBE2.0 hat keinen PM Info-Block, so einfach ist das.
    Der PM-Support ist in der 2er Version noch lange nicht so weit ausgebaut, wie bei 3.
    Bei Version 2.0 kannst du ueber Funktion 0Ah Infos ueber den ProtectedMode-Code holen und mit Funktion 02h den linearen Framebuffer einschalten etc.
    Steht auch alles in den VBE3.0 Docs drin.
    Schau dir einfach im Appendix mal die Unterschiede zwischen den VESA-Implementationen an.



  • nochmal kurz ne frage..

    wenn ich jetz den code ausm PMInitialize ausfuehre
    also die initialisierungsfunktion, das is ja nen far call..
    dann muss ich ja den cs selector vorher auf den bios selector den ich neu erstellt hab setzen oder ?
    kann ich das einfach so machen ?

    wuerde dann das hier gehen ?
    call dword cs:eax
    sofern in eax der offset aus dem block steht ?

    muss ich danach nich cs wieder auf 8 zuruecksetzen, also der kernel code selector
    mov ax, 8
    mov cs, ax

    weil sonst verwendet er ja den selector vom bios weiter ..

    mfg haMMer



  • cs kann nur bei einem FAR jmp, FAR call, ret oder interrupt jeglicher Art neu gesetzt werden.
    Von daher brauchst du dir keine Gedanken zu machen, wie du CS vor/nach dem Aufruf des BIOS-Code zu setzen hast. 😉


Anmelden zum Antworten