tranZPUter SW-700 — Technischer Leitfaden
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.
/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:
MAX 7000A CPLD (512 Makrozellen)
- 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 Altera MAX 7000A ist ein 5-V-tolerantes CPLD mit 512 Makrozellen. Es sitzt direkt am MZ-Erweiterungsbus und erfuellt drei Funktionen:
Altera FPGA
- Pegelumsetzung — verbindet die 5-V-MZ-700/MZ-2000-Bussignale mit den 3,3-V-FPGA-I/O-Schienen.
- Bus-Mastering-Logik — aktiviert
/BUSRQzum 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.
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:
512 KB Statischer RAM (AS6C4008)
- 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).
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
Register-Belegung
IN und OUT angesprochen. Das CPLD dekodiert die I/O-Adressen und leitet die Zugriffe an die entsprechende Hardware weiter.
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 |
| 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
- Das Z80-Programm sendet eine
CPU_SETT80oderCPU_SETZPUEVOService-Anfrage ueber die K64F-API (Port 0x68). - Der K64F laedt das erforderliche Firmware-Image fuer die Ziel-CPU von der SD-Karte in den 512 KB SRAM.
- Der K64F signalisiert dem FPGA, den neuen CPU-Kern zu aktivieren. Das CPLD aktiviert
/BUSRQzum Z80. - Sobald der Z80 den Bus freigibt (
/BUSAKaktiviert), uebernimmt die FPGA-Soft-CPU die Adress-, Daten- und Steuerleitungen und beginnt mit der Ausfuehrung aus dem SRAM. - Der physische Z80 bleibt waehrend der gesamten Soft-CPU-Ausfuehrung im Bus-Release-Zustand gehalten.
- Um zur Z80-Ausfuehrung zurueckzukehren, sendet das laufende Programm (oder der K64F)
CPU_SETZ80, woraufhin das FPGA/BUSRQfreigibt. Der Z80 uebernimmt seine Busse zurueck und setzt die Ausfuehrung fort. Der SRAM-Inhalt bleibt erhalten.
| 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:
VGA-Ausgabe
- 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.
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 | — |
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.
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)
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.
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 (
K64F-Firmware — ARM GCC
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.
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 |