PASD ist die Abkürzung für Propeller Assembler Sourcecode Debugger. Man kann damit Assembler Programme komfortabel debuggen. PASD kann Breakpoints setzen, und den Assembler- Code zeilenweise durchsteppen. Zusätzlich kann das Main-RAM und das Cog-RAM detailliert betrachtet werden.

Konzept

Das Debugger-System besteht aus einem PC-Programm, einem Spin-Objekt und einem kurzen Debug-Kernel, der am Anfang des zu debuggenden Codes eingefügt werden muss. Der Debug-Kernel ist nur 12 longs gross, und ermöglicht die Kommunikation mit dem PASD-Spin Treiber, der in einem eigene Cog läuft. Dieser Spin-Treiber kommuniziert über die serielle Programmierschnittstelle mit dem PC und dem darauf laufenden Anzeige-Programm. Ausser den Pins 30 und 31 bleiben also alle IOs des Propellers frei verfügbar, während dem Debuggen.

Ausser den 2 Pins und den 12 longs im Code, belegt der Debugger noch die obersten 8 Bytes des Main-RAMs und natürlich 1 Cog. Alles andere ist uneingeschränkt nutzbar. Zur Zeit kann nur 1 Cog auf einmal "gedebuggt" werden, denkbar wären aber auch eine Version von PASD, die alle verbleibenden 7 Cogs debuggen könnte.
Screenshot

Bedienung

Der Code wird ganz normal im Propeller-Tool erstellt und danach in den Propeller geladen (F10). Der Code muss das PASDebug Objekt enthalten, und am Anfang des Assemblercodes muss der kleine Debugger Kernel eingefügt sein. Danach wird PASD.exe gestartet und darin mit "Open Spin-File" das erstellte File geladen. Das Spin File muss im Propeller-Tool frisch gespeichert worden sein, damit es dem Code im Propeller entspricht. PASD lädt nun über den Spin-Treiber den Code und ordnet ihn den einzelnen Zeilen des Sourcecodes zu. Es enthält dazu einen einfachen Parser, der erkennt, ob eine Zeile Instruktionen enthält, oder nicht. Komplizierte Sourcecode Konstruktionen kann der Parser evt. nicht richtig erkennen. Man erkennt die richtige Zuordnung relativ leicht an initialisierten Daten am Ende des Codes, wenn die Hexzahlen in der 1. Spalte den Initialisierungswerten entsprechen.
Die hellblau unterlegte Zeile zeigt die als nächstes, auszuführende Zeile an. Man kann nun mit F7/F8 Zeile für Zeile in Einzelschritten abarbeiten, oder mit F5 den Code ab da starten. Vorher sollte man allerdings duch setzen eines Häckchens am Anfang der gewünschten Zeile einen Breakpoint setzen. An dieser Stelle stoppt dann die Ausführung des Codes, und man kann das RAM und die Flags (unten in der Statuszeile) anschauen. Man kann auch mehrere Breakpoints setzen. WICHTIG: Man darf keine Breakpoints auf Zeilen setzen, die währen der Laufzeit modifiziert werden. Oft werden zu modifizierende Werte mit 0-0 bezeichnet, in dem Fall erkennt PASD die Gefahr und gibt eine Warnung aus (auch bei einer "ret"-instruktion wird gewarnt, da diese auch zur Laufzeit, vom call, verändert wird).
Erreicht der Code nie einen Breakpoint, so kann mit F6 (Stop) abgebrochen werden. Leider ist es dabei nicht möglich, die Stelle an der abgebrochen wurde zu erkennen, dazu fehlt dem Propeller eine Interrupt Möglichkeit. Statt dessen wird der Cog gestoppt und neu gestartet, so dass man sich nach einem F6 wieder am Anfang befindet. Das ganze CogRAM wird dabei neu geladen, der Inhalt entspricht also leider nicht dem Zustand der beim Abbrechen herrschte.

Memory Viewer

