tranZPUter FusionX User Manual
Overview
The tranZPUterFusionX (FusionX) is a compact, high-performance PCB that replaces the Z80 CPU in a range of vintage home computers. By fitting directly into the host machine's DIP-40 Z80 socket, the FusionX takes full control of the host bus while providing a complete modern Linux-based computing environment — all invisible to the host machine's original firmware and software.
The board is built around the SigmaStar SSD202D System-on-Module (SOM), which integrates a dual-core ARM Cortex-A7 processor running at 1.2 GHz, 128 MB of LPDDR2 DRAM, 256 MB of SLC NAND Flash, and an integrated SSW101B 2.4 GHz 802.11 b/g/n WiFi radio. The SOM runs a real-time Linux 4.9-rt kernel (PREEMPT_RT patched), providing both a fully capable Linux environment and the Z80 emulation layer simultaneously.
The Z80 emulator runs exclusively on CPU1, which is isolated from the Linux scheduler at boot time using the kernel
isolcpus mechanism. A dedicated kernel module (z80drv) manages the emulation loop and provides the cycle-accurate timing required to run original Z80 software correctly. The emulator is controlled from userspace via the z80ctrl command-line utility.
Bus-level timing and glue logic are implemented in an Altera MAX7000AE CPLD, which provides a Z80-cycle-accurate interface between the SOM and the host machine's address, data, and control buses. The CPLD is compiled in separate variants for each supported host machine, ensuring correct bus timing and signal conditioning for each target platform.
The FusionX supports multiple machine personas — the CPLD variant and software configuration determine which host machine is emulated at the hardware level. Optional daughter boards connect the FusionX video and audio outputs to the host machine's display circuitry and internal speaker, using analog SPDT multiplexers to switch cleanly between host-native and FusionX-generated output.
Note: The web management interface is currently under construction and not available in the shipping firmware. All management and configuration tasks are performed via the USB-serial console and the z80ctrl command-line utility.
Board Overview
The FusionX is a compact 4-layer PCB at hardware revision v1.0. The board dimensions are designed to fit within the footprint of a standard DIP-40 IC socket while accommodating the SigmaStar SSD202D SOM and the Altera MAX7000AE CPLD above it. All connectors and headers are accessible from the top or rear of the board when installed in the host machine.
Connectors and Headers
- 10-pin JTAG Header — Used for in-system programming (ISP) of the Altera MAX7000AE CPLD via a compatible JTAG programmer (e.g., USB-Blaster). This header is also used for initial device programming when a blank or incorrectly programmed CPLD must be flashed with a new variant. See the Technical Guide for programming details.
- USB-Serial Connector (CH340E) — A micro-USB or pin-header connector routed through an on-board CH340E USB-to-UART bridge. This provides direct access to the Linux serial console at 115200 baud, 8N1. On the SOM side, this connects to the primary UART. This is the primary management interface during initial setup and day-to-day administration.
- USB 2.0 Port (SOM) — A standard USB 2.0 Type-A host port exposed from the SSD202D SOM. This port can be used to attach USB mass storage, USB-Ethernet adapters, or other USB peripherals supported by the Linux kernel.
- SD Card Slot (SOM) — A micro-SD card slot connected to the SOM's SDIO interface. The SD card is used for additional storage, holding ROM images, MZF program files, and OTA firmware update images. The SOM will detect a correctly prepared SD card at boot and perform an OTA upgrade automatically if a valid firmware image is present.
- WiFi Antenna Connector — An IPEX/U.FL coaxial connector for an external 2.4 GHz WiFi antenna, connected to the SSD202D's integrated SSW101B wireless module. An appropriate antenna must be fitted for reliable wireless connectivity.
Status Indicators
The FusionX board carries a small number of status LEDs to assist with diagnostics and to confirm correct operation:
- Power LED — Illuminates when 3.3 V power is present on the board, confirming the TLV62569DBV buck converter is operating correctly.
- Activity LED — Driven by the SOM; indicates Linux kernel and Z80 emulation activity. Flashes during boot and during active Z80 emulation cycles.
- CPLD LED — Driven by the CPLD; indicates bus activity on the host Z80 bus. Useful for confirming the CPLD is actively interfacing with the host machine.
Power Supply
The FusionX draws all operating power from the host machine's 5 V supply, available on the Z80 DIP-40 VCC pin (pin 11). A TLV62569DBV synchronous step-down (buck) converter regulates the 5 V input down to 3.3 V for the SOM, CPLD, and all on-board logic. The TLV62569DBV is a high-efficiency, low-quiescent-current device capable of supplying the peak current demands of the SSD202D SOM during WiFi transmission and Z80 emulation.
The host machine must be capable of supplying adequate current on its 5 V rail to power the FusionX in addition to its own circuitry. In practice, all supported host machines have 5 V rails with sufficient headroom for normal FusionX operation.
Daughter Boards
Three host-specific daughter boards are available for the FusionX:
- MZ-80A Daughter Board — Interfaces the FusionX video and audio outputs to the Sharp MZ-80A's internal display and speaker circuitry.
- MZ-700 Daughter Board — Interfaces the FusionX video and audio outputs to the Sharp MZ-700's internal display and speaker circuitry.
- MZ-2000 Daughter Board — Interfaces the FusionX video and audio outputs to the Sharp MZ-2000's internal display and speaker circuitry.
Each daughter board contains analog SPDT multiplexers that switch the display and audio signals between the host-native source (from the host machine's own video/audio hardware) and the FusionX-generated source (from the SOM). This allows the FusionX to present its own video and audio output through the host machine's built-in display and speaker without permanently modifying the host circuitry.
The daughter board connects to the FusionX main board via a ribbon cable and/or dedicated connectors, and then connects to the host machine's video and audio circuits using host-specific connectors described in the host-specific installation sections below.
The Amstrad PCW-8256 does not require a daughter board. The PCW-8256 CPLD variant interfaces directly with the PCW's memory paging and standard Z80 I/O without requiring video or audio multiplexing.
The correct daughter board must be fitted before installation in the host machine. Fitting the wrong daughter board, or fitting no daughter board on an MZ-series host, will result in no video or audio output from the FusionX.
Supported Host Machines
The FusionX currently supports the following host machines. The CPLD variant must match the target host machine exactly — each variant is compiled separately in Quartus II and implements the precise bus timing, memory map, and I/O decoding required for that host.
| Host Machine | Daughter Board | CPLD Variant | Notes |
|---|---|---|---|
| Sharp MZ-80A | MZ-80A Daughter Board | MZ80A | 40/80-column display modes; ROM Filing System (RFS) support; MZF file loading from SD card |
| Sharp MZ-700 | MZ-700 Daughter Board | MZ700 | Bank switching; video and keyboard emulation; full MZ-700 memory map |
| Sharp MZ-2000 | MZ-2000 Daughter Board | MZ2000 | Extended memory support; advanced video modes; MZ-2000 I/O decoding |
| Amstrad PCW-8256 | None required | PCW8256 | Memory paging; standard Z80 I/O; no video/audio daughter board needed |
If you are unsure which CPLD variant is programmed on your board, refer to the Technical Guide for instructions on reading back the CPLD device ID and confirming the programmed design. A correctly shipped FusionX board is pre-programmed with the CPLD variant matching your ordered host machine configuration.
Initial Setup
Follow these steps carefully to install and configure the FusionX in your host machine for the first time. Steps marked [Host-specific] vary depending on your target host machine. Steps marked [Common] apply to all supported hosts.
Step 1 — Verify CPLD Variant [Common]
Before installing the FusionX, confirm that the CPLD is programmed with the correct variant for your host machine. Each CPLD variant (MZ80A, MZ700, MZ2000, PCW8256) is compiled as a separate Quartus II project and produces a different
.pof programming file. A board shipped with an incorrect CPLD variant will fail to interface correctly with the host machine's bus and may produce unexpected behaviour or no output at all.
A correctly shipped FusionX board has the CPLD pre-programmed for your ordered host machine. If you built from source, received a blank board, or need to change the target host machine, refer to the Technical Guide for CPLD programming instructions using the 10-pin JTAG header and a USB-Blaster or compatible programmer.
Step 2 — Fit the Correct Daughter Board [Host-specific]
If your host machine is a Sharp MZ-80A, MZ-700, or MZ-2000, you must fit the appropriate daughter board to the FusionX main board before installation. The daughter board must match your host machine exactly — refer to the table in the Supported Host Machines section above.
Connect the daughter board's ribbon cable and any discrete connectors to the FusionX main board as indicated by the silkscreen markings on both boards. Then route the daughter board's host-side connectors to the appropriate points on the host machine's video and audio circuits. The specific connection points for each host machine are described in the host-specific documentation available from the project pages linked in the Reference Sites section.
If your host machine is an Amstrad PCW-8256, skip this step — no daughter board is required.
Step 3 — Install in the Host Machine [Common]
Power off the host machine completely and disconnect it from the mains supply.
Open the host machine's case to access the mainboard. Locate the Z80 CPU in its DIP-40 socket. Carefully remove the Z80 CPU using an IC extractor tool, taking care not to bend any pins on the CPU (which you may wish to retain) or damage the socket.
Insert the FusionX board into the vacated DIP-40 socket. Pin 1 of the FusionX board must align with pin 1 of the socket. Pin 1 is clearly marked on the FusionX PCB silkscreen. Misaligning pin 1 will cause incorrect operation and may damage the host machine or the FusionX board.
Press the FusionX board firmly and evenly into the socket, ensuring all 40 pins are fully seated. Visually inspect all four sides of the DIP-40 socket to confirm no pins are bent or missing the socket.
Step 4 — Connect the USB-Serial Adapter [Common]
For initial setup and ongoing administration, connect a USB cable from your PC to the CH340E USB-serial connector on the FusionX board. This cable provides access to the Linux console running on the SOM.
Your PC must have the CH340E (or CH34x) USB-serial driver installed. On Linux and macOS, this driver is typically included in the kernel. On Windows, you may need to install the CH340 driver from the manufacturer or a third-party source.
Configure your terminal emulator (e.g., PuTTY, minicom, screen) with the following settings:
- Baud rate: 115200
- Data bits: 8
- Parity: None
- Stop bits: 1
- Flow control: None
Step 5 — Power On [Common]
With the FusionX installed, the daughter board connected (if applicable), and the USB-serial cable attached, reconnect the host machine to the mains and power it on.
The FusionX SOM will begin booting Linux immediately. The full Linux boot sequence takes approximately 10–15 seconds. During this time you will see boot messages on the USB-serial console. Once the boot sequence completes, the host machine's display and keyboard will be initialised under control of the Z80 emulation layer.
The host machine's display should show the expected startup screen for your host (e.g., the Sharp MZ-80A monitor prompt, or the MZ-700 splash screen), depending on the ROM image loaded by the startup script.
Step 6 — Access the Linux Console [Common]
Once the SOM has completed booting, open your terminal emulator and connect to the USB-serial port. You should see the Linux login prompt.
The host machine's keyboard and display are also mapped to a Linux virtual terminal device
/dev/ttymz0 via the ttymzdrv kernel driver. This means the host keyboard and display can serve as a Linux console as well as the Z80 emulation terminal. The sharpbiter arbiter daemon manages switching between the Z80 emulation session and the Linux console on this shared hardware.
Log in using the configured Linux credentials. From the shell, you can manage the Z80 emulation, configure WiFi, access the SD card, and perform all administrative tasks.
Machine Startup Modes
The FusionX provides three startup scripts that configure the Z80 emulation environment for different operational modes. Each script loads the appropriate kernel modules and ROM images, then starts the Z80 emulation with the selected mode active.
General Startup — start_FusionX.sh
The general startup script performs the following sequence:
- Loads the
ttymzdrvkernel module, which maps the host keyboard and display to/dev/ttymz0. - Isolates CPU1 from the Linux scheduler using
isolcpus, reserving it exclusively for the Z80 emulation loop. - Loads the
z80drvkernel module, which initialises the Z80 emulation engine and the CPLD bus interface. - Starts the Z80 emulation using the default ROM image and hardware configuration for the installed CPLD variant.
This mode is suitable for general use where you want the host machine to boot into its standard firmware environment (e.g., the MZ-80A monitor, MZ-700 BASIC, or MZ-2000 monitor).
sudo /opt/fusionx/start_FusionX.sh
ROM Filing System Mode — startZ80_RFS.sh
This script starts the Z80 emulation in ROM Filing System (RFS) mode, which is primarily designed for the Sharp MZ-80A. In RFS mode:
- Switchable ROM pages are enabled, allowing multiple ROM images to be banked in and out of the Z80 address space at runtime.
- MZF program files stored on the SD card can be loaded directly into Z80 memory and executed without requiring a cassette tape interface.
- The ROM filing system provides a menu-driven interface on the host display for selecting and loading programs.
sudo /opt/fusionx/startZ80_RFS.sh
tranZPUter Filing System Mode — startZ80_TZFS.sh
This script starts the Z80 emulation in tranZPUter Filing System (TZFS) mode, which implements the K64F virtual co-processor behaviour from the original tranZPUter hardware. In TZFS mode, the FusionX emulates the extended filing system and memory management features originally provided by the K64F microcontroller on the tranZPUter SW board.
sudo /opt/fusionx/startZ80_TZFS.sh
Switching Between Startup Modes
To switch from one startup mode to another, stop the currently running Z80 emulation and kernel module, then run the desired startup script:
z80ctrl --stop sudo rmmod z80drv sudo /opt/fusionx/startZ80_TZFS.sh
The
ttymzdrv module does not need to be unloaded between mode switches — only z80drv needs to be reloaded with the new configuration.
Using the Z80 Emulator
The
z80ctrl command-line utility is the primary userspace interface for controlling the Z80 emulation engine running in the z80drv kernel module. It communicates with the kernel module via a character device and exposes a comprehensive set of commands for loading ROM images, managing virtual hardware devices, controlling emulation state, inspecting memory, and loading MZF program files.
Load a ROM Image
Load a binary ROM image into the Z80 emulated address space at a specified address. The
--size parameter specifies the size of the ROM region in bytes (hexadecimal).
z80ctrl --loadrom /path/to/rom.bin --addr 0xE800 --size 0x2000
Add a Virtual Hardware Device
Register a virtual hardware device module with the Z80 emulation engine. The
--device parameter specifies the device module name, which must correspond to a compiled virtual hardware module for the target host machine.
z80ctrl --adddev --device mz80a
Start and Stop Emulation
Start the Z80 emulation loop on CPU1. The emulator will begin fetching and executing Z80 instructions from the address space, with bus cycles reflected through the CPLD to the host machine's bus.
z80ctrl --start
Stop the Z80 emulation loop. The host machine's bus will be released and the CPLD will tri-state its outputs.
z80ctrl --stop
Inspect Memory
Dump a region of the Z80 emulated address space to the console in hexadecimal and ASCII format. This is useful for debugging ROM contents, inspecting RAM state, or verifying that a ROM image has loaded correctly.
z80ctrl --dump --addr 0x0000 --size 256
Load an MZF Program
Load a Sharp MZF-format program file directly into the Z80 emulated address space. The MZF header is parsed to determine the load address and entry point. After loading, the Z80 program counter is set to the MZF entry point and execution begins from there.
z80ctrl --loadmzf /sd/programs/test.mzf
Switching Between Z80 and Linux Console
The FusionX uses a layered approach to share the host machine's keyboard and display hardware between the Z80 emulation session and the Linux console.
The
ttymzdrv kernel driver presents the host machine's keyboard and display as the Linux terminal device /dev/ttymz0. Both the Z80 emulation engine and the Linux console can address this device. The sharpbiter arbiter daemon arbitrates between these two consumers, ensuring that only one is active at a time and that switching between them is clean and non-destructive to either session.
Suspending the Z80 Session to Access the Linux Console
To suspend the Z80 emulation session and switch to the Linux console on the host keyboard/display, press the host-specific escape key sequence. The key sequence varies by host machine and is configured in the
sharpbiter daemon configuration file. Refer to your host-specific documentation for the exact sequence.
Alternatively, you can always access the Linux console at any time via the USB-serial connection, regardless of the current state of the Z80 session on the host display.
Returning to the Z80 Session
To return control of the host display and keyboard to the Z80 emulation session, issue the resume command from the Linux console:
sharpbiter --resume
The host display will return to the Z80 session immediately. Any Linux console activity during the suspension period is preserved in the terminal buffer and can be reviewed after the next suspension.
WiFi Setup
The SigmaStar SSD202D SOM integrates the SSW101B 802.11 b/g/n (2.4 GHz) WiFi module. Once configured, WiFi provides SSH access to the FusionX Linux environment, enabling wireless management without requiring the USB-serial cable for routine administration.
WiFi configuration is performed via the USB-serial console using standard Linux networking tools. Ensure the external WiFi antenna is connected to the IPEX/U.FL connector on the FusionX board before attempting WiFi configuration.
Configuring WiFi with wpa_supplicant
Edit the wpa_supplicant configuration file to add your network credentials:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
Add a network block for your access point:
network={
ssid="YourNetworkName"
psk="YourNetworkPassword"
key_mgmt=WPA-PSK
}
Save the file and bring up the wireless interface:
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf sudo udhcpc -i wlan0
SSH Access
Once the WiFi interface is associated and has obtained an IP address, the OpenSSH server running on the FusionX is accessible from any host on the same network. Determine the assigned IP address:
ip addr show wlan0
Then connect from your PC:
ssh fusionx@<ip-address>
To make the WiFi configuration persistent across reboots, add the
wpa_supplicant and udhcpc commands to the appropriate system startup script or init configuration for your Linux distribution.
SD Card and File Management
The SigmaStar SSD202D SOM includes a micro-SD card slot connected via the SDIO interface. The SD card provides expandable storage for ROM images, MZF program files, and OTA firmware update images. It is not required for basic operation but is strongly recommended for storing program libraries and for performing OTA updates.
Mounting the SD Card
Insert a formatted micro-SD card (FAT32 or ext4) into the SOM's SD card slot. The SOM will detect the card and create a block device, typically
/dev/mmcblk1 with the first partition at /dev/mmcblk1p1.
Mount the SD card to the /mnt/sd mount point:
sudo mkdir -p /mnt/sd sudo mount /dev/mmcblk1p1 /mnt/sd
To mount the SD card automatically at boot, add an entry to
/etc/fstab:
/dev/mmcblk1p1 /mnt/sd vfat defaults,noatime 0 2
File Organisation
The recommended directory structure on the SD card is:
/mnt/sd/ roms/ - ROM binary images (.bin) programs/ - MZF format program files (.mzf) firmware/ - OTA firmware update images
ROM images stored in
/mnt/sd/roms/ can be loaded at any time using z80ctrl --loadrom. MZF files stored in /mnt/sd/programs/ can be loaded using z80ctrl --loadmzf.
OTA Firmware Updates
Over-the-air (OTA) firmware updates for the FusionX SOM are delivered as a firmware image file placed on the SD card. The SOM boot process checks for a valid firmware image on the SD card at startup and performs the upgrade automatically if one is found.
To perform an OTA update:
- Download the firmware update image from the project release page.
- Copy the firmware image to the
firmware/directory on the SD card. - Insert the SD card into the SOM's SD card slot.
- Power cycle the host machine. The SOM boot process will detect the firmware image, write it to NAND Flash, and reboot automatically.
- After the upgrade completes, the firmware image on the SD card is renamed or removed to prevent repeated upgrades on subsequent boots.
Do not power off the host machine during an OTA update. Interrupting the NAND Flash write process may render the SOM unbootable, requiring recovery via JTAG or serial boot mode.
Troubleshooting
Host Does Not Start / Blank Display
If the host machine powers on but the display remains blank or shows garbled output:
- Verify that pin 1 of the FusionX board is aligned with pin 1 of the DIP-40 socket. Incorrect orientation will prevent the board from operating and may damage the host machine.
- Confirm that all 40 pins of the FusionX board are fully and correctly seated in the socket. A single bent or missed pin can cause complete failure.
- If using a daughter board, confirm it is correctly fitted and its host-side connectors are attached to the correct points on the host mainboard. An incorrectly routed daughter board will result in no video output.
- Confirm the CPLD variant matches the host machine. A CPLD programmed with the wrong variant will produce incorrect bus timing, resulting in no display or corrupted output. Refer to the Technical Guide for CPLD variant verification.
No Linux Console on USB-Serial
If you see no output on the USB-serial terminal after powering on:
- Confirm the CH340E/CH34x USB-serial driver is installed on your PC. On Windows, download and install the driver from the CH340 manufacturer page. On Linux, run
lsmod | grep ch341to confirm the driver is loaded. - Confirm the terminal emulator is set to 115200 baud, 8 data bits, no parity, 1 stop bit, no flow control.
- Confirm the USB cable is data-capable (not a charge-only cable). Charge-only cables do not carry the D+ and D- data lines.
- Check that the USB-serial port is not already open in another application on your PC.
- Try a different USB port on your PC. Some USB controllers handle full-speed USB-serial devices with more reliability than others.
Z80 Emulation Not Starting
If the Linux console is accessible but the Z80 emulation does not start, or the host display does not show the expected startup screen:
- Check whether the
z80drvkernel module is loaded: runlsmod | grep z80drv. If it is not listed, the startup script failed to load the module. - Review the kernel log for error messages from the module load attempt: run
dmesg | tail -50and look for messages relating toz80drvorttymzdrv. - Check the startup script for errors. Run the script manually from the serial console and observe any error output.
- Confirm the ROM image path specified in the startup script is correct and that the file exists and is readable.
MZF Program Not Loading
If
z80ctrl --loadmzf fails or the program does not run correctly after loading:
- Confirm the SD card is mounted: run
mount | grep mmcblk1. If not mounted, mount it withsudo mount /dev/mmcblk1p1 /mnt/sd. - Confirm the file path passed to
z80ctrl --loadmzfis correct and that the file exists: runls -la /mnt/sd/programs/. - Verify the MZF file is not corrupted. A valid MZF file has a 128-byte header beginning with a file type byte of
0x01(machine code) or0x02(BASIC). Usexxd /mnt/sd/programs/test.mzf | head -8to inspect the header. - Ensure the Z80 emulation is running before attempting to load and execute an MZF file.
WiFi Not Connecting
If the WiFi interface fails to associate with your access point:
- Confirm the external WiFi antenna is connected to the IPEX/U.FL connector on the FusionX board. Operating the SSW101B module without an antenna may result in extremely poor signal or complete failure to associate.
- Verify the SSID and passphrase in
/etc/wpa_supplicant/wpa_supplicant.confare correct. Both are case-sensitive. - Check the wpa_supplicant log for association errors: run
wpa_cli statusor inspectdmesg | grep -i wlanfor error messages. - Confirm your access point is operating on the 2.4 GHz band. The SSW101B does not support 5 GHz networks.
Machine Runs Too Fast / Timing Errors
If the host machine exhibits timing anomalies — such as programs running at incorrect speeds, keyboard auto-repeat behaving abnormally, or hardware I/O timing failures — the most likely cause is a CPLD variant mismatch:
- Confirm the CPLD variant matches the host machine exactly. Each supported host machine requires a specific CPLD variant compiled in Quartus II. Refer to the Supported Host Machines table above for the correct variant identifier.
- If the CPLD was recently reprogrammed, confirm the correct
.poffile was used. Refer to the Technical Guide for CPLD programming and variant verification procedures. - If the correct CPLD variant is confirmed, check the Z80 emulation clock configuration. The
z80drvmodule may need its clock divider setting adjusted for your specific host machine's expected Z80 clock frequency.
Reference Sites
The following resources provide additional technical information, project documentation, and external references relevant to the tranZPUter FusionX.
| Resource | Location |
|---|---|
| tranZPUter FusionX Project Page | /tranzputer-fusionx/ |
| FusionX Technical Guide | /tranzputer-fusionx-technicalguide/ |
| FusionX Developer’s Guide | /tranzputer-fusionx-developersguide/ |
| SigmaStar SSD202 Product Page | www.sigmastar.com.tw |
| Altera MAX7000AE Datasheet | Intel/Altera Legacy Documentation |
| Zeta Z80 Emulator Library | github.com/redcode/Zeta |
| Sharp MZ Series Reference | sharpmz.org |
Wireless Regulatory Notice
This device incorporates an SSW101B 2.4 GHz IEEE 802.11 b/g/n wireless transceiver (integrated within the SigmaStar SSD202 SOM), making it an intentional radiator under radio-frequency regulations worldwide (including FCC Part 15 Subpart C in the United States, and the Radio Equipment Directive 2014/53/EU in the European Union).
Although the SOM module carries pre-existing regulatory certifications, those module-level certifications do not automatically extend to a finished product that incorporates the module. The pre-certified module exemption permits individual hobbyists to build a limited number of devices for personal, experimental, or educational use without obtaining separate equipment authorisation.
Important Limitations
It is the builder’s sole responsibility to ensure that any device constructed from these designs complies with all applicable radio-frequency regulations in their jurisdiction. The author provides these designs for personal, educational, and hobbyist use and makes no representation that a device built from them satisfies the regulatory requirements for commercial distribution.
- Assembled devices must not be sold, offered for sale, gifted, or otherwise distributed to third parties unless the finished product has been independently tested and granted its own equipment authorisation (e.g. FCC ID, CE marking with a Notified Body assessment) in the relevant jurisdiction.
- Building this project for personal use in limited quantities is generally permitted under hobbyist and experimental-use provisions (e.g. FCC § 15.23), provided the device does not cause harmful interference.
- Regulatory requirements vary by country. Builders outside the United States should consult their national radio-frequency authority for applicable rules.
It is the builder’s sole responsibility to ensure that any device constructed from these designs complies with all applicable radio-frequency regulations in their jurisdiction. The author provides these designs for personal, educational, and hobbyist use and makes no representation that a device built from them satisfies the regulatory requirements for commercial distribution.