Autor Thema: Projekt: Eigener Emulator  (Gelesen 20958 mal)

Kevin_

  • Beiträge: 52
    • Profil anzeigen
    • http://fishing-online.lite-os.de
Gespeichert
« Antwort #20 am: 06. January 2006, 20:23 »
Ich würd auch gerne helfen... vllt kann cih sogar nen Teil des Codes benutzen (wenn er dann unter der GPL steht) für eines meiner Projekte

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #21 am: 07. January 2006, 04:38 »
Zitat von: Kevin
Ich würd auch gerne helfen... vllt kann cih sogar nen Teil des Codes benutzen (wenn er dann unter der GPL steht) für eines meiner Projekte


Meld dich am besten bei DarkThing, falls du wirklich mithelfen willst, über PM oder eMail.
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

Masen

  • Beiträge: 31
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 08. January 2006, 19:09 »
hi,

war ja schon länger nicht mehr im forum ...

@darkthing , nice das du jetzt auch nen emu machst ... wollte auch schon immer einen machen, würde auch gern mit helfen wo ich kann (hab mich zumindest schon einmal bischen in die thematik eingelesen) .

mein haupt interesse wär allerdings das ganze zu versuchen zu porten ...

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 08. January 2006, 19:38 »
Wir sind inzwischen zu fünft, was für ein vergleichsweise kleines Projekt schon ziemlich viel ist. Damit eine anständige Koordination möglich ist, werde ich wohl erstmal keine Member mehr aufnehmen. Wenn wir irgendwann mal weiter gekommen sind und der Source zu umfangreich für eine Hand voll Leute ist oder eine weitere emulierte Platform unterstützt werden soll (z.B. PowerPC oder AMD64) werde ich das hier posten und es können sich wieder Leute bei mir melden.

In der Zwischenzeit wird es vermutlich hin und wieder mal News und Binaries geben.

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 14. April 2006, 16:45 »
Hi!
Nachdem ja längere Zeit nichts mehr vom Emulator zu hören war, melde ich mich mal wieder: Der Emulator wurde deutlich erweitert und ist jetzt in einer release-würdigen Version. Neue Features sind z.B.
o Bildschirmausgabe in seperates Fenster
o Deutlich mehr Opcodes
o Devices (CMOS und Textmode sind schon teilweise funktionsfähig)
o Interrupts mit Hilfe der IVT

Es gibt leider immer noch keine Windows Version aber die kommt ganz sicher noch! Hier gibts den Download: http://myemu.masen-inhabitants.com/
Wer Bugs findet, kann die an die auf der Website angegebene Adresse schicken und wer Fragen hat kann hier fragen.

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 25. April 2006, 16:35 »
Hallo
So, jetzt gibts endlich ne Windows Version auf der Website! Vermutlich enthält sie einige wenige Features mehr als die aktuelle Linux-Version, aber dafür gibts noch eine kleine Einschränkung: Die Textausgabe in die Konsole funktioniert nicht, aber das was dort stehen würde wird automatisch in die Datei output.txt umgeleitet.

Um das Programm zu testen müsst ihr einfach eines der Beispiele oder einen eigenen Bootsector assemblieren und dann den Emulator so aufrufen:
myemu --platform x86 --debug filename.bin
Wobei --debug optional ist.

Also nochmal ein Aufruf an alle: Testest das Programm bitte, und schreibt was ihr meint.

Achja nochwas: Wenn auf der Website immer noch kein Link auf die Windows Version existiert, solltet ihr euten Browser Cache leeren.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #26 am: 25. April 2006, 17:15 »
Zitat von: DarkThing
Hallo
So, jetzt gibts endlich ne Windows Version auf der Website! Vermutlich enthält sie einige wenige Features mehr als die aktuelle Linux-Version, aber dafür gibts noch eine kleine Einschränkung: Die Textausgabe in die Konsole funktioniert nicht, aber das was dort stehen würde wird automatisch in die Datei output.txt umgeleitet.

Um das Programm zu testen müsst ihr einfach eines der Beispiele oder einen eigenen Bootsector assemblieren und dann den Emulator so aufrufen:
myemu --platform x86 --debug filename.bin
Wobei --debug optional ist.

Also nochmal ein Aufruf an alle: Testest das Programm bitte, und schreibt was ihr meint.

