
BASIC-Routinen in periodischen Zeitabstaenden aufrufen und komfortable
Behebung des Stackproblems bei Benutzung einer BASIC-Interruptroutine

Autor: Dietmar Harlos
Datum: 14. Januar 2005


Es wird gezeigt, wie in CCBASIC auf der C-Control Version 1.1 die Funktion
ON TIMER GOSUB aus anderen BASIC-Dialekten nachgebildet werden kann. In
periodischen Zeitabstaenden wird selbsttaetig eine Subroutine (genauer
Interruptroutine) aufgerufen.

Nebenbei wird das Stackproblem bei Benutzung einer BASIC-Interruptroutine
behoben, indem der DCF-77- und der Pseudozufallszahlengenerator-Buffer
zur Zwischenspeicherung des Hauptprogramm-Stacks verwendet wird. Dadurch
kann zwar DCF-77 und der Pseudozufallszahlengenerator nicht mehr verwendet
werden, aber dieses Verfahren hat einige Vorteile gegenueber dem in der
Infosammlung C-Control-intern gezeigten Workaround. Bei letzerem war ein
genaues Verstaendnis des Stackhandlings Voraussetzung zur Nutzung des
Workarounds. Ausserdem bestand die Gefahr, dass durch exzessive Stackbe-
nutzung die oberen Stackeintraege verlorengingen. Beim neuen Verfahren
benutzen Hauptprogramm und Interruptroutine praktisch jeweils einen
eigenen Stack. Der Anwender braucht sich um Stackueberlaeufe oder Stack-
fehler keine Gedanken mehr zu machen.

Normalerweise wird eine CCBASIC-Interruptroutine gestartet, sobald waehrend
der Programmausfuehrung der IRQ-Pin der C-Control auf Masse gezogen wird.
Leider ist dieser Pin nur bei der M-Unit, aber nicht bei der Main-Unit und
der Station herausgefuehrt. Ohne Hardwareeingriff waren bei diesen deshalb
bisher die CCBASIC-Befehle INTERRUPT und RETURN INTERRUPT voellig nutzlos.
Aus diesem Grund wird demonstriert, wie der Timer-Overflow-Interrupt, der
etwa alle 0.13 Sekunden (alle 2.1 Sekunden im SLOWMODE) ausgeloest wird,
benutzt werden kann, um das CCBASIC-Interruptflag zu setzen. Die Folge davon
ist, dass eine aktivierte CCBASIC-Interruptroutine das Hauptprogramm in
periodischen Zeitabstaenden unterbricht. Diese Faehigkeit wird manchmal
sogar als Multitasking, bzw. Multithreading bezeichnet.

Wer die Timer-Funktionalitaet des verbesserten Interrupthandlings nicht
benoetigt, kann das Assemblermodul etwas kuerzen und Platz im internen
EEPROM sparen.

Fuer Verbesserungsvorschlaege oder Hinweise auf Fehler bin ich jederzeit
unter der Email-Adresse dharlos@web.de erreichbar.


Viel Spass beim C-Controllern!
Dietmar
