AVR CP/M

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

(Artikel in Bearbeitung)

Wichtiger Hinweis

Bitte den Artikel erst komplett durchlesen! Ursprünglich bestand die Hardware aus Atmega88+1x4256 DRam und die Software war ein 8080 Emulator-CP/M System, was direkt ein Abbild einer Diskette von einer SD Karte las. Inzwischen wurden sowohl Hardware (Atmega328p plus nun 2xDRam für 8-bit Zugriffe; ggf. mit VT100 Terminal und I2C Peripherie) als auch die Software (+Z80 Emulation; FAT16 Dateisystem für Disk-Images; etc. pp) erheblich erweitert! Daher bitte zuerst lesen - sonst besorgt man sich unter Umständen Bauteile für ältere Versionen.

Im Rahmen dieses kleinen Projektes entstand ein CP/M System basierend auf einem ATmega88 (nun Atmega328p!). Die Idee des ersten Software- und Hardwareentwurfes geht auf Sprite_tm: http://spritesmods.com/?art=avrcpm zurück. Diese Idee wurde von Peter aufgegriffen und im Forumsbeitrag: http://www.mikrocontroller.net/topic/177481#new zur Diskussion gestellt. Der zugrunde liegende Thread wurde als PDF aufbereitet bis 11/2012: Thread177481.pdf

Die weiteren Entwicklungen/Versionen seht ihr nun hier.

Einführung/Urspungs-Projekt

Das Urspungs-Projekt realisiert mittels einer Minimalhardware, bestehend aus einem ATmega88, einem 256kx4 DRam und einer SD Karte, einen 8080 Emulator mit zugehörigem CP/M System. Die Ein- und Ausgabe erfolgt über ein serielles Terminal.

Hardware-Varianten

Hardwarevariante 1 - Ur-Version 4-bit Zugriff

Die Hardwarevariante 1 (Download der Doku) besteht derzeit aus den folgenden Komponenten:

  • ATmega88
  • 404256 DRam
  • SD Card
  • FT232RL

Schaltplan und Layout der Variante 1 als EAGLE-File

AVR CPM.jpg

Hardwarevariante 2 - 8-bit Zugriff

Die Hardwarevariante 2 wurde um einen 8-Bit RAM Zugriff erweitert sowie mit einer eigenen VGA-Ansteuerung ausgestattet.

Schaltplan und Layout der Variante 2 als EAGLE-File

Avr cpm2.jpg Terminal.jpg

Hardwarevariante 3 - USB-Stick Version - SD Card Connector veraltet

Die Hardwarevariante 3 ist als 8-Bit Version in USB-Stick Form ausgelegt. Achtung: Veraltete Variante mit nicht mehr verfügbaren Alps SCDA5A0201 / SCDA6A0101 SD-Card Connector! Bitte die Hardware Version 3.1 nehmen.

Schaltplan und Layout der Variante 3 als EAGLE-File

CP M Stick V3.jpg Terminal V3.jpg

Hardwarevariante 3.1 - USB-Stick Version - mit Standard SD-Card Connector

User Marcel A. (dl1ekm) hat die USB-Stick Version überarbeitet und einen Standard SD-Card Connector verwendet. Die aktuellste Software (Stand Juni 2019) läuft hierauf. Bild ansonsten weitgehend ähnlich zu HW 3.0.

Eagle SCH+BRD: https://www.mikrocontroller.net/wikifiles/8/80/Avrcpm_usb-stick_dl1ekm.zip

Hier ist eine um I2C erweiterte Software inkl. Anleitung und fertigem HEX (115200 8N1) verfügbar: https://www.mikrocontroller.net/topic/177481#5591057

Hardwarevariante 4 - aktuell inkl. VT100

Die derzeit aktuelle Hardwarevariante beinhaltet neben dem CP/M -System auch noch ein VT100 Terminal, realisiert über ein Propeller IC von Parallax

ACPM Prop.jpg ACPM Term.jpg

Ram Bausteine

Folgende DRAM-Bausteine (256k x 4bit) wurden mit der Hardwarevariante 3 bei 20 MHz Systemtakt erfolgreich getestet:

  • AAA1M304 70ns
  • GM71C4256 60ns
  • HY51C4256 100ns
  • HY534256 70ns / 80ns / 100ns
  • HYB514256 70ns
  • KM44C256 70ns
  • M514256 70ns / 80ns
  • M5M44256 80ns
  • MB81C4256 70ns
  • MT4C4M4B1DJ-6 / 60ns
  • V53C104 45ns / 60ns / 80ns

Folgende Bausteine laufen ggf. nicht:

  • SIEMENS HYB514256B-70

SD Karten

Folgende SD-Karten wurden mit der Hardwarevariante 3 bei 20 MHz Systemtakt erfolgreich getestet:

  • CnMemory (FIRSTCLASS) 1GB
  • Intenso 2GB
  • Kingston 1GB
  • Panasonic 2GB Class 4
  • SK 4GB SDHC Class 6
  • Traveler 64MB