Achja nochwas: Wenn auf der Website immer noch kein Link auf die Windows Version existiert, solltet ihr euten Browser Cache leeren.
Cool, finde ich echt gut. Meinen eigenen Bootloader hat er zwar nicht geschaft, aber den Testloader von test1.asm hat er problemloß ausgeführt. Ein Hallo World in Bunten Farben. Nur wozu den Emulator? Ich habe jetzt keine Lust das ganze Thema hier durchzulesen. Aber ich finde ein Emulator macht doch heutzutage nur sinn, wenn man ihn für sein eigenes OS schreibt, weil es dafür ja noch keinen gibt. Ein anderer Grund wäre natürlich, einfach nur zum lernen. Oder läuft der auch auf deinen eigenes OS? Aber da ich weiß wie schwer so etwas ist, fine ich das schon recht gut. Ist halt noch in der Version 0.1, was sich ja ändern wird. Also, super!!!
In the Future everyone will need OS-64!!!

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #27 am: 25. April 2006, 17:27 »
Ich habs mir jetzt auch mal angeschaut,
find ich super, auch dass du das so schnell geschafft hast

is nur unpraktisch das noch nicht alle Opcodes unterstüzt werden,
ich finde es sollten erstmal alle vom 8086 laufen, viele Betriebssysteme laufen dann schon

und wie siehts eigentlich mit dem 8087, also dem Flieskommacoprozessor aus?
wird der unterstützt? kommt das noch?

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #28 am: 25. April 2006, 17:31 »
@bitmaster: Der Emulator läuft nicht auf meinem OS (was aber mehr am OS liegt ;) ) und eigentlich war das ursprünglich auch nicht geplant. Ich wollte einfach mal was neues ausprobieren, am liebsten ein größeres Projekt und da bin ich halt auf die Idee gekommen. Weil ein Emulator meine ganzen Vorstellungen wie größeres Projekt, platformübergreifend programmieren, mehr über PCs & Hardware lernen, usw. erfüllt hat, hab ich dann auch wirklich angefangen und mir später Verstärkung geholt - vor allem bluecode hat noch einiges gemacht, das sollte auch mal erwähnt werden finde ich ;)

Der Logfile der beim Ausführen von deinem OS im Debug Mode erstellt wird sieht so aus:
0x0:0x7c00 JMP SHORT
0x0:0x7c21 CLI
0x0:0x7c22 MOV AX, 0x7c0
0x0:0x7c25 MOV BX, 0x9000
0x0:0x7c28 MOV SREG, R/M16
0x0:0x7c2a MOV SREG, R/M16
0x0:0x7c2c MOV SREG, R/M16
0x0:0x7c2e MOV SP, 0xffff
0x0:0x7c31 MOV R/M8, R8
0x0:0x7c35 STI
0x0:0x7c36 CALL NEAR
0x0:0x7d0a MOV AX, 0x3
0x0:0x7d0d INT 10
0x0:0x0 ADD R/M8, R8

Also erstmal unspektakulär, aber das Problem ist der INT 0x10. Dabei wird in der IVT nach der Adresse des Int 0x10-Handlers gesucht, aber die wird noch nicht initialisiert, dort steht also 0, dann wird dorthin gesprungen und der RAM komplett abgearbeitet. Da dort nur Nullen stehen 0x0000 dieser ADD-Befehl ist wird der dann endlos lange ausgeführt... Es scheitert momentan also am fehlenden BIOS und der deshalb nicht initialisierten IVT.

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #29 am: 25. April 2006, 17:47 »
Zitat von: scales of justice
Ich habs mir jetzt auch mal angeschaut,
find ich super, auch dass du das so schnell geschafft hast

is nur unpraktisch das noch nicht alle Opcodes unterstüzt werden,
ich finde es sollten erstmal alle vom 8086 laufen, viele Betriebssysteme laufen dann schon

und wie siehts eigentlich mit dem 8087, also dem Flieskommacoprozessor aus?
wird der unterstützt? kommt das noch?

Der aktuelle Stand (also die Version im SVN) kommt mit diesen Opcodes klar:
o AAA, AAD, AAS, AAM
o ADC
o ADD
o AND
o CL*
o CMC
o CMP
o DAS
o DAA
o DEC
o DIV
o HLT
o IN
o INC
o INT
o IRET
o LAHF
o LODSB/LODSW
o MOV
o MOVSB/MOVSW
o MUL
o NEG
o NOP
o NOT
o OR
o OUT
o POP
o POPF
o PUSH
o PUSHF
o RET
o SAHF
o SBB
o SCASB/SCASW
o ST*
o STOSB/STOSW
o SUB
o XCHG
o XOR
o CALL
o J* z.B. je, ja)
o JCXZ
o JMP
o LOOP/LOOPZ/LOOPNZ
Einige davon sind noch nicht 100%ig fertig, aber so grob ist das das was drin ist. Es fehlen vor alllem noch Rotation, Bit-Shifts, LEA, LDS, LES und noch einige mehr. Beim 80186 kommen nur eine Hand voll Opcodes dazu (33 glaub ich) 8 davon sind schon drin. 8087 wird momentan nicht unterstützt ist aber für spätere Relases geplant. Ansonsten gibt es halt noch kaum Devices. Also man kann die Uhrzeit vom CMOS holen, aber es gibt kein Floppy Drive oder so.

