tranZPUter SW

English

Prefazione

Il tranZPUter e il tranZPUter SW sono in sviluppo attivo e le modifiche vengono regolarmente riportate nella documentazione.

Il tranZPUter SW e' un derivato del progetto tranZPUter e utilizza un processore Freescale K64F come processore di controllo IO al posto della ZPU nel progetto tranZPUter originale.

Durante i test del tranZPUter v1.0 e con l'avvento dell'upgrade RFS v2.0 con CP/M, e' stato stabilito che il tranZPUter doveva essere aggiornato in modo che lo Z80 avesse memoria aggiuntiva e potesse funzionare a frequenze di clock piu' elevate. Doveva anche funzionare indipendentemente dal processore IO di controllo, cioe' la ZPU Evo su fabric FPGA o il K64F.

La v1.0 del tranZPUter aveva limitazioni di design che francamente rendevano il progetto molto piu' difficile. Per portare avanti il concetto e il design, ho fatto un passo indietro e ho optato per una potente mini scheda di sviluppo, il Teensy 3.5, che ha piu' che sufficienti pin I/O generici ed e' tollerante a 5V -- da qui questo design intermedio (che in realta' e' migliore per chiunque sia un programmatore software e non abbia familiarita' con l'elettronica o il VHDL, ma voglia comunque espandere una macchina Z80).

Tutto e' scritto in C/C++ e una volta funzionante, posso fare il coraggioso passo di specificare un tranZPUter v2.0 con un BGA, poiche' la ZPU eseguira' tutto il software appena scritto.

Panoramica

