Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: DarkThing am 04. January 2006, 22:28

Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 04. January 2006, 22:28
In den letzten 2 Nächten hab ich mich mal mit dem Schreiben eines eigenes Emulators beschäftigt - also sowas wie Bochs selber machen. Ich hab einfach mal blind drauflos programmiert und bin zu einem "soliden Anfang" gekommen.
Inzwischen hab ich mich auch mal mit der Theorie hinter der Emulation von Prozessoren/PCs beschäftigt: Es gibt 3 Möglichkeiten ein Programm auszuführen
   o 1 - Interpretation: Es wird ein Byte gelesen, decoded, ausgeführt, usw. Relativ einfach, gut erweiterbar (Debugging!), langsam. Bochs scheint diese Methode zu verwenden, mein Emualtor auch
   o 2 - Static Recompilation: Programm wird vor dem Ausführen in den Befehlssatz des aktuellen Prozessors konvertiert. Wäre schnell, ist aber heute nicht mehr praktikabel
   o 3 - Dynamic Recompilation: Genauso wie 2, aber der Code wird Stück für Stück und zur Laufzeit konvertiert. Schnell und auch heute praktikabel, aber Features wie Debugging sind fast unmöglich, außerdem ziemlich schwer zu programmieren. QEMU benutzt diese Technik.

Aber wieder zurück zu meinem Anfang...
Das ganze hat den grandiosen Namen MyEmu, ist in C++ geschrieben und hat momentan ca. 900 Zeilen Code. Man darf aber noch nicht allzu viel erwarten! Momentan kann man dem Emulator nur ein Diskimage mitgeben, dessen "Bootsector" dann in einen virtuellen Arbeitsspeicher an die Adresse 0x7C00 geladen wird - kennt man ja. Da beginnt dann auch die eigentliche Emulation. Allerdings bin ich noch nicht allzu weit - ich hab bisher nur ne Menge MOV-Varianten implementiert und die Befehle HLT und NOP. Das Ziel ist möglichst viel zu unterstützen, Features wie PMode will ich erstmal weglassen - zu kompliziert. Aber ein einfaches RealMode OS sollte man Ende darauf laufen.
Ich würde das Projekt gerne fortsetzen, um das echte Innenleben eines Prozessors besser kennen zu lernen und weil mir die Idee so gut gefäält, aber ich hab leider zu wenig Zeit. Wenn also Interesse besteht würde ich gerne zusammen mit einem kleinen Team weitermachen oder das ganze gleich unter die GPL stellen. Wenn jemand noch Fragen hat kann er die hier posten.

---Downloads---

Binary, Beispiele, Kurze Übersicht über alle Klassen (Linux) (http://home.pages.at/darkthing/myemu.tar.gz)
Die Windows-Version kommt vermutlich in den nächsten Tagen...
Titel: Projekt: Eigener Emulator
Beitrag von: bitmaster am 04. January 2006, 23:30
Boar, echt ne total geile Idee. Nur schade das du es in C++ schreibst (ich kann nur ASM ;) ). Aber ich habe mir soetwas auch schon mal überlegt zu machen. Aber bis jetzt nur überlegt. Ich würde es dann allerdings für mein OS schreiben. Aber die Idde finde ich genial (weil ich sie ja auch hatte ;) ).

bitmaster

PS: Dein Link funktioniert nicht.
Titel: Projekt: Eigener Emulator
Beitrag von: Homix am 04. January 2006, 23:35
hi,
ich wollt auch mal so n Emulator schreiben, aber bin dann zurückgeschreckt, da man doch die ganzen Hardwaresachen wie Floppy und Maus und so korrekt emulieren muss, und das ist doch ziemlich aufwändig.

mfg,
stefan
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 04. January 2006, 23:59
Thx schonmal für die positiven Rückmeldungen, es scheint also Interesse zu bestehen :)

Zitat von: stefan2005
ich wollt auch mal so n Emulator schreiben, aber bin dann zurückgeschreckt, da man doch die ganzen Hardwaresachen wie Floppy und Maus und so korrekt emulieren muss, und das ist doch ziemlich aufwändig.