CP/M

CP/M ist ein Betriebssystemen, das ab 1974 von Digital Research Inc. unter Gary Kildall für die Prozessoren 8080 von Intel und den Z80 von Zilog entwickelt wurde. CP/M war neben Unix das erste plattformunabhängige Betriebssystem.

Systemstart

Das Betriebssystem CP/M ist ein diskettenorientiertes System und benötigt deshalb eine Diskette oder Festplatte. Zunächst wird das CP/M von der Systemdiskette in den Arbeitsspeicher gebracht (Bootvorgang oder Kaltstart). Der erfolgreiche Bootvorgang wird durch eine Bildschirmmeldung und der Anzeige des System-Prompts ( A> ) mitgeteilt. Eine genaue Beschreibung sowie die Speicherbelegung von CP/M findet ihr hier.

Warmstart

Der Warmstart wird durch die Tastatureingabe "Control C" ausgelöst. Das ist u.a. nach einem Diskettenwechsel notwendig. Durch den Austausch einer Diskette wird automatisch ein Schreibschutz aktiviert, so daß ein Versuch auf die Diskette zu schreiben, zu einer Fehlermeldung führt.

Bestandteile von CP/M

Das Betriebssystem CP/M besteht aus dem eigentlichen System, das sich während der Ausführung im Hauptspeicher befindet, und einer Reihe von Hilfsprogrammen, die zusammen mit dem Betriebssystem auf der Systemdiskette befinden.

Das Betriebssystem besteht aus drei Teilen:

  • CCP (console command Prozessor) - Standard
  • BDOS (basic disk operating System) - Standard
  • BIOS (basic input/output System) – Rechnerabhängig

Ständig residente Befehle wie DIR, ERA, REN, TYPE, SAVE und USER sind direkt im CCP enthaltenen.

Software

Die Software besteht aus zwei wesentlichen Komplexen. Der erste Teil betrifft die Z80|8080 spezifische Software für das CP/M System. Der zweite Teil betrifft die Z80|8080 Emulation auf dem AVR. Die aktuellen Projektfiles liegen hier auf dem SVN Server.

8080 / Z80 Software

Obige 8080/Z80 Assemblerdateien lassen sich unter Linux hiermit: http://www.nongnu.org/z80asm/ übersetzen. Unix-Tools für Windows, u.a. DD findet ihr hier: http://sourceforge.net/projects/unxutils/files/unxutils/current/UnxUtils.zip/download

Hier ist die aktuelle Softwarevariante zum Erstellen einer eigenen Bootdisk.

