tranZPUter SW-700 — Technischer Leitfaden

English

Technischer Leitfaden fuer den tranZPUter SW-700 (Aktuelle Version)

Dieser Leitfaden dokumentiert die Hardware-Architektur, den Bus-Mastering-Mechanismus, die Speicherverwaltungsmodi, die Systemregister, die K64F-Service-API, die CPU-Umschaltung, das Videomodul, die FPGA-Spezifikationen und das Build-System fuer die aktuelle Version des tranZPUter SW-700 — der Erweiterungsplatine, die einen K64F I/O-Prozessor, ein CPLD und ein Altera-FPGA zum Sharp MZ-700 (und in der aktuellen Version auch zum Sharp MZ-2000) hinzufuegt.
Die aktuelle Version unterstuetzt die MZ-2000 Hardware-Emulation und verwendet groessere FPGA-Bausteine (Cyclone IV EP4CE75 oder EP4CE115) im Vergleich zur v1.2-Basisversion (Cyclone III EP3C25). Alles in diesem Leitfaden gilt fuer die aktuelle Hardware, sofern nicht ausdruecklich ein Versionsqualifizierer (v1.2 / v1.3) angegeben ist.
Fuer den taeglichen Gebrauch und die TZFS-Befehlsreferenz siehe das Benutzerhandbuch. Fuer Z80-Assembler- und FPGA-Quellcode-Erlaeuterungen siehe das Entwicklerhandbuch.

Bus-Mastering

Der tranZPUter SW-700 wird an den Erweiterungsbus des Sharp MZ-700 (oder MZ-2000) angeschlossen. Sein CPLD ueberwacht den Bus und kann jederzeit die Z80-Leitung /BUSRQ aktivieren. Wenn /BUSRQ aktiviert wird, beendet der Z80 seinen aktuellen Maschinenzyklus und versetzt dann seine Adress-, Daten- und Steuerleitungen in den Tristate-Zustand, wobei er die Busfreigabe ueber /BUSAK signalisiert.
Sobald der Z80 den Bus freigibt, uebernimmt das FPGA die Kontrolle ueber alle drei Busse. In diesem Zustand kann das FPGA als folgendes agieren:
  • Eine DMA-Engine — Massenuebertragung von Daten zwischen dem 512 KB SRAM und dem Hauptplatinenspeicher ohne Z80-Beteiligung.
  • Eine Soft-CPU — die T80- oder ZPU Evolution-Kerne fuehren direkt aus dem SRAM aus und adressieren den gesamten Speicherbereich, als waeren sie die System-CPU.
Wenn das FPGA /BUSRQ freigibt, uebernimmt der Z80 seine Busse zurueck und setzt die Ausfuehrung genau an der Stelle fort, an der er unterbrochen wurde — der gesamte Registerzustand bleibt erhalten, da der Z80 nie zurueckgesetzt wurde. Der SRAM-Inhalt bleibt ebenfalls ueber die Uebergabe erhalten, sodass Code oder Daten, die vom FPGA dort platziert wurden, fuer Z80-Programme verfuegbar bleiben.
Das CPLD uebernimmt die Pegelumsetzung zwischen den 5-V-MZ-Bussignalen und den 3,3-V-FPGA-I/O-Schienen und fuehrt die Adressdekodierung durch, sodass tranZPUter-Register im Z80-I/O-Bereich erscheinen, ohne mit den Peripheriegeraeten der MZ-Hauptplatine zu kollidieren.

Hardwarekomponenten

K64F ARM Cortex-M4 (I/O-Prozessor)
Der NXP/Freescale K64F laeuft mit 120 MHz und fungiert als I/O-Prozessor des Systems. Er arbeitet unabhaengig vom Z80 und FPGA und fuehrt das eingebettete Betriebssystem zOS aus. Seine Aufgaben sind:
  • SD-Kartenverwaltung — bietet FAT32-Dateisystemzugriff auf die SD-Karte. Alle MZF-Programmdateien, ROM-Images und FPGA-Bitstreams werden hier gespeichert.
  • Firmware-/ROM-Laden — liest ROM-Images und FPGA-Bitstreams von der SD-Karte und laedt sie in den 512 KB SRAM oder in den FPGA-Konfigurations-Flash.
  • TZFS-Service-API — bearbeitet Anfragen von Z80-Programmen, die unter TZFS (tranZPUter Filing System) laufen. Der Z80 schreibt einen Befehl und Parameter in einen gemeinsamen Speicherbereich bei 0xED80 und loest dann den K64F ueber das SVCREQ-Register am I/O-Port 0x68 aus. Der K64F fragt die Anfrage ab, fuehrt sie aus, schreibt die Ergebnisse zurueck in den gemeinsamen Speicher und loescht das SVCREQ-Flag.
  • CPU-Frequenzsynthese — erzeugt einen alternativen CPU-Takt, der bei Bedarf auf den Z80 umgeschaltet werden kann, wodurch der Z80 mit anderen Geschwindigkeiten als der nativen Frequenz der MZ-Hauptplatine laufen kann.
