tranZPUter SW-700 — User Manual

tranZPUter SW-700 User Manual

The tranZPUter SW-700 is a hardware expansion board for the Sharp MZ-700 (and, in the current version, also the Sharp MZ-2000) that inserts a 512 KB SRAM, an ARM Cortex-M4 K64F I/O processor, a MAX7000A CPLD, and an Altera FPGA between the host machine and its Z80 bus. This architecture allows the on-board Z80 to be bus-mastered — tri-stated and replaced by FPGA soft-core CPUs — while simultaneously providing 512 KB of paged RAM, SD card mass storage managed by the K64F, and an FPGA-driven video module capable of VGA output.
The board ships with TZFS (tranZPUter Filing System) firmware. TZFS intercepts the MZ monitor's command dispatcher and augments it with more than forty new commands covering SD card file management, CP/M 2.2, soft-CPU switching, machine emulation modes, VGA video control, and tape/SD card transfer — all without disturbing the original monitor's look or behaviour.
This manual covers everything needed to install and use the tranZPUter SW-700 day-to-day. For hardware schematics, FPGA architecture, and firmware internals see the Technical Guide and Developer's Guide linked in the Reference Sites section.

Supported Hardware

The current version of the tranZPUter SW-700 supports two host machines and is available in two board revisions:
Board Revision FPGA Package Notes
v1.2 Altera Cyclone III (25K LE, 76 KB BRAM) 144-pin TQFP First official release. Smaller logic capacity.
v1.3 Altera Cyclone IV (75K or 115K LE) 484-pin BGA Current mainstream production version. Recommended for all new builds.
Host Machine Status
Sharp MZ-700 Fully supported — primary target platform
Sharp MZ-2000 Fully supported — added in the current firmware version
The v1.3 board is recommended for all new installations. Its larger Cyclone IV FPGA provides significantly more logic resources for machine emulation cores and the video module. The v1.2 board is fully functional but its smaller FPGA limits the number of simultaneously available emulation targets.

What You Need

Before beginning, ensure you have all of the following items available:
  • tranZPUter SW-700 PCB — fully assembled board; v1.3 is recommended. The board must be assembled and tested before installation.
  • Sharp MZ-700 or MZ-2000 — the host machine into which the board installs. No ICs need to be removed from the host motherboard.
  • Altera USB-Blaster (or compatible clone) — JTAG programmer for loading the FPGA bitstream via Quartus.
  • K64F USB cable — standard micro-USB cable for flashing the ARM K64F firmware. The K64F presents as a USB mass storage device when connected.
  • SD card — FAT32 formatted, 2 GB or larger recommended. Must be populated with the pre-built TZFS SD card image from the Gitea repository.
  • Pre-built FPGA bitstream.sof file (JTAG, volatile) or .jic file (Active Serial, non-volatile) for your board revision, from the Gitea repository output_files/ directory.
  • K64F firmware binaryzOS_xxx.bin from the Gitea repository releases/ directory.
  • Host PC with Quartus Programmer — for FPGA programming. Quartus Prime Lite (free) is sufficient.

Installation

The tranZPUter SW-700 connects to the Sharp MZ-700 (or MZ-2000) via the expansion bus connector on the underside of the machine. The installation procedure does not require removing any ICs from the host motherboard. Both the SD card slot and the USB programming connector remain accessible once the board is installed.
Installation Steps
  1. Power off the host machine. Disconnect the mains cable and wait a few seconds for capacitors to discharge.
  2. Locate the expansion connector. On the MZ-700 this is the edge connector on the underside of the main PCB. On the MZ-2000 it is the rear expansion slot.
  3. Align the tranZPUter SW-700 board with the expansion connector and press it firmly into place. Ensure all pins are seated evenly. Do not force the connector — if resistance is felt, check alignment before proceeding.
  4. Secure the board using the appropriate standoffs or bracket for your machine variant. The board must not flex or make contact with the host PCB at unintended points.
  5. Insert the SD card into the SD card slot on the tranZPUter board. The card should click into place.
  6. Do not power on yet. The FPGA must be programmed and the K64F firmware flashed before first use — see the following sections.

Programming the FPGA