Dazu muß zunächst erst ein Diskimage erzeugt werden, welches später auf die SD Karte geschrieben werden kann. (Hier: https://hc-ddr.hucki.net/wiki/doku.php/cpm/avrcpm sind fertige Diskimages verfügbar)

Der entsprechende Aufruf über die cpmtools sieht so aus:

mkfs.cpm.exe -f avrcpm -b cpm.bin -L test diskimage

Das diskimage kann man dann ebenfalls mit den cpmtools weiter bearbeiten. Aufrufbeispiele:

cpmls -f avrcpm diskimage - zeigt Inhaltsverzeichnis an
cpmcp -f avrcpm diskimage datei.com 0:datei.com - kopiert datei.com in das image
cpmcp -f avrcpm diskimage 0:datei.com datei.com - kopiert datei.com aus dem image
cpmrm -f avrcpm datei.com - loescht datei.com aus dem image

Die cpmtools gibt es hier: http://www.moria.de/~michael/cpmtools/

(Achtung! Inzwischen wird FAT16 unterstützt - ein dd - roh auf SD Karte ist überflüssig/veraltet!) Das so erzeugete diskimage wird ROH (ohne Filesystem) mit:

dd if=diskimage of=<sd card identifier> bs=512

auf eine SD Karte geschrieben. Achtung! Alle anderen Dateien gehen dabei verloren!

(Achtung! Inzwischen wird FAT16 unterstützt - Partitionen auf SD Karte sind überflüssig/veraltet!) Die aktuelle Version unterstützt ebenfalls bis zu 4 primäre CP/M = Typ 52 Partitionen. Diese lassen sich mit einer Linux Live-CD und dem Tool 'cfdisk' anlegen. Da z.Z die virtuellen Disketten nur ca. 250kb 'groß' sind, reicht es entsprechend große Partitionen azulegen (Ich habe trotzdem 8MB große angelegt.. für später). Wichtig dabei ist es den Typ auf 52 = CP/M zu setzen.. und schreiben/speichern nicht vergessen. Die einzelnen Partitionen werden dann ohne zu formattieren wieder mittels 'dd if=diskimage of=[sd card partition] bs=512' gefüllt. Wird also die SD Karte unter Linux z.B als sdh angezeigt, so ist die erste Partition dann sdh1, die zweite sdh2 etc. of= ist dann also /dev/sdh1 /2 /3..

Ich habe übrigens die erste Partition als FAT eingerichtet und entsprechend formattiert. So kann man den großen Bereich weiter unter Windows nutzen. Und dann nur 3 CP/M Partitionen am Ende des Speicherbereiches angelegt..

Die Definition 'avrcpm' als Diskformat sieht so aus (Wichtig! Auch cpmtools unter Windows benötigen NUR LF als Zeilenende = Unix Konvention!):

diskdef avrcpm
 seclen 128
 tracks 77
 sectrk 26
 blocksize 1024
 maxdir 64
 skew 1
 boottrk 2
 os p2dos
end

AVR Software

Zum Soforttest gibt hier eine AVR Variante avrcpm.hex für die folgende Testumgebung:

  • ATmega 168
  • 24 Mhz externer Takt über FT232R
  • Terminal mit 57600 Baud, 8N1, keine HW Handshake

Die aktuelle Software findet ihr immer hier: http://www.mikrocontroller.net/svnbrowser/avr-cp-m/avrcpm/

Bootloader

MCS Bootloader

Um bei Programmänderungen den Controller nicht jedes mal über die ISP-Schnittstelle neu programmieren zu müssen, kann der Controller der AVR CM/M Hardware einmalig mit einem Bootloader versehen werden. Damit ist es möglich den Controller über die V24/USB Schnittstelle zu flashen. Prinzipiell kann jeder AVR geeignete Bootloader verwendet werden. Die folgende Beschreibung bezieht sich auf den MCS Bootloader.

1. Einrichten des Bootloaders

Der Bootloader läst sich einfach unter BASCOM einrichten. Dazu muss zunächst der Quelltext Bootloader.bas auf die AVR CP/M Hardware angepasst werden.

$crystal = 20000000 'Quarzfrequenz des AVR

$baud = 115200 'Baudrate des Bootloaders

$regfile = "m168def.dat" 'verwendeter Controller

Const Loaderchip = 168

Im nächsten Schritt ist der Controller über die ISP-Schnittstelle mit dem Bootloader zu flashen. Dazu ist der Bootloader auf 1024 Word einzustellen und zu aktivieren. Achtung! Wer später jedes Byte braucht sollte keinen Bootloader benutzen, denn es fehlen ja später die 1Kbyte.


2. Über den Bootloader (MCS Bootloader ) flashen

Das flashen des so programmierten Controllers kann nun mit einem speziellen Bootloader Tool über die V24/USB-Schnittstelle erfolgen. Das Tool kann hier bezogen werden.

Unter der Programmoption „Options“ wird zunächst die COM-Schnittstelle der AVR CP/M Hardware eingestellt. Weiterhin die verwendete Baurrate (115200). Anschließend kann unter der Option „File“ das zu flashende Binärfile geladen und mit dem Befehl „Upload“ auf die Hardware übertragen werden. Ein erfolgreicher Upload wird mit dem „Finish code : 0“ quittiert.

Downloads

Zum ersten Test ist es oft sehr hilfreich ein fertiges Diskimage zu verwenden. So umschifft man zunächst alle Probleme sich ein bootfähiges CP/M- System selbst zu erstellen. Das gewünschte Image einfach auf eine SD-Card kopieren und los geht es. Hinweis: Jedes Imagefile sollte immer 256K groß sein.

ToDo Liste

- Break erkennen.

- Notwendige und nützliche Tools auf PC als Paket zusammenstellen ("Entwicklungsumgebung") und insbesondere dokumentieren. Möglichst einheitlich für Linux und Windows.

- SD-Kartentreiber verbessern.

Siehe auch

Zum Projekt:

Rund um den 8080 Prozessor:

Rund um den Z80 Prozessor:

Rund um AVR Prozessoren:


Rund um CP/M:

Rund um MMC/SD-Karten:


Rund um (VGA-)Terminals:

Allgemeine Informationen zu Hard- und Software:


Nachricht an den Autor:

Feinmechaniker

Der PMD-85 (tschech. Homecomputer der 80er Jahre) - Emulator auf AVR-Basis (http://pmd85.topindex.sk/) emuliert ebenfalls einen 8080-Prozessor. Vielleicht wäre dieses Projekt noch einen Blick wert? Die Kenndaten im Überblick:

  • Eingabe per PS/2-Tastatur
  • Ausgabe per Videosignal auf TV, 288 × 256 Pixel schwarz/grau/weiß + blinken
  • Emulation eines Intel 8080
  • 3/4 der Rechenleistung werden für die Erzeugung des Videobildes gebraucht
  • Speicher: 128 kByte SRAM (davon werden nur 64 kByte verwendet)
  • Speicherinterface per Software
  • Firmware und BASIC-ROM werden beim Start vom Flash in den SRAM kopiert