Der K64F ist ueber dedizierte Steuerleitungen mit dem FPGA und CPLD verbunden und teilt sich den SRAM-Bus mit dem FPGA.

MAX 7000A CPLD (512 Makrozellen)
Der Altera MAX 7000A ist ein 5-V-tolerantes CPLD mit 512 Makrozellen. Es sitzt direkt am MZ-Erweiterungsbus und erfuellt drei Funktionen:
  • Pegelumsetzung — verbindet die 5-V-MZ-700/MZ-2000-Bussignale mit den 3,3-V-FPGA-I/O-Schienen.
  • Bus-Mastering-Logik — aktiviert /BUSRQ zum Z80 und ueberwacht /BUSAK, um die Bus-Eigentuemerschaft zwischen Z80 und FPGA zu arbitrieren.
  • Adressdekodierung — bildet die tranZPUter-I/O-Register (0x60–0x6F, 0xA8–0xAD, 0xF0 usw.) in den Z80-I/O-Bereich ab und schaltet SRAM in den Z80-Adressbereich entsprechend dem aktiven TZMM-Speicherverwaltungsmodus ein.

Altera FPGA
Zwei FPGA-Varianten werden ueber verschiedene Platinenrevisionen hinweg verwendet:
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
Das FPGA implementiert:
  • T80 Soft-Z80 — ein synthetisierter Z80-kompatibler CPU-Kern, der die Busse uebernimmt, wenn Bus-Mastering aktiv ist.
  • ZPU Evolution Soft-CPU — ein 32-Bit-stapelbasierter Soft-Prozessor, der ZPU-Binaerdateien aus dem SRAM ausfuehren kann.
  • Videocontroller — unterstuetzt alle Sharp MZ Videomodi und bietet VGA-Ausgabe (siehe Videomodul).
  • GPU — hardwarebeschleunigte Grafikprimitive (VRAM loeschen, Rechteck fuellen, GRAM loeschen).
Die FPGA-Konfiguration wird im SPI-Flash gespeichert: EPCS16 (v1.2) oder EPCS64 (v1.3). Der K64F kann diesen Flash von einem Bitstream auf der SD-Karte umprogrammieren.

512 KB Statischer RAM (AS6C4008)
Ein einzelner 512 KB x 8 AS6C4008 SRAM-Baustein stellt den erweiterten Speicher des tranZPUter bereit. Das CPLD blendet verschiedene Bereiche dieses SRAM in den 64 KB Adressbereich des Z80 ein, abhaengig vom aktiven TZMM-Modus (siehe Speicherverwaltungsmodi). Der SRAM ist sowohl fuer den Z80 (ueber den CPLD-Adressdekoder) als auch fuer das FPGA (ueber Direktverbindung) zugaenglich, und sein Inhalt bleibt ueber Bus-Mastering-Uebergaben erhalten.

Spannungsversorgung
Drei On-Board-LDO-Regler erzeugen die benoetigten Versorgungsschienen aus der 5-V-Versorgung des MZ-Erweiterungsbusses:
Rail Consumers
3.3 V CPLD, K64F, general I/O, SRAM
2.5 V FPGA I/O banks
1.2 V FPGA core

Speicherverwaltungsmodi

Das CPLD implementiert eine Speicherverwaltungseinheit, die durch Schreiben eines Moduswerts an den I/O-Port 0x60 gesteuert wird. Jeder Modus bestimmt, wie Bereiche des 512 KB SRAM in den 64 KB Adressbereich des Z80 eingeblendet werden und ob das MZ-Hauptplatinen-ROM und -RAM oder der tranZPUter-SRAM jeden Adressbereich bedient.
Das Modusregister wird als TZMM (tranZPUter Memory Mode) Register bezeichnet. Wichtige Modi sind:
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.
Beim Einschalten startet das CPLD im Modus TZMM_ORIG (0x00) und praesentiert die Standard-MZ-700-Speicherbelegung. Das TZFS-Bootstrap-ROM bei 0xE800 schaltet auf TZMM_BOOT um, um sich selbst sichtbar zu machen, und schaltet dann auf TZMM_TZFS, sobald der K64F das vollstaendige TZFS-Image in den SRAM geladen hat.
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

Systemregister

Der tranZPUter bildet seine Steuerregister in den Z80-I/O-Adressbereich ab. Alle Register werden mit Z80-Befehlen IN und OUT angesprochen. Das CPLD dekodiert die I/O-Adressen und leitet die Zugriffe an die entsprechende Hardware weiter.

Register-Belegung
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)
──────────────────────────────────────────────────────────────────────────────

CPU-Konfigurationsregister — 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

CPU-Informationsregister — Port 0x6D (Lesen)
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

K64F-Service-API

Der K64F stellt eine Service-API fuer Z80-Programme bereit, die unter TZFS laufen. Der Mechanismus ist ein gemeinsamer Speicherbereich im SRAM — der Z80 schreibt einen Befehl und alle Parameter in den Bereich, loest den K64F aus und wartet auf die Fertigstellung. Kein Bus-Mastering ist erforderlich; der Z80 und K64F kommunizieren ueber gewoehnliche Speicher-Lese- und -Schreibvorgaenge, waehrend der K64F das SVCREQ-Register ueberwacht.

Anfrage-/Antwort-Mechanismus
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.

Service-Befehlsreferenz
Die folgende Tabelle listet die wichtigsten Service-Befehle auf. Parameterdetails sind im TZFS-Firmware-Quellcode dokumentiert.
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

CPU-Umschaltung

Der tranZPUter kann mit drei CPU-Optionen betrieben werden: dem physischen Z80 auf der MZ-Hauptplatine, dem T80 Soft-Z80, der im FPGA implementiert ist, und der ZPU Evolution 32-Bit-Soft-CPU, die im FPGA implementiert ist. Die CPU-Umschaltung wird zwischen dem Z80-Programm, dem K64F und dem FPGA koordiniert.

Umschaltprozedur
  1. Das Z80-Programm sendet eine CPU_SETT80 oder CPU_SETZPUEVO Service-Anfrage ueber die K64F-API (Port 0x68).
  2. Der K64F laedt das erforderliche Firmware-Image fuer die Ziel-CPU von der SD-Karte in den 512 KB SRAM.
  3. Der K64F signalisiert dem FPGA, den neuen CPU-Kern zu aktivieren. Das CPLD aktiviert /BUSRQ zum Z80.
  4. Sobald der Z80 den Bus freigibt (/BUSAK aktiviert), uebernimmt die FPGA-Soft-CPU die Adress-, Daten- und Steuerleitungen und beginnt mit der Ausfuehrung aus dem SRAM.
  5. Der physische Z80 bleibt waehrend der gesamten Soft-CPU-Ausfuehrung im Bus-Release-Zustand gehalten.
  6. Um zur Z80-Ausfuehrung zurueckzukehren, sendet das laufende Programm (oder der K64F) CPU_SETZ80, woraufhin das FPGA /BUSRQ freigibt. Der Z80 uebernimmt seine Busse zurueck und setzt die Ausfuehrung fort. Der SRAM-Inhalt bleibt erhalten.
Das CPU-Konfigurationsregister am I/O-Port 0x6C kann auch direkt beschrieben werden, um einen CPU-Kern auszuwaehlen; das Schreiben dieses Registers loest denselben K64F-Koordinationsablauf aus.

Verfuegbare CPU-Kerne
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.
Das CPU-Informationsregister (0x6D) sollte vor einem CPU-Wechsel gelesen werden, um zu bestaetigen, dass der gewuenschte Kern im geladenen FPGA-Bitstream vorhanden ist. Die Flags CPUMODE_IS_T80 (Bit 3) und CPUMODE_IS_ZPU_EVO (Bit 4) zeigen die Verfuegbarkeit an.

Videomodul

Das FPGA implementiert einen vollstaendigen Videocontroller, der alle Sharp-MZ-Anzeigemodi unterstuetzt und einen Grafik-Framebuffer mit VGA-Ausgabe hinzufuegt. Die Videoregister sind im Z80-I/O-Bereich bei 0xA8–0xAD (Primaersteuerung) abgebildet, mit zusaetzlichen Registern bei 0xD0–0xD7 (Palette und Modusparameter) und 0xF3, 0xF5 (VGA-Rand und Palettenauswahl).
In der aktuellen Version ist die Unterstuetzung fuer MZ-2000-Videohardware neben allen zuvor unterstuetzten MZ-Modellen enthalten.

Primaere Videoregister (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

Grafik-Framebuffer
Das FPGA implementiert eine 640x200 (oder 320x200) Grafikschicht neben der Zeichenanzeige. Der Framebuffer ist als drei unabhaengige 16-KB-Baenke organisiert — Rot, Gruen und Blau — was 3-Bit (8-Farben) Pixeldaten ergibt. Jede Bank ist 1 Bit pro Pixel bei 640x200.
Schreibzugriffe auf den GRAM koennen auf zwei Arten erfolgen:
  • Direktmodus — GRAM→CPU enable setzen (Port 0xAD Bit 0), dann GRAM-Adressen direkt aus dem Z80-Code lesen oder schreiben. Jede Bank wird einzeln ueber Port 0xA9 Bits 1:0 ausgewaehlt.
  • Colour-Writer-Modus — einmal an die VRAM-Zeichenadresse schreiben; die Colour-Writer-Hardware aktualisiert gleichzeitig alle drei GRAM-Baenke unter Verwendung der 8-Pixel-Masken, die an die Ports 0xAA, 0xAB, 0xAC geschrieben wurden. Dies ermoeglicht es, mit einem einzigen Schreibvorgang eine farbige Zeichenzelle zu zeichnen.

VGA-Ausgabe
Das FPGA skaliert die native Sharp-MZ-Anzeige auf Standard-VGA-Timings. Drei Ausgangsaufloesungen sind ueber Port 0xA8 Bits 7:6 auswaehlbar. Auf v1.3-Hardware ist in allen Modi eine doppelt gepufferte Anzeige verfuegbar — die Anzeige liest aus einem Puffer, waehrend der Z80 oder die GPU in den anderen schreibt.
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
Eine einfache GPU ist ueber die I/O-Ports ?F6 (Parameter) und ?F7 (Befehl/Status) zugaenglich. Unterstuetzte Primitive:
  • VRAM loeschen — die Zeichenanzeige mit einem angegebenen Zeichen und Attribut fuellen.
  • Rechteck fuellen — einen rechteckigen Bereich des GRAM mit einer Farbe fuellen.
  • GRAM loeschen — alle drei GRAM-Baenke auf Null setzen.
Das Schreiben eines Befehlscodes an ?F7 startet die Operation. Das Lesen von ?F7 gibt ein Besetzt/Fertig-Statusflag zurueck. Der Z80 sollte das Statusflag abfragen, bevor er den naechsten Befehl sendet.

FPGA-Spezifikationen

Vollstaendige Faehigkeitsuebersicht fuer jede FPGA-Variante, die auf dem tranZPUter SW-700 verwendet wird:
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

Build-System

Die tranZPUter SW-700 Firmware umfasst drei Komponenten, jede mit ihrer eigenen Toolchain: FPGA-Bitstream (Quartus Prime), K64F-Firmware (ARM GCC) und Z80-Software (GLASS Assembler). Die gesamte Entwicklung erfolgt unter Linux.

Der empfohlene Weg, einen funktionierenden Build zu erhalten, ist das automatische Setup-Skript fuer Ihre Plattform — siehe Automatisches Setup und Build direkt unten. Es installiert die Toolchains, baut die Quartus-Docker-Images und holt die Quellen fuer Sie. Die komponentenweise Detaildarstellung, die folgt, erklaert, was der Build erzeugt und wie die Werkzeuge von Hand ausgefuehrt werden.

Automatisches Setup und Build (empfohlen)
Anstatt drei Quartus-Versionen, die ARM-GCC- und Java-Toolchains und Docker von Hand zu installieren, fuehren Sie das mitgelieferte Setup-Skript fuer Ihre Plattform aus. Es installiert die Basis-Werkzeuge, installiert Java (JRE) fuer den GLASS-Z80-Assembler und Docker, baut drei reproduzierbare Quartus-Docker-Images, klont das Repository mit --recurse-submodules (TZFS, zSoft/zOS, zpu) und bietet an, den ersten Build auszufuehren (./build.sh -t all). Quartus selbst wird nicht auf dem Host installiert — die CPLD- und FPGA-Builds laufen innerhalb der Docker-Images. Jedes Skript ist eigenstaendig.
Skript Plattform Hinweise
setup_tranZPUter.sh Linux / macOS Installiert Basis-Werkzeuge + Java (JRE) + Docker, baut die drei Quartus-Images, klont nach ~/tranZPUter, bietet ./build.sh -t all an.
setup_tranZPUter_windows.cmd Windows 10 / 11 Doppelklick-Starter — fuehrt die .ps1 nicht-interaktiv aus und protokolliert nach setup_tranZPUter_log.txt.
setup_tranZPUter_windows_native.ps1 Windows 10 / 11 winget installiert Git for Windows + Docker Desktop, baut die Quartus-Images, klont nach %HOME%\tranZPUter, fuehrt ./build.sh -t all ueber Git Bash aus.

Linux / macOS:

chmod +x setup_tranZPUter.sh
./setup_tranZPUter.sh

Windows — Doppelklick auf setup_tranZPUter_windows.cmd oder aus PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_tranZPUter_windows_native.ps1
Das Setup baut drei kostenlose (Web/Lite Edition, keine Lizenz) Quartus-Docker-Images: tzpu-quartus:13.0.1 (MAX7000-CPLDs), tzpu-quartus:13.1 (Cyclone III, SW-700 v1.2) und tzpu-quartus:17.1 (Cyclone IV, SW-700 v1.3 / Fusion). Der Build wird dann von build.sh gesteuert, das Quartus nativ ausfuehrt, wenn eine passende Version gefunden wird, andernfalls innerhalb dieser Images (Java/GLASS laeuft immer nativ). Die Ausgaben (.pof, .sof, .jic-Boot-Flash, ROM/TZFS/CP/M-Images) werden unter ./build/output/ gesammelt.
./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

Nuetzliche Umgebungs-Overrides:

Variable (Alias) Zweck
TZPU_REPO_URL (tranZPUter_REPO_URL) Zu klonende Repository-URL. Standard https://git.eaw.app/eaw/tranZPUter.git.
TZPU_DIR (tranZPUter_DIR) In einem vorhandenen Checkout bauen, anstatt zu klonen.
TZPU_ASSUME_YES (tranZPUter_ASSUME_YES)=1 Nicht-interaktiv; alle Standardwerte akzeptieren.
TZPU_QUARTUS_CPLD_IMAGE (tranZPUter_CPLD_IMAGE) Ueberschreibt das CPLD-Image (Standard tzpu-quartus:13.0.1).
TZPU_QUARTUS_C3_IMAGE (tranZPUter_FPGA_IMAGE) Ueberschreibt das Cyclone-III-Image (Standard tzpu-quartus:13.1).
TZPU_QUARTUS_C4_IMAGE Ueberschreibt das Cyclone-IV-Image (Standard tzpu-quartus:17.1).
Die komponentenweise manuelle Build-Detaildarstellung unten wird fuer fortgeschrittene Benutzer und Teil-Rebuilds weiterhin vollstaendig unterstuetzt.

FPGA — Quartus Prime
Die FPGA-RTL wird mit Altera/Intel Quartus Prime synthetisiert. Die erforderliche Version haengt vom Zielbaustein ab:
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
Docker-Container werden im Repository bereitgestellt, um die exakte Build-Umgebung fuer jede Version zu reproduzieren und die Installation der Toolchain auf dem Entwicklungshost zu vermeiden. Starten Sie den entsprechenden Container und verwenden Sie dann den Standard-Quartus-Build-Ablauf (quartus_sh --flow compile) oder oeffnen Sie das Projekt in der Quartus-GUI.
Nach der Synthese wird die generierte .sof-Datei (SRAM Object File) oder .rbf-Datei (Raw Binary File) mit dem Quartus Programmer in den EPCS-Flash geschrieben, oder kann auf die SD-Karte gelegt werden, damit der K64F sie beim Booten laden kann.

K64F-Firmware — ARM GCC
Die K64F-Firmware (zOS) wird mit der ARM Bare-Metal-GCC-Toolchain (arm-none-eabi-gcc) gebaut. Der Build-Einstiegspunkt ist buildhost.sh unter software.moved.to.TZFS/:
cd software.moved.to.TZFS
./buildhost.sh
Das Skript kompiliert den zOS-Kernel, den SD-Karten-FAT32-Treiber, die SVCREQ-Service-Dispatch-Tabelle und alle unterstuetzenden I/O-Treiber, linkt diese und erzeugt eine Binaerdatei, die zum Flashen auf den K64F geeignet ist. Das Flashen erfolgt ueber den USB-DFU-Bootloader des K64F (Drag-and-Drop auf das Massenspeichergeraet, das erscheint, wenn der K64F im DFU-Modus startet).

Z80 / TZFS-Software — GLASS Assembler
TZFS und zugehoerige Z80-Software werden mit dem GLASS Z80-Assembler (als tools/glass.jar mitgeliefert, erfordert Java 8+) assembliert. Build-Skripte im software.moved.to.TZFS/-Verzeichnisbaum rufen GLASS auf und verpacken die resultierenden Binaerdateien als MZF-Images fuer die SD-Karte.

Referenzseiten

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