The Altera FPGA must be programmed with the appropriate bitstream for your board revision before the tranZPUter SW-700 will function. Two methods are available: JTAG programming (volatile — lost on power cycle) and Active Serial programming using a .jic file (non-volatile — survives power cycle). Active Serial is recommended for permanent deployment.

JTAG Programming (Volatile)
Connect the Altera USB-Blaster to the JTAG header on the tranZPUter board and to a USB port on your host PC. With Quartus Programmer installed and the USB-Blaster driver loaded, use the following command-line invocation for your board revision:
# Board revision v1.2 (Cyclone III):
quartus_pgm -m JTAG -o "P;output_files/SW700_v1_2.sof@1"

# Board revision v1.3 (Cyclone IV):
quartus_pgm -m JTAG -o "P;output_files/SW700_v1_3.sof@1"
Alternatively, open the Quartus Programmer GUI (Tools → Programmer), add the .sof file, select the USB-Blaster as the hardware, and click Start. A JTAG-programmed bitstream is lost when the board is powered off — use Active Serial for a permanent configuration.

Active Serial Programming (Non-Volatile)
To retain the FPGA configuration across power cycles, program the on-board serial configuration device using a .jic conversion of the bitstream. In Quartus Programmer, select Active Serial Programming mode, add the .jic file for your board revision, and click Start. Once written, the configuration device reloads the FPGA automatically at every power-on — no further JTAG connection is required for normal use.

Flashing the K64F Firmware

The ARM Cortex-M4 K64F processor manages the SD card, handles the TZFS command extensions, and provides the bridge between the Z80 bus and mass storage. It must be programmed with the zOS firmware binary before first use.
The K64F uses the standard NXP FRDM-K64F bootloader and presents as a USB mass storage device when connected via micro-USB:
  1. Connect the micro-USB cable between the K64F programming port on the tranZPUter board and your host PC.
  2. A removable drive will appear (labelled FRDM-K64F or similar) in your operating system's file manager.
  3. Copy the firmware binary — for example zOS_v2.xx.bin — directly onto the root of that drive.
  4. Wait for the on-board LED to flash rapidly and then stop. This indicates the firmware has been written and verified.
  5. Disconnect the USB cable. The K64F will reboot automatically into the new firmware.
Do not disconnect the USB cable or power off the board while the LED is still flashing. If the drive does not appear, check that the USB cable supports data (not charge-only) and that the K64F bootloader jumper is in the correct position for your board revision — consult the repository's hardware notes for details.

First Boot

With the FPGA programmed, the K64F firmware flashed, and the SD card inserted, power on the MZ-700 or MZ-2000. The machine boots normally to its built-in monitor. TZFS intercepts the monitor's command dispatcher transparently — the standard monitor prompt is augmented with the TZFS version string:
SHARP MZ-700
Monitor 1Z-013A

* + TZFS v2.xx
The * is the original MZ monitor prompt. The + TZFS v2.xx suffix confirms that TZFS has initialised successfully and the SD card is available. All original monitor commands remain available unchanged.
Type H to display the TZFS command help screen. Press Space to advance through pages.
If the + TZFS suffix does not appear, the K64F firmware did not initialise — verify that the firmware was flashed correctly and that the K64F USB cable is disconnected (the K64F enters bootloader mode when the USB cable is connected).

Monitor Command Reference