Lo Sharp MZ80A e' basato sulla CPU Z80 a 2MHz. E' vintage (anche se lo Z80 e' ancora ampiamente utilizzato in nuovi design industriali a 33MHz e oltre) e sottodimensionato rispetto ai computer moderni. Oltre al valore storico, ha una base software che di tanto in tanto e' utile. Si potrebbe scrivere un emulatore software per prolungare l'uso del software, ma c'e' qualcosa di speciale nell'usare l'hardware originale, e questa e' un'alternativa per mantenere la macchina originale fornendo al contempo un upgrade che puo' alimentare la macchina con potenza di elaborazione aggiuntiva, memoria e diverse CPU basate su software. Questo si ottiene attraverso il bus mastering, dove la CPU originale viene messa in tri-state e il K64F prende il controllo del bus e delle periferiche originali sulla scheda madre.

L'upgrade estende anche le capacita' hardware dello Z80 con RAM aggiuntiva per una versione a 64K di CP/M e per aumentare la velocita' del processore mantenendo la velocita' originale quando si accede alle periferiche della scheda madre Sharp MZ80A.

Questo design e' un lavoro in corso e procede parallelamente al tranZPUter. Il software di controllo scritto in C/C++ per il tranZPUter SW e' destinato a funzionare anche sul tranZPUter sotto la ZPU.

Poiche' il design sostituisce uno Z80 in loco, non e' limitato al MZ80A ma puo' essere utilizzato in qualsiasi computer basato su Z80 con le opportune modifiche software, ad esempio il MZ-700 o MZ-80B.

tranZPUter SW

Il tranZPUter deriva il suo nome da: Un TRANsformabile ZPU CompuTER, poiche' la CPU di base nel tranZPUter originale e' la ZPU Evo. La ZPU Evo fornisce i servizi previsti di menu, SD, video overlay per lo Sharp MZ80A mettendo in tri-state lo Z80 originale e accedendo alla memoria e alle periferiche dell'MZ80A come se fossero dispositivi ZPU.

Il tranZPUter SW si basa sul design del tranZPUter nei suoi obiettivi migliorando al contempo l'hardware Z80 sottostante. Utilizza un Freescale K64F ARM Cortex-M4 al posto della ZPU Evo poiche' il tranZPUter SW e' piu' una soluzione software per il requisito. Il progetto aggiunge il suffisso SW per *S*oft*W*are per distinguere i due design.

Per fornire diverse CPU, e' sufficiente prendere emulatori di CPU esistenti e adattarli per utilizzare i segnali della CPU sul bus MZ80A tramite l'interfaccia di questo design.

Hardware

Le basi di questo design risiedono nel bus mastering dello Z80, cioe' la capacita' di togliere lo Z80 dal circuito e controllare l'hardware rimanente del computer secondo necessita'. Il bus mastering e' stato tipicamente utilizzato da dispositivi come il DMA per il trasferimento rapido di dati da un dispositivo I/O alla memoria o da memoria a memoria per applicazioni come video/grafica.

Il bus mastering viene utilizzato per prendere il controllo del bus Z80 e trasferire dati tra la memoria principale e una scheda SD o tra il processore I/O e il buffer del display video per la visualizzazione dei menu. Viene anche utilizzato quando un soft-processore mette completamente in idle lo Z80 hardware e agisce come CPU principale del computer.

Il design ruota attorno al sollevare lo Z80 originale su una scheda figlia e reindirizzare diversi dei suoi segnali in modo che possano essere controllati secondo necessita'.

Schema v1.0 Z80 Upgrade

Sheet 1

Per consentire l'esecuzione di programmi per altri modelli Sharp (ad es. MZ-700) o CP/M a 64K, il design aggiunge un dispositivo RAM statica da 512KB con la necessaria logica di paginazione. Poiche' il design in questa fase deve essere flessibile nella riorganizzazione della memoria, viene utilizzato un decodificatore programmabile sotto forma di Flash RAM. Questo consente la massima flessibilita' durante lo sviluppo.

Schema v1.0 Teensy 3.5

Sheet 2

Il secondo schema mostra la scheda di sviluppo Teensy 3.5, che viene fornita in un package DIL a 48 pin ed e' ideale per il posizionamento su una scheda progetto come il tranZPUter. Contiene il processore Freescale K64F, una scheda SD e logica USB.

Schema v1.1 Z80 Upgrade

Ulteriori revisioni hardware (v1.1, v2.0, v2.1, v2.2) con layout PCB e schemi sono documentate nella versione inglese.


Dettagli del design

Questa sezione fornisce informazioni interne sul design per comprendere le operazioni del tranZPUter e le sue interazioni tra l'host (il computer originale, attualmente testato su uno Sharp MZ-80A e un MZ-700), la scheda figlia tranZPUter SW e il processore K64F.

K64F Z80 Host API

L'API si basa su un blocco di RAM condivisa nello spazio di memoria a 64K dello Z80, attraverso il quale avviene la comunicazione interprocessore. Sul K64F questo e' dichiarato in C come una struttura e sullo Z80 come riferimento assembler a variabili di memoria.

La struttura completa dell’API, la lista dei comandi e la lista dei risultati sono identiche alla versione inglese e sono documentate li’.

La comunicazione e’ interamente iniziata dallo Z80. Quando necessita di un servizio, scrive un comando nel campo svcControl.cmd e imposta il campo svcControl.result su REQUEST. Lo Z80 scrive poi su una porta di uscita (configurabile, ma tipicamente 0x68), che a sua volta invia un interrupt al K64F.


Organizzazione GPIO

In questo design, il K64F opera in un ruolo di supervisione e servizio. Lo Z80 puo' funzionare autonomamente senza il K64F, lasciando la macchina host completamente originale, e in piu' la scheda tranZPUter fornisce anche alcuni nuovi upgrade come 512K di RAM statica che lo Z80 puo' utilizzare secondo necessita'.

Quando sono necessari servizi avanzati come l'accesso alla scheda SD o l'emulazione hardware, e' necessario il K64F per fornire questi servizi. Lo Z80 vede il K64F come un'estensione hardware -- effettua una richiesta I/O e riceve funzionalita' in cambio.

Le tabelle complete di mappatura GPIO (mappatura porta e bit del K64F, mappatura bit GPIO alle linee di indirizzo e dati dello Z80) sono identiche alla versione inglese.


Modalita' di memoria

Una delle caratteristiche del design hardware tranZPUterSW e' la capacita' di creare liberamente mappe di memoria all'interno dei 512K di Flash RAM. Queste mappe vengono assegnate a una modalita' di memoria e selezionate tramite il latch della modalita' di memoria. Definiscono come la memoria del tranZPUter SW viene mappata nello spazio di indirizzi di memoria dello Z80 insieme ai componenti originali della scheda madre.

La tabella completa delle modalita’ di memoria (modalita’ 0-14 incluse Original, TZFS, CP/M, MZ-700 e MZ-80B) e’ identica alla versione inglese.


Commutazione della frequenza della CPU Z80

Per rendere il tranZPUter SW compatibile con altre macchine, e' necessario far funzionare la CPU alla velocita' di quella macchina. E' anche desiderabile far funzionare la CPU il piu' velocemente possibile quando si utilizza software come CP/M per le massime prestazioni.

Uno dei principali problemi con la commutazione di frequenza e' che l'host sottostante non puo' cambiare la sua frequenza -- l'host tipicamente genera il clock e i suoi circuiti sono progettati per funzionare entro le sue tolleranze di clock.

Per soddisfare il requisito di una frequenza CPU Z80 commutabile, e' stato implementato un commutatore di frequenza attivato sul fronte positivo, che utilizza la frequenza dell'host come un ingresso e un generatore di onda quadra dal K64F come secondo ingresso.

I test attuali su una CPU CMOS Z84C0020 a 20MHz mostrano le seguenti osservazioni:
  • tranZPUter affidabile nell’intervallo 1Hz - 20MHz per tutte le funzionalita’.
  • tranZPUter affidabile a 24MHz sulla scheda tranZPUter v2.1.
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.

Configurazione del sistema

Il CPLD mantiene un registro di configurazione interno per modificare il modo in cui opera con l’host sottostante. Le tabelle dei registri di configurazione (System Configuration Register 0x6E e System Information Register 0x6F) sono identiche alla versione inglese.


Modalita' Sharp MZ-700

Uno degli obiettivi del tranZPUter era quello di eseguire il piu' possibile software di altri modelli sull'host. L'host originale e' un MZ-80A e l'obiettivo era eseguire software per un MZ-700/MZ-800/MZ-80B su questa macchina. Il tranZPUter stesso puo' essere inserito in un vero Sharp MZ-700 o MZ-80B ed e' stato testato su queste macchine.

La tabella comparativa delle differenze tra MZ-80A e MZ-700 e i dettagli sull’implementazione della compatibilita’ (tranZPUter v1.1 e v2.1) sono documentati nella versione inglese.


Modalita' Sharp MZ-80B

I dettagli sulla modalita’ di compatibilita’ MZ-80B sono documentati nella versione inglese.


Linguaggio di descrizione hardware

A partire dalla versione 2.0 del tranZPUter SW, tutta la logica discreta sulla scheda e' stata sostituita da un singolo CPLD (Altera EPM7128), programmato in VHDL. Tutte le funzioni come decodifica della memoria, controllo del bus, commutazione della frequenza e configurazione del sistema sono implementate nel file VHDL.

Complex Logic Device - MAX 7000A

I dettagli del CPLD e le istruzioni di build per il bitstream sono documentati nella versione inglese.

Software

Il software del tranZPUter SW e' strutturato in modo modulare e consiste di diversi componenti che lavorano insieme per fornire la funzionalita' estesa.

zOS

zOS e' il sistema operativo che funziona sul processore K64F. Fornisce servizi all'host Z80, incluso l'accesso alla scheda SD, la gestione della memoria, il controllo della frequenza della CPU e l'emulazione hardware. La documentazione completa di zOS, inclusi comandi, comandi tranZPUter, mappature dei tasti e dettagli API, e' disponibile nella [versione inglese](/sharpmz-upgrades-tranzputer-sw/).

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

TZFS (tranZPUter Filing System) e' un file system che rende la scheda SD disponibile per lo Z80. Sostituisce il Monitor ROM dello Sharp MZ-80A e offre funzioni estese come il caricamento e il salvataggio di programmi dalla/sulla scheda SD, elenchi di directory e altro.

I comandi e i dettagli completi di TZFS sono documentati nella versione inglese.

CP/M

CP/M 2.2 e' stato portato per il tranZPUter SW. Il tranZPUter fornisce 64K di RAM necessari per il funzionamento di CP/M, e il K64F emula i floppy disk utilizzando file sulla scheda SD.

I comandi e i dettagli di CP/M sono documentati nella versione inglese.

TZFS Monitor

Il riferimento completo ai comandi del monitor TZFS e’ documentato nella versione inglese.

Sharp BASIC SA-5510

I dettagli su Sharp BASIC sul tranZPUter sono documentati nella versione inglese.

Microsoft BASIC

I dettagli su Microsoft BASIC sul tranZPUter sono documentati nella versione inglese.

Memory Decoder Tool

Il Memory Decoder Tool viene utilizzato per generare le tabelle di decodifica della memoria nella Flash RAM. I dettagli completi sono documentati nella versione inglese.

Build del software tranZPUter SW

Questa sezione descrive come costruire il software per il tranZPUter SW. Tutto lo sviluppo e' stato effettuato su Linux.

Percorsi

La tabella completa dei percorsi e’ documentata nella versione inglese.

Strumenti

Gli strumenti necessari sono documentati nella versione inglese.

Build di zOS

Le istruzioni di build per zOS sono documentate nella versione inglese.

Build di TZFS

Le istruzioni di build per TZFS sono documentate nella versione inglese.

Build del Memory Decoder

Le istruzioni di build per il Memory Decoder sono documentate nella versione inglese.

Build di CPM

Le istruzioni di build per CPM sono documentate nella versione inglese.

Un build tipico

La descrizione di un tipico processo di build e’ documentata nella versione inglese.

Flashare il K64F MPU

Le istruzioni per flashare il K64F sono documentate nella versione inglese.

Flashare il Teensy3.5

Le istruzioni per flashare il Teensy3.5 sono documentate nella versione inglese.

Ringraziamenti

I ringraziamenti e le licenze sono identici alla versione inglese.

Licenze

La GNU Public License v3

Questo progetto e’ rilasciato sotto la GPLv3. I dettagli si trovano nella versione inglese.