Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Dateiverwaltung, Lesen u. verändern d. Dateizeigers Kategorie: Programmierung Basic (von Dietmar Harlos, Homepage - 28.03.2004 23:30)
 Als Antwort auf Re: Dateiverwaltung, Lesen u. verändern d. Dateizeigers von Andreas - 27.03.2004 13:29

> 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
PRINT "FILESTART: ";FILESTART
PRINT "FILEOFF: ";FILEOFF
PRINT "FILELEN: ";FILELEN
PRINT
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

Bisherige Antworten:

Re: Dateiverwaltung, Lesen u. verändern d. Dateizeigers (von wolfgang - 24.03.2005 8:49)