The full TZFS command set is listed below. Commands are entered at the * monitor prompt exactly as shown. Parameters in angle brackets are required; parameters in square brackets are optional. The M parameter on tape and SD card commands specifies the machine model tape timing — see the note following the table.
Command Parameters Description
4 Switch to 40-column display mode.
8 Switch to 80-column display mode.
40A Switch host to MZ-80A 40-column compatibility mode.
80A Switch host to MZ-80A 80-column compatibility mode.
700 Switch to MZ-700 mode (40-column).
7008 Switch to MZ-700 80-column mode.
ASM <addr> Interactive Z80 assembler starting at the given hex address.
B Toggle the keyboard bell on or off.
BASIC Load BASIC SA-5510 (TZFS-extended version) from SD card and execute it.
CD [<dir>] Change the active SD card directory. With no argument, returns to the root directory.
CP <src> <dst> <size> Copy a block of memory. All arguments are hex: source address, destination address, byte count.
CPM Boot CP/M 2.2 from SD card.
D <addr> [<addr2>] Hex and ASCII dump of memory from <addr> to <addr2>. Press any key for more, X to exit.
DASM <addr> [<addr2>] Disassemble Z80 machine code starting at <addr>.
DIR [<wildcard>] SD card directory listing. An optional wildcard filters the listing (e.g., DIR *.MZF).
EC <name or no.> Erase a file from the SD card by name or file number.
EX Exit TZFS and return to the original host monitor.
F [<drive>] Boot from floppy disk.
FILL <start> <end> [<val>] Fill a memory range with the given byte value (default 0x00).
FREQ <kHz> Set the CPU frequency in kHz. Use 0 to restore the default clock. Example: FREQ 4000 sets 4 MHz.
H Display the command help screen (paginated).
J <addr> Jump to (execute from) the given hex address.
L | LT [<file>] [,M] Load a file from tape (CMT) and execute it.
LTNX [<file>] [,M] Load a file from tape (CMT) without executing.
LC <name or no.> [,M] Load a file from the SD card and execute it.
LCNX <name or no.> [,M] Load a file from the SD card without executing.
M <addr> Interactive memory editor. Enter a new hex value and press Enter to modify, Enter alone to skip.
MZ [<mc>] Activate machine emulation mode. Default is MZ-80A. Valid machine codes: 80K, 80C, 1200, 80A, 700, 800, 80B, 2000.
P Printer test.
R DRAM memory test.
RIO <port> Read the value of an I/O port and display it.
S | ST <start> <end> <exec> [,M] Save a memory range to tape (CMT). You are prompted for a filename.
SC <start> <end> <exec> Save a memory range to the SD card. You are prompted for a filename.
SD2T <name or no.> [,M] Copy a file from the SD card to tape (CMT).
T Timer test.
T2SD [B] [,M] Copy the next file from tape (CMT) to the SD card. B enables bulk mode for multiple files.
T2SDB [,M] Copy tape to SD card in bulk mode.
TC [-]<val> Tape delay compensation. Use a negative value to shorten delays, positive to lengthen them.
T80 Switch execution to the T80 soft-core Z80 in the FPGA (~18 MHz). TZFS continues running.
V Verify a tape save against the current contents of memory.
VBORDER <colour> Set the VGA output border colour.
VGA <mode> Set VGA output mode: 0 = off, 1 = 640×480, 2 = 800×600.
VMODE <mode> Set the video mode for the currently active emulated machine.
WIO <port> <val> Write a byte value to an I/O port.
Z80 Switch execution back to the hard Z80 (from T80 or ZPU).
ZPU Switch execution to the ZPU Evolution soft CPU in the FPGA. Boots zOS.
Machine model tape timing (M parameter): When an ,M suffix is accepted, the letter following the comma selects the tape encoding timing for the operation. Valid codes are: K = MZ-80K, C = MZ-80C, 1 = MZ-1200, A = MZ-80A, 7 = MZ-700, 8 = MZ-800, B = MZ-80B, 2 = MZ-2000. If omitted, the timing for the active host machine is used.

SD Card Operations

The SD card is the primary mass storage medium for TZFS. It must be FAT32 formatted and populated with files in Sharp MZ tape image format (.MZF or similar). The card slot and directory structure are managed by the K64F firmware — TZFS communicates with the K64F to perform all file operations.

Browsing the Directory
Type DIR to list the contents of the current SD card directory. An optional wildcard argument filters the listing:
* DIR              ; List all files in the current directory
* DIR *.MZF        ; List only .MZF files
* CD GAMES         ; Change to the GAMES subdirectory
* DIR              ; List the GAMES directory
* CD               ; Return to root

Loading Programs
Programs can be loaded by name or by file number as shown in the DIR listing. The LC command loads and executes; LCNX loads without executing (useful for inspection or patching in memory before running):
* LC INVADERS          ; Load INVADERS from SD card and execute
* LCNX INVADERS        ; Load without executing
* LC 04                ; Load file number 04 and execute
* LC INVADERS,7        ; Load with MZ-700 tape timing metadata

