tranZPUter SW-700 — Guide Technique

English

Guide Technique du tranZPUter SW-700 (Version Actuelle)

Ce guide documente l'architecture materielle, le mecanisme de bus mastering, les modes de gestion de la memoire, les registres systeme, l'API de service K64F, la commutation de CPU, le module video, les specifications FPGA et le systeme de build pour la version actuelle du tranZPUter SW-700 — la carte d'extension qui ajoute un processeur d'E/S K64F, un CPLD et un FPGA Altera au Sharp MZ-700 (et, dans la version actuelle, au Sharp MZ-2000).
La version actuelle prend en charge l'emulation materielle du MZ-2000 et utilise des FPGA plus grands (Cyclone IV EP4CE75 ou EP4CE115) par rapport a la base v1.2 (Cyclone III EP3C25). Tout dans ce guide s'applique au materiel actuel sauf indication explicite d'un qualificatif de version (v1.2 / v1.3).
Pour l'utilisation quotidienne et la reference des commandes TZFS, voir le Manuel Utilisateur. Pour les explications du code source Z80 et FPGA, voir le Guide du Developpeur.

Bus Mastering

Le tranZPUter SW-700 se branche sur le bus d'extension du Sharp MZ-700 (ou MZ-2000). Son CPLD surveille le bus et peut activer la ligne /BUSRQ du Z80 a tout moment. Lorsque /BUSRQ est active, le Z80 termine son cycle machine en cours puis met ses bus d'adresse, de donnees et de controle en haute impedance, signalant la liberation du bus via /BUSAK.
Une fois que le Z80 libere le bus, le FPGA prend la propriete des trois bus. Dans cet etat, le FPGA peut agir comme :
  • Un moteur DMA — transfert massif de donnees entre le SRAM de 512 Ko et la memoire de la carte mere sans intervention du Z80.
  • Une CPU logicielle — les coeurs T80 ou ZPU Evolution s'executent directement depuis le SRAM, adressant l'espace memoire complet comme s'ils etaient le CPU systeme.
Lorsque le FPGA libere /BUSRQ, le Z80 recupere ses bus et reprend l'execution exactement la ou il a ete suspendu — tout l'etat des registres est preserve car le Z80 n'a jamais ete reinitialise. Le contenu du SRAM est egalement preserve lors du transfert, de sorte que le code ou les donnees places par le FPGA restent disponibles pour les programmes Z80.
Le CPLD gere la traduction de niveau entre les signaux du bus MZ a 5 V et les E/S FPGA a 3,3 V, et effectue le decodage d'adresse pour que les registres du tranZPUter apparaissent dans l'espace d'E/S du Z80 sans entrer en conflit avec les peripheriques de la carte mere MZ.

Composants Materiels