Es ist schon ziemlich aufwendig überhaupt so weit zu kommen, das man Floppy, usw. emulieren muss/kann ;) Aber aus dem Grund hab ich mir ja überlegt das ganze nicht allein zu machen.

Zitat von: bitmaster
Aber ich habe mir soetwas auch schon mal überlegt zu machen. Aber bis jetzt nur überlegt. Ich würde es dann allerdings für mein OS schreiben

Der bisherige Anfang müsste absolut portabel sein. Wenn du für dein OS also einen C++-Compiler + Standardbibliothek hast sollte man den Emulator ohne Änderung bei dir kompilieren können.

Zitat von: bitmaster
PS: Dein Link funktioniert nicht.

Hm, komisch bei mir funktioniert der...
Versuch am besten mal was mit der Adresse anzufangen: http://home.pages.at/darkthing/myemu.tar.gz
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode am 05. January 2006, 00:45
Ich hätte Interesse an einem Emulator mitzuwerkeln, aber ich hab (noch) keine Ahnung von den Opcodes. Würde mich sehr freuen wenn da irgendwas zustande kämme. Könntest du vllt den sourcecode auch freigeben, damit man sich davon ein Bild machen kann?

btw. myemu gibt nen segmentation fault beim zugriff auf den videospeicher
Titel: Projekt: Eigener Emulator
Beitrag von: hannibal am 05. January 2006, 01:26
architektur?
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 05. January 2006, 15:23
Architektur: Ich hab versucht alles halbwegs flexibel zu halten, aber im Moment gibts nur Ansätze von x86.

Opcodes: Ich hab auch nicht wirklich viel Ahnung von denen ^^. Aber es gibt einige Intel-Manuals, in denen die ganz gut erklärt sind (inklusive Übersicht mit allen Opcodes)

Segmentation Fault: Wie greifst du denn auf den Video Speicher zu? Momentan geht nur sowas:
mov [0xB800], 'A'
Und selbst das macht in der Version von oben noch Probleme (sprich geht nicht). In einer neueren Version funktioniert das problemlos. Außerdem habe ich in der neuen Version angefangen Segmentierung, Interrupts, ... zu unterstützen.

Source Code Freigabe: Ich denk noch über die Lizenz (GPL?) nach. Außerdem werd ich nochmal Code nach zu unschönen Stellen durchsuchen und die überarbeiten. Wenn dann alles geklärt und fertig ist werd ich wohl ein Paket veröffentlichen, dass den Source, Beispiele und einige Dokumente enthält.

Windows Version: Ich hab versucht myemu mit dem Visual Studio .Net zu compilieren. Aber das VS .Net kommt scheint mit solchen Sachen Probleme zu haben:
string s;
if(s != "") {}

Also lass ich das. DJGPP hab ich nur in der 32bit-Version, die aber mit meinem neuen 64bit-Prozessor nicht kompatibel ist. Sobald ich das totzdem compiliert krieg, gibts auch ein Windows-Binary.
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode am 05. January 2006, 18:24
Zitat von: DarkThing
Segmentation Fault: Wie greifst du denn auf den Video Speicher zu? Momentan geht nur sowas:
mov [0xB800], 'A'
Und selbst das macht in der Version von oben noch Probleme (sprich geht nicht). In einer neueren Version funktioniert das problemlos. Außerdem habe ich in der neuen Version angefangen Segmentierung, Interrupts, ... zu unterstützen.


ich hab einfach das Beispiel genommen, versucht auszuführen, dann steht in der Konsole am Ende "Segmentation fault" dran. Dann hab ich das Beispiel abgeändert, so das die mov's in den vram nicht mehr ausgeführt werden und kein "Segmentation fault" trat auf.

btw. bei opensvn.csie (http://opensvn.csie.org) gibts kostenlos und ohne irgendwelche Bedingungen an die Lizenz, ein subversion repository :!:

[edit: Welche neuere Version :?: Ich hab halt die, die du zum Download angeboten hast ausprobiert. Aber wenn du das bereits beoben hast is es ja eh wurscht]
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 05. January 2006, 18:27
Okay, ich hab noch einige Sachen hinzugefügt:
o Bytes in den Speicher schreiben
o VideoDevice (also Textausgabe ist möglich - aber noch nicht optimal)
o Register-Klasse ergänzt (immer noch nicht fertig, der Rest ist aber momentan nicht so wichtig)
o Segmentierung angefangen (CS & SS werden beachtet, lassen sich aber noch nicht ändern ;) )
o Stack-Klasse komplett überarbeitet (wird aber noch nicht eingesetzt)
Zusätzlich exisitiert jetzt ein Minimum an Dokumentation.

