Hallo, bei der Suche nach einem MOS 6502 Emulator in C bin ich auf diese Seite gestoßen: https://www.piumarta.com/software/lib6502/ Ich habe die entsprechende C-Software und die Dokumentation des Emulator runter geladen und was soll ich sagen: ich war mehr als verdutzt, denn eine C-Software, die nahezu nur aus #define statements besteht, habe ich nach mehr als 20 Jahren Erfahrung in C noch nie zuvor gesehen. Dann habe mir trotzdem die Mühe gemacht, diese im MS Visual Studio zu implementieren. Ich war umso mehr erstaunt, dass sie zwar mit ein paar Compiler-Warnungen daher kommt, jedoch ohne jeglichen Fehler erstellt wurde. Die dazu notwendigen .c und .h files, inkl. der Dokumentation sind im Anhang. Jetzt meine Fragen: - warum wird diese Form der Programmierung verwendet ? - welche Vorteile soll diese Art der Programmierung bringen ? - ist dies die übliche Syntax, um z.B. einen Compiler zu schreiben ? Ach so: der Author ist Ian Piumarta, ein Professor an der Kyoto University of Advanced Science, der schon eine illustre Vita hat.
Warum ist es nachts kälter als draussen ? Warum heißt das Huhn Huhn? Die Antwort auf solch existenzielle Fragen lautet immer 42. Oliver
Manfred L. schrieb: > runter geladen und was soll ich sagen: ich war mehr als verdutzt, denn > eine C-Software, die nahezu nur aus #define statements besteht, habe ich > nach mehr als 20 Jahren Erfahrung in C noch nie zuvor gesehen. Hmm. Dann bei Gelegenheit mal beim Obfuscated C Code Contest vorbeischauen :) > Jetzt meine Fragen: > - warum wird diese Form der Programmierung verwendet ? In dem Falle: um die Opcodes in einen Microcode zu überführen, den man dann wiederum sehr einfach ausführen kann. > - welche Vorteile soll diese Art der Programmierung bringen ? Der Microcode ist eine einfachere und generalisierte Art um die CPU zu simulieren, man muss so nicht jeden Opcode extra ausimplementieren (was insbesondere kompliziert wird wenn er über mehrere Takte geht). Und wenn man nicht den Precompiler dafür benutzt, muss man sich halt selber eine Methode überlegen wie man den Microcode zu jedem Opcode ablegt. Und warum sollte man das tun wenn es doch so auch geht? (Zumal man hinterher ja tatsächlich zu übersetzenden Code bekommt, der Compiler also auch nochmal kontrolliert ob man da Mist gebaut hat) > - ist dies die übliche Syntax, um z.B. einen Compiler zu schreiben ? Das ist kein Compiler, sondern ein Emulator :-) Keine Ahnung ob das üblich ist, aber ich halte es zumindest für keine blöde Idee. Einen Compiler würde ich so aber nicht schreiben, dafür gibt es bessere Mittel.
Manfred L. schrieb: > - warum wird diese Form der Programmierung verwendet ? Damals, als es kein Inlining in C gab, war das die Methode Funktionen so zu schreiben dass sie ge-inline-t wurden und sogar als template-Funktionen einsetzbar waren. Bestes Beispiel min und max aus Original C. > - welche Vorteile soll diese Art der Programmierung bringen ? Schnellere Ausführungszeiten, insbesondere da in diesem Programm die Inhalte der Funktionen, die OpCodes nachbilden, ja minimal kurz sind, der calling-overhead relevant werden würde. > - ist dies die übliche Syntax, um z.B. einen Compiler zu schreiben ? Nein, heute gibt es C++ und Templates und Inlining, da muss man nicht mehr so Unübersichtliches schreiben. Eventuell ist der code aber generiert worden, so dass keinen interessiert, ob er unübersichtlich ist.
>tcc run6502.c lib6502.c >run6502.exe temp.bin ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUVWXYZ ... > im MS Visual Studio zu implementieren Es geht auch einfacher wie man sieht.
Larry schrieb: >>run6502.exe temp.bin Intelligenter und ergebnisorientierter geht es mit: >run6502.exe -l 1000 temp.bin -d 1000 +11 -x
> ergebnisorientierter Du musst wohl Informatiker sein. >>run6502.exe -l 1000 temp.bin -d 1000 +11 -x "temp.bin" disassemblieren kann ich auch ohne run6502. Siehe unten. Scheinbar ist der Begriff "Emulator" dir noch fremd. Das Ergebnis eines Emulatorlaufs ist regelmaessig eben nicht ein Disassemblerlisting, sondern das, was die emulierte CPU dabei an Aussenwirkung erzeugt. In diesem Fall sind es die Ausgaben des ebenfalls emulierten Teils des Betriebssystems, die obige Ausgabe erzeugen. Die Frage nach > Intelligenter stellt sich mir da gar nicht mehr.
1 | ROM:0000 LDX #$41 |
2 | ROM:0002 |
3 | ROM:0002 loc_2: ; CODE XREF: ROM:0009j |
4 | ROM:0002 TXA |
5 | ROM:0003 JSR $FFEE |
6 | ROM:0006 INX |
7 | ROM:0007 CPX #$5B |
8 | ROM:0009 BNE loc_2 |
9 | ROM:000B LDA #$A |
10 | ROM:000D JSR $FFEE |
11 | ROM:0010 BRK |
12 | ROM:0010 ; end of 'ROM' |
13 | ROM:0010 |
14 | ROM:0010 |
15 | ROM:0010 .END |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.