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):
Ich weiß nicht ob dass so richtig ist ?!
Bochs meldet mir jedoch folgende Fehlermeldungen:
Es wird unzähligemal folgener Fehler im bochsout.txt angezeigt:
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
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):
Code: [Auswählen]
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:
Code: [Auswählen]
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:
Code: [Auswählen]
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