Jeder der Zeit und Lust hat mitzumachen, kann sich ja hier melden und sagen, was er gerne machen würde (z.B. einfach nur weitere Opcodes hinzufügen). Derjenige kriegt dann den kompletten Source inkl. allem was dazugehört (6.3MB als .tar.gz). Sobald der Emulator dann eine gewisse Funktionalität bietet, werde ich ihn wohl unter die GPL setzen.

>>>---EDIT---<<<
Die neue Version hab ich noch nicht hochgeladen. Hier der Link für die neue binary:
http://home.pages.at/darkthing/myemu

Und danke für den Link ;)
Titel: Projekt: Eigener Emulator
Beitrag von: Kevin_ am 05. January 2006, 18:27
darkthing: es gibt auch noch mingw und cygwin, wenn du dir die nich installierenw ilslt schick mir den source und ich mach dir ne binary :)
@lizenz: nehm am besten wirklich die gpl
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode am 05. January 2006, 18:39
ok funktioniert jetzt, könntest du mir den Code schicken :?:
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 05. January 2006, 18:43
Okay ich werd ihn dir erstmal per eMail schicken (ca 6,5 MB!!) - wär wirklich toll wenn du mithelfen würdest!  :)

EDIT: Okay, sollte jetzt da sein!
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode am 05. January 2006, 19:31
danke, habs bekommen und bin grad dabei mir des anzuschauen.
Bist du über icq nicht erreichbar :?:
Titel: Projekt: Eigener Emulator
Beitrag von: hannibal am 05. January 2006, 23:36
du willst einen emulator schreiben, legst dich aber nicht mal auf die architektur fest? wie darf man das verstehen? ich nehme mal stark an, dass du opcodes interpretierst und nicht source-code?
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode am 05. January 2006, 23:50
Zitat von: hannibal
du willst einen emulator schreiben, legst dich aber nicht mal auf die architektur fest? wie darf man das verstehen? ich nehme mal stark an, dass du opcodes interpretierst und nicht source-code?

Dem Emulator wird über Kommandozeilenparameter die zu emulierende Architektur übergeben. Alle Prozessoren werden von der abstraktren Basisklasse CPU abgeliten. Nach auswerten der Kommandozeilenparameter wird dann die richtige Prozessorklasse erstellt und die führt dann die Befehle aus. Aber imho wird als aller erstes und auch als wichtigstes x86 emulierbar werden.
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 06. January 2006, 14:39
Zitat von: bluecode
Zitat von: hannibal
du willst einen emulator schreiben, legst dich aber nicht mal auf die architektur fest? wie darf man das verstehen? ich nehme mal stark an, dass du opcodes interpretierst und nicht source-code?

Dem Emulator wird über Kommandozeilenparameter die zu emulierende Architektur übergeben. Alle Prozessoren werden von der abstraktren Basisklasse CPU abgeliten. Nach auswerten der Kommandozeilenparameter wird dann die richtige Prozessorklasse erstellt und die führt dann die Befehle aus. Aber imho wird als aller erstes und auch als wichtigstes x86 emulierbar werden.

Genau so ist es! Man muss also schon den größten Teil neu schreiben, um eine neue Architektur zu unterstützen, aber eben nicht alles ;)

Zitat von: hannibal
ch nehme mal stark an, dass du opcodes interpretierst und nicht source-code?

Ja, ich interpretiere Opcodes.
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode am 06. January 2006, 15:34
Unter cygwin lässt sichs problemlos kompilieren (nur die Exe wird dann 493kB groß  :shock: ). Unter VC++ 2005 lässt sichs auch problemlos kompilieren, wenn man die Strings nicht vergleicht, sondern die Stringlänge mit 0 vergleicht. Ist genau des gleiche. Ich werds später ändern.

@DarkThing: Wie/wann kann man dich am besten erreichen :?:
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 06. January 2006, 17:07
@bluecode: Du kannst ja mal die Windows-Binaries veröffentlichen, wenn du willst. Und das Phänomen der riesigen Exe-Files kenn ich auch von DJGPP - keine Ahnung warum die so groß werden.

@Rest: Es scheint Fortschritte zu machen! Wenn das so weiter geht kann man bald schon sinnvolle (Real Mode-) Sachen emulieren.

Zitat von: bluecode
@DarkThing: Wie/wann kann man dich am besten erreichen

Erstmal ist eMail oder PN ganz gut. Meisten hol ich 1-2mal pro Tag meine Mails ab, also sollte das funktionieren. Ansonsten per ICQ - aber da bin ich manchmal mehrere Tage lang nicht online.
Titel: Projekt: Eigener Emulator
Beitrag von: stultus am 06. January 2006, 17:08
hätte auch interesse mir den source zu lernzwecken anzusehen und evtl. mitzumachen (falls ich was finde das ich kann und noch fehlt ^^), wo gibts nen download?
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 06. January 2006, 19:55
Zitat von: N00B
hätte auch interesse mir den source zu lernzwecken anzusehen und evtl. mitzumachen (falls ich was finde das ich kann und noch fehlt ^^), wo gibts nen download?

Das Projekt ist im Moment Closed Source. Vielleicht wird es später mal zu nem Open Source Projekt, mal sehen. Mitmachen kannst du natürlich trotzdem, wenn du Interesse hast, kannst du mir irgendwie mitteilen, was du gerne machen würdest (können auch einfache Sachen sein, wie Opcodes hinzufügen, Code tunen/warten/überarbeiten/berichtigen) und du wirst Zugriff auf dem kompletten Source bekommen (via SVN).
Titel: Projekt: Eigener Emulator
Beitrag von: Kevin_ 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
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode 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.
Titel: Projekt: Eigener Emulator
Beitrag von: Masen 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 ...
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing 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.
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing 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.
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing am 25. April 2006, 16:35
Hallo
So, jetzt gibts endlich ne Windows Version auf der Website (http://myemu.masen-inhabitants.com/)! 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.
Titel: Projekt: Eigener Emulator
Beitrag von: bitmaster am 25. April 2006, 17:15
Zitat von: DarkThing
Hallo
So, jetzt gibts endlich ne Windows Version auf der Website (http://myemu.masen-inhabitants.com/)! 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!!!
Titel: Projekt: Eigener Emulator
Beitrag von: scales of justice 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?
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing 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.
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing 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 (http://myemu.masen-inhabitants.com/opcode_list.pdf) 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 ;)
Titel: Projekt: Eigener Emulator
Beitrag von: n3Ro 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 (http://gavare.se/gxemul/) ist auch ein netter, sauber geschriebener (soweit ich das gesehen haben) Multiplatform Emulator, allerdings hauptsächlich NICHT für x86.
Nice Work!
Titel: Projekt: Eigener Emulator
Beitrag von: scales of justice 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
Titel: Projekt: Eigener Emulator
Beitrag von: nooooooooos am 26. April 2006, 13:31
Nene, Direktwerte und Speicherstellen gehen auch.
Titel: Projekt: Eigener Emulator
Beitrag von: bluecode 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.
Titel: Projekt: Eigener Emulator
Beitrag von: DarkThing 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 (http://www.arl.wustl.edu/~lockwood/class/ece291/class-resources/opcodes.html) 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.
Titel: Re: Projekt: Eigener Emulator
Beitrag von: DarkThing 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:
Titel: Re: Projekt: Eigener Emulator
Beitrag von: nooooooooos am 11. November 2006, 22:35
Nich übel....Macht weiter so!!

Nooooooooooos
Titel: Re: Projekt: Eigener Emulator
Beitrag von: bitmaster 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
Titel: Re: Projekt: Eigener Emulator
Beitrag von: DarkThing 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 (http://myemu.masen-inhabitants.com/down/opcodes.pdf)
Titel: Re: Projekt: Eigener Emulator
Beitrag von: DarkThing 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 ;)