AVR CP/M
(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
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
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
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
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
- IPL.MAC (läd das CP/M von der 'Diskette' vom track 0 sector 2 bis track 1 sector 26)
- BIOS.MAC
- AVRCPM.LIB
- CFGACPM.LIB
- cpm.sys
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:
- Diskussion zu diesem Projekt: http://www.mikrocontroller.net/topic/177481#new
Rund um den 8080 Prozessor:
- Intel 8080 instruction set: http://www.pastraiser.com/cpu/i8080/i8080_opcodes.html
- Intel 8080 Processor Data: http://anyplatform.net/media/guides/cpus/8080%20&%20Z80%20Processor%20Data.txt
- Intel 8080 CP/M Emulator für Mikrocontroller (ARM7, ARM9, CortexM3, AVR32) auf www.mikrocontroller.net: http://www.mikrocontroller.net/topic/226167#new
Rund um den Z80 Prozessor:
- Home of the Z80 CPU: http://www.z80.info
- Z80 Processor Data: http://anyplatform.net/media/guides/cpus/8080%20&%20Z80%20Processor%20Data.txt
- The Undocumented Z80 Documented: http://www.myquest.nl/z80undocumented
- The Z80 assembler: http://savannah.nongnu.org/projects/z80asm
- YAZE-AG - Yet Another Z80 Emulator: http://www.mathematik.uni-ulm.de/users/ag/yaze
- AX81: Ein ZX81-Clone im ATMega: http://www.jcwolfram.de/projekte/avr/ax81/main.php
- The eZ80 Single-Board Computer: http://www.ez80sbc.com
- ZX80/ZX81 hardware page: http://home.micros.users.btopenworld.com/zx80/zx80.html
- z80SIM PIC32 Port: http://www.kenseglerdesigns.com/cms/node/8
- EURO-Z80 SBC: http://www.kolter.de/euro-z80.html
- SEPIA Z80 System: http://www.kolter.de/SEPIA_RIO.html
Rund um AVR Prozessoren:
- AVR Mikrocontroller auf www.mikrocontroller.net: http://www.mikrocontroller.net/articles/AVR
- AVR-GCC auf www.mikrocontroller.net: http://www.mikrocontroller.net/articles/AVR-GCC
- AVR-ISP-Stick auf www.mikrocontroller.net: http://www.mikrocontroller.net/articles/AVR-ISP-Stick
- AVR Bootloader FastBoot von Peter Dannegger auf www.mikrocontroller.net: http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger
- Atmel AVR Studio 4 Projekt anlegen: http://www.steinhartw.de/avr-studio-projekt/studio_projekt.htm
Rund um CP/M:
- The *HUMONGOUS* CP/M Software Archives: http://www.classiccmp.org/cpmarchives
- The Unofficial CP/M Web site: http://www.cpm.z80.de/index.html
- Digital Research CP/M Source Code: http://www.cpm.z80.de/source.html
- Micro Vibe CPM 2.2 OS: http://www.shaels.net/index.php/cpm80-22-documents
- CP/M Software auf z80.eu: http://www.z80.eu/cpmsoft.html
- CP/M Computer auf z80.eu: http://www.z80.eu/cpmcomp.html
- The CP/M 86 and CP/M 80 Museum: http://www.cpm8680.com
- Diverse CP/M Software auf www.retroarchive.org: http://www.retroarchive.org/cpm
- Diverse CP/M Software für den SIMH Altair 8800 Simulator: http://www.schorn.ch/cpm/intro.php
- Cpmtools 2.9 Executables for Windows Users: http://www.cpm8680.com/cpmtools
- Cpmtools von Michael Haardt: http://www.moria.de/~michael/cpmtools
- TotalCommander Plugin für CP/M Disketten: http://hc-ddr.hucki.net/wiki/doku.php/cpm:disketten_xp2
- Entwickeln von CP/M-Programmen unter Windows XP: http://hc-ddr.hucki.net/wiki/doku.php/cpm:windows
- CP/M on an AVR auf SpritesMods.com: http://spritesmods.com/?art=avrcpm
- Aliados CP/M Emulator für Linux: http://www.arrakis.es/~ninsesabe/aliados
- ZXCC Homepage: http://www.seasip.demon.co.uk/Unix/Zxcc/index.html
Rund um MMC/SD-Karten:
- Infos zu MMC/SD-Karten auf elm-chan.org: http://elm-chan.org/docs/mmc/mmc_e.html
- Infos zu MMC/SD-Karten auf ulrichradig.de: http://www.ulrichradig.de/home/index.php/avr/mmc-sd
- Infos zu MMC/SD-Karten auf www.mikrocontroller.net: http://www.mikrocontroller.net/articles/MMC-_und_SD-Karten
- SD/SDHC Card Interfacing with ATmega 8/32: http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html
- Bezugquelle für Card-Reader UCR-61S: http://www.pollin.de/shop/dt/MTcwOTcyOTk-/Computer_und_Zubehoer/Hardware/Laufwerke_Cardreader/Card_Reader_UCR_61S.html
Rund um (VGA-)Terminals:
- Microcontroller VGA Interface projects: http://tinyvga.com
- PropTerm ANSI terminal project: http://www.shaels.net/index.php/propterm
- Simple VGA/Video adapter with ATmega AVR: http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm
- Small TV terminal with ATmega8 microcontroller: http://www.serasidis.gr/circuits/TV_terminal/Small_TV_terminal.htm
- VGA timing information: http://www.epanorama.net/documents/pc/vga_timing.html
- Infos zur break condition: http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter#Break_condition
- Bezugsquelle für Micro VGA Mikrocontroller VGA Grafikkarte: http://www.watterott.com/de/Schnittstellen/Video-VGA
- VGA Text&Grafikkarte für ECB-Bus: http://www.kolter.de/sepia.html#ZNETZ
- Serial VGA Monitor Driver board: http://www.hobbytronics.co.uk/serial-vga
Allgemeine Informationen zu Hard- und Software:
- GNU Utilities für Windows: http://unxutils.sourceforge.net
- PC Partionstypen: http://www.win.tue.nl/~aeb/partitions
- Homepage von TortoiseSVN: http://tortoisesvn.tigris.org
- Das PS/2 Maus / Tastatur-Protokoll: http://www.marjorie.de/ps2/ps2_protocol.htm
- Anleitung zum SMD löten: http://thomaspfeifer.net/smd_loeten_tsop.htm
- Bezugsquelle für "USB - TTL/COM Konverter Modul mit CP2102 IC": http://cgi.ebay.de/ws/eBayISAPI.dll?ViewItem&item=200393339984
- Bezugsquelle für RAM-Bausteine: http://www.demotronic.net
Nachricht an den Autor:
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