Mit dem beiliegenden CCBASIC-Compiler für DOS (CCBAS.EXE) ist
es möglich, mehr als die üblichen 24 Byte- oder 12 Wordvariablen
in BASIC-Programmen zu verwenden. Bei der CCBAS.EXE-Datei handelt es sich
um den Original-Compiler von Conrad Electronic, der allerdings an einer
Stelle etwas verändert ("gepatcht") worden ist. Bitte diese HTML-Seite
erst komplett durchlesen, bevor die neuen Extra-Variablen verwendet werden!!
Wenn kein Index angegeben wird, werden die Variablen vom Compiler automatisch positioniert. Beim automatischen Positionieren zählt der Compiler aber unverständlicherweise nicht die Anzahl der definierten Variablen, und so können beliebig viele Variablen angelegt werden, ohne daß der Compiler eine Warnung ausgibt. Das ist ein schwerer Bug im Compiler, der schon vielen Anwendern schlaflose Nächte beschert hat, denn alle Variablen, die nicht mehr in das User-RAM passen, können unter Umständen wichtige Systemdaten hinter dem User-RAM überschreiben.
Man könnte sich diesen Bug zunutze machen, um auf diese Weise einige Variablen im Datenbereich hinter dem User-RAM anzusiedeln. Allerdings müßte der Programmierer dabei genau mitzählen, wie viele (und welche) Variablen bisher definiert wurden und wo diese vom Compiler im Speicher abgelegt werden, denn sie können ja nur mit Hilfe der "automatischen Methode" definiert werden. Bei DEFINE plus Index macht der Compiler einen Strich durch die Rechnung, da er nur einen maximalen Index erlaubt. Die erste Methode ist aber sehr mühselig und fehleranfällig. Die Angabe eines Indexes ist in jedem Fall sicherer.
In der beiliegenden CCBAS.EXE wurden deshalb zwei Werte in der Tabelle
ab Offset $1fba7 abgeändert. Dadurch können bis zu 256 Byte- und 128 Wordvariablen
auch mit Hilfe eines Indexes definiert und so an exakter Stelle im Bereich
hinter dem User-RAM plaziert werden. Von diesen neuen Variablen darf der
Programmierer aber - wie bereits oben erläutert - nicht alle benutzen!
| BYTEINDEX | WORDINDEX | ZU BEACHTEN |
| 1 bis 24 | 1 bis 12 | diese Variablen stehen im ganz normalen User-RAM; es gibt nichts zu beachten |
| 25 bis 28 | 13 bis 14 | es kann keine IRQ-BASIC-Interruptroutine benutzt werden; der IRQ-Pin des Prozessors darf nicht verwendet werden, sondern muß immer auf festem Potential liegen!; die Variablen sind gut verwendbar, denn eine Interruptroutine ist ohnehin nur bei der M-Unit benutzbar - und auch dort nur mit Tricks |
| 29 bis 31 | 15 | es darf kein SYS-Befehl benutzt werden - bzw. wenn BYTE [29] nicht verändert wird, dann überschreibt ein SYS die Variablen auf BYTE [30] und BYTE [31] |
| 32 bis 39 | 17 bis 19 | diese Variablen liegen im GOSUB-Stack und sind deshalb nicht verwendbar |
| 40 bis 45 | 21 bis 22 | die Datendatei im seriellen EEPROM darf nicht benutzt werden |
| 46 bis 52 | 24 bis 26 | viele Betriebssystemroutinen benutzen diesen Speicherbereich zur temporären Datenspeicherung; siehe ROM-Listing |
| 53 bis 54 | 27 | es darf nicht in die Datendatei (mittels PRINT#) geschrieben werden |
| 55 bis 56 | 28 | wird von der RS232 überschrieben; darf nur benutzt werden, wenn RXD auf festem Potential liegt |
| 57 bis 58 | 29 | viele Betriebssystemroutinen benutzen diesen Speicherbereich zur temporären Datenspeicherung; siehe ROM-Listing |
| 59 | - | wird von der SQR-Funktion benutzt |
| 60 | - | dieses Byte wird offenbar nicht vom Betriebssystem benutzt! |
| 61 bis 64 | 31 bis 32 | Code zur Erweiterung der Adressmodi (Pseudo-Adressierungsmodi); nicht verwendbar |
| 65 | - | letztes ueber den I2C-Bus uebertragenes Byte; nicht verwendbar |
| 66 bis 68 | 34 | wird für Zeitberechnungen benutzt; nicht verwendbar |
| 69 bis 76 | 35 bis 38 | hier liegt der Hardwarestack; sehr gut verwendbar wenn keine Assemblerprogramme mittels SYS aufgerufen werden; nur teilweise verwendbar, wenn im Assemblerprogramm mehr als zwei Unterprogrammverschachtelungen auftauchen |
| 77 bis 95 | 39 bis 47 | dieser Teil des Hardwarestacks wird vom Betriebssystem auf jeden Fall benötigt, es sei denn, man schaltet einige Interrupts aus; nicht verwendbar |
| 96 | - | Options register (OPTR); nicht verwendbar |
| 97 bis 256 | 49 bis 128 | Teil des internen EEPROMs (Adresse $101 bis $1a0); kann nur ausgelesen werden; evt. könnte man hier Parameter speichern, die ein BASIC-Programm nur lesen muß oder die nur selten geändert werden |
Zu beachten ist schließlich noch, daß die Extra-Variablen
vom Betriebssystem nach einem Reset unter Umständen nicht initialisiert
(d.h. auf Null gesetzt) werden. Das muß im BASIC-Programm geschehen.
Außerdem ist aus obenstehender Tabelle ersichtlich, daß ein
Schreiben in die falsche Variable das C-Control-System zum Absturz bringen
kann. Das Lesen ist aber in jedem Fall erlaubt.
c0 00 18 00 0c 00 10 00 02 00 01 00 08 00 02 00 00 00 00 00 ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | | | | | | D/A-Ports | | | | | | | | | | | | | A/D-Ports | | | | | | | | | | | Wordports | | | | | | | | | Byteports | | | | | | | Digitalports | | | | | Wordvariablen | | | Bytevariablen | Bitvariablen |
Wer neugierig geworden ist, kann auf der CC1-OS-Project-Infosite mehr Wissenswertes über die neue C-Control erfahren. Auch eine aktive Unterstützung, z.B. als Betatester oder Programmierer, ist gern gesehen.
Viel Spaß mit den neuen Extra-Variablen!
__ _ , _ / ) _/_ ' ) / // / / o _ / ____ __. __ /--/ __. __ // _____ ()/__/_<_</_<__/ / /_(_/|_/ ( / (_(_/|_/ (_</_(_) \_)__ (Dietmar Harlos, Student der Elektrotechnik, Universität
Paderborn)
http://ccintern.dharlos.de |
Diese HTML-Seite wurde
von Dietmar Harlos am 1. September 2000 erstellt. Fehlerkorrektur und Erweiterung am 13. September 2002.
Alle Angaben sind ohne Gewähr. Warennamen werden ohne Gewährleistung der freien Verwendbarkeit
benutzt. Der Autor kann für Fehler und deren Folgen weder eine juristische
Verantwortung noch irgendeine andere Haftung übernehmen. Der Anwender
nutzt alle Informationen auf eigenes Risiko. Teile dieser HTML-Seite dürfen
an Dritte weitergegeben werden, wenn die Quelle genannt wird.