Das Interesse der CC1-OS-Projektteilnehmer ist leider verebbt. Aus diesem Grund ist das Projekt bis auf weiteres eingestellt.
Eine lauffähige, nach bisherigen Rückmeldungen fehlerfreie Version des neuen Betriebssystems kann auf der Download-Seite des CC1-OS-Projekts heruntergeladen werden.
Wer das neue Betriebssystem in einen Kontroller brennt und austestet, sollte seine Erfahrungen in das Forum zur C-Control-1 stellen.
Fähige Leute, die Interesse an einer verbesserten und erweiterten C-Control-1 haben, werden hiermit aufgefordert,
die Hard- und Software der C-Control weiterzuentwickeln. Ein wenig Zeit und Lust ist allerdings Voraussetzung.
Im CC1-OS-Project geht es um die Verbesserung des Betriebssystems der C-Control-1. Ziel ist, allen Anwendern kostenlos ein bugfreies, erweitertes Betriebssystem zur Verfügung zu stellen, das mit Hilfe einer Programmerplatine in einen EPROM-Mikrokontroller gebrannt werden kann. Der gesockelte C-Control-Chip der Main-Unit kann dann durch den selbstgebrannten Kontroller ersetzt werden.
Das existierende Betriebssystem der C-Control soll von seinen Bugs befreit und durch einige zusätzliche Features (z.B. neue RS232-Befehle, mehr Geschwindigkeit, mehr Variablenspeicher) ergänzt werden. Darüberhinaus sollen einige Assemblerprogramme (Firmware) im zusätzlichen Speicher des EPROM-Mikrokontrollers untergebracht werden, die auf möglichst einfache Art in BASIC und eigenen Assemblerprogrammen benutzbar sind.
Conrad Electronic wurde über das Projekt informiert und hat gegen eine Verbesserung der C-Control nichts einzuwenden. Wer also Ideen und Wünsche zur neuen C-Control hat, kann mir eine e-mail schicken!
Alle Leute, die am Projekt teilnehmen möchten, können sich in die Mailing List eintragen.. Einfach eine leere Mail an cc1-os-project-subscribe@hs-control.de senden und auf die Bestätigungs-Mail antworten. Wir suchen immer noch Leute, die auf die eine oder andere Art am Projekt teilnehmen wollen.
Wer sich in die Mailing List einträgt, muß sich kurz vorstellen. Für die anderen Projektteilnehmer ist zum Beispiel interessant, welche Hardware jemand besitzt und in welchen Sprachen (CCPLUS, CCBASIC, Assembler, VisualBASIC, C, ...) Programmierkenntnisse vorliegen.
Datum |
Veränderungen |
01. März 2002 |
erste Version dieser Seite erstellt |
02. März 2002 |
es gibt eine Mailing List zum Projekt |
11. März 2002 |
Einführung etwas ausführlicher |
13. März 2002 |
Glossar durch C-Control, neue C-Control, Token und User ergänzt |
14. März 2002 |
FAQ: Frage nach zusätzlicher Hardware, Verkauf von Chips und M-Unit |
16. März 2002 |
FAQ: Speichertypen und Buchstabenkürzel erklärt |
02. April 2002 |
Status des Projekts erweitert |
01. Mai 2002 |
|
14. Mai 2002 |
Aktualisierung der Teilnehmerliste |
23. Mai 2002 |
Informationen zum neuen CCBASIC-Compiler (von Martin Sinn) |
30. Sep. 2002 |
Teilnehmerliste aktualisiert |
14. Jan. 2003 |
Preview des Betriebssystems veröffentlicht |
Es folgt eine Liste, der Dinge, die bereits umgesetzt wurden und die noch programmiert werden müssen. Diese Liste kann sich noch erweitern, falls jemand noch eine gute Idee hat.
Die bisherige C-Control konnte man in BASIC und Assembler programmieren. BASIC-Programme werden bekanntlich im externen EEPROM gespeichert, Assemblerprogramme im internen EEPROM. Leider ist die Größe des internen EEPROMs eingeschränkt, so daß Assemblerprogramme nur maximal 255 Byte groß sein dürfen. Es gibt für die C-Control diverse, fertige Assemblermodule, die per SYSCODE-Befehl in ein BASIC-Programm eingebunden und per SYS aufgerufen werden. Zum Beispiel existiert ein Modul zum Zugriff auf das externe EEPROM (DeepXS) und LCD-Routinen. Leider kann man wegen der Größenbeschränkung des internen EEPROMs meist nur ein Modul verwenden. Da ein EPROM-Mikrokontroller wie der 68HC705B16 über rund 15 kB EPROM-Speicherplatz verfügt und das bisherige Betriebssystem nur 6 kB groß ist, können einige Module (rund 30) im zusätzlichen Speicher untergebracht werden.
Meine Frage daher: Welche Routinen bindet Ihr zur Zeit per SYSCODE in Eure Programme ein? Sind das nur Eigenentwicklungen oder auch fertige Routinen (z.B. DeepXS)? Falls jemand selbstgeschriebene Routinen besitzt soll er mir diese bitte inklusive etwas Dokumentation zusenden, damit sie in das EPROM der neuen C-Control übernommen werden können.
Ein MC68HC705B16 kann 16 kB adressieren. Wir müssen uns Gedanken machen, wie wir die verschiedenen Speicherbereiche des Chips am sinnvollsten
belegen.
$00-$1f: Die I/O-Ports (32 Byte) |
||
$20-$4f: Page 0 User EPROM (48 Byte)
|
||
$50-$ff: RAM1 (176 Byte)
|
||
$0100-$01ff: internes EEPROM (256 Byte) |
||
$0200-$0250: Bootstrap ROM I (80 Byte) |
||
$0250-$02ff: RAM2 (176 Byte)
|
||
$0300-$3dfd: EPROM (15104 Byte)
|
||
$3e00-$3fef: Bootstrap ROM II (496 Byte) |
||
$3ff0-$3ff1: RESET2 (für B16) |
||
$3ff2-$3fff: User vectors (Interruptvektoren; 14 Byte) |
Wer hat gute Ideen, was man integrieren könnte? Woran hakt es bei der C-Control am meisten? Macht die Implementierung von Fließkommazahlen Sinn?
Es gibt diverse Geräte für den I2C-Bus. Zum Beispiel RAM, EEPROM, Portexpander, LC-Displays, usw. Solche Geräte durch Firmwareroutinen (oder direkt über BASIC-Token) zu unterstützen macht bestimmt Sinn, da durch Verwendung des I²C-Busses keine Portleitungen belegt werden müssen. Nachteilig ist zwar eine geringere Verarbeitungsgeschwindigkeit, aber das sind wir von der C-Control ja schon gewohnt. LCDs belegen selbst im 4-Bit-Modus fünf Portleitungen. I²C-LCD würden keine zusätzlichen Leitungen belegen.
Sollte man die verbesserte C-Control vielleicht grundsätzlich mit 8 MHz Takt ausrüsten? Der Vorteil ist eine höhere Verarbeitungsgeschwindigkeit. Nachteilig ist allerdings der im gleichen Ausmaß ansteigende Leistungsbedarf. Außerdem könnten Probleme mit angeschlossener Hardware auftauchen.
Kennt jemand einen Softwareemulator für die 6805-CPU, bzw. für einen 68HC705-Mikrokontroller? Am Besten wäre ein Freewareprogramm. Die Demoversion von ZAP unterstützt ja leider nur recht kleine Programme.
Falls jemand selbstgeschriebene, getestete Assemblerroutinen besitzt soll er mir diese bitte inklusive etwas Dokumentation zusenden.
Wir müssen nach wie vor folgende Aufgabengebiete vergeben. Falls jemand Lust hat, eine oder mehrere Aufgaben zu übernehmen, soll er sich bitte melden.
Alle Firmwareroutinen sollen auf einfache Art und Weise aus einem Assemblerprogramm aufrufbar sein. Aus diesem Grund sollten (nach Möglichkeit) nur der Akkumulator (A) und das Indexregister (X) benutzt werden, um Parameter an eine Firmwareroutine zu übergeben. Auch Rückgabewerte sollen nach Möglichkeit nur im Akku oder Indexregister zurückgeliefert werden.
Um unsere Firmwareroutinen von BASIC aus aufzurufen, plane ich eine Art "Konverterroutine", die die von BASIC auf den Stack hinterlegten Übergabeparameter in den Akkumulator und in das Indexregister kopiert, anschließend die gewünschte Firmwareroutine aufruft und die Rückgabewerte wieder auf den Stack schreibt. Beispiel: Wenn der Einsprung für eine Firmwareroutine auf Adresse $303 liegt und im Akku der Wert 123 übergeben werden soll, schreibt man in BASIC "SYS CCE_CALL &h303,123". Auf diese Weise kann von BASIC aus jede beliebige Betriebssystemroutine aufgerufen werden. Für Firmwareroutinen, die in BASIC sehr häufig benutzt werden müssen, könnte man eine zusätzliche Einsprungadresse unterstützen, die die Aufgabe der Konverterroutine übernimmt.
Bitte beim Entwickeln von Firmwareroutinen, die bestimmte Ports belegen, immer beachten, daß die Kompatiblität zur Original-Hardware (z.B. Starter-/Applicationboard) gewahrt bleibt.
Wir brauchen noch ein Glossar, um einige Begriffe zu erklären, damit wir nicht aneinander vorbeireden:
Jeder Anwender, der eine neue, verbesserte C-Control einsetzen möchte, braucht eine C-Control-Main-Unit, ein Programmerboard, einen OTP-Mikrokontroller, ein 15-Volt-Netzteil und eine Programmiersoftware. Das Programmerboard wird gerade von zwei Projektteilnehmern entwickelt und soll für unter 50 EUR (also zum Selbstkostenpreis) an alle Interessierten verschickt werden. Es kann für diverse OTP-Mikrokontroller, bis hinauf zum B32, verwendet werden. Einen OTP (MC68HC705B16CFN) gibt es bei Conrad Electronic unter der Bestellnummer 170298 für EUR 15,31. Eventuell werden wir noch einen günstigeren Anbieter finden oder das Programmerboard mit einem (unprogrammierten) OTP ausliefern. Als Programmiersoftware kommt die Freeware PGMR5 Version 1.5 von Ralf Stockmann in Frage.
Zur Verdeutlichung folgen ein paar Bilder. Die meisten können durch anklicken vergrößert werden.
EPROM-Kontroller mit Fenster |
Programmerplatine (Vorserienmodell) |
C-Control-Chip von Conrad Electronic |
|||
|
|
||||
Nahaufnahme |
in der Main-Unit |
Oberseite |
Unterseite |
MC68HC05B6 |
MC68HC705B16 |
Hier folgen einige Frequently Asked Questions, also häufig gestellte Fragen zum Projekt
Wofür stehen die Abkürzungen RAM, ROM, PROM, EPROM und EEPROM?
Es handelt sich um verschiedene Arten des Speichers. Ein Speicher setzt sich aus Speicherzellen zusammen, die jeweils ein Byte, also Werte zwischen 0 und 255
speichern können. Jede dieser Speicherzellen kann eindeutig über ihre Adresse angesprochen werden. Die C-Control hat zum Beispiel einen Adressraum der bei
Adresse 0 startet und bis Adresse 8191 reicht. Sie kann demnach 8192 verschiedene Speicherzellen ansprechen. Ihr Speicher ist also 8 Kilobyte (8 kB) groß.
Allerdings stetzt sich der Speicher aus verschiedenen Speicherarten (RAM, EEPROM und ROM) zusammen, und auch die I/O-Register belegen ein Stück des
Adreßraums.
Festwertspeicher |
Es handelt sich um Speicher, der im normalen Betrieb nur ausgelesen werden kann. Man unterscheidet einige Varianten (ROM, PROM, EPROM, EEPROM) danach, ob der beliebig oft lesbare Inhalt irreversibel (nicht umkehrbar) oder reversibel (umkehrbar) eingeschrieben wird und auf welche Weise dies geschieht. Festwertspeicher sind nichtflüchtige Speicher, das heißt, ihr Inhalt bleibt auch bei Stromausfall und nach dem Abschalten erhalten. |
ROM |
Die Abkürzung ROM steht für read only memory. Dieser Speicher wird vom Hersteller maskenprogrammiert. Ähnlich wie bei einem
Fotonegativ liegen die Daten in einer Maske und werden bei der Produktion fest in der Halbleiterstruktur abgelegt. Die Daten können weder
elektrisch noch optisch gelöscht werden. Das Betriebssystem der C-Control steht üblicherweise in einem solchen ROM. |
PROM |
Jedes Bit im Programmable ROM ist nur einmal programmierbar. Das Programmieren wird vom Anwender mit Hilfe spezieller Programmiergeräte durch „Einbrennen" der Schaltwege mit kurzen, kräftigen Stromstößen durchgeführt. Dieser Vorgang ist irreversibel. Nach dem Programmieren verhält sich der PROM wie ein ROM. |
EPROM |
Beim Erasable ROM nutzt man die selbe Technik zum Programmieren, wie bei den PROMs. Das EPROM benötigt eine
Programmierspannung, die meist um ein Vielfaches höher liegt als die Betriebsspannung. Zum Programmieren wird ein Zusatzgerät, der
sogenannte EPROM-Programmer verwendet. Durch Ausnutzung der Eigenschaft von Halbleitern bei Einfall von UV-Licht mit
Ladungsverschiebungen zu reagieren, lassen sich die Daten auch wieder löschen. Deshalb beinhalten diese Speicherbausteine ein
Quarzglasfenster, durch das der Chip zum Löschen mit hartem UV-Licht betrahlt wird. Der Löschvorgang dauert einige Minuten. Es können
einige Tausend Programmierzyklen erreicht werden. |
EEPROM |
Beim Electrical Erasable ROM besteht die Möglichkeit die Speicherzellen durch Spannungsimpulse sowohl zu programmieren, als auch zu
löschen. Die Programmierzeit ist relativ lang und die Anzahl der Programmierzyklen ist begrenzt (rund 10000 bis 1 Million). Im Gegensatz zu
EPROM-Speicher können die EEPROMs aber meist in der Schaltung (In-Curcuit) programmiert und gelöscht werden. |
Flash |
Flash-Speicherchips sind nichtflüchtige Bausteine für Schreib-/Lesespeicher mit sehr geringen Zugriffszeiten (zwei Millisekunden). Sie sind
funktionell mit einem EEPROM vergleichbar, müssen aber blockweise (mindestens 256 Bytes) beschrieben und gelöscht werden, während
sich ein EEPROM byteweise löschen läßt. Flash-Speicherchips sind mit „Schreib-Lese-ROMs" vergleichbar und können die gespeicherten
Daten 100 Jahre lang ohne Stromzufuhr halten. Die meisten Flash-Speicher können allerdings nur 1000 mal wiederbeschrieben werden. |
RAM |
Beim Random Access Memory handelt es sich um flüchtigen Speicher, das heißt der Inhalt geht bei Stromausfall verloren. Nach dem
Einschalten ist der Inhalt in der Regel undefiniert und muß initialisiert werden. Die Speicherzellen des RAMs können sehr schnell ausgelesen
und beliebig oft verändert werden, darum handelt es sich um den Speichertypus, auf den am meisten zugegriffen wird. |
Kann man statt dem B16-Mikrokontroller auch den MC68HC705B32 einsetzen? Dieser Kontroller hat mehr EPROM-Speicher.
Augenblicklich ist nicht geplant, den B32 zu unterstützen. Es stimmt zwar, daß der B32 dem B16 stark ähnelt, aber er ist nicht vollkompatibel. Der B32 hat kein
Page 0 User EPROM und besitzt mehr RAM2-Speicher, wodurch sich die Einsprungadressen der Firmwareroutinen (geplant für Adresse $0300-$05ff)
verschieben. Den Kontroller gibt es außerdem nicht in der High-Speed-Variante (FN, siehe unten). Es kann sein, daß sich der B32 deshalb nicht so gut
übertakten läßt, wie man es von der C-Control gewohnt ist. Das müßte man erst austesten.
Kann ich in den von mir gebrannten neuen C-Control-Chip eigene Firmwareroutinen integrieren?
Das ist solange möglich, wie sich die von uns erstellten Firmwareroutinen nicht mit den selbstgeschriebenen adreßmäßig überschneiden. Idealerweise sollte man
die Einsprungadressen von eigenen Routinen ans Ende des Adreßbereichs $0300-$05ff legen. Die Routinen sollten ans Ende des Bereichs $1ff0-$3cff gelegt
werden. Die Bereiche $2fe0-$2fff und $3de0-$3dfd sind für zukünftige Erweiterungen reserviert und dürfen nicht belegt werden.
Warum liegen die Einsprungadressen von Firmwareroutinen im Bereich $0300-$05ff? Warum wird die Firmware nicht direkt angesprungen?
Falls sich ein Softwaremodul (Firmware) nach dem Einbrennen in einen OTP als fehlerhaft erweist, kann man das Modul nicht einfach löschen, da man jeden
EPROM-Bereich eines OTPs ja nur einmal beschreiben kann. Genauer: Der Speicher des EPROMs ist im unprogrammierten Zustand mit Nullbytes gefüllt, deren
Bits durch das Brennen gesetzt, aber nicht wieder zurückgesetzt werden können. Die Sprungtabelle im Bereich $0300-$05ff ermöglicht es, trotz dieser
Einschränkung, fehlerhafte Module in "verbrannten" OTPs zu deaktivieren und durch ein neues Modul zu ersetzen. Dazu ein Beispiel: Im Basicprogramm wird
durch den Befehl "SYS &h0303" ein Befehl in der Sprungtabelle aufgerufen. Dieser sei "jmp $26c0". Durch diesen Sprungbefehl wird also zum Modul an
Adresse $26c0 verzweigt. Falls sich herausstellen sollte, daß dieses Modul fehlerhaft ist, muß man versuchen, den Sprungbefehl durch Setzen von zusätzlichen
Bits dermaßen zu patchen, daß er eine andere Adresse anspringt, in die das gleiche, nun aber hoffentlich fehlerfreie Modul eingebrannt wird. Man könnte den
Sprungbefehl zum Beispiel in "jmp $27c0" umändern. Das Ersatzmodul muß dann also auf die Adresse $27c0 gelegt werden. Natürlich ist dieses Verfahren nur
eine Notlösung, da das fehlerhafte Modul weiterhin im EPROM steht und Platz belegt. Außerdem sind dem Patchen der Sprungadresse enge Grenzen gesetzt, da
dies ja nur durch Setzen von Nullbits geschehen kann. Aus diesem Grund sollte der Bereich $2fe0-$2fff und $3de0-$3dfd freibleiben, da diese Bereiche durch
Patchen meist zu erreichen sind. Dort könnte dann ein weiterer Sprungbefehl plaziert werden, der in die Ersatzroutine verzweigt.
Ich habe ein Programmierboard und einen OTP zum Experimentieren übrig. Kann ich ein Betarelease Eures Betriebssystem bekommen?
Das ist kein Problem. Wenn Du Dich in die Mailing List einträgst, erhältst Du ein Paßwort für eine Internetseite, auf der Preview-Versionen des Betriebssystems
heruntergeladen werden können. Wenn Du diese Versionen in einen OTP brennst, käme uns das sehr gelegen. Du könntest Dich als Betatester am Projekt
beteiligen. Bitte informiere uns über Erfolg oder Mißerfolg!
Soll die "neue" C-Control zusätzliche Hardware unterstützen?
Das Original-Betriebssystem der C-Control soll in erster Linie von seinen Bugs befreit und nur leicht erweitert werden. Unter eine leichte Erweiterung fällt zum
Beispiel ein Befehl zum Starten der C-Control über die serielle Schnittstelle, Ansprechen von Variablen, die im I²C-EEPROM oder im zusätzlichen RAM eines
EPROM-Kontrollers liegen, die Möglichkeit, eigene Assemblerprogramme in den SWI- oder SCI-Interrupt einzubinden und ähnliches. Neue Hardware soll
dagegen nur durch Firmwareroutinen unterstützt werden. Auf diese Weise läßt sich von BASIC aus z.B. die Analogtastatur oder das LC-Display durch
SYS-Befehle ansprechen. Solche Firmware direkt ins Betriebssystem einzubinden, würde kaum Sinn machen, da nicht alle Anwender diese Hardware besitzen.
Könnt Ihr mir einen neuen C-Control-Chip brennen und verkaufen?
Nein. Wir haben von Conrad Electronic nicht die Genehmigung bekommen, den fertigen Chip zu verkaufen. Das verbesserte Betriebssystem kann, wenn es fertig
ist, auf dieser Internetsite kostenlos heruntergeladen werden. Dieses kann dann mit Hilfe der Programmerplatine in einen OTP-Kontroller gebrannt werden. Dieser
Vorgang ist nicht kompliziert und kann von jedem Anwender, der sich zutraut, einen Chip im PLCC-52-Gehäuse in einen Sockel einzusetzen und herauszuziehen,
durchgeführt werden. Programmerplatinen an Anwender zu verschicken hat außerdem den Vorteil, daß jeder User "seine" C-Control durch
Assembler-Firmwareroutinen erweitern kann. Selbst wenn man sich nicht zutraut, eigene Assemblerprogramme zu erstellen, so werden bestimmt früher oder
später Patches und Erweiterung im Internet zum Download angeboten, die bei Bedarf in den EPROM-Speicher gebrannt werden können.
Gibt es eine Möglichkeit, auch die M-Unit mit einem verbesserten Chip auszustatten?
Theoretisch ginge das. Man müßte den Mikrokontroller der M-Unit auslöten und durch einen selbstgebrannten OTP ersetzen. Für diese Aktion braucht man aber
einen SMD-Lötkolben und eine ruhige Hand. Alternativ könnte man eine Platine erstellen, die kompatibel zur M-Unit-Platine ist und einen PLCC-Sockel enthält.
Da der Platz für den Sockel beschränkt ist, muß man ihn eventuell auf die Rückseite der Platine setzen.
Wofür stehen die diversen Buchstabenkürzel hinter den Namen der Chips?
Wir befassen uns nur mit den Kontrollern MC68HC05B6 und MC68HC705B16. Beide haben ein 52-pin PLCC-Gehäuse und die unterschiedlichen Versionen
der Kontroller werden durch die Buchstabenanhängsel N, FN und CFN voneinander unterschieden:
MC68HC05B6 FN |
Die Kontrollerbezeichnung 68HCx05 besagt, daß es sich um einen Kontroller handelt, der eine 6805-CPU enthält. Die Endung
05B6 bedeutet, daß es sich um einen ROM-Kontroller (keinen EPROM-Kontroller) handelt und daß dieser rund 6 kB
ROM-Speicher besitzt. Das Kürzel FN steht für "High Speed Operation". Das heißt, dieser Chip darf (laut Motorola) mit 8 MHz
Takt betrieben werden, statt mit dem 4-MHz-Standardtakt. |
MC68HC705B16 CFN |
Die 705B16-Kontroller haben EPROM- statt ROM-Speicher, und zwar rund 15 kB davon. Das C besagt, daß dieser Chip
einen erweiterten Temperaturbereich besitzt. Er kann von -40 bis +85°C eingesetzt werden. Ohne das C sind nur Temperaturen
zwischen 0 bis 70°C zulässig. Wiederum steht FN für "High Speed Operation" - siehe oben. Diese Version des Kontrollers bietet
im Vergleich zur 05B6-Version 176 Byte zusätzlichen RAM-Speicher. |
MC68HC705B16N CFN |
Es handelt sich wiederum um einen EPROM-Kontroller mit erweitertem Temperaturbereich und höherer Geschwindigkeit. Das zusätzliche N steht für eine besondere Version des 705B16. Die normale Version, ohne N, enthält einen Bug, weshalb sie zweimal resettet werden muß. In der N-Version wurde dieser Fehler behoben. Leider hat Conrad den Bug nicht beachtet, so daß mit der C-Control, die auf einem 705B16 basiert, eventuell Probleme auftauchen können. |
Bestimmt hat jeder C-Control-Anwender etwas Konstruktives zum Projekt beizutragen. Nicht vergessen: Die verbesserte C-Control kann später von jedem Anwender benutzt werden. Also alle Vorschläge, Ideen und Wünsche an mich schicken. Natürlich ist mir eine aktive Teilnahme noch lieber. Es darf auch diskutiert werden!
(c) Dietmar Harlos ADPC - ab 01.03.2002