Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Spiderschwein13 am 21. June 2009, 21:16

Titel: Probleme RM VESA initialisierung
Beitrag von: Spiderschwein13 am 21. June 2009, 21:16
hey Leute,
nach einer langen Pause mach ich jetzt mit meinem Kumpel wieder an unserem kleinen OS weiter...

Zur Zeit sind wir dabei, den VESA Modus über das Bios zu initialisieren (RM)... das ganze machn wir per inline-ASM, allerdings bringt der gcc-compiler folgende Fehlermeldung:

Zitat
C:\DOKUME~1\Familie\LOKALE~1\Temp\ccRwH4rZ.s: Assembler messages:
C:\DOKUME~1\Familie\LOKALE~1\Temp\ccRwH4rZ.s:21: Error: junk `00h' after express
ion

Parameter für gcc
gcc -masm=intel -m32 -ffreestanding -o C:\IUse\tmp\main.o -c main.c  -Werror -nostdinc

Wir entwickeln jetzt unter Windoof, unter Linux kommt aber der selbe Fehler..........

Hier unser Code....
int main(){

//Die folgende Funktion switcht in den RM
asm("cli\n\t"

        "mov     eax,cr0\n\t"
        "and     al,not 1\n\t"
        "mov     cr0,eax\n\t"


        "sti\n\t");

 //Initialisiere VESA



asm("push ax\n\t"
"push bx\n\t"


"mov ax, 4f00h\n\t"  <-------- Die Anweisung macht nen Error :(
"mov bx, 0x7e0\n\t"
"mov es, bx\n\t"
"mov di, 0x0\n\t"
"int 0x10\n\t"

"cmp ax, 0x004f\n\t"
"jne .1\n\t"

"mov bx, 0x7e0\n\t"
"mov es, bx\n\t"
"mov di, 0x0\n\t"
"mov ax, [es:di+4]\n\t"

"mov ax, 0x4f01\n\t"
"mov di, 0x0\n\t"
"mov bx, 0x800\n\t"
"mov es, bx\n\t"
"mov cx, 0x0115\n\t"
"int 0x10\n\t"

"mov ax, 0x4f02\n\t"
"mov bx, 0x4115\n\t"
"int 0x10\n\t"

"cmp ax, 0x004f\n\t"
"je .3\n\t"
".1:\n\t"
".2:\n\t"
"jmp .2\n\t"
".3:\n\t"
"pop bx\n\t"
"pop ax\n\t"
"ret\n\t");
// ".1:\n\t" Dannach kommt eigtl eine Instruktion was er machen soll, wenns schiefgeht ...
       
}
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 21. June 2009, 21:40
Hey, ich bin der 2.te Programmierer bei unserem OS...

Hier noch ein paar Zusatz-Infos:

Das ganze OS wird vom Grub geladen, weshalb es schon im PM ist.

Neben dem obigen Code, haben wir noch folgendes in ASM (welches den C-Kernel laedt- das ganze wird mit ld gelinkt):

global loader
extern main   
 
FLAGS    equ 0
MAGIC    equ 0x1BADB002       
CHECKSUM equ -(MAGIC + FLAGS)
 
section .text
align 4
MultiBootHeader:
  dd MAGIC       
  dd FLAGS       
  dd CHECKSUM   
 
loader:
  mov esp,0x200000
  push eax       
  push ebx         
  call main       
 
  cli
  hlt


Mit dem Code im Kenrel
asm("cli\n\t"

        "mov     eax,cr0\n\t"
        "and     al,not 1\n\t"
        "mov     cr0,eax\n\t"


        "sti\n\t");

deaktivieren wir das 0-bit (das Protected-Mode-Enable-Bit (PE)) im Register 0 um in den Real Mode zu kommen. Ist das so ausreichend ?


Titel: Re: Probleme RM VESA initialisierung
Beitrag von: matheguru am 21. June 2009, 22:13
Zitat
Zur Zeit sind wir dabei, den VESA Modus über das Bios zu initialisieren (RM)...
Ich wüsste nicht, dass man VESA per BIOS initialisiert, auser du meinst da VBE!
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: MNemo am 21. June 2009, 22:26
Zitat von: Spiderschwein13
"mov ax, 4f00h\n\t"  <-------- Die Anweisung macht nen Error :(

gcc/gas kennt die hex-Schreibweise ??h nicht. das Problem sollte damit gelöst werden können die Schreibweise an die im restlichen Quelltext anzupassen.
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 21. June 2009, 22:35
Hey ...
Aber ich habe extra -masm=intel als Parameter gewaehlt um die Intel-ASM-
Syntax zu nutzen ... Deshalb sollte es doch auch mit hex funktionieren ...
Oder etwa nicht ?


Ja, spiderschwein hat die Vesa Bios Extension (VBE) gemeint.

Wie muss die Adresse sonst heisen (ohne 00h) ?
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: Jidder am 21. June 2009, 22:37
Selbst wenn es gehen würde, wäre das die einzige Konstante mit h statt 0x. Das schaut ja nich aus ^^

0x4f00
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 21. June 2009, 22:41
kk .. mal mit 0x004f probieren ... :)
doch nicht 0x4f00 .. oder ?
Vesa INT 10 ist 0x004f
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: Jidder am 21. June 2009, 22:41
Eine Sekunde zu langsam ... 0x4f00 nicht 0x004f
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: Jidder am 21. June 2009, 22:43
Vesa INT 10 ist 0x004f
-> http://www.ctyme.com/intr/rb-0273.htm
Es ist 4f00h = 0x4f00
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 21. June 2009, 22:45
http://wiki.osdev.org/Getting_VBE_Mode_Info
INT 0x10, AX=0x4F00
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: stultus am 21. June 2009, 22:46
Zur Korrektheit von -masm=dialect - Hab grad mal ins gcc-manual gesehen (http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options), soweit ich das verstehe kontrolliert die Option was für code der gcc ausgibt - nicht was mit dem vorhandenen Inline-ASM geschieht.

Weitere Empfehlungen,
a) Bitte nicht mit Grafik anfangen. Das wird nix.
b) Wenn schon Grafik so früh sein muss aber eh grub verwendet wird - man kann die vbe-modes schon via grub setzen lassen und inner Multiboot übergeben bekommen
c) um solche Sprünge möglichst zu vermeiden wurde vm86 entwickelt - verwenden, dann ersparst du dir auch die PM-Wiederaktivierung

Mal so btw, kommt man wirklich so einfach bis innen RM runter, oder was passiert da?
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 21. June 2009, 22:50
Ja, der Code zum RM-Switchen ist zwar nicht sonderlich "robust",
aber es funktioniert :)

Hmm ...
Wir fahren ja mehrgleisig ...
Ich versuche z.B. Memory-Managment und die CDI u implementieren ;)
(Der Code oben ist natuerlich noch laengst nicht alles, sondern nur ne art Experiment fuer VESA ;) )



Titel: Re: Probleme RM VESA initialisierung
Beitrag von: stultus am 21. June 2009, 22:54
Wenn sowieso CDI eingebaut werden soll, würde ich vm86 stark empfehlen - ich experimentier momentan mit cdi-video für tyndur ;) (momentan auf cirrus unter qemu beschränkt, nen normaler vesa-treiber wird aber auch noch gebastelt ;) )
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 21. June 2009, 23:01
Hey :)
Habe gerade den PC gewechselt und das ganze kompiliert ..
Funktioniert 1a ...

Aber wegen vm86:

Kennt jmd. ein gutes Tut oder hat jmd. einen Beispielcode zum
switchen in den vm86 (virtual 8086 mode) + initialisieren von vesa (vbe)?
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: bluecode am 22. June 2009, 10:09
Virtual 8086 Mode (http://osdev.berlios.de/v86.html) von Tim Robinson
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: matheguru am 22. June 2009, 14:34
Beispielcode hatte ich in den Quellen von LightOS gefunden! Ist recht einfach zu finden und dort wird es recht deutlich muss man sich aber erst mal zurechtfinden! Kann euch leider grad nicht sagen, welche Datei das war, da ich es erst neu downloaden müsste!
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: bluecode am 22. June 2009, 15:32
Virtual-8086-Interface: v86.hpp (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/include/kernel/x86/v86.hpp;h=4597a50c99a3ea77e3087fd2386830ea0b9ee1ee;hb=HEAD) und v86.cpp (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/x86/v86.cpp;h=9b609c0d4e462de949923013c01aad54cf21273d;hb=HEAD)
Virtual-8086-Monitor: v86m.hpp (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/include/kernel/x86/v86m.hpp;h=169a29d07fb4db9a1996bda1ba76d6d85eea319b;hb=HEAD) und v86m.cpp (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/x86/v86m.cpp;h=ba466f5fa80aafedcb80a316c99fe4cb7e57fe92;hb=HEAD)
VBE Interface: vbe.hpp (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/include/kernel/x86/vbe.hpp;h=bd75f50849bf9332d584b6191aeb917490a0d43e;hb=HEAD) und vbe.cpp (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/x86/vbe.cpp;h=93391719a9bc010a179f2d82f78545212d9c5142;hb=HEAD)
paar benötigte Assemblerroutinen: _v86.S (http://repo.or.cz/w/lightOS.git?a=blob;f=kernel/x86/_v86.S;h=ef611b4f41a4e92ab263791c760fb5a2481905ea;hb=HEAD)

Ich hab ein paar Sachen natürlich von dem oben erwähnten Tutorial. Ansonsten erweisen sich auch die Intel Manuals als Hilfe, wenn man mal was genau wissen will.
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: matheguru am 22. June 2009, 16:00
thx bluecode, dass du sachen aus lightOS nochmal rausgesucht hast! :-D
Titel: Re: Probleme RM VESA initialisierung
Beitrag von: iUse am 06. July 2009, 06:53
thx :)