
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Nach langem Suchen habe ich die Antwort selbst gefunden: > > Deepxs von Mark Haemmerling - Super Programm genau dass was ich gesucht habe > > Leider belegt es den Speicher im internen EEPROM - jetzt hat kein > anderer Treiber mehr Platz Hier ein Beispielprogramm, das zeigt, wie in CCBASIC ohne Assemblermodul ein beliebiges Word des seriellen EEPROMS (24C65) ausgelesen oder beschrieben werden kann. Es wird allerdings ein gepatchter CCBASIC-Compiler benoetigt (siehe mehrvars.zip in der Download Area oder DLL-Switcher auf Idels Homepage). Das Betriebssystem benutzt die drei Systemvariablen FILESTART, FILEOFF und FILELEN, um die EEPROM-Datei zu verwalten. Je nachdem, welche OPEN#-Befehlsvariante in einem CCBASIC-Programm benutzt wird, werden diese Variablen auf unterschiedliche Weise initialisiert: FILESTART wird grundsätzlich auf die erste EEPROM-Adresse hinter dem BASIC-Programm gesetzt (Adresse 4 plus BASIC-Programmlänge). Ein "OPEN# FOR WRITE"-Befehl setzt FILEOFF und FILELEN gleich 0; ein "OPEN# FOR READ"-Befehl speichert die vom CLOSE#-Befehl auf EEPROM-Adresse 2 hinterlegte Dateilänge in FILELEN und setzt FILEOFF auf 0; ein "OPEN# FOR APPEND"-Befehl speichert ebenfalls die Dateilänge in FILELEN und setzt FILEOFF gleich FILELEN. Ein Lesen oder Schreiben mittels INPUT# oder PRINT# findet an der Dateiposition FILEOFF statt. Anschließend wird FILEOFF um zwei inkrementiert. Der PRINT#-Befehl setzt zusätzlich FILELEN gleich FILEOFF, was beim nicht-sequentiellen Schreiben, bei dem FILEOFF auf eine beliebige Dateiposition gesetzt wird, Probleme macht. Man sollte sich deshalb überlegen, den maximalen Wert von FILELEN in einer eigenen Variable zwischenzuspeichern, bis er beim CLOSE#-Befehl benötigt wird. Das folgende Programm ist auf einer mit dem neuen Betriebssystem ausgestatteten C-Control nicht lauffähig (siehe "Neue C-Control"). Im neuen Betriebssystem in der Zugriff auf die Datei-Variablen erheblich einfacher durchzuführen und der PRINT#-Befehl unterstützt bereits das nicht-sequentielle Schreiben und der Fehler beim Überschreiten der Page-Grenzen wurde korrigiert. Weitere Informationen zum Betriebssystem und zum Speicherlayout befinden sich in der Download Area. ' Lesen und Schreiben eines beliebigen Words des seriellen EEPROMs mit Hilfe ' der CCBASIC-Befehle INPUT# und PRINT# ' Mittels FILEOFF ist auch der nicht-sequentielle Zugriff auf die EEPROM- ' Datei moeglich. ' Definitionen zum Ansprechen der EEPROM-Datei DEFINE FILESTART_hi BYTE [44] ' hierfuer wird ein gepatchter CCBASIC-Compiler DEFINE FILESTART_lo BYTE [45] ' benoetigt (siehe mehrvars.zip oder Idels DEFINE FILEOFF_hi BYTE [42] ' Homepage) DEFINE FILEOFF_lo BYTE [43] DEFINE FILELEN_hi BYTE [40] DEFINE FILELEN_lo BYTE [41] ' Definitionen zum Ansprechen des Rechenstacks (spart Variablen) DEFINE PUSH AD[1] ' in einen AD-Port kann man nicht schreiben DEFINE POP DA[1] ' von einem DA-Port kann man nicht lesen ' sonstige Definitionen DEFINE temp word ' Programm PUSH=0 ' Beginn der Datei auf Adresse 0 setzen GOSUB SETFILESTART PUSH=0 ' Lese- oder Schreibposition auf 0 setzen GOSUB SETFILEOFF PUSH=0 ' Laenge auf 0 setzen (ist hier unnoetig) GOSUB SETFILELEN INPUT# temp ' Laenge des BASIC-Programms auslesen PRINT "FILESTART: ";FILESTART PRINT "FILEOFF: ";FILEOFF PRINT "FILELEN: ";FILELEN PRINT "LAENGE DES BASIC-PROGRAMMS: ";temp END ' die EEPROM-Anfangsadresse der EEPROM-Datei auslesen oder setzen #FILESTART RETURN (FILESTART_hi SHL 8)+FILESTART_lo #SETFILESTART FILESTART_lo=POP : FILESTART_hi=POP SHR 8 RETURN ' aktuelle Lese- oder Schreibposition in der EEPROM-Datei #FILEOFF RETURN (FILEOFF_hi SHL 8)+FILEOFF_lo #SETFILEOFF FILEOFF_lo=POP : FILEOFF_hi=POP SHR 8 RETURN ' Anzahl der Bytes in der EEPROM-Datei ' (Nach jedem PRINT#-Befehl setzt das Betriebssystem FILELEN gleich FILEOFF, ' was beim nicht-sequentiellen Schreiben Probleme macht.) #FILELEN RETURN (FILELEN_hi SHL 8)+FILELEN_lo #SETFILELEN FILELEN_lo=POP : FILELEN_hi=POP SHR 8 RETURN Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |