Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - stafe

Seiten: [1]
1
Lowlevel-Coding / V86 Modus
« am: 02. September 2007, 21:08 »
Hallo,

da ich in meinem OS während der Laufzeit den Grafikmodus ändern möchte, habe ich mir gedacht das mit dem Virtual 8086 Mode zu realisieren.
Doch leider sind einige Probleme aufgetreten.

Mein OS kann ring0 und ring3 tasks ausführen ...
Ich habe mal in einem Beitrag gelesen, dass man für einen V86 Task lediglich die EFLAGS ändern muss (0x20002). Dies mache ich wie folgt (Hier der V86 Task Stack):

stackptr=kernstack;
*--stackptr=0x20|3;
*--stackptr=0x20|3;
*--stackptr=0x20|3;
*--stackptr=0x20|3;
*--stackptr=0x20|3;
*--stackptr=(unsigned long)userstack;
*--stackptr=0x20002L;
*--stackptr=0x18|3;
*--stackptr=(unsigned long)startpunkt;
*--stackptr=0x0;    //EAX
*--stackptr=0x0;    //ECX
*--stackptr=0x0;    //EDX
*--stackptr=0x0;    //EBX
*--stackptr=0x0;    //-->ESP kann Null sein
*--stackptr=0x0;    //EBP
*--stackptr=0x0;    //ESI
*--stackptr=0x0; //EDI
*--stackptr=0x10; //ds
*--stackptr=0x10; //es
*--stackptr=0x10; //fs
*--stackptr=0x10; //gs

Ich weiß nicht ob dass so richtig ist ?!

Bochs meldet mir jedoch folgende Fehlermeldungen:

00084951475-i-@00102142-[CPU  ] IRET to V86-mode: ignoring upper 16-bits
00084951478-i-@00000003-[CPU  ] LOCK prefix unallowed (op1=0x53, attr=0x0, mod=0x0, nnn=0)

Es wird unzähligemal folgener Fehler im bochsout.txt angezeigt:

00084951522-e-@00101852-[CPU  ] seg = DS
00084951522-e-@00101852-[CPU  ] seg->selector.value = 0000

Läuft der Task jetzt schon im V86 mode oder kommt beim Versuch in den V86 mode zu schalten der Fehler ??

Ich hoffe jemand hat bereits Erfahrung mit dem V86 mode und kann mir weiterhelfen.

Danke im Voraus

2
Lowlevel-Coding / Kommunikation zwischen Kernel und Programm
« am: 06. July 2006, 11:14 »
Hallo,

ich habe da folgendes Problem bei der Parameterübergabe vom Programm zum Kernel ...

Ich habe die Parameterübergabe in meinem OS über Interrupts realisiert ... das funzte bisher ganz gut wenn ich Zahlenwerte übergab

Bsp.: Programm
int main( void )
{
unsigned int zahl1 = 100;
unsigned int zahl2 = 200;

asm("movl %0, %%ebx" :: "r" (zahl1)); // Übergabeparameter
asm("movl %0, %%ecx" :: "r" (zahl2)); // Übergabeparameter
asm("movl $0x0001, %eax"); // Funktionsnummer
asm("int $0x30"); // Systeminterrupt

return 0;
}


Hier wurden die Werte fehlerfrei übergeben und ich konnte diese im Kernel weiterverarbeiten ...

Wenn ich aber jetzt beispielsweise einen String übergeben möchte funktioniert das nicht ... hier wieder ein Beispiel wie ich es realisiert hätte:


int main( void )
{
unsigned char text[] = "Test Test Test";

asm("movl %0, %%ebx" :: "r" (text)); // Übergabeparameter
asm("movl $0x0002, %eax"); // Funktionsnummer ( 2 - Textausgabe )
asm("int $0x30"); // Systeminterrupt

return 0;
}


Wenn ich hier im Kernel das EBX - Register prüfe steht dort "nichts" ...

Ich habe schon alles versucht, über den Stack,... doch nichts hat bisher funktioniert ... kann mir vieleicht jemand von euch weiterhelfen
3
Offtopic / Static Operating System
« am: 19. May 2006, 21:26 »
Hallo,

da ich schon von mehreren Usern gebeten wurde eine built von meinem OS online zu stellen, ist es nun so weit. Ihr könnt euch das OS von meiner HP http://www.staticos.at.tf oder direkt hier downloaden.

