Autor Thema: Probleme RM VESA initialisierung  (Gelesen 6363 mal)

Spiderschwein13

  • Beiträge: 24
    • Profil anzeigen
Gespeichert
« 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 ...
       
}

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #1 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 ?



matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #2 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!
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 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.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #4 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) ?
« Letzte Änderung: 21. June 2009, 22:37 von iUse »

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #5 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
« Letzte Änderung: 21. June 2009, 22:41 von PorkChicken »
Dieser Text wird unter jedem Beitrag angezeigt.

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 21. June 2009, 22:41 »
kk .. mal mit 0x004f probieren ... :)
doch nicht 0x4f00 .. oder ?
Vesa INT 10 ist 0x004f

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 21. June 2009, 22:41 »
Eine Sekunde zu langsam ... 0x4f00 nicht 0x004f
Dieser Text wird unter jedem Beitrag angezeigt.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 21. June 2009, 22:43 »
Dieser Text wird unter jedem Beitrag angezeigt.

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 21. June 2009, 22:45 »

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #10 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?
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #11 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 ;) )



« Letzte Änderung: 21. June 2009, 22:53 von iUse »

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #12 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 ;) )
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #13 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)?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #14 am: 22. June 2009, 10:09 »
Virtual 8086 Mode von Tim Robinson
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #15 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!
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #16 am: 22. June 2009, 15:32 »
Virtual-8086-Interface: v86.hpp und v86.cpp
Virtual-8086-Monitor: v86m.hpp und v86m.cpp
VBE Interface: vbe.hpp und vbe.cpp
paar benötigte Assemblerroutinen: _v86.S

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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

matheguru

  • Beiträge: 113
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 22. June 2009, 16:00 »
thx bluecode, dass du sachen aus lightOS nochmal rausgesucht hast! :-D
Hacker zu sein bedeutet mehr, als sich nur damit auseinander zu setzen, es ist eine Lebenseinstellung

iUse

  • Beiträge: 11
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 06. July 2009, 06:53 »
thx :)

 

Einloggen