# Dos Emulator



## BassBox (19. Dezember 2010)

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


----------



## Skini (24. Dezember 2010)

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*


----------



## BassBox (24. Dezember 2010)

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


----------



## Skini (24. Dezember 2010)

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.


----------



## BassBox (24. Dezember 2010)

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?


----------



## Skini (24. Dezember 2010)

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.


----------



## BassBox (24. Dezember 2010)

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


----------



## Skini (24. Dezember 2010)

Dann schreibst du aber keinen Emulator, der .com Files von DOS ausführt, sondern für DOS selber.


----------



## BassBox (25. Dezember 2010)

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.


----------



## Skini (25. Dezember 2010)

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.


----------



## BassBox (25. Dezember 2010)

nein,
ich kann int 33 auch mit coms ansprechen (man denke an all die Dosspiele die es schon mit mausbedinung hab) zumal ich den programieren nicht ihre funktionen nehmen will.(zumal ich com dateien habe welche int 33h brauchen) Und ich werde den "COM Emulator" nun doch im vm86 ausführen da ich dem programm damt den zugriff auf das kernel verbieten kann  Zum thema dos Vieren.


----------

