PDA

[ HOW-TO -> ADS Assembler]





View Full Version: [ HOW-TO -> ADS Assembler]


benj9
02.09.2005, 20:43
Hier mal ne Mini-Anleitung, wie man Assembler schnell selbst macht im ADS (Metrowerks Codewarrior) Compiler (den setz ich jetzt mal als installiert voraus), ist viel einfacher vom Overhead als C.

Anbei ein gepacktes Projekt zur Ansicht, das ist jetzt z.B. ein Miniprogramm, worum es da geht, ist erstmal zweitrangig (BuG, das ist das, worüber wir vorhin pn't haben).

Wenn man das RAR auspackt, entsteht ein Ordner. Man doppelklickt die enthaltene "mcp". Es ist nur eine ".s"-Datei im Projekt, wo man seinen eigenen Code einfügt, ist ersichtlich.

Wenn man auf das Tab "Target" klickt, und dann auf "Release" doppelcklickt, und dann auf den Punkt "Arm Linker" geht, kann man dort die Adresse eintragen, wo es hin kompiliert werden soll (den Entry-Point muss man sich selbst mit z.B. AbraGen berechnen).

Wir bleiben in den Release Settings und gehen auf den Punkt "ARM fromELF". Dort tragt ihr unter Outputfilename ein <KompletterPfad des Ordners>\out". Das wars.

Im Verzeichnis müsst ihr nur noch einmal das "hex2vkp.bat" öffnen und vor allem den Pfad des Referenzfubus anpassen, ihr seht dann schon.

So, jetzt sind die Vorarbeiten erledigt. Jetzt kann man irgendwas programmieren, kompilieren tut mans, indem man in ADS im Projektfenster oben auf das dritte Symbol von links klickt ("Make"), und ab gehts. Danach einfach die "hex2vkp.bat" starten und ein vkp wird erzeugt.

So, das war jetzt nur mal die formale Vorgehensweise. Bei Interesse von irgendjemand poste ich auch gerne mal demnächst ein konkreteres Beispiel, an dem man sieht, was man so machen kann und wie die Syntax im Assembler ist.



BuG
06.09.2005, 20:20
Wo bekomme ich denn die Hex2Vkp.exe her, die da in der .bat steht?

benj9
06.09.2005, 22:55
Hm, eigentlich hatte ich sie glaube ich - zumindest den Link - mal von dir :)

Kann ich ja sonst mal hier irgendwo hochladen, ist bestimmt okay.

BuG
06.09.2005, 23:04
Ah, in den Sourcecodes von Kirik ist sie mit drin. :)

benj9
20.01.2006, 12:58
wem langweilig ist:

http://sources.redhat.com/cgen/gen-doc/arm-arm.html

bzw.

http://sources.redhat.com/cgen/gen-doc/arm-thumb-insn.html

BuG
20.01.2006, 13:47
*langweil* ;)

benj9
20.01.2006, 13:55
*lol*

fiese schleife ;)

thund3r
05.05.2006, 16:41
benj9, was heißt den "Could not place Function_Library_h.o in any Execution region"?
Tia

benj9
05.05.2006, 17:24
Im Project unter Target / Arm Linker kannst du einstellen, wo die Zieladresse des Codes ist (unter Simple). Hat das Projekt mehrere Teile, braucht jedes ne Adresse. Dafür wählt man dann ein Scatter-File. Du hast ja die Sources, guck mal in den OverlayMux, da sieht das so aus:
LR_1 0xA08C8980
{
EX_e_refresh +0
{
OverlayInfoMux_e_refresh.o (+RO +RW)
}

}


LR_2 0xA11463D0
{
EX_e_screen +0
{
OverlayInfoMux_e_screen.o (+RO +RW)
}

}

LR_3 0xA0FD9800
{
EX_code +0
{
OverlayInfoMux_code.o (+RO +RW)
}
}

LR_4 0xA0FC0000
{
EX_funclib +0
{
Function_Library_h.o (+RO +RW)
}
}

