tranZPUter SW

English

Vorwort

Der tranZPUter und der tranZPUter SW werden aktiv entwickelt und Aenderungen werden regelmaessig in der Dokumentation wiedergegeben.

Der tranZPUter SW ist ein Ableger des tranZPUter-Projekts und verwendet einen Freescale K64F-Prozessor als IO-Steuerungsprozessor anstelle der ZPU im urspruenglichen tranZPUter-Projekt.

Waehrend des Tests des tranZPUter v1.0 und mit dem Aufkommen des RFS v2.0 Upgrades mit CP/M wurde festgestellt, dass der tranZPUter aktualisiert werden sollte, damit der Z80 ueber zusaetzlichen Speicher verfuegt und mit hoeheren Taktfrequenzen laufen kann. Er sollte auch unabhaengig vom steuernden IO-Prozessor laufen, d.h. der ZPU Evo auf FPGA-Fabric oder dem K64F.

V1.0 des tranZPUter hatte Designbeschraenkungen, die ehrlich gesagt das Projekt viel schwieriger machen. Um das Konzept und Design weiterzuentwickeln, nahm ich einen Schritt zurueck und entschied mich fuer ein leistungsstarkes Mini-Entwicklungsboard, den Teensy 3.5, der mehr als genug allgemeine I/O-Pins hat und 5V-tolerant ist -- daher dieses Zwischendesign (das tatsaechlich besser fuer jeden ist, der Softwareprogrammierer ist und sich mit Elektronik oder VHDL nicht auskennt, aber trotzdem eine Z80-Maschine erweitern moechte).

Alles wird in C/C++ geschrieben und sobald es funktioniert, kann ich den mutigen Schritt unternehmen, einen tranZPUter v2.0 mit einem BGA zu spezifizieren, da die ZPU die gesamte soeben geschriebene Software ausfuehren wird.

Ueberblick

Der Sharp MZ80A basiert auf der Z80-CPU mit 2MHz. Er ist vintage (obwohl der Z80 immer noch weit verbreitet in neuen industriellen Designs mit 33MHz und darueber verwendet wird) und im Vergleich zu modernen Computern untermotorisiert. Neben dem historischen Wert hat er eine Softwarebasis, die von Zeit zu Zeit nuetzlich ist. Ein Software-Emulator koennte geschrieben werden, um die Nutzung der Software zu verlaengern, aber es hat etwas Besonderes, Originalhardware zu verwenden, und dies ist eine Alternative, die Maschine original zu halten und gleichzeitig ein Upgrade bereitzustellen, das die Maschine mit zusaetzlicher Verarbeitungsleistung, Speicher und mehreren verschiedenen softwarebasierten CPUs antreiben kann. Dies wird durch Bus-Mastering ermoeglicht, bei dem die Original-CPU in den Tri-State versetzt wird und der K64F die Kontrolle ueber den Bus und die darunterliegenden Original-Mainboard-Peripheriegeraete uebernimmt.

Das Upgrade erweitert auch die Z80-Hardwarefaehigkeiten durch zusaetzliches RAM fuer eine 64K-Version von CP/M und zur Erhoehung der Prozessorgeschwindigkeit bei gleichzeitiger Beibehaltung der Originalgeschwindigkeit beim Zugriff auf die Sharp MZ80A Motherboard-Peripheriegeraete.

Dieses Design ist in Arbeit und arbeitet parallel zum tranZPUter. Die in C/C++ geschriebene Steuersoftware fuer den tranZPUter SW soll auch auf dem tranZPUter unter der ZPU laufen.

Da das Design einen Z80 vor Ort ersetzt, ist es nicht auf den MZ80A beschraenkt, sondern kann in jedem Z80-basierten Computer mit den richtigen Softwareanpassungen verwendet werden, z.B. dem MZ-700 oder MZ-80B.

tranZPUter SW

Der tranZPUter leitet seinen Namen ab von: Ein TRANsformierbarer ZPU CompuTER, da die Basis-CPU im urspruenglichen tranZPUter die ZPU Evo ist. Die ZPU Evo stellt die beabsichtigten Menue-, SD-, Video-Overlay-Dienste fuer den Sharp MZ80A bereit, indem sie den originalen Z80 in den Tri-State versetzt und auf den MZ80A-Speicher und die Peripheriegeraete zugreift, als waeren sie ZPU-Geraete.

