VESA Standart



  • Hallo,

    ich hab in einem anderen Forum den code hier zur VESA initialisierung bekommen
    ist das denn alles nötig oder was muss ich alles machen um einen X Belibigen 32 BIT Farbmodus zu setzten und dann einen Zeiger auf den Video Ram zu bekommen?

    Hier ist der Code:

    start:
    mov ax,data1
    mov ds,ax

    mov ax,stack
    mov ss,ax

    mov sp,offset top_stack

    push es
    push ds
    mov ax,extra1
    mov es,ax

    mov ah,4fh
    mov al,00h
    mov di,offset es:vesa
    int 10h

    pop ds
    pop es

    push es
    push ds

    mov ah,4fh
    mov al,01h
    mov cx,111h ;110h ;101h
    mov di,offset es:vesa
    int 10h

    mov di,offset es:vesa
    add di,4
    mov bx,es:[di]

    pop ds
    pop es

    mov granularity,bx
    mov granularity_factor,16
    ;calc granularity-factor
    xor dx,dx
    mov ax,64
    mov cx,granularity
    cmp cx,0
    je ksswq21
    div cx
    mov granularity_factor,ax
    ksswq21:
    mov di,offset es:vesa
    add di,3
    mov bx,es:[di]
    mov ax,bx
    and ax,101b
    cmp ax,101b ;write access window 1
    jne ksswq22

    mov write_window,1
    ksswq22: mov ax,bx
    and ax,011b
    cmp ax,011b ;read access window 1
    jne ksswq23
    mov read_window,1

    ksswq23:
    mov di,offset es:vesa
    add di,2
    mov bx,es:[di]
    mov ax,bx
    and ax,101b
    cmp ax,101b ;write access window 0
    jne ksswq24
    ;possible
    mov write_window,0
    ksswq24: mov ax,bx
    and ax,011b
    cmp ax,011b ;read access window 0
    jne ksswq25
    mov read_window,0
    ksswq25: push es
    mov ah,4fh
    mov al,02h
    mov bx,111h
    int 10h
    pop es

    kddffe2: mov ax,data1
    mov ds,ax

    ;color or black/white
    mov ah,12h
    mov bl,33h
    mov al,1 ;0 = black/white
    int 10h

    mov ax,v_ram_start_address
    mov es,ax
    call wait_for_retrace
    ....

    So als kleiner Vorgeschmack zum Abgewöhnen
    <-- das hat er mir geschreiben... 😉

    MFG

    LordHoto



  • Hi.

    IMHO sind 90% des codes einfach Quatsch... 😉
    Gehoert wahrscheinlich zu einer groesseren (jedoch schlecht programmierten) LIB. So einzeln ist das meiste jedenfalls reichlich unnuetz und vor allem nicht universell einsetzbar.

    Eine idiotengepruefte Fertigloesung (falls Du das erwartet hast) werde ich dir hier jedoch nicht praesentieren, da ich
    1. Selbst keine Lust habe, jetzt extra fuer dich unendgeldich einen laengeren Code zu verfassen 😃
    2. solche Fertigloesungen sch.... finde (verleitet IMHO zu copy&paste, um Progs schneller fertig zu kriegen)
    3. denke, dass man zB. mit solch einem Tutorial selbst darauf kommen kann, wie VESA im RM so funktioniert.

    Sry, vielleicht machts ja jemand anders. 🙄
    Lies dir mal das Tut durch, vielleicht kannst Du den code dann selbst nachvollziehen. (Alles, was Du dann nicht auf Anhieb verstehst, ist in diesem Code unnuetz - damit waer deine Frage beantwortet 😉 )



  • ok wie kann ich eigentlich Modes ohne den int 10 setzten also ganz allein geproggt?

    MFG

    LordHoto



  • Wenn Du damit die VESA-Modi meinst, fragst Du das mal am besten deinen Freundlichen Graka-Hersteller. 😃
    (andere Moeglichkeit an die entsprechenden Infos zu kommen waere int 10h-Handler/VideoBIOS dekompilieren)



  • Wie kann ich bei VESA Modes eigentlich auf den Grafikkarten Speicher zurgreifen also ich mein dort wo das Bild ist damit ich was drauf malen kann?

    MFG

    LordHoto



  • Da zitiere ich mal aus dem netten Tut:
    "WinASegment & WinBSegment: The segment address of the windows in memory. (normally 0A000h)"
    (steht unter "Function 01h - Return SVGA Mode Information")
    In diesen Variablen steht, auf welches Segment Du zugreifen musst, um was auf den Bildschirm zu pinseln...

    Bei neueren Grakas ist das aber eigentlich immer 0A000h und Du kannst sofort nachdem Du einen VESA-Modus eingeschaltet hast was auf den Bildschirm bringen, indem Du zB. mit einer "mov"-Instruktion einfach in den Speicher bei 0A000h:????h schreibst.



  • Also mir hat man gesagt das 0xa000 bei Vesa nicht mehr funzt...

    MFG

    LordHoto



  • und was ist ein long word? ein DWORD oder was?

    MFG

    LordHoto



  • Versuch doch einfach mal folgenden, wirklich simplen code und ueberzeuge dich selbst, dass es scheinbar doch geht:
    (bei mir zeichnet das zumindest einen schoenen weissen Strich auf den Bildschirm; ich hab ne GeForce4 TI4200)

    ideal
    model tiny
    p386
    
    codeseg
    org 100h
    Start:
    mov ax,4F02h
    mov bx,010Fh
    int 10h
    push es
    mov ax,0A000h
    mov es,ax
    mov di,0000h
    mov ax,0FFFFh
    mov cx,0020h
    rep stosw
    pop es
    xor ax,ax
    int 16h
    mov ax,0003h
    int 10h
    mov ax,4C00h
    int 21h
    
    End Start
    


  • Original erstellt von <LordHoto>:
    **und was ist ein long word? ein DWORD oder was?

    MFG

    LordHoto**

    Wuerde ich doch mal annehmen... 😉



  • Gut danke!
    Dann kann mein OS Endlich in den GrafikModus Springen *freu*

    MFG

    LordHoto



  • Wie ist eigentlich die nummer des 800x600x32 Bit modus weil bei meiner Tabelle ist es so ziemlich komisch aufgebaut... da steht nie was von 32 Bit und so..

    MFG

    LordHoto



  • Wenn in der Tabelle der auf deiner Graka verfuegbaren VESA-Modi (siehe Tutorial - pointer "VideoModePtr" unter "Function 00h - Return SVGA Information") nichts von 32Bit steht, dann wird aller Wahrscheinlichkeit nach auch kein entsprechender Modus zur Verfuegung stehen. 😕



  • ups hab ich gar nicht überprüft... *pfeift unauflällig* 😃 😃
    Aber bei Vesa müsste es doch irgendo eine Tabelle geben wo alle modis aufgelistet sind oder? Sonst wär ja VESA auch nicht grad das beste!

    MFG

    LordHoto



  • Sicher gibts das auch...
    Fuer neuere Grafikkarten wird eine solche Liste, die sich zB. ueber Google finden laesst, wahrscheinlich auch funktionieren, muss aber nicht sein. 😮



  • 1280x1024x32K
    1280x1024x64K
    1280x1024x16M

    welches von den 3en ist was für eine Farbtiefe?

    MFG

    LordHoto



  • @LordHoto:

    1280x1024x32K --> Farbtiefe 15 Bit (2^15 = 32768 Farben = 32K)
    1280x1024x64K --> Farbtiefe 16 Bit (2^16 = 65536 Farben = 64K)
    1280x1024x16M --> Farbtiefe 24 Bit (2^24 = 16777216 Farben = 16M)

    Ciao...



  • hmm.. hät ich mir selbst denken können 😃 ...

    MFG

    LordHoto


Anmelden zum Antworten