Hier könnt ihr euch ein Disketten Image downloaden:
Static Operating System - Image

und hier die installer Version:
Static Operating System - Install

Ich habe die Version bei mir unter Bochs,Quem,VM-Ware und Virtual PC getestet und auf allen Emulatoren funzte es ;-)...

Hier nochn paar Screenshots:




[/img]
4
Lowlevel-Coding / Return bei Interrupts
« am: 23. August 2005, 13:38 »
Hallo,

ich habe folgendes problem ...

Wenn ich in einer externen Anwendung den Systeminterrupt (int 30h) aufrufe, kann ich zwar Funktionen ohne Rückgabewert problemlos ausführen, jedoch keine die einen Rückgabewert haben ... Also ich möchte den Returnwert der Funktion an die Anwendung (die den Interrupt aufgerufen hat) zurückgeliefern ...

Also so rufe ich die Ints über die externen Programme auf:
Hier bekomme ich den Wert in a problemlos im Kernel geliefert.


void test( unsigned int a )
{
    asm("movl %0, %%ebx":: "g"(a));
    asm("movl $0x01, %eax");
    asm("int $0x30");
}


So wie müsste diese funktion aussehen wenn Sie vom kernel einen Rückgabe wert bekäme?


unsigned int test( unsigned int a )
{
    unsigned int b;
    ...
    ...
    ...
    returne(b);
}


Ich hoffe ihr könnt mir helfen ...
5
Lowlevel-Coding / char 2 int
« am: 20. August 2005, 17:15 »
Hallo,

wie kann ich einen charakter in einen integer konvertieren ??
Vl. hat jemand von euch eine C function dafür ...
6
Lowlevel-Coding / PM -> RM
« am: 23. February 2005, 08:39 »
Hallo,

mein Betriebssystem arbeitet derzeit im Protected Mode ... da ich aber hier keine Bios Interrupts (13h) verwenden kann, würde ich gerne vom Protected Mode wieder zurück in den Real Mode schalten ... kann mir bitte irgendjemand einen Beispiel code dazu geben ???

Danke im Voraus

mfG Stafe
7
Lowlevel-Coding / Pixel im VESA Modus
« am: 28. November 2004, 13:00 »
Hallo,

ich habe jetzt schon alles versucht doch ich schaffe es nicht, dass ich ein Pixel im VESA Modus (1024x786 256 Farben) richtig ausgeben lasse.
Es funktioniert zwar ein Pixel zu zeichnen aber nur in der oberen hälfte des Bildschirms.

Hier der C Code:
Ich arbeite im RM.

char far *vga = (char far*)0xA0000000;

void putpixel( int x, int y, long farbe )
{
long temp = 0L+ 1024*y + x;
*(vga + temp) = farbe;
}

Ich hoffe jemand kann mir helfen.

mfG Stafe
8
Lowlevel-Coding / Maus im OS
« am: 27. August 2004, 12:20 »
Hallo,

ich arbeite jetzt im modus 12h (640x480x16) ... meine frage : wie kann ich die position der maus herausfinden? Ich habe mal ghört das für die maus der int 33h zuständig ist. Aber wie kann ich den nutzen? Derzeit steuere ich den mauszeiger mit der tastatur (a-links,d-rechts,s-runter,w-rauf,e-aktion).

mfG Stafe
9
Lowlevel-Coding / Grafik-Mode 640x480
« am: 21. August 2004, 18:59 »
Hallo,

ich arbeite derzei mit dem grafik-mode 13h (320x200). Meine frage ist jetzt wie ich im grafikmodus 12h (640x480) ein pixel einfärben kann (es funktioniert zwar schon das ein pxel gesetzt wird das weiß ist.
P.S.: Ich arbeite im Real-Mode

mfG Stafe
10
Lowlevel-Coding / Fehler bei GCC-Compiler
« am: 16. July 2004, 22:30 »
Hallo,

Ich hätte da eine frage ... wenn ich mit dem gcc compiler von DJGPP eine datei (kernel.c) auf in eine ckernel.obj compilieren lasse kommt bei mir folgender fehler:

(EINGABE: gcc -ffreestanding -c -Os -o ckernel.obj kernel.c)

gcc.exe: environment variable DJGPP definde

woran liegt das?

mfG Stafe
Seiten: [1]

Einloggen