Btw, ich hab hier eine Tabelle mit einer Opcode-Übersicht, in der auch steht welche Opcodes schon fertig sind und welche momentan wichtig sind, usw. Ich versuche die mal zu verkleinern und dann als PDF zu veröffentlichen.

----------EDIT----------

Hier ist die Tabelle. Ich hab die halt einfach aus einer Website erstellt, schwer zu sagen ob die vollständig ist, aber das wichtigste ist auf jeden Fall drin. In der Spalte Status steht entweder in grün DONE, dann ist der Opcode fertig implementiert. Oder da steht OPEN in rot, das heißt dann das der Opcode noch nicht drin ist, aber dass ich ihn für wichtig halte. OPEN in blau bedeutet, dass der Opcode erstmal auch nicht beachtet wird. Wie man sieht sind etliche Opcodes im 8086 Teil schon grün und alle anderen rot ;)

n3Ro

  • Beiträge: 288
    • Profil anzeigen
Gespeichert
« Antwort #30 am: 25. April 2006, 22:16 »
Hi!
Netter Emulator, leider hab ich nicht soviel Zeit ihn zu testen, aber das Zeug im Linux-Binary läuft so wie es sollte. Ich habe auch mal den alten Source kompiliert, allerdings scheint es da  nicht so zu laufen wie es sollte:

Log opened
EXEC::0x0:0x7c00 =  ERROR: Invalid Opcode!

       0x0:0x7c00 =  0x0
DUMP::EAX   = 0x0
DUMP::EBX   = 0x0
DUMP::ECX   = 0x0
DUMP::EDX   = 0x0
DUMP::ESI   = 0x0
DUMP::EDI   = 0x0
DUMP::EBP   = 0x0
DUMP::SS    = 0x0
DUMP::ESP   = 0x0
DUMP::CS    = 0x0
DUMP::EIP   = 0x7c00
DUMP::DS    = 0x0
DUMP::ES    = 0x0
DUMP::FS    = 0x0
DUMP::GS    = 0x0
DUMP::EFLAG = 0x2
Log closed


Also entweder liegt es an der alten Version oder dein Emulator mag nicht auf einem 64-Bit System kompiliert werden. Naja. Falls du noch Inspiration suchst, GXemul ist auch ein netter, sauber geschriebener (soweit ich das gesehen haben) Multiplatform Emulator, allerdings hauptsächlich NICHT für x86.
Nice Work!
Agieren statt Konsumieren!

scales of justice

  • Beiträge: 228
    • Profil anzeigen
Gespeichert
« Antwort #31 am: 26. April 2006, 13:29 »
die Befehle auf deiner Liste beim 8086 stehen stimmen aber nicht alle oder?
beispielweise kennt er noch kein "push MemWord", der konnte wenn ichs richtig weis nur Register pushen

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #32 am: 26. April 2006, 13:31 »
Nene, Direktwerte und Speicherstellen gehen auch.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #33 am: 26. April 2006, 16:02 »
Zitat von: n3Ro
Ich habe auch mal den alten Source kompiliert, allerdings scheint es da  nicht so zu laufen wie es sollte

Der Source den wir released haben, ist auch _sehr_ alt und unterstützte mit Sicherheit nicht alle Opcodes der momentanen Version...

Zitat von: n3Ro
Also entweder liegt es an der alten Version oder dein Emulator mag nicht auf einem 64-Bit System kompiliert werden.

Mit Kompatibilität zu 64Bit sollte es meines Erachtens keine Probleme geben, aber sicher bin ich mir nicht, da ich noch nie für einen 64biter was programmiert hab. Wenn DarkThing und du nix dagegen haben, dann könnte man dir den neusten Sourcecode zum Kompilieren für 64bit geben.
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

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #34 am: 26. April 2006, 16:12 »
@n3Ro: So wie es aussieht, steht an 0x0:0x7C00 der Wert 0. Diese alte Version erkennt darin noch kein ADD, also gibts einen Invalid Opcode Fehler. Aber da die ganzen Bootsectoren nicht mit dem Opcode 0 anfangen, wirds wohl eher ein Fehler beim Laden vom Image sein. Du könntest versuchen den Code fürs Laden zu modifizieren (Datei: x86_platform.cpp, Zeile: 124), am 64bit System leigt es vermutlich nicht...
@Fehler in Tabelle: Ich hab einfach die Tabelle von dieser Website in ein OpenOffice Dokument importiert. Ich glaube die Tabelle ist größtenteils richtig, aber ein paar kleinere Fehler hab ich auch schon gefunden...