Saving Programs
Use SC to save a region of memory to the SD card. Provide the start address, end address, and execution address as 4-digit hex values run together. TZFS will prompt for a filename:
* SC120020001200
FILE NAME? MYPROG
SAVED
This saves the memory range 0x1200–0x2000 with execution address 0x1200 to the file MYPROG in the current SD card directory.

Erasing Files
Use EC followed by a filename or file number to erase a file from the SD card. The operation is immediate and irreversible — confirm the filename with DIR beforehand:
* EC MYPROG        ; Erase the file named MYPROG
* EC 07            ; Erase file number 07

Tape Operations

TZFS retains full compatibility with the original CMT (Cassette Magnetic Tape) interface. All tape commands accept the optional ,M machine-model suffix to select the correct tape encoding for software from different Sharp MZ variants. The TC command adjusts tape timing compensation to compensate for worn or out-of-spec tape decks.

Loading from Tape
* L                ; Load next file from tape and execute
* LT INVADERS      ; Load named file from tape and execute
* LTNX INVADERS    ; Load named file from tape without executing
* L,7              ; Load using MZ-700 tape timing and execute

Saving to Tape
* S120020001200    ; Save range 0x1200-0x2000, exec 0x1200 to tape
* V                ; Verify the save just written

Tape ↔ SD Card Transfer
Files can be transferred in either direction between tape and the SD card:
  • T2SD — loads the next file from tape and saves it to the current SD card directory. Press Play on the tape deck when prompted.
  • T2SDB (bulk mode) — repeatedly loads files from tape and saves each to SD card until no further files are found or the operation is aborted.
  • SD2T <name> — loads the named file from the SD card and writes it to tape. Press Record on the tape deck when prompted.
These commands make it straightforward to archive existing tape software collections to SD card or to distribute programs on tape from the SD card.

Tape Delay Compensation
If tape loads fail on marginal hardware, the TC command adjusts the bit-timing window. A positive value widens the window (for slow or stretched tapes); a negative value narrows it:
* TC 10            ; Widen timing window by 10 units
* TC -5            ; Narrow timing window by 5 units

Soft CPU Switching

The FPGA contains two additional soft-core CPUs alongside the hard Z80 on the host motherboard: the T80 (a synthesised Z80-compatible core) and the ZPU Evolution (a stack-based 32-bit RISC processor). Switching between them is instantaneous from the TZFS monitor prompt.

T80 Soft-Core Z80
The T80 is a fully Z80-compatible soft core synthesised into the FPGA fabric. It runs TZFS and all Z80 software without modification, but at a significantly higher clock rate than the host's hard Z80:
* T80              ; Switch to T80 soft-core Z80 (~18 MHz)
* FREQ 8000        ; Increase clock to 8 MHz (T80 or hard Z80)
* FREQ 0           ; Restore default CPU clock
* Z80              ; Switch back to the hard Z80
While running on the T80, the TZFS firmware continues to operate normally. All monitor commands remain available. The CPU frequency can be adjusted with FREQ — specify the desired frequency in kHz (FREQ 4000 for 4 MHz, FREQ 0 to restore the default). The T80 is capable of approximately 18 MHz in the Cyclone IV FPGA.

ZPU Evolution Soft CPU
The ZPU Evolution is a 32-bit stack-based RISC processor synthesised into the FPGA. Switching to the ZPU boots zOS, the ZPU operating system stored in the K64F firmware. zOS provides a separate command environment distinct from TZFS:
* ZPU              ; Switch to ZPU Evolution — boots zOS
* Z80              ; Return to hard Z80 from ZPU
When running on the ZPU, the Z80 is tri-stated and the ZPU has full ownership of the bus. Issuing Z80 from within zOS returns control to the hard Z80 and resumes the TZFS monitor.

Machine Emulation

