Autor Thema: V86 Tasks  (Gelesen 3375 mal)

Adi

  • Beiträge: 20
    • Profil anzeigen
Gespeichert
« am: 03. May 2007, 12:00 »
Hi @all,
hab wieder ein Problem :-P

Also hätte gerne Untersützung für V86 Tasks in meinem Kernel, damit ich z.b. im PMode den Videomodus ändern kann!

Mein Multitasking funktioniert "inzwischen" ja einwandfrei ;-)


Wenn ich die ganze Sache mit dem Virtual 8086 Mode richtig verstanden habe, dann muss ich beim erstellen des Tasks das VM-Bit(17) in EFLAGS setzen...

Mache ich hier:
        *stacksetup--;
        *stacksetup--=0x246 | 0x10000;
        *stacksetup--=0x08;
        *stacksetup--=(uint_t)entry;
...

und hier erstelle ich den Task: (funktioniert auch soweit)

extern "C" void test86();

kernel->multitasking->create_process_v86(test86);

Jetzt zum eigentlichen Teil... also der Task müsste dann eigentlich aus 16Bit code bestehen:

[BITS 16]

[GLOBAL _test86]

         
        _test86:
        hlt

        schleife:
        loop schleife

Das Problem besteht nun darin dass die Anweisungen nicht ausgeführt werden wenn ich [BITS 16] schreibe, bei [BITS 32] schon!
Wobei ich eigentlich der Meinung bin dass der 32Bit-Code nicht funktionieren dürfte, befinde ich mich vllt gar nicht im V86-Modus??? :-(

Gruß
Adrian

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 03. May 2007, 12:19 »
VM-Bit(17) in EFLAGS setzen...
[...]
        *stacksetup--=0x246 | 0x10000;
Entweder ich bin noch zu müde oder man fängt bei 0 an zu zählen und es sollte 0x20000 heißen. ;)

Tip zur Fehlervermeidung: Schreib einfach (1 << 17).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Adi

  • Beiträge: 20
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 03. May 2007, 14:33 »
Oje da war wohl eher ich zu müde :roll:

Ich gehe nun davon aus dass der Task im V86 Modus läuft, allerdings bekomme ich nun folgende Fehlermeldung (Bochs Debugger):

[CPU0 ] >>PANIC<< get_SS_ESP_from_TSS: TR is bogus type (3)

Benötige ich für V86-Tasks ein TSS? Bisher setze ich auf Software-Taskswitching und alles läuft in Ring0!

Hab auch irgendwo mal gelesen dass V86-Tasks immer in Ring3 laufen, hat es vllt etwas damit zu tun?

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 03. May 2007, 17:43 »
hi,
ja ein V86 Task *muss* im Ring 3 laufen.
Daher müssen die Segmentregister CS und SS auf Deskriptoren vom Ring 3 zeigen.

mfg,
Stefan

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #4 am: 04. May 2007, 19:36 »
@Adi : Ich habe leider keine Ahnung von Hochsprachen wie C/C++ und kann dir da nicht helfen (ja, es ist inline asm aber davon habe ich auch kA). Bei mir war es glaube ich darmals ein etwas anderes Problem. Warum der mir darmals die Fehlermeldung ausgegeben hat und woran es lag weiß ich leider nicht mehr *duck*. Mit V86 kenne ich mich überhaupt nicht aus (gibt es ja so weit ich weiß im LM nicht mehr). sorry

bitmaster
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 am: 05. May 2007, 06:34 »
@Adi : Ich habe leider keine Ahnung von Hochsprachen wie C/C++ und kann dir da nicht helfen (ja, es ist inline asm aber davon habe ich auch kA). Bei mir war es glaube ich darmals ein etwas anderes Problem. Warum der mir darmals die Fehlermeldung ausgegeben hat und woran es lag weiß ich leider nicht mehr *duck*. Mit V86 kenne ich mich überhaupt nicht aus (gibt es ja so weit ich weiß im LM nicht mehr). sorry
Gut, dass du das jetzt gesagt hast, damit kommt hier jeder weiter :roll:  :-P
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

 

Einloggen