interactive-8051-disassembler icon indicating copy to clipboard operation
interactive-8051-disassembler copied to clipboard

Für einen anden Prozessortyp porteiren

Open db5fp opened this issue 4 years ago • 2 comments

Hallo,

ich habe den disassembler zufällig gefunden und er gefällt mir sehr gut, insbesondere die Idee mit den Veweisen der benutzen Funktion nd der Kommentarfunktion. Ich bin gerade bei einen ADSP2181 Code "herauszufinden", dies habe ich bisher mehr oder weniger zu Fuß in notepad++ und einer Tabellenkalkulation gemacht :-( grafik

Welche Stellen im Code müsste ich mir genauer ansehen, um deinen 8051 auf eine ADSP2181 anzupassen?

Vielen Dank und schöne Feiertage!

Frank

db5fp avatar Dec 23 '21 20:12 db5fp

Hallo,

danke für das positive Feedback :) Interessanter DSP, scheint ja recht verbreitet zu sein.

Folgende Sachen sind u. A. wichtig (gilt immer auch für die hpp-Datei):

  • als erstes schau dir mal 8051/instruction.cpp Datei an. Darin ist die Klasse Instruction, die du an das ADSP-Format anpassen musst
  • der Disassembler gehört dann in 8051/disassembler.cpp. Die Idee ist: das Programm erstellt eine Instanz der Klasse Disassembler, und ruft dann die Methode followCodePath für die Startinstruktion auf. followCodePath geht dann rekursiv durch das Binary und folgt allen direkten Calls und Jumps (sofern sie nicht erst zur Laufzeit vom ADSP berechnet werden). Ich habe gerade einen möglichen Disassembler-Code gefunden, evtl. kannst du hieraus einen Teil übernehmen.
  • Beim 8051 ist der Entry Point bei Adresse 0. Ich bin mir nicht 100% sicher, ob das auch beim ADSP der Entry Point ist, kann es mir aber gut vorstellen. Falls nicht, muss du diese Zeile in wxMain.cpp ändern.
  • die Funktion recurseFunction aus 8051/disassembly.cpp wird nach dem Disassemblieren aufgerufen. Für jede Funktionsmarkierung, die in der GUI erstellt wurde, wird der direkt darin stehenden Codeblock ab der Markierungs-Adresse der Funktion zugeordnet. Außerdem werden alle Blöcke, die über Jumps (nicht jedoch Calls) von diesem Block aufgerufen werden, dieser Funktion zugeordnet (sowie Blöcker die wiederum von diesen aufgerufen werden). Außerdem wird noch zwischen Conditional Jumps usw. entschieden. Das musst du entsprechend dem ADSP anpassen, bei dem wird aber zum Glück ebenfalls zwischen Jumps und Calls unterschieden. Außerdem muss in recurseFunction immer das jeweilige Blockende erkannt werden, z. B. wenn eine Return (RET) Instruktion kommt.
  • alle Sachen zu Remap Calls brauchst du wahrscheinlich nicht (ich habe mal das Datenblatt überflogen und es sieht nicht danach aus als ob der ADSP address remapping könnte)

Frohes Schaffen!

Matthias

msrst avatar Dec 26 '21 16:12 msrst

Hallo Matthias,

Danke! Ich habe einen alten disassambler für den 2181 der schon gut läuft, den werde ich versuchen hier einzubauen. Wird aber etwas länger dauern, bis das alles so läuft wie es soll.

Wenn es ein Zwischenergebnis gibt melde ich mich wieder bei Dir.

Gruß Frank

db5fp avatar Jan 05 '22 10:01 db5fp