Nach jedem Step oder Break wird der Inhalt des ganzen Cog-RAMs übertragen, sowie ein Teil des Main-RAMs (oder -ROMs). Diese Daten lassen sich in 2 Zusatz-Fenstern anzeigen, indem man den entsprechenden Menüpunkt im Debugger Menü auswählt.
Im Cog-RAM Viewer werden alle 512 longs in einzelnen Zeilen angezeigt. Die Werte sind als Hex und Dezimalzahl verfügbar, und dahinter wird auch das Label der Codestelle oder Variable angezeigt. Die letzten 16 longs sind die SpecialPurposeRegister, auch bei diesen wird das Label angezeigt.
Hat sich ein Wert geändert, seit der letzen Anzeige, so wird er hellgrün unterlegt. Hellrot unterlegte Zeilen zeigen an, dass sich dort ein Breakpoint befindet, und der Wert nicht dem tatsächlich ausgeführten Code entspricht (An Breakpoints wird die Instruktion durch ein jmpret Break ersetzt, und nach dem Break die richtige Instruktion aus einer Kopie des Codes als Single Step ausgeführt).
Das CogRAM wird auch links vor dem Sourcecode angezeigt, und bei jedem Break oder Step aufgefrischt. Hier werden allerdings auch an Break-Positionen die dort auzuführenden Instruktionen angezeigt. Dass das CogRAM 2 mal auf verschiedene Weise angezeigt wird, ermöglicht das Betrachten der aktuellen Code-Stelle zusammen mit den gerade beeinflussten Variablen oder SpecialPurposeRegistern.
Wird eine Zeile durch klicken in die erste Spalte ausgewählt, so wird unten, der Wert als 32Bit Binärzahl angezeigt. In diesem Feld kann auch ein neuer Wert für diese Speicherstelle eingegeben werden. Dazu die Binärzahl löschen und dann "=dezimal" oder "=$hex" in das Feld schreiben (statt dezimal und hex den gewünschten Wert in diesem Format), und danach Update anklicken.

Vom Main-RAM/ROM werden nur 128 longs geladen und angezeigt, da die Übertragung der vollen 64 kByte zu lange dauert. Der Bereich kann einfach durch Angabe der Startadresse gewählt werden. Gibt man als Adresse "PAR" an (Default), so wird der Bereich ab der Addresse, die im PAR-Register gespeichert ist, angezeigt. Meistens befinden sich ja da die gemeinsamen Assembler/Spin Variablen.
Es sind verschiedene Anzeige-Modi möglich, die unten im Fenster ausgewählt werden können: longs, words oder bytes, in Hex, dezimaler oder binärer Darstellung.

Installation

Entpacken Sie die ZIP-Datei in ein beliebiges Verzeichnis, und kopieren Sie die PASDebug.spin Datei in das gleiche Verzeichnis, in dem sich auch die anderen Spin-Treiber befinden (Keyboard.spin usw).
PASD.exe ist die direkt lauffähige Anwendung und nicht ein selbstentpackendes Archiv oder Setup Programm. Wenn gewünscht erstellen Sie ein Desktop Icon, durch Rechtsklick auf die Anwendung und danach im PopUp Menu: Senden an../ Desktop.
Bei der Anwendung des Debuggers ist es wichtig, dass nur immer ein Programm den COM-Port zum Propeller belegen darf. Wenn man also den Code vom Propeller-Tool in den Propeller lädt, muss PASD den Port vorher freigegeben haben, danach sollte er möglichst einfach wieder zu öffnen sein. Dafür wurde der Auto-Modus (im COM Menü) geschaffen, der immer beim Minimieren des Haupt-Fensters den COM-Port freigibt, und beim Wiederherstellen des Fensters den COM-Port wieder belegt (Minimieren heisst verkleinern auf die Taskleiste unten durch Klick auf das [_] Feld oben rechts im Fenster).
Weitere Informationen zu den einzelnen Menüpunkten findet man in der Datei: PASD_manual.pdf (allerdings in Englisch).

Download PASD

Die neuste Version von PASD mit allen Treibern und Demos als ZIP-Datei:

Download: PASD_03.zip (240 kB) Version 0.3 for Windows
Download: PASD_04.zip (247 kB) Version 0.4 for Windows
Download: PASD_05.zip (248 kB) Version 0.5 for Windows
Download: PASD_06.zip (248 kB) Version 0.6 for Windows (also for BST)
Download: PASD_07.zip (248 kB) Version 0.7 for Windows (also for BST)
This is the latest version of PASD with all the drivers and demos. Look at the PASD_manual.pdf for a description in english.