Hallo NG, nach längeren Überlegungen möchte ich nun doch gerne den Stack verwenden. Es ist einfach am besten - so denke ich - die betroffenen Register vor einem Funkionsaufruf auf den Stack zu legen und danach wieder zu holen. Kann mir jemand sagen, wo ich die Position und Größe des Stacks im Speicher definiere? Ich verwende die IAR Workbench4. Vielen Dank für jeden Hinweis! Peter
In meinem Linker-File steht das hier: MEMORY { FLASH (rx) : ORIGIN = 0x00100000, LENGTH = 0x00040000 DATA (rw) : ORIGIN = 0x00200000, LENGTH = 0x00010000 STACK (rw) : ORIGIN = 0x00210000, LENGTH = 0x00000000 } Du brauchst also deinen Stack-Pointer nur mit 0x00210000 laden; Der stack wächst nach unten. Mfg Thomas Pototschnig
>Du brauchst also deinen Stack-Pointer nur mit 0x00210000 laden; Der >stack wächst nach unten. Wenn ich für mich sage, dass in einem bestimmten Speicherbereich mein Stack sein soll, reicht es dann, dass ich nur den Stackpointer auf das Ende dieses Speicherbereichs Zeigen lasse? Kann ich dann theoretisch schon den Stack mit push und pop verwenden? Da müsste doch eigentlich der Assembler / Linker nicht zwingend davon wissen - gesetzt dem Falle, dass ich den Speicherbereich nicht anderswo benötige, oder?
Du weißt aber schon wie ein Stack funktioniert? :-) Mfg Thomas Pototschnig
Hey, coole Antwort. Bringt mich super weiter! Danke ;-) - first in last out - push: wert an SP-Zeiger-Adresse schreiben und SP ++ oder -- - pop: SP -- oder ++ und wert von SP-Zeiger-Adresse lesen so ähnlich stelle ich mir nen Stack vor.
OK, fürs Protokoll: es scheint zu gehen. r13 scheint mir der Stackpointer zu sein. Beispiel, um r1 auf den Stack zu legen: // Stackpointer ans Ende der 64KB SRAM setzen LDR r13, =0x210000 // r1 auf den Stapel legen // SP(r13) ist danach 0x0020FFFC PUSH {r1} ---> Hier kommt irgend ein Code // r1 vom Stapel holen POP {r1} PS.: einen Stack habe ich im Assembler / Linker nicht definiert, da bei mir sowieso die ganzen 64KB ein Segment sind. Werde wohl später den Stack nach 1024+1000 legen...
Du brauchst auch keinen Stack definieren - du musst nur den Stackpointer mit einer Adresse laden und das wars. Das einzig sinnvolle ist übrigens den Stack ans Ende des internen RAMs zu legen. Mfg Thomas
> Das einzig sinnvolle ist übrigens > den Stack ans Ende des internen RAMs zu legen. für mich leider nicht :-( ich möchte doch noch nen 6510-Emulator von C# nach ARM7 portieren, den ich geschrieben habe. Und die einzige Adresse, von der ich mit ziemlicher Sicherheit sagen kann, dass ich die nicht brauchen werde, ist der Bildschirmbereich ab 1024 vom C64-RAM. Deshalb denke ich, dass sich da mein ARM-Stack wohl fühlen wird müssen :-) Wobei es bestimmt auch ganz schön cool wäre, den Stack vom 64er gegen den vom ARM laufen zu lassen. Der ARM beginnt am oberen Ende und der 64er am unteren Ende - in der Hoffnung, dass sich die jeweiligen SPs nie kreuzen werden :-)))) Aber jetzt ist erst mal SD-Karte angesagt... Nachdem ich jetzt schon stolzerweise Strings und Werte (Hex und Binär) über RS232 senden kann, hoffe ich, dass ich da in 1-3 Wochen durch bin. Die Zeit ist leider sehr begrenzt hier :-)
Ah, jetzt versteh ich auch deine vorherigen Fragen ... 6510-Emu in ARM7-Assembler? Hört sich interessant an ... Ist das nur die CPU oder VIC und/oder SID auch? Mfg Thomas Pototschnig
naja, was es letztendlich werden soll steht hier: http://www.pippinger.de/content/view/16/30/ Bis dahin wird wohl noch einiges an Zeit vergehen, aber das macht nichts. Ist nur so ein kleines Hobby von mir, wofür ich nicht allzuviel Zeit habe.
Hmm ... das sieht sehr interessant aus :-) Aber eins wundert mich ... Du sprichst C#, aber kein C/C++? Mfg Thomas Pototschnig
Naja, ein bischen Nostalgie soll ja auch noch mit aufkommen. Früher hat man halt diverse Laufschriften etc in ASM programmiert (auch demos genannt :-) Mir gehts auch nicht darum, das Ding so schnell wie möglich über die Bühne zu ziehen. Es macht einfach Freude, nach all dem Resourcenfressendem Zeug, mit dem ich immer täglich so arbeite, mal wieder zu sehen, was so ein kleiner Chip mit 18MHz alles kann. Bin nach wie vor total begeistert von dem kleinen ARM. Auch wenn ich ihn nicht 100% verstehe, macht die Arbeit mit dem Teil echt Spaß!
> kleiner Chip mit 18MHz
Verwendest du die PLL nicht? Ohne USB sind doch 55MHz möglich (mit USB
48MHz)... Oder war das nur ein Verschreiber?
Ich komm ja auch noch aus der alten C64 Zeit ... damals versuchte ich
mich mal an Assembler, habs aber nicht kapiert. War wohl noch etwas zu
jung ...
Hin und wieder kram ich dann zB Zac McKracken raus und zock es nochmal
im Emu :-)
Bin gespannt was da bei deinem SID-Player rauskommt!
Mfg
Thomas Pototschnig
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.