The MZ command instructs the FPGA video and I/O modules to reconfigure themselves to emulate a different Sharp MZ machine. The video module adjusts its display timing, character generator, memory map, and colour behaviour to match the selected target. This allows software written for other MZ variants to run on the MZ-700 or MZ-2000 host hardware.
Machine Code Target Machine
80K Sharp MZ-80K
80C Sharp MZ-80C
1200 Sharp MZ-1200
80A Sharp MZ-80A
700 Sharp MZ-700
800 Sharp MZ-800
80B Sharp MZ-80B
2000 Sharp MZ-2000
* MZ               ; Activate MZ-80A emulation (default)
* MZ 700           ; Activate MZ-700 video/keyboard emulation
* MZ 2000          ; Activate MZ-2000 emulation
* MZ 80A           ; Return to MZ-80A emulation mode
The column width and display commands (4, 8, 40A, 80A, 700, 7008) are convenience shortcuts that combine machine mode selection with display width selection. They are equivalent to the corresponding MZ invocations but act immediately without requiring a machine code argument.

Video Control

The FPGA video module provides VGA output independently of the host machine's original video hardware. It is controlled through a set of I/O-mapped registers at addresses 0xA8–0xAD. These registers can be written directly in Z80 assembly language or via the TZFS VGA, VMODE, and VBORDER commands.

Video Control Register (0xA8)
Control Register 0xA8 is the primary video mode register. Its bit fields are:
Bits Field Description
2:0 Machine model 0=MZ-80K, 1=MZ-80C/1200, 2=MZ-80A, 3=MZ-700/MZ-800, 4=MZ-80B/MZ-2000
3 Column width 0 = 40-column, 1 = 80-column
4 Colour enable 0 = monochrome, 1 = colour
5 Reserved
7:6 VGA mode 00 = VGA off, 01 = 640×480, 10 = 800×600
Example — configure 80-column colour MZ-700 output on VGA 640×480:
; bits: VGA=01, reserved=0, colour=1, 80col=1, model=100 (MZ-700) → 0b01011100 = 0x59
LD A, 0x59
OUT (0xA8), A

TZFS Video Commands
The TZFS monitor provides three high-level video commands that write to the appropriate registers without requiring direct I/O port access:
* VGA 1            ; Enable VGA output at 640x480
* VGA 2            ; Enable VGA output at 800x600
* VGA 0            ; Disable VGA output (native video only)
* VMODE 3          ; Set video mode for the active emulated machine
* VBORDER 2        ; Set VGA border colour to colour index 2
The VMODE argument is a numeric mode index whose meaning depends on the active machine emulation target — consult the FPGA source documentation for mode-to-timing mappings for each machine type. The VBORDER colour index follows the standard Sharp MZ colour palette.

Using CP/M 2.2

CP/M 2.2 is available directly from the TZFS monitor. The CBIOS is loaded from the SD card image and the entire 47 KB TPA (Transient Program Area) is available to applications. Seven CP/M logical drives (A:–G:) map to disk images stored on the SD card.
* CPM
TZFS locates the CP/M boot sector on the SD card, loads the system, and transfers control. The prompt changes to A>.
CP/M Drive Contents
A: CP/M system programs, assemblers, utilities
B: Pascal and language tools
C: WordStar, PLI, PLM
D:–G: Extended software library
The 47 KB TPA is available for all applications — this is the full standard CP/M 2.2 allocation. Warm-boot (Ctrl+C at the CCP prompt) reloads the CCP from the SD card image. A full return to the TZFS monitor requires a hardware reset of the host machine.
Ensure the SD card image includes the CP/M disk images in the expected locations. The pre-built image from the Gitea repository is organised correctly — custom SD card layouts may require adjusting the CBIOS sector offset configuration before rebuilding.

Using BASIC

The BASIC command loads the TZFS-extended version of Sharp SA-5510 BASIC directly from the SD card. This extended version adds LOAD, SAVE, and DIR commands that operate on the SD card, making it possible to store, retrieve, and manage BASIC programs without using tape.
* BASIC
Once at the BASIC prompt, the following SD card commands are available in addition to the standard SA-5510 BASIC instruction set:
Command Example Description
LOAD LOAD "MYPROG" Load BASIC program named MYPROG from the SD card and run it.
LOAD LOAD Load the next sequential file from the current SD card directory.
SAVE SAVE "MYPROG" Save the current BASIC program to the SD card as MYPROG.
DIR DIR List the current SD card directory from within BASIC.
The SA-5510 BASIC interpreter, its memory layout, and its standard commands are otherwise unchanged from the original Sharp implementation. Programs written for the unmodified SA-5510 will run without modification.

Troubleshooting

