Weißt Du zufällig, ob die originalen IEC-Routinen mit Jitter auf dem Bus klarkommen?
Der Takt kommt (beim Laden) von der Floppy, die jittert am echten Rechner nicht mehr oder weniger als an deiner Konstruktion.
Weißt Du zufällig, ob die originalen IEC-Routinen mit Jitter auf dem Bus klarkommen?
Der Takt kommt (beim Laden) von der Floppy, die jittert am echten Rechner nicht mehr oder weniger als an deiner Konstruktion.
Ist schon übel: Alle Befehle, die auf SRAM zugreifen, brauchen insgesamt (mindestens) zwei ARM-Zyklen.
Einen zum Lesen des Befehls, einen zum Speicherzugriff? Der M0 hat ja nur einen AHB-Port für alles, getrennte Ports für Befehle und Daten gibts IIRC erst ab Cortex M3.
aber ich frage mich trotzdem, warum es die Abweichung (auch abseits von PIO) überhaupt gibt - Probleme mit Contention sollte es eigentlich Single Threaded und ohne DMA nicht geben
Modelliert der Emulator denn auch die Waitstates der APB-Bridge und (falls verwendet) die zusätzlichen Zyklen und Waitstates für atomare Registermodifikationen (Datenblatt Sektion 2.1.2)?
Wenn du dem Compiler das Optimieren verbietest ist der erzeugte Code typischerweise nicht optimal.
Die ersten beiden ldr/movs/ldrb lesen die Operanden?
Sieht so aus.
Kann man das irgendwie beschleunigen?
Ja, mit -Os oder -O2 compilieren dürfte besseren Code erzeugen. Wenn man die Optimierungen verbietet erkennt der Compiler ja nicht mal, dass er die Basisadresse der Datenstruktur schon in einem Register hat und nicht nochmal neu erzeugen muss.
Das wäre so eine Stelle gewesen, an der ich gedacht hätte, dass eine globale/statische Instanz von vic eigentlich was hätte bringen sollen...
Bedenke, dass ARM-Instruktionen nur 16 oder 32 Bit breit sein können und eine Adresse 32 Bit braucht - die kann typischerweise nicht mit einer Immediate-Instruktion geladen werden sondern kommt oft aus Konstantenpools in Reichweite eines anderen Registers, zB PC.
Seltsam
Vermutlich ist bei der Argument-Variante die Adresse schon in einem Register während sie bei der global-Variante erst geladen werden muss?