Dos Emulator

B

BassBox

Hallo
Ich möchte einen Dos(.com) Emulator für mein eigenes OS schreiben, das problem ist nur ich weiß nicht was ich für das ausführen einer com datei alles bereit stellen mus. Ich weiß das ich die Dos Interrupts setztn muss aber da kenne ich nicht alle. :( Muss ich noch irgendwelche andere sachen setzten um com dateien aus zu führen? Mei OS unterstützt bereits FAT12.
LG und Frohe Weinachten
BassBox
 
Moin, für einen DOS-Emu brauchst du (wenn dein OS denn schon im Protected Mode arbeitet) auf jeden Fall VM86, um 16-Bit zu emulieren. Wenn du VM86 implementiert hast, brauchst du nur noch die Syscall-Liste von DOS zu Implementieren, was dann auch meistens nur noch Wrapper sind.
Skini

EDIT:
Hier: http://www.i8086.de/dos-int-21h/dos-int-21h.html alle DOS-Ints. Hat mich 2 Sekunden googlen nach "DOS interrupts" gekostet. *g*
 
Zuletzt bearbeitet:
ich arbeite mit einer RM und PM Kombi. den VM86 würde ich bei einem Dos emulator nicht verwenden das das im realmode viel besser geht. Und was meinst du mit skyscall-liste? Meinst du eine Emulator funktion welche die Interrupts ansprechbar macht? Was kann den dein OS? Zumal ich zu den Ints genaue Angabe brauche was die machen. Men Problematischster int den ich versuche zu emulien ist int 33h (maus zugriff) Hast du eien ahnung wie ich den programmieren kann? Und ich weiß nicht genau wie man in den VM86 kommt. An den verlinkten seiten stehts nicht wirklich drinn :)
Frohe Weinachten
LG
Bass Box
 
Zuletzt bearbeitet von einem Moderator:
Es steht im Artikel im erstem Satz unter "Einrichtung". MIt der Syscall-Liste meine ich, das dein OS die DOS-Syscalls (int 0x21) unterstützen muss. In dem Link klickst du links auf die Nummer, und es steht konkret alles da. was du zu machen scheinst (int 33h uvm.) sind die BIOS-Interrupts, die du emulieren müsstest wenn du im PM bist, im RM sind die noch verfügbar. Die brauchst du im PM aber auch nur für VM86 wenn du da keine .com sonder direkt DOS drin laufen hast.
 
ich hab das So:
mein Os ist momentan im Pmode. wenn du die Funktion "Dos Emulator" verwendest wechselt er zurück in den Rmode. Danach werden semtliche ints (21,...) von der funktion gesetzt. Das vor dem starten ausgewählte com Programm wird in den Arbeitsspeicher gelanden und mit einem far call aufgerufen.
mein Problem ist int 33h! Da ich nicht genau weiß wie ich den programmieren soll. (ich weiß was er macht aber kriegs irgendwie nicht in code umgesetzt). Und muss ich im v86 nich irgend so ein dign programmieren damit die ints richtig funktionieren?
 
Du brauchst für .com files von DOS EINEN einzigen int, nämlich 0x21. 0x33 etc sind nicht DOS sondern BIOS, und haben mit .com nichts am Hut. DOS ruft die zwar selber u.U. auf, aber das tangiert dich überhaupt nicht.
 
Danke, aber das weiß ich schon. aber der Far call brauche ich, denn ohne den geht garnichts! Und das was ich eigentlich wissen wolte ist wie ich eine funktion schreiben kann die mauskoordinaten ausliet um den interrupt zu generiren. Aber ich habe gerade was gefunde was mir gerade ziemlich hilft: http://www.lowlevel.eu/wiki/Programmierung_der_PS/2-Maus Danke für den Tipp ;)
 
Zuletzt bearbeitet von einem Moderator:
Naja, wenn es dos wäre müsste ich command.com programmieren. Und es ist sehr wohl ein emulator weil die Dosprogramme auf einerm anderen betriebssystem ausgeführt werden und nicht auf dos. Dos enthält nicht nur interrupts sondern auch einen haufen funktionen :) Gut eigentlich ist das ganze dann kein Dos Emulator sonderen ein Com Emulator.
 
Eben nicht, dein int 33h wird VON DOS verwendet, aber nicht von den DOS-Programmen, die nur 21h nutzen. Wenn du also 33h implementierst/emulierst ist das nicht für die .com Files zu verwenden.
 
Zurück