Der tranZPUter SW baut auf dem tranZPUter-Design in seinen Zielen auf und verbessert gleichzeitig die zugrunde liegende Z80-Hardware. Er verwendet einen Freescale K64F ARM Cortex-M4 anstelle der ZPU Evo, da der tranZPUter SW eher eine Softwareloesung fuer die Anforderung ist. Das Projekt fuegt das Suffix SW fuer *S*oft*W*are hinzu, um die beiden Designs zu unterscheiden.

Um verschiedene CPUs bereitzustellen, muessen lediglich vorhandene CPU-Emulatoren genommen und angepasst werden, um die CPU-Signale auf dem MZ80A-Bus ueber die Schnittstelle dieses Designs zu verwenden.

Hardware

Die Grundlagen dieses Designs liegen im Z80-Bus-Mastering, d.h. der Faehigkeit, den Z80 aus dem Schaltkreis zu schalten und die verbleibende Computerhardware nach Bedarf zu steuern. Bus-Mastering wurde typischerweise von Geraeten wie DMA fuer schnelle Datenuebertragung von einem I/O-Geraet zum Speicher oder Speicher-zu-Speicher fuer Anwendungen wie Video/Grafik verwendet.

Bus-Mastering wird verwendet, um die Kontrolle ueber den Z80-Bus zu uebernehmen und Daten zwischen dem Hauptspeicher und einer SD-Karte oder zwischen dem I/O-Prozessor und dem Videoanzeigepuffer fuer die Darstellung von Menues zu uebertragen. Es wird auch verwendet, wenn ein Soft-Prozessor den Hardware-Z80 vollstaendig in den Leerlauf versetzt und als Haupt-Computer-CPU fungiert.

Das Design dreht sich darum, den originalen Z80 auf eine Tochterkarte zu heben und mehrere seiner Signale umzuleiten, sodass sie nach Bedarf gesteuert werden koennen.

v1.0 Z80 Upgrade Schaltplan

Sheet 1

Um Programme fuer andere Sharp-Modelle (z.B. MZ-700) oder 64K CP/M ausfuehren zu koennen, fuegt das Design ein 512KB Static-RAM-Geraet mit notwendiger Paging-Logik hinzu. Da das Design in dieser Phase bei der Speicherumordnung flexibel sein muss, wird ein programmierbarer Decoder in Form eines Flash-RAMs verwendet. Dies ermoeglicht maximale Flexibilitaet waehrend der Entwicklung.

v1.0 Teensy 3.5 Schaltplan

Sheet 2

Der zweite Schaltplan zeigt das Teensy 3.5 Entwicklungsboard, das in einem 48-Pin-DIL-Gehaeuse geliefert wird und ideal fuer die Platzierung auf einem Projektboard wie dem tranZPUter ist. Es enthaelt den Freescale K64F Prozessor, eine SD-Karte und USB-Logik.

v1.1 Z80 Upgrade Schaltplan

Weitere Hardware-Revisionen (v1.1, v2.0, v2.1, v2.2) mit PCB-Layouts und Schaltplaenen sind in der englischen Version dokumentiert.


Design-Details

Dieser Abschnitt liefert interne Design-Informationen zum Verstaendnis der Funktionsweise des tranZPUter und seiner Interaktionen zwischen dem Host (dem Originalcomputer, derzeit getestet auf einem Sharp MZ-80A und einem MZ-700), dem tranZPUter SW Tochterboard und dem K64F Prozessor.

K64F Z80 Host API

Die API basiert auf einem gemeinsamen RAM-Block im 64K-Speicherraum des Z80, ueber den die Interprozessor-Kommunikation stattfindet. Auf dem K64F wird dies in C als Struktur deklariert und auf dem Z80 als Assembler-Referenz zu Speichervariablen.

Die vollstaendige API-Struktur, Befehlsliste und Ergebnisliste sind identisch mit der englischen Version und werden dort dokumentiert.

Die Kommunikation wird vollstaendig vom Z80 initiiert. Wenn er einen Dienst benoetigt, schreibt er einen Befehl in das svcControl.cmd-Feld und setzt das svcControl.result-Feld auf REQUEST. Der Z80 schreibt dann an einen Ausgangsport (konfigurierbar, aber typischerweise 0x68), der wiederum einen Interrupt an den K64F sendet.