Btw, ich hab mal den Bootsector von einer DOS 6.22 Installationsdiskette "analysiert". Es fehlen nur noch 5 Opcodes: LDS, LEA, SHL, REPZ, SS: (wobei die letzten beiden eher Prefixes sind). Das Hauptproblem sind aber die BIOS-Ints, da fehlen 0x10, 0x13, 0x16 und 0x19. Sobald das alles drin ist, sollte man DOS mehr oder weniger emulieren können!

----EDIT----
Zitat

Mit Kompatibilität zu 64Bit sollte es meines Erachtens keine Probleme geben, aber sicher bin ich mir nicht, da ich noch nie für einen 64biter was programmiert hab. Wenn DarkThing und du nix dagegen haben, dann könnte man dir den neusten Sourcecode zum Kompilieren für 64bit geben.

Hätte ich kein Problem mit, du musst dich dann bei mir melden und kriegst dann Zugriff aufs SVN. Wir könnten außerdem bald auch mal ne neuere Version für alle releasen.

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #35 am: 11. November 2006, 22:26 »
Hi,
Eine neue Version ist jetzt fertig.  :-)
Es hat zwar alles etwas länger gedauert aber was solls. An Neuerungen gibts dafür einiges: Alle 8086 und fast alle 80186 Opcodes werden emuliert. Bei ein paar gibts noch kleine Probleme, aber im großen und ganzen sollten die funktionieren. Außerdem werden jetzt einige Devices emuliert, namentlich CMOS, PIC, Floppy, DMA und Keyboard. Die sind natürlich bei weitem nicht fertig, aber die Kern-Features sollten bei jedem drin sein. Dann gibt es jetzt noch ein eigenes BIOS, das schon einige wichtige Interrupts bereitstellt.

Naja, DOS läuft immer noch nicht, aber immerhin wird was angezeigt ;) Was sich zum Testen aber ganz gut eignet ist JonOS (http://sail.to/jonos).

Und last but not least gibts endlich ne neue Website, die hässliche graue Seite ist also endgültig Geschichte :)

Link: http://myemu.masen-inhabitants.com/index.php
Danke fürs Testen  :wink:

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #36 am: 11. November 2006, 22:35 »
Nich übel....Macht weiter so!!

Nooooooooooos

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #37 am: 12. November 2006, 00:04 »
@DarkThing: Nicht schlecht. Der direkte Versuch JonOS zum laufen zu bekommen hat nicht geklappt. Euer Emu sagte immer das der Bootsektor ungültig bzw. beschädigt sei. Aber nun habe ich es doch hinbekommen. JonOS hat einen ungültigen Bootsektor. Dort ist die BIOS Signatur falsch. Die Signatur muss so definiert werden: dw 0AA55h und nicht dw 55AAh. Aber das hat ja nichts mit eurem Emu zu tun. Hab mal aus spass versucht ob euer Emu mein altes OS/M zum laufen kriegt. Aber das klappt leider nicht so ganz (bleibt hängen). Aber trozdem, wirklich gute Arbeit. Wenn ihr so weiter macht, kommt ihr bestimmt an VMware ran. ^^

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

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #38 am: 12. November 2006, 13:21 »
@nooooooooos: Thx
@bitmaster: Am meisten sieht man bei GUI 0.0.1. Alles ist sehr bunt und es wird ne Fehlermeldung ausgegeben, aber immerhin ;)

Die nächste Version wird vermutlich nicht mehr so viele Neuerungen haben, sondern hauptsächlich aus Bugfixes und kleineren Änderungen bestehen. Mit etwas Glück funktioniert dann auch DOS... Vielleicht gibts in 0.3 auch nen kleinen Debugger; aber was genau alles dazukommt werd ich noch mit bluecode besprechen.

---EDIT---
Ich hab mal die Tabelle mit den unterstützten Opcodes aktualisiert: Link
« Letzte Änderung: 14. November 2006, 21:39 von DarkThing »

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #39 am: 17. November 2006, 20:15 »
So, wie vor längerer Zeit schon versprochen steht MyEmu jetzt unter der GPL. Der aktuellste Source Code ist in nem SVN Repository, die Adresse ist https://OpenSVN.csie.org/MyEmu/

Außerdem suchen wir noch ein paar Leute. Wer interessiert ist kann sich ja mal den Source Code anschauen und sich hier melden. Wichtig wären vor allem Leute, die sich hauptsächlich um den Device Support kümmern. Also z.B. dem PIC-Device weitere Features hinzufügen. Ebenfalls wichtig ist ein Asm Progger, der sich ums BIOS kümmert.
Und jemand der sich mit Gtk auskennt, wäre willkommen ;)

 

Einloggen