tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
749
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    BassBox Tutorials.de Gastzugang
    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
     

  2. #2
    Skini Skini ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    173
    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*
    Geändert von Skini (24.12.10 um 01:39 Uhr) Grund: Link gefunden^^
     
    Neulich im IRC:
    <a> Da scheine ich selbst in Assembler besser zu runden als du in C. ;-)
    <b> for(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);
    <a> b löst das also brav iterativ, nur daß man dann Fortran nimmt, muß er noch lernen.
    <b> fortran(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);

    Ich bin eine Fee:
    Wenn ich die Hex-werte der Buchstaben meines Namens addiere, bin ich 1FE.

  3. #3
    BassBox Tutorials.de Gastzugang
    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
    Geändert von BassBox (24.12.10 um 11:50 Uhr)
     

  4. #4
    Skini Skini ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    173
    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.
     
    Neulich im IRC:
    <a> Da scheine ich selbst in Assembler besser zu runden als du in C. ;-)
    <b> for(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);
    <a> b löst das also brav iterativ, nur daß man dann Fortran nimmt, muß er noch lernen.
    <b> fortran(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);

    Ich bin eine Fee:
    Wenn ich die Hex-werte der Buchstaben meines Namens addiere, bin ich 1FE.

  5. #5
    BassBox Tutorials.de Gastzugang
    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?
     

  6. #6
    Skini Skini ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    173
    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.
     
    Neulich im IRC:
    <a> Da scheine ich selbst in Assembler besser zu runden als du in C. ;-)
    <b> for(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);
    <a> b löst das also brav iterativ, nur daß man dann Fortran nimmt, muß er noch lernen.
    <b> fortran(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);

    Ich bin eine Fee:
    Wenn ich die Hex-werte der Buchstaben meines Namens addiere, bin ich 1FE.

  7. #7
    BassBox Tutorials.de Gastzugang
    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/Programm..._der_PS/2-Maus Danke für den Tipp
    Geändert von BassBox (24.12.10 um 22:51 Uhr)
     

  8. #8
    Skini Skini ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    173
    Dann schreibst du aber keinen Emulator, der .com Files von DOS ausführt, sondern für DOS selber.
     
    Neulich im IRC:
    <a> Da scheine ich selbst in Assembler besser zu runden als du in C. ;-)
    <b> for(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);
    <a> b löst das also brav iterativ, nur daß man dann Fortran nimmt, muß er noch lernen.
    <b> fortran(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);

    Ich bin eine Fee:
    Wenn ich die Hex-werte der Buchstaben meines Namens addiere, bin ich 1FE.

  9. #9
    BassBox Tutorials.de Gastzugang
    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.
     

  10. #10
    Skini Skini ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    173
    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.
     
    Neulich im IRC:
    <a> Da scheine ich selbst in Assembler besser zu runden als du in C. ;-)
    <b> for(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);
    <a> b löst das also brav iterativ, nur daß man dann Fortran nimmt, muß er noch lernen.
    <b> fortran(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);

    Ich bin eine Fee:
    Wenn ich die Hex-werte der Buchstaben meines Namens addiere, bin ich 1FE.

  11. #11
    BassBox Tutorials.de Gastzugang
    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.
     

Ähnliche Themen

  1. Gameboy Emulator
    Von deadline im Forum Handy, PDA & mobile Welt
    Antworten: 5
    Letzter Beitrag: 13.11.07, 21:42
  2. BlackBerry Emulator
    Von Raven280438 im Forum Handy, PDA & mobile Welt
    Antworten: 0
    Letzter Beitrag: 26.09.07, 10:40
  3. Tastenanschlag emulator
    Von pincy im Forum Coders Talk
    Antworten: 2
    Letzter Beitrag: 26.03.07, 19:51
  4. Wap-Browser/Emulator
    Von Eistee im Forum HTML & XHTML
    Antworten: 4
    Letzter Beitrag: 03.10.05, 18:42
  5. PS2 Emulator
    Von IronMike im Forum Smalltalk
    Antworten: 1
    Letzter Beitrag: 13.09.03, 09:17