GPIO-Organisation

In diesem Design arbeitet der K64F in einer Aufsichts- und Servicerolle. Der Z80 kann eigenstaendig ohne den K64F funktionieren, was die Host-Maschine vollstaendig original belaesst, und darueber hinaus bietet das tranZPUter-Board auch einige neue Upgrades wie 512K Static RAM, das der Z80 nach Bedarf nutzen kann.

Wenn erweiterte Dienste wie SD-Kartenzugriff oder Hardware-Emulation benoetigt werden, braucht es den K64F, um diese Dienste bereitzustellen. Der Z80 sieht den K64F als Hardware-Erweiterung -- er macht eine I/O-Anfrage und erhaelt Funktionalitaet zurueck.

Die vollstaendigen GPIO-Zuordnungstabellen (K64F-Port- und Bit-Zuordnung, GPIO-Bits zu Z80-Adress- und Datenleitungszuordnung) sind identisch mit der englischen Version.


Speicher-Modi

Eine der Funktionen des tranZPUterSW-Hardware-Designs ist die Faehigkeit, Speicherkarten frei innerhalb des 512K Flash-RAMs zu erstellen. Diese Karten werden einem Speicher-Modus zugewiesen und durch den Memory-Mode-Latch ausgewaehlt. Sie definieren, wie tranZPUter SW Speicher in den Z80-Speicheradressraum zusammen mit den originalen Mainboard-Komponenten abgebildet wird.

Die vollstaendige Speicher-Modi-Tabelle (Modi 0-14 einschliesslich Original, TZFS, CP/M, MZ-700 und MZ-80B) ist identisch mit der englischen Version.


Z80 CPU Frequenzumschaltung

Um den tranZPUter SW mit anderen Maschinen kompatibel zu machen, ist es notwendig, die CPU mit der Geschwindigkeit dieser Maschine zu takten. Es ist auch wuenschenswert, die CPU bei Verwendung von Software wie CP/M so schnell wie moeglich zu takten fuer maximale Leistung.

Eines der Hauptprobleme bei der Frequenzumschaltung ist, dass der zugrunde liegende Host seine Frequenz nicht aendern kann -- der Host erzeugt in der Regel den Takt und seine Schaltungen sind fuer den Betrieb innerhalb seiner Takttoleranzen ausgelegt.

Um die Anforderung einer umschaltbaren Z80-CPU-Frequenz zu erfuellen, wurde ein positiv-flankengetriggerter Frequenzumschalter implementiert, der die Host-Frequenz als einen Eingang und einen Rechteckwellengenerator vom K64F als zweiten Eingang verwendet.

Aktuelle Tests auf einer CMOS Z84C0020 20MHz CPU zeigen folgende Beobachtungen:
  • tranZPUter zuverlaessig im Bereich 1Hz bis 20MHz fuer alle Funktionalitaet.
  • tranZPUter zuverlaessig bei 24MHz auf dem tranZPUter v2.1 Board.
Port Function
0x62 Switch Z80 CPU frequency to the second source, ie. the frequency generated by the K64F or external oscillator.
0x64 Switch Z80 CPU frequency to default host source. This is the default on RESET.

Systemkonfiguration

Das CPLD haelt ein internes Konfigurationsregister, um zu aendern, wie es mit dem zugrunde liegenden Host arbeitet. Die Konfigurationsregister-Tabellen (System Configuration Register 0x6E und System Information Register 0x6F) sind identisch mit der englischen Version.


Sharp MZ-700 Modus

Eines der Ziele des tranZPUter war es, so viel wie moeglich Software von anderen Modellen auf dem Host ausfuehren zu koennen. Der urspruengliche Host ist ein MZ-80A und das Ziel war es, Software fuer einen MZ-700/MZ-800/MZ-80B auf dieser Maschine auszufuehren. Der tranZPUter selbst kann in einen echten Sharp MZ-700 oder MZ-80B eingesteckt werden und wurde auf diesen Maschinen getestet.

Die Vergleichstabelle der Unterschiede zwischen MZ-80A und MZ-700 sowie die Details zur Implementierung der Kompatibilitaet (tranZPUter v1.1 und v2.1) sind in der englischen Version dokumentiert.


Sharp MZ-80B Modus