LR_5 0xA0FC0C00
{
EX_bufferizer +0
{
mpBufferizer.o (+RO +RW)
}
}
Für jede Datei im Projekt gibts hier einen Eintrag, da steht dann der Filename, endet aber mit ".o". Das LR_1 oder _2 ist einfach ne Nummerierung hoer im File, unwichtig. Diese "EX_" Bezeichner erscheinen dann als Zwischenfiles so im output-Verzeichnis (auch im Target bei Linker einstellen). Im Output-Verzeichnis passt du dann eine der hex2vkp.bat - Dateien entsprechend an.

Die Fehlermeldung sagt, dass er die Function_Library_h.s, die im Project ist, nicht in der scate Datei zuordnen kann. Wenn du meine Source auf deinem Verzeichnisbaum zum laufen bringen willst, musst du die Sachen in Target einmal alle sauber neu auswählen, dann sollte es klappen.

Die Function Library ist nur als Pseudo-Source drin, genau um die Sprünge adressieren zu können

Etwas viel auf einmal, frag ruhig weiter :)

benj9
08.05.2006, 15:41
<OT>
@ benj9:
Ich arbeite mich ja gerade durch das ebook, das du mir geschickt hast, durch, nur habe ich dann gleich mal eine Frage zu deiner Signatur:
Müsste vor dem BEQ (Branch if Equal) nicht irgendein Compare oder so kommen?
</OT>
Da bei den Leuten in dem Thread die NErven ja recht blank liegen, lass uns das besser hier besprechen.

Nein, denn es gibt diverse Befehle wie MOV, ADD, SUB, AND etc., deren Rechenoperation auch das entsprechende Bit setzen, was BEQ auswertet.

So kannst du z.B. bei

MOV R1, #10
CMP R1, #0
BEQ blub

das CMP einfach weglassen, weil der MOV das bereits implizit auf 0 prüft. Konvention ist, dass ein Subprogramm, dass das Resultat in R0 returniert, so verfährt.

Geh mal PDF auf thumb, Sprungbefehle, da steht eine Liste, welche Sprungbefehle es gibt, dortt sind auch die Flags beschrieben, die ausgewertet werden.

BuG
08.05.2006, 15:48
Da bei den Leuten in dem Thread die NErven ja recht blank liegen, lass uns das besser hier besprechen.Was ich in diesem Fall auch mehr als verstehen kann. Dieses Posting war ja dermaßen Offtopic, das ist schon extrem dreist. Komisches <OT>Gequote</OT> bringt da auch nix und um ehrlich zu sein, hasse ich sowas. Wenn es den Leuten bewußt ist, dass sie Offtopic schreiben, sollen sie es sich verkneifen...

So, das nur mal als kurzer Zwischenruf. Weitermachen! ;)

benj9
08.05.2006, 15:52
Ja, versteh ich auch nicht ganz, was das sollte. Bzw. versteh's schon, aber so rum bringt's nix ;).

thund3r
09.06.2006, 15:38
Ich weiß zwar nicht ob es nun hier rein gehört aber ich habe vor den StartMenu on Mainscreen 2.1 etwas zu erweitern und bräuchte dazu viiiieeel Hilfe. Folgende Punkte stören mich nämlich:

