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 —
.soffile (JTAG, volatile) or.jicfile (Active Serial, non-volatile) for your board revision, from the Gitea repositoryoutput_files/directory. - K64F firmware binary —
zOS_xxx.binfrom the Gitea repositoryreleases/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
- Power off the host machine. Disconnect the mains cable and wait a few seconds for capacitors to discharge.
- 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.
- 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.
- 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.
- Insert the SD card into the SD card slot on the tranZPUter board. The card should click into place.
- 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
JTAG Programming (Volatile)
.jic file (non-volatile — survives power cycle). Active Serial is recommended for permanent deployment.
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
Active Serial Programming (Non-Volatile)
.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.
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:
- Connect the micro-USB cable between the K64F programming port on the tranZPUter board and your host PC.
- A removable drive will appear (labelled FRDM-K64F or similar) in your operating system's file manager.
- Copy the firmware binary — for example
zOS_v2.xx.bin— directly onto the root of that drive. - Wait for the on-board LED to flash rapidly and then stop. This indicates the firmware has been written and verified.
- 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 (
Browsing the Directory
.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.
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 rootLoading 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 metadataSaving 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
Erasing Files
MYPROG in the current SD card directory.
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
Loading from Tape
,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.
* 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 executeSaving to Tape
* S120020001200 ; Save range 0x1200-0x2000, exec 0x1200 to tape * V ; Verify the save just writtenTape ↔ SD Card Transfer
Files can be transferred in either direction between tape and the SD card:
Tape Delay Compensation
- 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.
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 (
ZPU Evolution Soft CPU
FREQ 4000 for 4 MHz, FREQ 0 to restore the default). The T80 is capable of approximately 18 MHz in the Cyclone IV FPGA.
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), ATZFS 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
.soffile via JTAG, the bitstream is lost on power cycle. Re-programme using a.jicfile 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 -lto 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
.soffile 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 32on 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 (
.MZFformat 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). IssueVGA 1before 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 |