Mikroprozessor Boards/6809

Aus
Wechseln zu: Navigation, Suche
6809 Kit
6809 Kit
6309 CPU


6809 / 6309 Mikroprozessor Board

Es handelt sich hier um einen Einplatinencomputer für die Motorola CPU 6809. Die baugleiche CPU 6309 von Hitachi läuft ebenso problemlos auf diesem Board. Das Board wurde von Wichit Sirichote entwickelt und wird von ihm über eBay vertrieben. Alle Bauteile auf dem Board sind gut erhältlich, so dass Ersatzeile kein Problem darstellen.

Die Doku zu dem Board ist tadellos, wie bei allen Boards von Wichit Sirichote. Die Systemsoftware ist als Source Code verfügbar und kann so einfach modifiziert und erweitert werden.

Edilbert Kirk hat einen sehr guten Cross Assembler (BS9) entwickelt, der für beide CPU's (6809 und 6309) arbeitet und ebenfalls im Sourcecode zur Verfügung steht. Der BS9 kann auch Motorola S-Record Format emittieren. Dieses Dateiformat kann direkt in das Board geladen werden über die serielle Schnittstelle (zb. über Tera-Term). So kann man ganz bequem die Software an einem PC entwickeln und anschließend direkt in das Board laden, um sie zu testen.


Firmware

Die Firmware auf dem Board wurde von Wichit Sirichote entwickelt und wird sehr gut supported. Selbst komplexe Bugs werden in wenigen Tagen gefixed.

Die Firmware ist als Sourcecode erhältlich. Man findet ihn auf der Homepage. Damit kann man selbst Erweiterungen einbringen oder Anpassungen machen. Die Firmware ist fast komplett in C geschrieben, nur der Startup Code und die Systemvektoren sind in einem in Assembler geschriebenen Modul.

Die Toolchain um die Firmware zu kompilieren ist ebenfalls auf der Homepage von Wichit Sirichote erhältlich. Es ist ein Small-C Compiler der direkt 6809 Assembler Code auswirft. Dazu kommt der AS9 Assembler, der den Code vom C Compiler übersetzt in ein HEX File für das EPROM Programmiergerät.

Die Toolchain Binaries laufen leider nur in einem MSDOS System. Aber die Toolchain ist ebenfalls als Sourcecode vorhanden (Plain C). So kann man sich selbst Binaries für beliebige Zielsysteme generieren. Ich habe das mit Pelles-C gemacht und es läuft prima auf meinem Windows 10/64 PC als Cross-Compiler.


Firmware Update 1

Edilbert Kirk hat die bestehende Firmware adaptiert für den BS9 Assembler. Dabei hat er alle Routinen überarbeitet und stark verbessert. Die neue Firmware unterstützt:

  • verbesserten, schnellen S19 File-Upload
  • Unterstützung für 4 zeilige LCD Displays
  • der Code ist schneller und platzsparender (von 12K auf 2KB geschrumpft)


Specifications

  • CPU Motorola 6809 oder Hitachi 6309 (DIL-40 Sockel)
  • Speicher: 32kB RAM, 16kB EPROM
  • Adressdekodierung über einen GAL16V8D
  • Display: 7-Segment LED -- 6 Zeichen
  • Debugging LED: 8 LED an GPIO1 (Adresse $8000)
  • Display: optional LCD Anzeige (HD44780)
  • Tastatur: 36 Tasten
  • RS232 Port: 6850 ACIA 19200 bd 8n1
  • Bus Interface
  • Ticker: 10ms Takt (100 Hz)
  • Erweiterungs-Port: 40-pin header
  • Board Maße: xx x xx mm


Hardware Erweiterungen

SD-IO auf Lochraster

Die Hardware des Board ist sehr gut dokumentiert so dass man sehr leicht Erweiterungen basteln kann. So kann ich auf die Idee, eine SD Karte an das Board anzuschließen (siehe digital I/O Karte mit SD-Karte).

Das 16 polige LCD-Display Port ermöglicht den direkten Anschluss eines optionalen HD44780 kompatiblen Displays. Die Board Firmware unterstützt auch die Verwendung eines LCD Display und zeigt auch eine Einschaltmeldung nach einem Reset. Das Display Port kann aber auch für eigene Zwecke verwendet werden. An dem Port liegt der Datenbus (D0 bis D7), zwei Adressleitungen (A0 und A1) sowie ein fertig aus-kodiertes IO-Select Signal an. Damit kann man sehr einfach eine eigene IO Karte (zum Beispiel das SD-IO) anschließen.



SD-IO von Nils Eilers als Print

Der 40 polige Erweiterungsport führt alle relevanten Signale der CPU heraus. Dazu gehört der ganze Adressbus (A0 bis A15) sowie der Datenbus und der Controlbus. Hier kann man sehr einfach seine eigene Hardware anschließen und das System beliebig erweitern.

Das SD-IO Board von Nils Eilers enthält einen GAL für die Adressdekodierung und Clock Erzeugung für das SD Board. Dazu enthält es TTL für IO (D-FF + Input Driver) sowie einen Baustein für die Pegelanpassung zur SD Karte.



Der Vorteil eines SD-IO am Erweiterungsport: das LCD Port ist wieder frei, man kann also SD Karte UND LCD Display zugleich haben.

Vielen Dank an Nils für das wunderschöne Board!


Update 1: für die 30K Firmware braucht es eine Hardware Modifikation bestehend aus einem Draht (siehe Foto: A1 an Pin 4 des GAL).