1. Keine Möglichkeit vor die Texteinträge unterschiedliche Symbole zu setzen
2. Keine Möglichkeit Parameter an die aufzurufenden Funktionen zu übergeben bzw. die Rückgabewerte anzeigen zu lassen
3. Keine Untermenüs / keine Variablen Einträge (z.b. zeige Punkt "Vibra an "wenn Vibra aus, ansonsten zeige "Vibra aus"
4. Immer wenn ich einen Punkt weiter herunter gehe, wird der Mainscreen aktualisiert - und der Dyn. Provider springt einen Eintrag weiter. Lässt sich dieses weiterspringen irgendwie unterdrücken?
5. wenn der Timer abgelaufen ist und das Menü geschlossen werden soll, muss der MainScreen erst einmal aktualisiert werden, sonst sind noch Reste des Menüs auf dem Display


Nun meine ersten Fragen dazu:

- lässt sich der letze Punkt irgendwie mit einer 'Canvas' regeln (den genauen Sinn / die Funktion einer Canvas habe ich noch nicht so ganz verstanden) oder muss ich den MainScreen nach dem schließen des Menüs noch einmal aktualisieren lassen?
- gibt es irgendwo eine Anleitung wie die Masterpatch Einträge auszusehen haben und wie man die Einstellungen abfragen kann?

BuG
09.06.2006, 17:58
Na da hast du dir aber einen ordentlichen Brocken Arbeit vorgenommen. :lol:
- lässt sich der letze Punkt irgendwie mit einer 'Canvas' regeln (den genauen Sinn / die Funktion einer Canvas habe ich noch nicht so ganz verstanden) oder muss ich den MainScreen nach dem schließen des Menüs noch einmal aktualisieren lassen?Der Canvas ist so eine Art unsichtbare Leinwand, die im Prinzip aus dem Idle-Bild (bzw. Wallpaper, wenn eins gesetzt ist) besteht. Bei jedem Refresh wird zuerst der Canvas gemalt, was dann optisch so wirkt, als würde der Mainscreen an dieser Stelle gelöscht. In Wirklichkeit wird aber nur der Hintergrund oben drüber gemalt. Und danach werden dann Icons usw. oben auf den Canvas gesetzt.
Benutzt man den Canvas nicht, dann kommen evtl. merkwürdige Artefakte heraus, wenn man z.B. eine 3 mit einer 0 überschreibt, erhält man so eine Art 8. Konkret kann ich es dir aber nicht sagen, ob man dein letztes Problem mit einem Canvas fixen kann, da ich diesen Patch nie ausprobiert habe, weil völlig überflüssig für mich.

- gibt es irgendwo eine Anleitung wie die Masterpatch Einträge auszusehen haben und wie man die Einstellungen abfragen kann?Wenn du das meinst, was ich glaube, dann hab ich schonmal im Masterpatch-Thread geschrieben. Wenn nicht, dann mach doch die Frage einfach mal konkret.

benj9
13.06.2006, 15:01
Moin, schaue grade nach längerer Abwesenheit mal wieder rein.BuG hat ja alles beantwortet. Wennich richtig verstanden habe, willst du den Patch "StartMenu on Mainscreen 2.1" ändern. Meistens führt kein Weg dran vorbei, sich den Patch im Disassebler anzuschauen. Lohnend ist auf jedem Fall, den Autor zu kontakten, damit er einem die Source rüber schiebt.

Genießt die Sonne :)

thund3r
14.06.2006, 16:27
Ist die Adresse unter RamProfileNum von der Firmware? Alles was ich schreibend darauf ertappen konnte ist der MP..
/Edit: ich denke die Frage betrifft doch am ehesten 'ADS Assembler' oder soll ich ein Thread für Fragen zum Assembler Code und einen für Fragen zu den Fw Versionen erstellen? Oder für jede Mini-Frage einen eigenen Thread?
Ich denke dass man diesen Thread hier ruhig als allgemeinen zum Patche-Schreiben nehmen könnte^^

BuG
14.06.2006, 19:14
Keine Ahnung. Probier sie doch ohne Masterpatch aus. Und jetzt bitte BTT und nicht sämtliche Fragen, die dir so einfallen, hier rein.

benj9
21.06.2006, 14:29
/Edit: ich denke die Frage betrifft doch am ehesten 'ADS Assembler' oder soll ich ein Thread für Fragen zum Assembler Code und einen für Fragen zu den Fw Versionen erstellen? Oder für jede Mini-Frage einen eigenen Thread?
Ich denke dass man diesen Thread hier ruhig als allgemeinen zum Patche-Schreiben nehmen könnte^^
Am besten machst du nen Thread auf für Fragen zu FW-Funktionalität... mein Wissen wird so langsam aus dem Kurz-/Mittelzeitgedächtnis in die Garbage Collection verschoben ^^

BuG
21.06.2006, 14:52
@thunder
Im Übrigen macht es keinerlei Sinn, auf meine Posts per Edit eines alten Beitrags einzugehen. Was glaubst du, wie hoch die Chance ist, dass ich sowas lese? ](*,)

View Full Version: [ HOW-TO -> ADS Assembler]