Hallo Ingo,

Du musst die Stacks entsprechend einrichten. Die Variablen werden bei der byval Option in einem eigenen Speicherbereich kopiert und dort übergeben, dem sogenannten Frame. Die Adressen zu den übergebenen Variablen werden in den Softstack gespeichert. Die Rücksprungadressen aus den Sub-Routinen und Funktionen sind auf dem HW-Stack. Diese Speicherbereiche befinden sich am Ende des SRAM.

Gehe in die Optionen / Compiler / Chip und setze die
Framesize auf 48
Softstack auf 16
HW-Stack auf 32

dann funktioniert Dein Programm, wie Du es geschrieben hast. Weiters hast Du noch jeweils einige Bytes an Reserve.

16 Byte aus dem Frame werden ausserdem noch für Umwandlung von nummerischen Variablen in Strings für Ausgabe bei Print und LCD verwendet.

Schau mal in der Hilfe unter $DBG nach.
Mit diesem Feature kannst Du die Belegung in diesen Speicherbereichen abschätzen.

Füge das Statement $DBG am Programmanfang ein. Lass das Programm im Simulator laufen. Dann kannst in der SRAM Ansicht nachsehen, wieviel Bytes vom jeweiligen Bereich verwendet wurden. Das sind alle Bytes, welche in der ASCII-Darstellung nicht mehr den Initialiserungswert (durch $DBG) F für Frame, S für SoftStack und H für HW-Stack haben.

Viele Grüße Josef