Erweiterung des ROM auf 30KB

Die Hardware des Board teilt den Speicher 32 KB RAM, 16 KB ROM für Firmware und 16 KB for, - IO!

Zum Glück hat Hr. Sirichote wohl schon an Erweiterungen gedacht:

  • auf dem Board ist ein 32KB EEPROM 27256
  • das Signal A14 ist am EEPROM angelegt
  • die Adressierung übernimmt ein GAL-16v8
  • am GAL liegen A0, A1 und A10 bis A15


Aufgrund dieser flexiblen Hardware kann man die Memory Map ganz leicht verändern, ohne dass eine Änderung an der Hardware selbst notwendig wird. Mit den Adressleitungen A10 bis A15 kann man Blöcke ab einer Größe von 1KB selektieren. Innerhalb des 1KB Block hat man A0 und A1, also 4 Speicherzellen, die adressiert werden können. Diese 4 Byte wiederholen sich dann über den ganzen Speicherblock.

Es sind einige IO Adressen belegt:

  • INP/OUT: ACIA (serielle Kommunikation)
  • OUT: 7 Segment Display (Segment)
  • OUT: Tastatur (Spalten) + 7 Segment Display (Zeichen)
  • INP: Tastatur (Zeile)
  • OUT: Debug Port
  • INP/OUT: LCD Port


Man bringt nicht alle IO in einen 1KB Block und auch nicht in zwei Blöcke, weil nur 4 Adressen pro Block selektierbar sind. Aber nur diese IO, die lesend zugegriffen werden (INP), müssen einen eigenen Block haben. Da man auf den ROM nur lesend zugreift, können die anderen IO (OUT) sich den Speicher mit dem ROM teilen. Man kann alle INPUT Ports in 2 Speicherblöcke legen. Dadurch bleiben für den ROM Bereich ganze 30KB übrig. Der ROM Speicher kann so nahezu verdoppelt werden, ohne dass die Hardware selbst verändert wird.

Die neue Speicher-Map:

  • 0000-7FFF ... System RAM (32 KB)
  • 8800-FFFF ... System ROM (30 KB)
  • 8000-87FF ... IO (input / output)
  • 8800-8FFF ... IO (output only)


Vielen Dank an Wichit Sirichote für das Board und die Firmware.
Vielen Dank an Edilbert für seinen 6309 Assembler.
Vielen Dank an Edilbert für die Verbesserungen in der Firmware.

Anbei sind alle Dateien für die 30 KB Version des 6809 Board. Es ist die gepatchte Firmware im Source Code (und binaries als ROM) sowie die GAL Datei (+ binaries als Jedec)


Software Entwicklung

Will man Software entwickeln für das 6809 Board, bietet sich Assembler an oder C.


Assembler

Für Assembler Programmierung empfehle ich den Cross Assembler BS9 von Edilbert Kirk:

  • der BS9 ist in hoch portablen C geschrieben und der Quelltext besteht nur aus einer Datei
  • der Assembler kann Code für beide CPU's emittieren (6809 und 6309)
  • er kann direkt Motorola S19 ausgeben (das Board kann S19 direkt laden)
  • der BS9 ist wirklich sehr schnell
  • er wird bis heute weiter entwickelt


C Compiler

Der Small-C ist sehr alt, unvollständig und läuft nur unter MSDOS. Wichit Sirichote hat den Compiler verwendet, um die Firmware zu erstellen. Der ausgeworfene Code ist ziemlich groß und klobig. Die Firmware hat 13K benötigt im ROM. Edilbert Kirk hat die Firmware überarbeitet und selbst assembliert. Das Ergebnis benötigt nur noch etwas über 2K.

Auf der Suche nach einem passenden Compiler bin ich auf den CMOC gestoßen. Der CMOC erzeugt einen sehr kleinen, kompakten Code. Die Bedienung ist sehr einfach und er erzeugt ebenfalls direkt eine Motorola S19 Ausgabedatei. Der CMOC erzeugt auch direkt Code für Retro Home-Computer (Tandy CoCo-3, Dragon-32 ...). Aber er kann auch "out of the box" Code für das Wichit Board erzeugen, ohne dass dabei irgendetwas angepasst werden muss.


Spezifikation des CMOC:

  • der CMOC ist quelloffen und wird auch heute noch weiter entwickelt
  • es gibt binaries für Linux und Windows
  • optionale C-Lib artige Unterstützung (für Small Devices)
  • der CMOC erzeugt Assembler Quellcode
  • die LWTOOLS bieten den dazu passenden Assembler, Linker und Library Manager
  • sehr gute Inline Assembler Unterstützung
  • integraler 6809 Simulator
  • single-precision floating-point Arithmetik
  • 8-, 16- und 32-bit Arithmetik
  • unterstützt fast alle C99 features


Die Compiler Option --usim veranlasst den CMOC, direkt S19 Code zu produzieren. Dieser Code kann direkt in das 6809 Board geladen werden. Mit der Option -1 bekommt man zudem den Assembler Sourcecode, den man bei Bedarf selbst überarbeiten kann (falls die Performance nicht ausreicht).

Im C Sourcecode kann man die Code Startadresse direkt festlegen (mit #pragma org). Alternativ dazu kann man die Startadresse auch beim Compiler Aufruf in der Kommandozeile mitgeben.


Weiterführende Links


Dokumentation


WEB Links