K64F ARM Cortex-M4 (Processeur d'E/S)
Le NXP/Freescale K64F fonctionne a 120 MHz et agit comme processeur d'E/S du systeme. Il opere independamment du Z80 et du FPGA, executant le systeme d'exploitation embarque zOS. Ses responsabilites sont :
  • Gestion de la carte SD — fournit l'acces au systeme de fichiers FAT32 sur la carte SD. Tous les fichiers programme MZF, images ROM et bitstreams FPGA y sont stockes.
  • Chargement de firmware/ROM — lit les images ROM et bitstreams FPGA depuis la carte SD et les charge dans le SRAM de 512 Ko ou dans le flash de configuration du FPGA.
  • API de service TZFS — traite les requetes des programmes Z80 fonctionnant sous TZFS. Le Z80 ecrit une commande et ses parametres dans une region de memoire partagee a 0xED80, puis declenche le K64F via le registre SVCREQ au port d'E/S 0x68. Le K64F interroge la requete, l'execute, ecrit les resultats dans la memoire partagee et efface le drapeau SVCREQ.
  • Synthese de frequence CPU — genere une horloge CPU alternative qui peut etre commutee vers le Z80 a la demande, permettant au Z80 de fonctionner a des vitesses differentes de la frequence native de la carte mere MZ.
Le K64F se connecte au FPGA et au CPLD via des lignes de controle dediees et partage le bus SRAM avec le FPGA.

MAX 7000A CPLD (512 Macro Cells)
L'Altera MAX 7000A est un CPLD tolerant 5 V avec 512 macrocellules. Il se situe directement sur le bus d'extension MZ et remplit trois fonctions :
  • Traduction de niveau — fait le pont entre les signaux du bus MZ-700/MZ-2000 a 5 V et les rails d'E/S du FPGA a 3,3 V.
  • Logique de bus mastering — active /BUSRQ vers le Z80 et surveille /BUSAK pour arbitrer la propriete du bus entre le Z80 et le FPGA.
  • Decodage d'adresse — mappe les registres d'E/S du tranZPUter (0x60–0x6F, 0xA8–0xAD, 0xF0, etc.) dans l'espace d'E/S du Z80 et commute le SRAM dans l'espace d'adressage du Z80 selon le mode de gestion memoire TZMM actif.

Altera FPGA
Deux variantes de FPGA sont utilisees sur les differentes revisions de cartes :
Version Device Logic Elements BRAM Package
v1.2 Cyclone III EP3C25E144C8 25K LE 76 KB 144-pin TQFP
v1.3 Cyclone IV EP4CE75F484C8 75K LE 360 KB 484-pin BGA
v1.3 Cyclone IV EP4CE115F484C8 115K LE 480 KB 484-pin BGA
Le FPGA implemente :
  • T80 Soft Z80 — un coeur CPU compatible Z80 synthetise qui prend le controle des bus lorsque le bus mastering est actif.
  • ZPU Evolution Soft CPU — un processeur logiciel 32 bits base sur une pile qui peut executer des binaires ZPU depuis le SRAM.
  • Controleur video — prend en charge tous les modes video Sharp MZ et fournit une sortie VGA (voir Module Video).
  • GPU — primitives graphiques accelerees materiellement (effacement VRAM, remplissage de rectangle, effacement GRAM).
La configuration du FPGA est stockee dans un Flash SPI : EPCS16 (v1.2) ou EPCS64 (v1.3). Le K64F peut reprogrammer ce flash a partir d'un bitstream sur la carte SD.

512 Ko de RAM Statique (AS6C4008)
Un seul composant SRAM AS6C4008 de 512 Ko x 8 fournit la memoire etendue du tranZPUter. Le CPLD pagine differentes regions de ce SRAM dans l'espace d'adressage de 64 Ko du Z80 en fonction du mode TZMM actif (voir Modes de Gestion de la Memoire). Le SRAM est accessible a la fois au Z80 (via le decodeur d'adresse du CPLD) et au FPGA (via connexion directe), et son contenu persiste lors des transferts de bus mastering.

Alimentation
Trois regulateurs LDO embarques derivent les rails d'alimentation requis a partir de l'alimentation 5 V du bus d'extension MZ :
Rail Consumers
3.3 V CPLD, K64F, general I/O, SRAM
2.5 V FPGA I/O banks
1.2 V FPGA core

Modes de Gestion de la Memoire

Le CPLD implemente une unite de gestion de la memoire controlee par l'ecriture d'une valeur de mode au port d'E/S 0x60. Chaque mode determine comment les regions du SRAM de 512 Ko sont paginees dans l'espace d'adressage de 64 Ko du Z80, et si c'est la ROM et la RAM de la carte mere MZ ou le SRAM du tranZPUter qui dessert chaque plage d'adresses.
Le registre de mode est appele registre TZMM (tranZPUter Memory Mode). Les modes principaux sont :
Mode Value Description
TZMM_ORIG 0x00 Original MZ-700 mode — mainboard IPL ROM, DRAM, and VRAM visible as normal. tranZPUter SRAM inactive.
TZMM_BOOT 0x01 tranZPUter SRAM mapped at 0xE800–0xEFFF to hold the TZFS bootstrap. All other addresses use mainboard resources.
TZMM_TZFS 0x22 TZFS mode — entire 64 KB address space served from tranZPUter SRAM. The K64F has preloaded TZFS code and ROM images.
TZMM_TZFS2 0x23 TZFS banked mode — alternate code bank 2 active.
TZMM_TZFS3 0x24 TZFS banked mode — alternate code bank 3 active.
TZMM_TZFS4 0x25 TZFS banked mode — alternate code bank 4 active.
TZMM_CPM 0x26 CP/M mode — full 64 KB SRAM mapped, CBIOS and CCP loaded by K64F.
TZMM_CPM2 0x27 CP/M mode variant — alternate CBIOS bank active.
TZMM_MZ700_0 MZ-700 compatibility paging — mainboard ROM and VRAM layout preserved.
TZMM_MZ2000 MZ-2000 compatibility paging — MZ-2000 ROM and VRAM layout emulated. Current version only.
A la mise sous tension, le CPLD demarre en mode TZMM_ORIG (0x00), presentant la carte memoire standard du MZ-700. La ROM bootstrap TZFS a 0xE800 bascule vers TZMM_BOOT pour se rendre visible, puis bascule vers TZMM_TZFS une fois que le K64F a charge l'image TZFS complete dans le SRAM.
TZMM_ORIG (0x00) — Original MZ-700 layout
  0x0000–0x0FFF   MZ mainboard IPL ROM
  0x1000–0xCFFF   MZ mainboard DRAM
  0xD000–0xDFFF   MZ mainboard VRAM / memory-mapped I/O
  0xE000–0xE7FF   MZ mainboard VRAM extension / I/O
  0xE800–0xEFFF   MZ mainboard ROM (User ROM area)
  0xF000–0xFFFF   MZ mainboard ROM / unused

TZMM_TZFS (0x22) — Full SRAM mode
  0x0000–0xFFFF   tranZPUter 512 KB SRAM (64 KB window)
                  K64F has loaded: IPL at 0x0000, TZFS at 0xE800, ROMs throughout

TZMM_CPM (0x26) — CP/M mode
  0x0000–0xFFFF   tranZPUter 512 KB SRAM (64 KB window)
                  K64F has loaded: CP/M CCP+BDOS+CBIOS

Registres Systeme

Le tranZPUter mappe ses registres de controle dans l'espace d'adressage d'E/S du Z80. Tous les registres sont accedes avec les instructions Z80 IN et OUT. Le CPLD decode les adresses d'E/S et route les acces vers le materiel appropriate.

Carte des Registres
Port    Register                     R/W   Description
──────────────────────────────────────────────────────────────────────────────
0x60    Memory Management Config      W    TZMM mode select (see Memory Modes)
0x62    Set CPU Alt Frequency         W    Switch Z80 clock to K64F-generated alternate frequency
0x64    Set CPU Base Frequency        W    Switch Z80 clock back to MZ mainboard frequency
0x66    CPU Frequency Change          W    Set exact CPU frequency in Hz (32-bit value via shared mem)
0x68    Service Request (SVCREQ)      W    Trigger K64F service request; K64F polls and clears on completion
0x6B    System Command Register       W    System-level commands (reset, mode changes)
0x6C    CPU Configuration             R/W  Select active CPU core (Z80, T80, ZPU Evolution)
0x6D    CPU Information               R    Read available CPU capabilities and soft-CPU presence
0x6E    System Configuration          R/W  System feature flags
0x6F    System Information            R    Board identification and hardware status
0xA8    Video Control                 R/W  Machine model, column width, colour enable, PCG, VGA mode
0xA9    Video Graphics Mode           R/W  GRAM bank select, VRAM/GRAM output enable, blend operator
0xAA    Colour Writer Red             W    8-pixel red channel filter mask for indirect GRAM writes
0xAB    Colour Writer Green           W    8-pixel green channel filter mask for indirect GRAM writes
0xAC    Colour Writer Blue            W    8-pixel blue channel filter mask for indirect GRAM writes
0xAD    Memory Page / Status          R/W  GRAM→CPU enable (W bit 0), CGROM→CPU enable (W bit 7);
                                          H/V blanking status (R bits 5–6)
0xD0    Video Mode Parameter 0        R/W  Video timing / mode parameter
0xD1    Video Mode Parameter 1        R/W  Video timing / mode parameter
0xD2    Video Mode Parameter 2        R/W  Video timing / mode parameter
0xD3    Palette Entry 0               W    Palette colour data
0xD4    Palette Entry 1               W    Palette colour data
0xD5    Palette Entry 2               W    Palette colour data
0xD6    Palette Entry 3               W    Palette colour data
0xD7    Palette Entry 4               W    Palette colour data
0xF0    System Control (CPLD)         W    CPLD direct control register
0xF3    VGA Border Colour             W    Border colour for VGA output
0xF5    Palette Select                W    Select active palette entry for subsequent palette writes
?F6     GPU Parameters                W    Parameters for GPU primitive commands
?F7     GPU Command / Status          R/W  Issue GPU command (W); read GPU busy/done status (R)
──────────────────────────────────────────────────────────────────────────────

Registre de Configuration CPU — Port 0x6C
Bits Field Description
2:0 CPU Select 000 = Z80 (hard CPU on mainboard), 001 = T80 (soft Z80 in FPGA), 010 = ZPU Evolution (soft 32-bit CPU in FPGA), 011–111 = reserved
7:3 Reserved, write zero

Registre d'Information CPU — Port 0x6D (Lecture)
Bits Field Description
2:0 CPUMODE_IS_SOFT_MASK / CPUMODE_IS_SOFT_AVAIL Non-zero if one or more FPGA soft CPU cores are available in the current bitstream
3 CPUMODE_IS_T80 Set if the T80 soft Z80 core is present
4 CPUMODE_IS_ZPU_EVO Set if the ZPU Evolution core is present
5 CPUMODE_IS_EMU_MZ Set if machine emulation (MZ model switching) is available
7:6 Reserved

API de Service K64F

Le K64F expose une API de service pour les programmes Z80 fonctionnant sous TZFS. Le mecanisme est une region de memoire partagee dans le SRAM — le Z80 ecrit une commande et ses parametres dans la region, declenche le K64F et attend la fin du traitement. Aucun bus mastering n'est requis ; le Z80 et le K64F communiquent par des lectures et ecritures memoire ordinaires pendant que le K64F surveille le registre SVCREQ.

Mecanisme Requete/Reponse
Shared memory base: 0xED80 (in SRAM, visible to Z80 in TZMM_TZFS and related modes)

Offset  Symbol        Description
──────────────────────────────────────────────────────────────
0x00    TZSVCCMD      Service command code (1 byte, written by Z80)
0x01    TZSVCSTS      Status / result code (1 byte, written by K64F on completion)
0x02    TZSVCREQ      Request semaphore (set by Z80, cleared by K64F)
0x04    TZSVCP1       Parameter 1 (command-specific)
...     ...           Parameters 2–N (command-specific sizes and meanings)
──────────────────────────────────────────────────────────────

Z80 procedure:
  1. Write command code to TZSVCCMD (0xED80).
  2. Write parameters to TZSVCP1 onwards.
  3. OUT (0x68), A          ; assert SVCREQ — wakes K64F
  4. Poll TZSVCSTS until non-zero (K64F has completed the request).
  5. Read result data from shared memory.

Reference des Commandes de Service
Le tableau suivant liste les principales commandes de service. Les details des parametres sont documentes dans le code source du firmware TZFS.
Command Category Description
READDIR File I/O Read directory entries from the SD card FAT32 volume
LOADFILE File I/O Load a named file from SD card into SRAM
SAVEFILE File I/O Save a region of SRAM as a named file on SD card
LOAD40ABIOS BIOS Load Load MZ-80A BIOS ROM image into SRAM
LOAD700BIOS40 BIOS Load Load MZ-700 40-column BIOS image into SRAM
LOAD2000IPL BIOS Load Load MZ-2000 IPL ROM image into SRAM (current version only)
ADDSDDRIVE CP/M Disk Register an SD card CP/M disk image
READSDDRIVE CP/M Disk Read a 128-byte CP/M sector from an SD card disk image
WRITESDDRIVE CP/M Disk Write a 128-byte CP/M sector to an SD card disk image
CPU_BASEFREQ CPU Freq Switch Z80 clock to MZ mainboard native frequency
CPU_ALTFREQ CPU Freq Switch Z80 clock to K64F-generated alternate frequency
CPU_CHGFREQ CPU Freq Set Z80 clock to a specific frequency in Hz
CPU_SETZ80 CPU Switch Activate the physical Z80 (release bus mastering)
CPU_SETT80 CPU Switch Load T80 firmware and activate the T80 soft Z80 in FPGA
CPU_SETZPUEVO CPU Switch Load ZPU Evolution firmware and activate the ZPU soft CPU
EMU_SETMZ80K Emulation Configure FPGA video and I/O to emulate MZ-80K
EMU_SETMZ80C Emulation Configure FPGA to emulate MZ-80C
EMU_SETMZ1200 Emulation Configure FPGA to emulate MZ-1200
EMU_SETMZ80A Emulation Configure FPGA to emulate MZ-80A
EMU_SETMZ700 Emulation Configure FPGA to emulate MZ-700
EMU_SETMZ800 Emulation Configure FPGA to emulate MZ-800
EMU_SETMZ80B Emulation Configure FPGA to emulate MZ-80B
EMU_SETMZ2000 Emulation Configure FPGA to emulate MZ-2000 (current version only)
EMU_SETMZ2500 Emulation Configure FPGA to emulate MZ-2500

Commutation de CPU

Le tranZPUter peut fonctionner avec trois choix de CPU : le Z80 physique sur la carte mere MZ, le T80 soft Z80 implemente dans le FPGA, et la CPU logicielle 32 bits ZPU Evolution implementee dans le FPGA. La commutation de CPU est coordonnee entre le programme Z80, le K64F et le FPGA.

Procedure de Commutation
  1. Le programme Z80 emet une requete de service CPU_SETT80 ou CPU_SETZPUEVO via l'API K64F (port 0x68).
  2. Le K64F charge l'image firmware requise pour la CPU cible depuis la carte SD dans le SRAM de 512 Ko.
  3. Le K64F signale au FPGA d'activer le nouveau coeur CPU. Le CPLD active /BUSRQ vers le Z80.
  4. Une fois que le Z80 libere le bus (/BUSAK active), la CPU logicielle du FPGA prend possession des bus d'adresse, de donnees et de controle et commence l'execution depuis le SRAM.
  5. Le Z80 physique reste maintenu en etat de bus libere pendant toute la duree de l'execution de la CPU logicielle.
  6. Pour revenir a l'execution Z80, le programme en cours (ou le K64F) emet CPU_SETZ80, ce qui amene le FPGA a liberer /BUSRQ. Le Z80 recupere ses bus et reprend. Le contenu du SRAM est preserve.
Le registre de configuration CPU au port d'E/S 0x6C peut aussi etre ecrit directement pour selectionner un coeur CPU ; l'ecriture de ce registre declenche le meme flux de coordination K64F.

Coeurs CPU Disponibles
Core Port 0x6C bits 2:0 Notes
Z80 (hard) 000 Physical Z80 on MZ mainboard. Default after reset.
T80 001 Synthesised Z80-compatible core in FPGA fabric. Full Z80 instruction set.
ZPU Evolution 010 32-bit stack-based soft CPU in FPGA. Executes ZPU binaries.
Reserved 011–111 Not currently assigned.
Le registre d'information CPU (0x6D) doit etre lu avant de tenter un changement de CPU pour confirmer que le coeur souhaite est present dans le bitstream FPGA charge. Les drapeaux CPUMODE_IS_T80 (bit 3) et CPUMODE_IS_ZPU_EVO (bit 4) indiquent la disponibilite.

Module Video

Le FPGA implemente un controleur video complet prenant en charge tous les modes d'affichage Sharp MZ et ajoutant un framebuffer graphique avec sortie VGA. Les registres video sont mappes dans l'espace d'E/S du Z80 a 0xA8–0xAD (controle primaire), avec des registres supplementaires a 0xD0–0xD7 (palette et parametres de mode) et 0xF3, 0xF5 (bordure VGA et selection de palette).
Dans la version actuelle, le support du materiel video MZ-2000 est inclus aux cotes de tous les modeles MZ precedemment supportes.

Registres Video Primaires (0xA8–0xAD)
Port 0xA8 — Video Control Register
  Bits 2:0   Machine model select
               000 = MZ-80K
               001 = MZ-80C
               010 = MZ-1200
               011 = MZ-80A
               100 = MZ-700
               101 = MZ-800
               110 = MZ-80B
               111 = MZ-2000  (current version only)
  Bit  3     Column width: 0 = 40 columns, 1 = 80 columns
  Bit  4     Colour enable: 0 = monochrome, 1 = colour
  Bit  5     PCG (Programmable Character Generator) enable
  Bits 7:6   VGA output mode:
               00 = 640×480 @ 60 Hz
               01 = 800×600 @ 60 Hz
               10 = 1024×768 @ 60 Hz
               11 = reserved

Port 0xA9 — Graphics Mode Register
  Bits 1:0   GRAM bank select (selects which of the three R/G/B banks is the active write target)
  Bit  2     VRAM output enable
  Bit  3     GRAM output enable
  Bits 5:4   Blend operator (OR, AND, XOR, REPLACE)
  Bits 7:6   Reserved

Port 0xAA — Colour Writer Red Filter
  Bits 7:0   8-pixel red channel mask for indirect (colour-writer) GRAM writes
             Each bit corresponds to one pixel in a horizontal 8-pixel stripe

Port 0xAB — Colour Writer Green Filter
  Bits 7:0   8-pixel green channel mask (same pixel layout as 0xAA)

Port 0xAC — Colour Writer Blue Filter
  Bits 7:0   8-pixel blue channel mask (same pixel layout as 0xAA)

Port 0xAD — Memory Page / Status Register
  Write:
    Bit  0   GRAM→CPU enable: 1 = map GRAM into CPU address space for direct read/write
    Bit  7   CGROM→CPU enable: 1 = map Character Generator ROM into CPU address space
  Read:
    Bit  5   Horizontal blanking status: 1 = currently in HBlank
    Bit  6   Vertical blanking status:   1 = currently in VBlank

Framebuffer Graphique
Le FPGA implemente une couche graphique 640x200 (ou 320x200) en plus de l'affichage de caracteres. Le framebuffer est organise en trois banques independantes de 16 Ko — Rouge, Vert et Bleu — donnant des donnees de pixels sur 3 bits (8 couleurs). Chaque banque est de 1 bit par pixel a 640x200.
Les ecritures vers le GRAM peuvent etre effectuees de deux manieres :
  • Mode direct — activer GRAM→CPU (port 0xAD bit 0), puis lire ou ecrire les adresses GRAM directement depuis le code Z80. Chaque banque est selectionnee individuellement via le port 0xA9 bits 1:0.
  • Mode colour writer — ecrire une fois a l'adresse caractere VRAM ; le materiel colour writer met a jour simultanement les trois banques GRAM en utilisant les masques de 8 pixels ecrits aux ports 0xAA, 0xAB, 0xAC. Cela permet a une seule ecriture de peindre une cellule de caractere coloree.

Sortie VGA
Le FPGA met a l'echelle l'affichage natif Sharp MZ aux timings VGA standard. Trois resolutions de sortie sont selectionnables via le port 0xA8 bits 7:6. Sur le materiel v1.3, un affichage a double tampon est disponible dans tous les modes — l'affichage lit depuis un tampon pendant que le Z80 ou le GPU ecrit dans l'autre.
VGA Mode (bits 7:6) Output Resolution Refresh
00 640 × 480 60 Hz
01 800 × 600 60 Hz
10 1024 × 768 60 Hz
11 Reserved

GPU
Un GPU simple est accessible via les ports d'E/S ?F6 (parametres) et ?F7 (commande/statut). Primitives supportees :
  • Effacer VRAM — remplir l'affichage de caracteres avec un caractere et attribut specifies.
  • Remplir Rectangle — remplir une region rectangulaire du GRAM avec une couleur.
  • Effacer GRAM — mettre a zero les trois banques GRAM.
L'ecriture d'un code de commande a ?F7 demarre l'operation. La lecture de ?F7 retourne un drapeau d'etat occupe/termine. Le Z80 doit interroger le drapeau d'etat avant d'emettre la commande suivante.

Specifications FPGA

Resume complet des capacites pour chaque variante FPGA utilisee sur le tranZPUter SW-700 :
Feature v1.2 (EP3C25) v1.3 (EP4CE75 / EP4CE115)
Logic elements 25K 75K / 115K
On-chip BRAM 76 KB 360 KB / 480 KB
Package 144-pin TQFP 484-pin BGA
Configuration flash EPCS16 EPCS64
Soft CPUs T80, ZPU Evolution T80, ZPU Evolution
MZ video models MZ-80K/C/1200/80A/700/800/80B + MZ-2000 (current)
VGA output 640×480, 800×600, 1024×768 640×480, 800×600, 1024×768
Double-buffered display No Yes (all modes)
GRAM banks 3 × 16 KB (R/G/B) 3 × 16 KB (R/G/B)
GPU Clear VRAM, fill rect, clear GRAM Clear VRAM, fill rect, clear GRAM
Supported MZ video modes (current version FPGA):
  MZ-80K    — 40×25 monochrome character display
  MZ-80C    — 40×25 monochrome character display
  MZ-1200   — 40×25 monochrome character display
  MZ-80A    — 40×25 monochrome character display
  MZ-700    — 40×25 character display with 8-colour attribute
  MZ-800    — 40×25 / 80×25 character; 320×200 / 640×200 graphics
  MZ-80B    — 40×25 character display; 320×200 / 640×200 graphics
  MZ-2000   — 40×25 / 80×25 character; 320×200 / 640×200 graphics (current version only)

Graphics framebuffer:
  Resolution: 640×200 or 320×200 pixels
  Colour depth: 3 bits per pixel (8 colours)
  Organisation: 3 independent 16 KB planes — Red, Green, Blue
  Total GRAM: 3 × 16 KB = 48 KB

Systeme de Build

Le firmware du tranZPUter SW-700 couvre trois composants, chacun avec sa propre chaine d'outils : bitstream FPGA (Quartus Prime), firmware K64F (ARM GCC) et logiciel Z80 (assembleur GLASS). Tout le developpement est effectue sous Linux.

La methode recommandee pour obtenir un build fonctionnel est le script d'installation automatise pour votre plateforme — voir Installation et build automatises juste en dessous. Il installe les chaines d'outils, construit les images Docker Quartus et recupere les sources pour vous. Le detail composant par composant qui suit explique ce que le build produit et comment executer les outils a la main.

Installation et build automatises (recommande)
Au lieu d'installer trois versions de Quartus, les chaines d'outils ARM GCC et Java et Docker a la main, executez le script d'installation fourni pour votre plateforme. Il installe les outils de base, installe Java (JRE) pour l'assembleur Z80 GLASS et Docker, construit trois images Docker Quartus reproductibles, clone le depot --recurse-submodules (TZFS, zSoft/zOS, zpu), et propose d'executer le premier build (./build.sh -t all). Quartus lui-meme n'est pas installe sur l'hote — les builds CPLD et FPGA s'executent a l'interieur des images Docker. Chaque script est autonome.
Script Plateforme Notes
setup_tranZPUter.sh Linux / macOS Installe les outils de base + Java (JRE) + Docker, construit les trois images Quartus, clone dans ~/tranZPUter, propose ./build.sh -t all.
setup_tranZPUter_windows.cmd Windows 10 / 11 Lanceur a double-clic — execute le .ps1 de maniere non interactive et journalise dans setup_tranZPUter_log.txt.
setup_tranZPUter_windows_native.ps1 Windows 10 / 11 winget installe Git for Windows + Docker Desktop, construit les images Quartus, clone dans %HOME%\tranZPUter, execute ./build.sh -t all via Git Bash.

Linux / macOS :

chmod +x setup_tranZPUter.sh
./setup_tranZPUter.sh

Windows — double-cliquez sur setup_tranZPUter_windows.cmd, ou depuis PowerShell :

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_tranZPUter_windows_native.ps1
L'installation construit trois images Docker Quartus gratuites (Web/Lite Edition, sans licence) : tzpu-quartus:13.0.1 (CPLD MAX7000), tzpu-quartus:13.1 (Cyclone III, SW-700 v1.2) et tzpu-quartus:17.1 (Cyclone IV, SW-700 v1.3 / Fusion). Le build est ensuite pilote par build.sh, qui execute Quartus nativement si une version correspondante est trouvee, sinon a l'interieur de ces images (Java/GLASS s'execute toujours nativement). Les sorties (.pof, .sof, .jic boot flash, images ROM/TZFS/CP/M) sont regroupees sous ./build/output/.
./build.sh -t all        # CPLD + FPGA + software (default: -V v1.3 -M all -D E115 -C emuMZ)
./build.sh -h            # list all targets and options

Surcharges d’environnement utiles :

Variable (alias) Role
TZPU_REPO_URL (tranZPUter_REPO_URL) URL du depot a cloner. Par defaut https://git.eaw.app/eaw/tranZPUter.git.
TZPU_DIR (tranZPUter_DIR) Construire dans un checkout existant au lieu de cloner.
TZPU_ASSUME_YES (tranZPUter_ASSUME_YES)=1 Non interactif ; accepte toutes les valeurs par defaut.
TZPU_QUARTUS_CPLD_IMAGE (tranZPUter_CPLD_IMAGE) Remplace l’image CPLD (par defaut tzpu-quartus:13.0.1).
TZPU_QUARTUS_C3_IMAGE (tranZPUter_FPGA_IMAGE) Remplace l’image Cyclone III (par defaut tzpu-quartus:13.1).
TZPU_QUARTUS_C4_IMAGE Remplace l’image Cyclone IV (par defaut tzpu-quartus:17.1).
Le detail de build manuel composant par composant ci-dessous reste entierement pris en charge pour les utilisateurs avances et les reconstructions partielles.

FPGA — Quartus Prime
Le RTL du FPGA est synthetise avec Altera/Intel Quartus Prime. La version requise depend du composant cible :
Board Version FPGA Device Quartus Version
v1.2 Cyclone III EP3C25 13.1 (last version with Cyclone III support)
v1.3 Cyclone IV EP4CE75 / EP4CE115 Current Quartus Prime Lite / Standard
Des conteneurs Docker sont fournis dans le depot pour reproduire l'environnement de build exact pour chaque version, evitant l'installation de la chaine d'outils sur la machine de developpement. Demarrez le conteneur appropriate, puis utilisez le flux de build standard Quartus (quartus_sh --flow compile) ou ouvrez le projet dans l'interface graphique Quartus.
Apres la synthese, le fichier .sof (SRAM Object File) ou .rbf (Raw Binary File) genere est ecrit dans le flash EPCS a l'aide du Quartus Programmer, ou peut etre place sur la carte SD pour que le K64F le charge au demarrage.

Firmware K64F — ARM GCC
Le firmware K64F (zOS) est construit avec la chaine d'outils ARM bare-metal GCC (arm-none-eabi-gcc). Le point d'entree du build est buildhost.sh situe sous software.moved.to.TZFS/ :
cd software.moved.to.TZFS
./buildhost.sh
Le script compile le noyau zOS, le pilote FAT32 de la carte SD, la table de dispatch de service SVCREQ et tous les pilotes d'E/S de support, puis lie et produit un binaire adapte au flashage sur le K64F. Le flashage est effectue via le bootloader USB DFU du K64F (glisser-deposer sur le peripherique de stockage de masse qui apparait lorsque le K64F demarre en mode DFU).

Logiciel Z80 / TZFS — Assembleur GLASS
TZFS et les logiciels Z80 associes sont assembles avec l'assembleur GLASS Z80 (fourni en tant que tools/glass.jar, necessite Java 8+). Les scripts de build dans l'arborescence software.moved.to.TZFS/ invoquent GLASS et empaquettent les binaires resultants sous forme d'images MZF pour la carte SD.

Sites de Reference

Resource Link
tranZPUter SW-700 project page /sharpmz-upgrades-tranzputer-sw700/
tranZPUter SW-700 User Manual /sharpmz-upgrades-tranzputer-sw700-usermanual/
tranZPUter SW-700 Developer’s Guide /sharpmz-upgrades-tranzputer-sw700-developersguide/
tranZPUter SW-700 Gallery /sharpmz-upgrades-tranzputer-sw700-gallery/
RFS Technical Guide /sharpmz-upgrades-rfs-technicalguide/
Sharp MZ-700 hardware reference MZ-700 Technical Manual
Altera MAX 7000A datasheet Intel/Altera MAX 7000A product page
NXP K64F Sub-Family Reference NXP K64 Reference Manual
GLASS Z80 Assembler Bundled in tools/glass.jar
Quartus Prime (Intel FPGA) https://www.intel.com/content/www/us/en/collections/products/fpga/software/downloads.html