Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03128.jsonl.gz/2974

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.
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:
This is the latest version of PASD with all the drivers and demos. Look at the PASD_manual.pdf for a
description in english.
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)