Samstag, 28. Mai 2011

Propeller

Beim Surfen bin ich vor einige Zeit auf den Propeller von Parallax gestoßen. Das ist ein ungewöhnlicher Mikrocontroller, mit dem ich wohl die Z80-Grafik realisieren werde.
Er hat folgende Eigenschaften:
  • 32 Bit
  • Acht Kerne
  • 80 MHz Takt
  • 32 KB RAM
  • 32 KB ROM
  • 32 IO-Pins
  • 40-Pin DIP-Package/44-Pin LQFP-Package
  • Hardware-Videogenerator (auch VGA)
Jawohl, das Teil hat acht Kerne, sogenannte COGs, jeder COG hat 2 KB eigenes RAM und 32 KB für alle zusammen. Im ROM ist unter Anderem eine Bitmap-Schriftart abgelegt sowie ein paar Tabellen für sin/cos.
Alle acht COGs laufen parallel mit eigenem Code, der Zugriff auf das Main-RAM wird vom sogenannten Hub geregelt. Dieser lässt reihum die COGs auf das Main-RAM zugreifen.

Es gibt keine Interrupts, und quasi keine Hardware-Peripherie (außer Timer). Das bedeutet, dass jegliche Funktionalität in Software realisiert wird. Für die meisten Anwendungen wie ADC, DAC, SPI, I2C, usw. gibt es Bibliotheken auf der Parallax-Webseite herunterzuladen. Da alles in Software läuft, kann jeder Pin jede Funktion übernehmen. Die fehlenden Interrupts werden dadurch ersetzt, dass jeder COG genau eine Aufgabe erledigt, und zwar durch Polling. So würde man einen COG für UART widmen, einen für SPI usw.

Auf der Paralax-Webseite findet man mehr Information und die Datenblätter.

IDE-Schnittstelle

Ich hatte endlich mal wieder die Muse, etwas an der IDE-Schnittstelle weiterzuarbeiten. Als Vorlage habe ich nun Phil Rustons PRIDE-Interface genommen. Mein erster eigener Entwurf wäre etwas komplexer geworden und hätte bestimmt den einen oder anderen Bug eingebaut, daher gehe ich mit diesem Design auf Nummer sicher ;-)
So sieht das Layout aus:
Mal wieder ein wahres Kunstwerk ;-) Beim Layouten fiel mir wieder auf: Das Wichtigste am Routen ist die Platzierung der Bauteile. Wenn man das geschickt angeht, ist das Routen fast ein Kinderspiel.

Ich muss nochmal gründlich die Schaltung durchgehen und dann werde ich sie fertigen lassen.

Dienstag, 3. Mai 2011

Ein Schritt Richtung CP/M

Ich habe mich entschieden, CP/M auf meinem Z80-Rechner zum Laufen zu bringen. CP/M ist ein altes Betriebssystem (quasi der "Vater" von MS-DOS), welches hauptsächlich auf den guten alten 8-Bit-Systemen zum Einsatz kam. Dazu sind zwei weitere Dinge nötig: Am Beginn des Adressraumes muss RAM sein, und ich benötige einen Massenspeicher. Das erste Problem ist gelöst, mit einer einfachen Schaltungserweiterung lässt sich nun der ROM deaktivieren. Die kleine Platine, die eigentlich nur ein Oder-Gatter und ein Transistor enthält, lässt sich auf den 3er-Pinheader auf die Platine aufstecken, es sind glücklicherweise keine Änderungen auf der Main-Platine nötig:



Massenspeicher ist etwas aufwändiger: Ich hatte vor, SD-Karten als Massenspeicher zu verwenden. Nur irgendwie will meine dazu gebastelte Platine nicht funktionieren, die SD-Karte antwortet einfach nicht. Daher habe ich das jetzt (verzweifelt) aufgegeben und möchte mir nun eine IDE-Schnittstelle basteln. Diese ist erstaunlich simpel! Der Charme der IDE-Schnittstelle besteht nicht nur darin, Festplatten an mein System anzubinden, sondern auch darin, CompactFlash-Karten nutzen zu können. Über einen einfachen Adapter lässt sich CF an IDE anschließen! Und es gibt wiederum einen CF-zu-SD-Karten-Adapter, so dass mir theoretisch auch SD-Karten zur Verfügung stünden.

Es gibt dabei zwei Schwierigkeiten zu überwinden: Der ATA/IDE-Datenbus ist 16-Bit breit (im Gegensatz zum 8-Bit Z80) und Daten werden von der IDE-Schnittstelle bei steigender Flanke der /RD bzw. /WR-Signale "gesampelt", was zu Timingproblemen führt.

Glücklicherweise gibt es ein paar Projekte im Netz, von denen ich mir was abgucken kann. Jetzt muss ich mich nur noch entscheiden, ob ich die Platine auf Lochraster aufbaue oder wieder fertigen lasse. Das Problem mit den Lochraster-Platinen ist, dass ich einfach keine wirklich gute Methode habe, solche Platinen selber zu bauen. Und mit Kupferlackdraht gibt es auch häufig Probleme wie schlechte Lötstellen, angeschmorter Lack usw.