Frage zu VESA Videomodus 1024x768x4



  • Hallo und Guten Abend,

    ich habe nun einige Zeit in den 16 Farbmodi der VGA/SVGA Karte programmiert.
    Die beiden Modi 640x480 und 800x600 passen ja noch komplett in das Segment 0A000h:0000h

    Nun habe ich mal den VESA Modus 104h (1024x768) versucht und komme nicht weiter.
    Wenn ich den Videospeicher ab 0A000h 65535 mal 256 schreibe (AL = 11111111)
    werden nur die obersten 200 Zeilen gefüllt. Ich weiß das mein eingeblendeter Speicher nicht ausreicht für den gesamten Bildschirm, aber es müsste doch wesentlich mehr als zwei Drittel eingefärbt werden oder nicht?

    Ich habe mir auch die Info's aus der Funktion 01 geholt. Die Breite ist 128 Byte (8x128 = 1024) und die Höhe ist 768. Das passt also alles.
    Wenn ich 128 bytes schreiben würde, müsste genau die oberste Zeile weiß sein.. es sind aber nur die ersten 30 byte weiß.

    Die Speicheradressierung soll genau wie in den anderen 16 Farbmodi funktionieren.
    Weiß jemand woran das liegen könnte und was ich eventuell beachten muss?

    Gruß, Nicky



  • Noch nie ausprobiert, aber 16 Farben (Modus 104h) sollten 4 bit benötigen, 2 Pixel also 1 Byte, also solltest du fast 128 Zeilen beschreiben können.



  • Hallo,

    in den erstgenannten Modi belegen 8 Punkte genau ein Byte, da über 4 Bitplanes die Farben verschlüsselt werden.

    Wie schon gesagt ist im VGA Buch geschrieben das diese Vorgehensweise bei alles 16 Farbmodi vorhanden ist...

    Nicky



  • supernicky schrieb:

    Hallo und Guten Abend,

    ich habe nun einige Zeit in den 16 Farbmodi der VGA/SVGA Karte programmiert.
    Die beiden Modi 640x480 und 800x600 passen ja noch komplett in das Segment 0A000h:0000h

    Nun habe ich mal den VESA Modus 104h (1024x768) versucht und komme nicht weiter.
    Wenn ich den Videospeicher ab 0A000h 65535 mal 256 schreibe (AL = 11111111)
    werden nur die obersten 200 Zeilen gefüllt. Ich weiß das mein eingeblendeter Speicher nicht ausreicht für den gesamten Bildschirm, aber es müsste doch wesentlich mehr als zwei Drittel eingefärbt werden oder nicht?

    Ich habe mir auch die Info's aus der Funktion 01 geholt. Die Breite ist 128 Byte (8x128 = 1024) und die Höhe ist 768. Das passt also alles.
    Wenn ich 128 bytes schreiben würde, müsste genau die oberste Zeile weiß sein.. es sind aber nur die ersten 30 byte weiß.

    Die Breite hast du aus Modeinfo-Buffer+10h, oder aus Modeinfo-Buffer+12h?

    Die Speicheradressierung soll genau wie in den anderen 16 Farbmodi funktionieren.
    Weiß jemand woran das liegen könnte und was ich eventuell beachten muss?

    Gruß, Nicky

    Hast du auch den Memory Model Type Modeinfo-Buffer+1Bh überprüft?

    (Table 00082)
    Values for VESA SuperVGA memory model type:
    00h text
    01h CGA graphics
    02h HGC graphics
    03h 16-color (EGA) graphics
    04h packed pixel graphics
    05h "sequ 256" (non-chain 4) graphics
    06h direct color (HiColor, 24-bit color)
    07h YUV (luminance-chrominance, also called YIQ)
    08h-0Fh reserved for VESA
    10h-FFh OEM memory models

    Hast du einen Monochrom Mode erwischt?

    Bitfields for VESA SuperVGA mode attributes:
    Bit(s) Description (Table 00080)
    0 mode supported
    1 optional information available
    2 BIOS output supported
    3 set if color, clear if monochrome
    4 set if graphics mode, clear if text mode
    ---VBE v2.0 ---
    5 mode is not VGA-compatible
    6 bank-switched mode not supported
    7 linear framebuffer mode supported
    8 ???
    9 (VBE/AF v1.0P) application must call EnableDirectAccess before calling
    bank-switching functions
    SeeAlso: #00079

    Dir ist bekannt das mit einem anderen VBE2-BIOS die Modenummer und Auflösung variiren kann
    und man eigentlich die gewünschte VBE-Modenummer im Vesa-BIOS der betreffenden VBE2-Karte
    über die dort vorhandene Modeliste sucht, in den man über alle vorhandenen Nummern deren Mode-Informationen abfragt,
    bis man den gewünschten Mode mit seiner Nummer gefunden hat?

    Gibt es einen Grund dafür einen 4 Bit-Mode zu verwenden?

    Dirk



  • Hallo Dirk,

    Das MemoryModel hab ich noch nicht abgefragt...mache ich heute abend mal.

    Warum ich den 16-Farbmodus gewählt habe?
    Bei einer Auflösung von 1024x768x4 habe ich "nur" mit einer Speicherbankumschaltung zu tun (wenn es so geht wie glaube), was auch recht schnell gehen sollte..

    Ich habe auch die 256, 32k und 64M Farbmodi versucht... aber mit einem 6KByte Speicherfenster bin ich mehr mit umschalten beschäftigt als mit allem anderen.

    Ich weiß nicht wie man mehr Speicher einblenden kann.. dann könnte ich auch im PMode arbeiten... den Interrupt für den Grafikmodus könnte ich ja noch im RM setzen..

    Ich komme mit den 16 Farbmodi sehr gut zurecht, auch was die Register betrifft.

    Gruß, Nicky



  • Hallo zusammen, Hallo Dirk,

    ich hab es nun geschafft über die VESA Bios Funktionen alle Modi mit ihren Eigenschaften in eine Datei zu schreiben... (wusste garnicht das es so viele gibt)

    hier erstmal der Auszug:

    Modus 260 (104h)
    Granularitaet: 64
    ByteproLinie:128Byte pro Linie: 128 Groesse des Fensters: 64
    StartsegmentFenster1:40960Startsegment Fenster 1: 40960 Fensterbreite: 1024
    Fensterhoehe:768Fensterhoehe: 768 Anzahl Bitfelder: 4
    BitsproPixel:4Bits pro Pixel: 4 Bankgroesse: 0
    AnzahlderBaenke:1Anzahl der Baenke: 1 Speichermodeltype: 3

    Mit dem Modus scheint wohl alles richtig zu sein... Vielleicht hab ich auch nur einen Programmfehler drin 🙂 währe nicht das erste mal...

    Weiß vielleicht jemand wie ich im PMode auf den gesamten Speicher zugreifen kann?

    Gruß, Nicky



  • $Bits pro Pixel: 4

    Naja, dann hat ja mein Tipp doch gepasst? 🙂



  • Thuruk schrieb:

    $Bits pro Pixel: 4

    Naja, dann hat ja mein Tipp doch gepasst? 🙂

    Hallo Thuruk,

    dein Tipp paßt zu 50%.
    4 Bit pro Pixel aber 8 Pixel pro Byte, da 4 Bitplanes hintereinander liegen.

    Nicky



  • supernicky schrieb:

    Hallo zusammen, Hallo Dirk,

    ich hab es nun geschafft über die VESA Bios Funktionen alle Modi mit ihren Eigenschaften in eine Datei zu schreiben...

    Prima. Von welcher Karte ist es?

    (wusste garnicht das es so viele gibt)

    Je nach Bios variert die Anzahl der Modi.

    ATI 9800 PRO VESA Modi 128 MB
    -------------------------------------
     4    8   15  16  24  32   Matrix
    -------------------------------------
    109                       132 x 25
    10A                       132 x 43
    130                       132 x 44
         182 10D 10E 10F 120  320 x 200
         192 193 194 195 196  320 x 240
         1A2 1A3 1A4 1A5 1A6  400 x 300
         1B2 1B3 1B4 1B5 1B6  512 x 384
         1C2 1C3 1C4 1C5 1C6  640 x 350
         100 183 184 185 186  640 x 400
         101 110 111 112 121  640 x 480
    102  103 113 114 115 122  800 x 600
    104  105 106 107 108 123 1024 x 768
         107 119 11A 11B 124 1280 x 1024
    
       ATI X800 PRO VESA MODI 256 MB
    -------------------------------------
     4    8   15  16  24  32   Matrix
    -------------------------------------
    109                       132 x 25
    10A                       132 x 34
    130                       132 x 44
                 10D     10F  320 x 200
         193     194     196  320 x 240
         1B3     1B4     1B6  512 x 384
         1C3     1C4     1C6  640 x 350
         100     184     186  640 x 400
         101     110     112  640 x 480
         133     134     136  720 x 400
         103     113     115  800 x 600
         105     116     118 1024 x 768
         153     154     156 1152 x 864
         107     119     11B 1280 x 1024
         143     144     146 1400 x 1050
         173     174     176 1600 x 1200
         1D3     1D4     1D6 1856 x 1392
         1E3     1E4     1E6 1920 x 1440
    
     NVIDIA GF 4 Ti4200 VESA Modi 64 MB
    -------------------------------------
     4    8   15  16  24  32   Matrix
    -------------------------------------
    108                        80 x 60
    109                       132 x 25
    10A                       132 x 43
    10B                       132 x 50
    10C                       132 x 60
         130     10E     10F  320 x 200
         134     135     136  320 x 240
         131     132     133  320 x 400
         100     13D     13E  640 x 400
         101     111     112  640 x 480
    102  103     114     115  800 x 600
    104  105     117     118 1024 x 768
    106  107     11A         1280 x 1024
         147     148         1400 x 1050
         145     146         1600 x 1200
    
     NVIDIA GF 6800 GT VESA Modi 256 MB
    -------------------------------------
     4    8   15  16  24  32   Matrix
    -------------------------------------
         130     10E     10F  320 x 200
         134     135     136  320 x 240
         131     132     133  320 x 400
         100     13D     13E  640 x 400
         101     111     112  640 x 480
    102  103     114     115  800 x 600
    104  105     117     118 1024 x 768
    106  107     11A     11B 1280 x 1024
         145     146         1600 x 1200
         147     148         1400 x 1050
                         152 2048 x 1536
    
    Vesamodi Colorfull GTX295(alle Werte hex)
    -----------------------------------------
    0100 X=0280 Y=0190 8Bit
    0101 X=0280 Y=01E0 8Bit
    0102 X=0320 Y=0258 4Bit *
    0103 X=0320 Y=0258 8Bit
    0104 X=0400 Y=0300 4Bit *
    0105 X=0400 Y=0300 8Bit
    0106 X=0500 Y=0400 4Bit *
    0107 X=0500 Y=0400 8Bit
    010E X=0140 Y=00C8 10Bit
    010F X=0140 Y=00C8 20Bit
    0111 X=0280 Y=01E0 10Bit
    0112 X=0280 Y=01E0 20Bit
    0114 X=0320 Y=0258 10Bit
    0115 X=0320 Y=0258 20Bit
    0117 X=0400 Y=0300 10Bit
    0118 X=0400 Y=0300 20Bit
    011A X=0500 Y=0400 10Bit
    011B X=0500 Y=0400 20Bit
    0130 X=0140 Y=00C8 8Bit
    0131 X=0140 Y=0190 8Bit
    0132 X=0140 Y=0190 10Bit
    0133 X=0140 Y=0190 20Bit
    0134 X=0140 Y=00F0 8Bit
    0135 X=0140 Y=00F0 10Bit
    0136 X=0140 Y=00F0 20Bit
    013D X=0280 Y=0190 10Bit
    013E X=0280 Y=0190 20Bit
    0145 X=0640 Y=04B0 8Bit
    0146 X=0640 Y=04B0 10Bit
    014A X=0640 Y=04B0 20Bit
    0160 X=0500 Y=0320 8Bit
    0161 X=0500 Y=0320 20Bit
    0162 X=0300 Y=01E0 8Bit
    017B X=0500 Y=02D0 20Bit
    017C X=0780 Y=04B0 8Bit
    017D X=0780 Y=04B0 20Bit
    

    hier erstmal der Auszug:

    Modus 260 (104h)
    Granularitaet: 64
    ByteproLinie:128Byte pro Linie: 128 Groesse des Fensters: 64
    StartsegmentFenster1:40960Startsegment Fenster 1: 40960 Fensterbreite: 1024
    Fensterhoehe:768Fensterhoehe: 768 Anzahl Bitfelder: 4
    BitsproPixel:4Bits pro Pixel: 4 Bankgroesse: 0
    AnzahlderBaenke:1Anzahl der Baenke: 1 Speichermodeltype: 3

    Mit dem Modus scheint wohl alles richtig zu sein... Vielleicht hab ich auch nur einen Programmfehler drin 🙂 währe nicht das erste mal...

    Weiß vielleicht jemand wie ich im PMode auf den gesamten Speicher zugreifen kann?

    Gruß, Nicky

    Damit man auf den gesamten Speicher zugreifen kann, dafür muss die Segmentlänge erweitert werden.

    Beispiel für ein Segment-Eintrag im GDT/LDT:

    DW 0FFFFh ; Segmentlänge   Bits: 0-15
           DW 0      ; Seg.Adresse    Bits: 0-15
           DB 0      ; Seg.Adresse    Bits:16-23
           DB 92h    ; Zugriffsrechte
           DB 0FFh   ; Seg.Länge Bits:16-19 im Bit0-3//Bit7:1=4KByte/0=1Byte
           DB 0FFh   ; Seg.Adresse    Bits:24-31
    

    Im PM läd man dafür ein Segmentregister mit dem entsprechenden Selektor und die 21. Adressleitung muss dann ebenfalls noch angeschaltet werden.
    Es würde wohl etwas den Rahmen dieses Threads sprengen alles darüber hier zu erklären.

    ...

    Anstelle des PM könnte man auch den 16 Bit Unreal Mode/Big Realmode verwenden, um damit auch weiterhin alle DOS/BIOS-Funktionen verwenden zu können.
    Daneben kann man ohne das lästige Bankumschalten auf den linearen Framebuffer zugreifen.
    Eigentlich sollten nach dem Zurückschalten in den Realmode alle Segmentregister/Schattenegister wieder auf 64 KB begrenzt sein.
    Doch beginnend vom Intel 80386, 80486, Pentium, Pentium MMX, Pentium 2, 3, 4, Core2quad und auch diverse Modelle von AMD konnte ich noch keine einzige CPU finden,
    die sich laut Spezifikation so verhält (sind wohl sehr viele der handelsüblichen CPUs mit diesem Bug ausgestattet. :p)

    Ein Beispiel dafür: http://www.alice-dsl.net/freecracmaps/Tool/Neutrip.zip
    (Mindest-Anforderung für dieses Demo: Pentium MMX, Grafikkarte mit VBE3-Bios, CRT-Monitor mit 96khz und 100hz Refreshrate in 1024x768x32)

    Dirk



  • Hallo Dirk,

    ich habe eine ATI 3870X2.
    Was mich nur wundert ist, das die unterstützten Textmodi nicht angezeigt werden.

    Das mit dem P-Mode habe ich schon verstanden (habe fleißig bei Herr Henkes gelesen). Darum bin ich auch auf NASM umgestiegen. Jedoch selbst wenn ich im P-Mode währe, blendet die GraKa "nur" 64Kb in den RAM ein. Im Vesa-Bios ist mir keine Funktion bekannt die mehr Speicher einblendet.

    Das mit dem UnrealMode klingt gut. Aber erstmal eins fertig bekommen.

    Gruß und Danke, Nicky



  • supernicky schrieb:

    Hallo Dirk,

    ich habe eine ATI 3870X2.

    Aha, ich vermute diese Karte hat auch ein VBE3-Bios.

    Was mich nur wundert ist, das die unterstützten Textmodi nicht angezeigt werden.

    Das mit dem P-Mode habe ich schon verstanden (habe fleißig bei Herr Henkes gelesen). Darum bin ich auch auf NASM umgestiegen. Jedoch selbst wenn ich im P-Mode währe, blendet die GraKa "nur" 64Kb in den RAM ein. Im Vesa-Bios ist mir keine Funktion bekannt die mehr Speicher einblendet.

    Im ModeAttributes field(Modeinfo-Buffer) Bit D7 = Linear frame buffer mode is available(0 = No, 1 = Yes) kann man erstmal schauen, ob für den gewünschten Mode ein LFB-Zugriff möglich ist.

    The ModeAttributes field is defined as follows:
    D0 = Mode supported by hardware configuration
    0 = Mode not supported in hardware
    1 = Mode supported in hardware
    D1 = 1 (Reserved)
    D2 = TTY Output functions supported by BIOS
    0 = TTY Output functions not supported by BIOS
    1 = TTY Output functions supported by BIOS
    D3 = Monochrome/color mode (see note below)
    0 = Monochrome mode
    1 = Color mode
    D4 = Mode type
    0 = Text mode
    1 = Graphics mode
    D5 = VGA compatible mode
    0 = Yes
    1 = No
    D6 = VGA compatible windowed memory mode is available
    0 = Yes
    1 = No
    D7 = Linear frame buffer mode is available
    0 = No
    1 = Yes
    D8 = Double scan mode is available
    0 = No
    1 = Yes
    D9 = Interlaced mode is available
    0 = No
    1 = Yes
    D10 = Hardware triple buffering support
    0 = No
    1 = Yes
    D11 = Hardware stereoscopic display support
    0 = No
    1 = Yes
    D12 = Dual display start address support
    0 = No
    1 = Yes
    D13-D15 = Reserved
    

    Wenn ja, dann kann man die Startadresse des LFBs(Modeinfo-Buffer+28h) auf ungleich Null überprüfen und wenn ungleich Null, dann können wir über diese Adresse den LFB beschreiben.

    ; Mandatory information for VBE 2.0 and above
    PhysBasePtr dd ? ; physical address for flat memory frame buffer
    

    Das mit dem UnrealMode klingt gut. Aber erstmal eins fertig bekommen.

    Gruß und Danke, Nicky

    In meinem Beispiel: http://www.alice-dsl.net/freecracmaps/Tool/Neutrip.zip ist eine Subroutine(mit dem Namen "ESEG") enthalten welche vom RM in den 16 Bit Unrealmode schaltet
    und im Hauptprogramm ist im Abschnitt mit der Überschrift "Switch to the 16 Bit unrealmode" es zu sehen, wie man diese Subroutine aufrufen kann.

    Lediglich diese beiden folgenden Befehle (im Hauptprogramm) kann man dafür weglassen, da sie mit dem Umschalten in den Unrealmode eigentlich nichts zu tun haben und dafür auch nicht nötig sind:

    mov      al, 2               ; Dissable IRQ 1
              out      IRQs_Port, al
    ; (Wird für die Laufzeit zum Pollen der Tastatur ausgeschaltet.)
    

    ...

    Für den Unrealmode erweitere ich nur DS, um darüber unseren Datenbereich zu erreichen und ebenfalls alle Adressen oberhalb des ersten Megabytes.
    Beispiel:

    mov ebx, LFB_ADRESSE
    xor eax, eax
    mov ax, DATENSEGMENT
    mov ds, ax
    shl eax, 4
    sub ebx, eax
    
    mov si, OFFSET PIXEL
    mov eax, [si]       ; DS:SI   <- Datensegment
    mov [ebx], eax      ; DS:EBX  -> LFB
    

    Dirk



  • Hallo,

    habe nun jeden Modus auf das 7. Bit testen lassen.
    Das ist bei allen Videomodi gesetzt.
    Wenn ich zum Anfang der Struktur 28h rechnen und das Word anzeigen lasse,
    erhalte ich bei allen : 4.160.749.568 das ist die Speicherstelle mit exakt
    127MB vor dem Ende des 32Bit Adressraumes.

    Kann das sein?

    Bei mir in den Büchern sind nur die ersten 39 Byte der Struktur beschrieben, der Rest ist als Buffer hinterlegt für "spätere" Versionen. Auch habe ich nur VBE 2.0.

    vidinfo:
    modeattrib dw 0
    win1attrib db 0		;+2
    win2attrib db 0		;+3
    granularity dw 0	;+4
    winsize dw 0		;+6
    win1seg dw 0		;+8
    win2seg dw 0		;+10
    pointer dd 0		;+12
    byteperline dw 0	;+16
    width dw 0		;+18
    height dw 0		;+20
    wofcbox db 0		;+22
    hofcbox db 0		;+23
    memplanes db 0	;+24
    bpp db 0			;+25
    banks db 0		;+26
    memmodeltype db 0	;+27
    banksize db 0		;+28
    impages db 0		;+29
    res1 db 0			;+30
    rms db 0			;+31
    rmp db 0			;+32
    gms db 0			;+33
    gmp db 0			;+34
    bms db 0			;+35
    bmp db 0			;+36
    resms db 0		;+37
    resmp db 0		;+38
    dcmode db 0		;+39
    res2 times 216 db 0	;Puffer auffüllen bis auf 256Byte
    

    Eine Sache hab ich noch bemerkt. Ich habe 3 Videomodi mit folgenden Eigenschaften:

    Modus            281
    Granularitaet:           65535
    $Byte pro Linie:          32774
    $Groesse des Fensters:      65535
    $Startsegment Fenster 1:      65535
    $Fensterbreite:      32770
    $Fensterhoehe:      36866
    $Anzahl Bitfelder:         16
    $Bits pro Pixel:          1
    $Bankgroesse:          0
    $Anzahl der Baenke:          8
    $Speichermodeltype:          1
    $LFB ja: 0
    $
    

    Davon habe ich wie gesagt drei. Und bei diesen dreien ist das Bit 7 im ModeAttrib jedoch nicht gesetzt.

    Für Info's bin ich sehr dankbar.

    Gruß, Nicky



  • supernicky schrieb:

    Hallo,

    habe nun jeden Modus auf das 7. Bit testen lassen.
    Das ist bei allen Videomodi gesetzt.
    Wenn ich zum Anfang der Struktur 28h rechnen und das Word anzeigen lasse,
    erhalte ich bei allen : 4.160.749.568 das ist die Speicherstelle mit exakt
    127MB vor dem Ende des 32Bit Adressraumes.

    Kann das sein?

    Im Modinfobuffer+28h sollte eine lineare 32 Bit-Adresse enthalten sein und nicht nur ein WORD, sondern ein DWORD. Ich vermute das du es nur hier falsch geschrieben hast.

    Bei mir in den Büchern sind nur die ersten 39 Byte der Struktur beschrieben, der Rest ist als Buffer hinterlegt für "spätere" Versionen.

    Im vbe3.pdf sind noch weitere Details aufgelistet.
    Das vbe3.pdf kann man sich kostenlos von http://www.vesa.org/ aus dem Public-Bereich herunterladen. (Registrieren und/oder Anmelden ist dafür erforderlich.)

    Auch habe ich nur VBE 2.0.

    Das wundert mich zwar etwas, weil eine ältere ATI x800 pro bereits schon ein VBE3-Bios mitbrachte, doch das ist ja eine Sache der GraKa-Herstellers ein passendes Bios bereitzustellen und nicht die Sache der GPU-Hersteller.
    So kann man sich eigentlich schon freuen wenn überhaupt noch ein Vesa-Bios mit eingebaut wird. Laut CT-Redaktion kann davon gar nicht mehr ausgegangen werden dass ein VESA-Bios zukünftig immer noch vorhanden ist.

    Mit einem VBE2-Bios ist es aber auch schon möglich den linaren Framebuffer zu verwenden. Nur das hardware triple buffering, stereoskopische Modi und Modi mit einer eigenen Refreshrate höher als 60hz sind damit nicht möglich, weil erst mit VBE3 verfügbar.

    vidinfo:
    modeattrib dw 0
    win1attrib db 0		;+2
    win2attrib db 0		;+3
    granularity dw 0	;+4
    winsize dw 0		;+6
    win1seg dw 0		;+8
    win2seg dw 0		;+10
    pointer dd 0		;+12
    byteperline dw 0	;+16
    width dw 0		;+18
    height dw 0		;+20
    wofcbox db 0		;+22
    hofcbox db 0		;+23
    memplanes db 0	;+24
    bpp db 0			;+25
    banks db 0		;+26
    memmodeltype db 0	;+27
    banksize db 0		;+28
    impages db 0		;+29
    res1 db 0			;+30
    rms db 0			;+31
    rmp db 0			;+32
    gms db 0			;+33
    gmp db 0			;+34
    bms db 0			;+35
    bmp db 0			;+36
    resms db 0		;+37
    resmp db 0		;+38
    dcmode db 0		;+39
    res2 times 216 db 0	;Puffer auffüllen bis auf 256Byte
    

    Eine Sache hab ich noch bemerkt. Ich habe 3 Videomodi mit folgenden Eigenschaften:

    Modus            281
    Granularitaet:           65535
    $Byte pro Linie:          32774
    $Groesse des Fensters:      65535
    $Startsegment Fenster 1:      65535
    $Fensterbreite:      32770
    $Fensterhoehe:      36866
    $Anzahl Bitfelder:         16
    $Bits pro Pixel:          1
    $Bankgroesse:          0
    $Anzahl der Baenke:          8
    $Speichermodeltype:          1
    $LFB ja: 0
    $
    

    Davon habe ich wie gesagt drei. Und bei diesen dreien ist das Bit 7 im ModeAttrib jedoch nicht gesetzt.

    Für Info's bin ich sehr dankbar.

    Gruß, Nicky

    Huch nur ein Bit pro Pixel erscheint mir etwas merkwürdig.

    Hast du diese Werte unter Windows ermittelt?

    Weil Windows emuliert derartige Anfragen und ohne die Intallation eines Grafikkarten-Teibers meldet die Anfrage von Funktion 0 (Vesainfo) das kein VESA-Bios vorhanden sei. Mit installierten Grafikkarten-Teiber konnte ich bisher immer die selben Werte die ich auch unter purem DOS erhalte bekommen. Darauf würde ich mich allerdings nicht verlassen, besonders dann nicht wenn es zu Ungereimtheiten bei den Werten kommt, dann lieber noch einmal unter purem DOS testen.

    Dirk



  • Hallo Dirk,

    Ja, ich lese ein DWORD aus 🙂
    was mich aber doch etwas wundert ist, das mein Laptop "nur" 3GB RAM hat, aber jeder Wert vom LFB 4.160.749.568 beträgt. Ist das ein Standardwert oder lese ich falsch aus oder muss hier noch was umgerechnet werden?

    xor edi, edi
    	mov di, infostruc
    	add di, 28h
    ausgabe:
    	mov eax, dword [di]
    	call PRINT              ;PRINT schreibt die Zahl als ASCII auf den Schirm
    
    infostruc times 256 db 0         ;256Byte Buffer für die Daten
    

    Gruß, Nicky



  • supernicky schrieb:

    Hallo Dirk,

    Ja, ich lese ein DWORD aus 🙂

    Ok.

    was mich aber doch etwas wundert ist, das mein Laptop "nur" 3GB RAM hat, aber jeder Wert vom LFB 4.160.749.568 beträgt. Ist das ein Standardwert oder lese ich falsch aus oder muss hier noch was umgerechnet werden?

    Die Adresse wird wohl stimmen.

    Der LFB blendet sich meistens im obersten Gigabyte ein, auch dann wenn dort kein physikalischer RAM vorhanden ist und dort wo der LFB sich einblendet, dort kann man den darunter liegenden RAM eh nicht verwenden falls vorhanden.
    Ich habe bisher für alle VESA-Modi einer Karte immer nur die selbe LFB-Adresse gefunden, die aber je nach verwendeter Karte variieren kann.
    Die Adresse des LFB ist vermutlich wohl auch davon abhängig welche Hardware-Komponenten noch vorhanden sind, die ebenfalls im obersten Gigabyte einen Platz beanspruchen und das dann mit dem BIOS vom Mainbaord aushandeln welche Bereiche dafür belegt werden.
    Möglicherweise kann eine Grafikkarte in einem anderen Mainboard verwendet einen andere Adresse für den LFB bekommen. Konkrete Infos habe ich darüber aber auch nicht, es ist somit nur eine Vermutung von mir.

    Dirk


Anmelden zum Antworten