Die Details zum MZ-80B-Kompatibilitaetsmodus sind in der englischen Version dokumentiert.


Hardware-Beschreibungssprache

Ab Version 2.0 des tranZPUter SW wurde die gesamte diskrete Logik auf dem Board durch ein einziges CPLD (Altera EPM7128) ersetzt, das in VHDL programmiert wird. Alle Funktionen wie Speicherdecodierung, Bussteuerung, Frequenzumschaltung und Systemkonfiguration sind in der VHDL-Datei implementiert.

Complex Logic Device - MAX 7000A

Die CPLD-Details und Build-Anweisungen fuer den Bitstream sind in der englischen Version dokumentiert.

Software

Die Software des tranZPUter SW ist modular aufgebaut und besteht aus mehreren Komponenten, die zusammenarbeiten, um die erweiterte Funktionalitaet bereitzustellen.

zOS

zOS ist das Betriebssystem, das auf dem K64F-Prozessor laeuft. Es bietet Dienste fuer den Z80-Host, einschliesslich SD-Kartenzugriff, Speicherverwaltung, CPU-Frequenzsteuerung und Hardware-Emulation. Die vollstaendige zOS-Dokumentation einschliesslich Befehlen, tranZPUter-Befehlen, Tastenzuordnungen und API-Details ist in der [englischen Version](/sharpmz-upgrades-tranzputer-sw/) verfuegbar.

*T*ran*Z*puter *F*iling *S*ystem

TZFS (tranZPUter Filing System) ist ein Dateisystem, das die SD-Karte fuer den Z80 verfuegbar macht. Es ersetzt den Monitor-ROM des Sharp MZ-80A und bietet erweiterte Funktionen wie das Laden und Speichern von Programmen von/auf der SD-Karte, Verzeichnislisten und mehr.

Die vollstaendigen TZFS-Befehle und -Details sind in der englischen Version dokumentiert.

CP/M

CP/M 2.2 wurde fuer den tranZPUter SW portiert. Der tranZPUter stellt 64K RAM bereit, das fuer den Betrieb von CP/M erforderlich ist, und der K64F emuliert Diskettenlaufwerke unter Verwendung von Dateien auf der SD-Karte.

Die CP/M-Befehle und -Details sind in der englischen Version dokumentiert.

TZFS Monitor

Die vollstaendige TZFS-Monitor-Befehlsreferenz ist in der englischen Version dokumentiert.

Sharp BASIC SA-5510

Die Details zu Sharp BASIC auf dem tranZPUter sind in der englischen Version dokumentiert.

Microsoft BASIC

Die Details zu Microsoft BASIC auf dem tranZPUter sind in der englischen Version dokumentiert.

Memory Decoder Tool

Das Memory-Decoder-Tool wird verwendet, um die Flash-RAM-Speicherdecodierungstabellen zu generieren. Die vollstaendigen Details sind in der englischen Version dokumentiert.

tranZPUter SW Software erstellen

Dieser Abschnitt beschreibt, wie die Software fuer den tranZPUter SW erstellt wird. Alle Entwicklung erfolgte unter Linux.

Pfade

Die vollstaendige Pfadtabelle ist in der englischen Version dokumentiert.

Werkzeuge

Die erforderlichen Werkzeuge sind in der englischen Version dokumentiert.

zOS erstellen

Die Build-Anweisungen fuer zOS sind in der englischen Version dokumentiert.

TZFS erstellen

Die Build-Anweisungen fuer TZFS sind in der englischen Version dokumentiert.

Memory Decoder erstellen

Die Build-Anweisungen fuer den Memory Decoder sind in der englischen Version dokumentiert.

CPM erstellen

Die Build-Anweisungen fuer CPM sind in der englischen Version dokumentiert.

Ein typischer Build

Die Beschreibung eines typischen Build-Vorgangs ist in der englischen Version dokumentiert.

K64F MPU flashen

Die Anweisungen zum Flashen des K64F sind in der englischen Version dokumentiert.

Teensy3.5 flashen

Die Anweisungen zum Flashen des Teensy3.5 sind in der englischen Version dokumentiert.

Danksagungen

Danksagungen und Lizenzen sind identisch mit der englischen Version.

Lizenzen

Die GNU Public License v3

Dieses Projekt steht unter der GPLv3. Details finden Sie in der englischen Version.