Monitor boots but "+ TZFS" is not shown in the prompt

  • USB cable still connected — the K64F enters USB bootloader mode when the micro-USB cable is connected. Disconnect it and reset the host machine.
  • K64F firmware not flashed — verify that the zOS firmware binary was copied to the K64F USB drive and that the LED flashed to confirm programming. Repeat the flashing procedure if uncertain.
  • SD card not inserted or not recognised — check that the SD card is fully seated in the slot. The card must be FAT32 formatted. Reformat if necessary and re-populate with the TZFS SD card image.
  • FPGA not programmed or using JTAG (volatile) — if the FPGA was programmed with a .sof file via JTAG, the bitstream is lost on power cycle. Re-programme using a .jic file via Active Serial to make the configuration permanent.

FPGA programming fails or USB-Blaster is not detected

  • USB-Blaster driver not installed — on Linux, ensure the USB-Blaster udev rule is in place (/etc/udev/rules.d/51-usbblaster.rules) and the current user is a member of the appropriate group. On Windows, install the driver via the Quartus device driver installer.
  • JTAG chain not detected — run quartus_pgm -l to list available hardware. If no cable is listed, check the USB connection and cable. Confirm the board is powered — the FPGA JTAG interface requires the board to be powered during programming.
  • Wrong bitstream for board revision — using a v1.2 .sof file on a v1.3 board (or vice versa) will fail. Confirm your board revision from the PCB silkscreen and select the matching bitstream.

SD card commands fail or files cannot be loaded

  • SD card not FAT32 — the K64F firmware requires FAT32. Cards formatted as exFAT or NTFS will not be recognised. Reformat with FAT32 (use mkfs.fat -F 32 on Linux or the Windows format dialog selecting FAT32).
  • Card capacity — very large cards (64 GB+) may have alignment issues when formatted as FAT32 by default tooling. Use a 2–32 GB card if problems persist.
  • File format — TZFS expects Sharp MZ tape image files (.MZF format or header-prefixed binary). Raw binary files without an MZF header will not load correctly.
  • Directory path — use CD without arguments to return to the root directory, then DIR to confirm the expected files are present.

CP/M does not boot or shows a blank screen

  • SD card image incomplete — the CP/M disk images occupy a dedicated region of the SD card image. Ensure the full pre-built image was written to the card without truncation. Re-write the image if uncertain.
  • FPGA bitstream mismatch — the CP/M CBIOS relies on specific FPGA I/O register addresses that differ between the v1.2 and v1.3 builds. Ensure the FPGA bitstream and the K64F firmware are both from the same release.
  • Video mode — CP/M output may be invisible if the VGA mode is set to off (VGA 0). Issue VGA 1 before booting CP/M to ensure VGA output is active, or confirm the host machine's native video output is connected.

Machine hangs after switching to T80 or ZPU

  • FPGA not programmed — the soft CPU cores reside in the FPGA. If the FPGA is not programmed or has lost its configuration (volatile JTAG programming after power cycle), the soft CPU switch will hang. Re-programme the FPGA.
  • Clock frequency too high — if FREQ was used to set an unusually high frequency before switching to the T80, the soft core may not be stable at that frequency. Reset the host machine and try again at the default clock.
  • Returning to Z80 — if the host machine hangs in ZPU or T80 mode, a hardware reset is required to recover. After reset, the TZFS monitor will resume on the hard Z80.

Reference Sites

Resource Link
tranZPUter SW-700 project page /tranzputer-sw700/
tranZPUter SW-700 Technical Guide /tranzputer-sw700-technicalguide/
tranZPUter SW-700 Developer’s Guide /tranzputer-sw700-developersguide/
tranZPUter SW-700 Gallery /tranzputer-sw700-gallery/
Sharp MZ-700 information /sharpmz700/
Sharp MZ-2000 information /sharpmz2000/
Gitea repository https://git.eaw.app/eaw/tranZPUter
Altera Quartus Prime Lite (free) https://www.intel.com/content/www/us/en/collections/products/fpga/software/downloads.html
NXP FRDM-K64F documentation https://www.nxp.com/design/development-boards/freedom-development-boards/mcu-boards/freedom-development-platform-for-kinetis-k64-k63-and-k24-mcus:FRDM-K64F