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 noVBEsub esi, 3
cmp eax, PMID
jnz findPMbei 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 schreibenPMID 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 0c005ehPMID 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 Dalso 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 blockaufm 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 verwendenich 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, axweil 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.