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,axmov ax,stack
mov ss,axmov sp,offset top_stack
push es
push ds
mov ax,extra1
mov es,axmov ah,4fh
mov al,00h
mov di,offset es:vesa
int 10hpop ds
pop espush es
push dsmov ah,4fh
mov al,01h
mov cx,111h ;110h ;101h
mov di,offset es:vesa
int 10hmov di,offset es:vesa
add di,4
mov bx,es:[di]pop ds
pop esmov 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 ksswq22mov write_window,1
ksswq22: mov ax,bx
and ax,011b
cmp ax,011b ;read access window 1
jne ksswq23
mov read_window,1ksswq23:
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 eskddffe2: mov ax,data1
mov ds,ax;color or black/white
mov ah,12h
mov bl,33h
mov al,1 ;0 = black/white
int 10hmov 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
1280x1024x16Mwelches von den 3en ist was für eine Farbtiefe?
MFG
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