Skip to the content
PCBKitNew board
2 layers36 × 53.5 mmYaumataca, the printed circuit board in 3D

USB mouse and joystick to Amiga, Atari ST & C64 Adapter

Size
36 × 53.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
25
Nets
55
Pads
170
Tracks, vias
131, 16
Pours
2
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
4 Aug 2023
Updated
17 May 2026

Overview

Yaumataca is an open-source printed circuit board by Slamy, from the Slamy/Yaumataca repository on GitHub, published under the MIT licence. It is a 2-layer board of 36 × 53.5 mm with 25 parts on 55 nets, routed with 131 tracks and 16 vias.

It is built around the DTC143Z. Its parts include 14 transistors, 4 resistors, 2 diodes, 2 connectors and 1 capacitor. It belongs with the retro computing and games and keyboards and input boards and the RP2040 boards of this library.

Main components

1

README

README.md

Yet another USB mouse and joystick to Amiga, Atari ST & C64 Adapter

Or in short Yaumataca. This device allows to use modern USB input devices on 80s style home computer controller ports. Being mechanical in nature, old gamepads and mouses degrade over time and replacements using modern variants might be required.

This solution makes use of the Raspberry Pi Pico board (RP2040) which offers a dedicated USB host controller and can be bought at a rather low price (5-8€ per unit). Cheap NPN transistors are used for level shifting as the RP2040 is not 5V tolerant.

How to use

The Yaumataca acts as both Joystick and Mouse. Plug both output ports into both controller ports of the target machine. Plug a USB OTG Hub into the Micro-USB port of the Pico board. Insert USB gamepad and USB mouse.

As multiple modes are supported, the user manual provides more detail.

Features

  • Cheap to build
  • Uses "off the shelf" hardware
  • Multiple USB devices on 2 Atari type controller ports using a single unit
  • Primary joystick on left port
  • Primary mouse on right port
  • Amiga mouse with wheel using WheelBusMouse driver
  • Commodore 1351 in proportional mode
  • Atari ST mouse
  • Automatic switch between mouses and joysticks
  • Swap of controller ports (useful for C64 games)
  • Supports 2 mouses and 2 joysticks (useful for Lemmings and Marble Madness)
  • Supports secondary fire button (Amiga and C64 style)
  • Auto fire
  • Configured mouse type is saved in flash

Restrictions

  • Only dedicated Joysticks are supported.
    • PS3 DualShock
    • PS4 DualShock
    • Nintendo Switch Pro Controller
    • Xbox 360 Wireless Receiver (1 or 2 controllers with one receiver)
    • Xbox One Controller
    • Xbox Series S/X Controller
    • Mega World International - USB Game Controllers (07b5:0314)
    • DragonInc Hizue Gamepad (0079:0011)

TODO

  • Amiga Mode: Add support for newmouse or Micromys protocol
    • Avoids necessity for manipulation of the unrelated joystick port
  • Add 3. Fire button for more gamepads
  • HID Descriptor Parsing (generic USB joystick support, eventually)
  • Bluetooth (eventually)
  • Explain C1351 calibration using C64 tool

How to construct

The project is constructable via perfboard or PCB.

Manual for construction on a perfboard

For the PCB, please use the KiCad files. If you order your parts from Reichelt, you may use the attached ordering lists which can be imported on the website.

In case the PCB is chosen, there is also a 3D model of a case available, which can be used for 3D printing.

To operate the unit, one OTG Hub is recommended which provides multiple USB A ports attached to a USB micro port. If only one USB device is to be attached, a simple USB micro to USB A adapter will also work, but I suggest to go for the Hub.

Example hardware design

Here an example of the PCB inside the case. Photo of Yaumataca in 3d printed case

Here the PCB side by side with the prototype. Photo of Yaumataca build from PCB and perfboard

How to build the firmware

Ensure that the submodules are also cloned.

text
git submodule update --init --recursive
mkdir build
cd build
cmake ..
make

Alternatively there is also a small script which builds and packages the software as a zip file for upload.

text
./scripts/build_release.sh

How to flash

Integrated USB bootloader

The RP2040 can be flashed using SWD or using the integrated USB bootloader. As not everyone might have a debugger lying around, flash the Pico as so:

  • Don't have the Pico board powered and connected.
  • Press and hold the BOOTSEL button
  • Connect the Pico to your PC while holding the button
  • The Pico should be detected as mass storage device
  • Copy yaumataca.uf2 from the build folder to the device
  • The LED of the Pico should start blinking

The Yaumataca is now ready for operation

With SWD

This assumes that you are using a CMSIS-DAP compatible programmer. It is suggested to use a second Pico board as one. This is possible using the Picoprobe firmware. Keep in mind that an st-link cannot be used with the RP2040, even so both speak SWD.

text
openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 20000; program build/yaumataca.elf verify reset exit"

Connect the picoprobe like so, to flash and debug the Yaumataca in standalone operation:

Example picture of an attached picoprobe to the Yaumataca

Keep in mind to only connect 5V (purple wire) when operating the Yaumataca without any home computer attached! The 5V power supply is usually provided by the controller port and not from the PC! It must not be delivered by both the developer PC and the homecomputer at the same time!

Recommended IDE

Please use vscode and open the root folder with it. This gives access to the already existing debugging targets.

System architecture

uml diagram

Doxygen and Unittests

It is my goal to have everything properly documented and tested

text
scripts/check_doxygen.sh
scripts/unittest.sh

FAQ

My gamepad is not supported. What can I do?

It depends. Some USB Gamepads are not following the HID standard, which is a huge issue. The PS4 Controller is one rare exception which just works. Bad examples are the Xbox One Controller and the Nintendo Switch Pro Controller.

Both require some sort of handshaking to activate the data transfer.

If you are lucky, you have a USB input device which just follows the HID standard.

Please follow this guide to add additional gamepads

I can see PRINTF all over the place. Where is the output going to?

This project makes use of "Segger RTT" which stores printed characters inside a small buffer which can be displayed over SWD. It has advantages compared to the UART as no additional GPIOs have to be reserved for this.

I don't recommend to use rtthost as it is slow. Please use VSCode instead.

text
rtthost -c rp2040

There is also pyocd available, which is faster:

text
pyocd rtt --target rp2040

SWD is failing with "Info : DAP init failed"

You have accidentally downloaded debugprobe and not picoprobe. This project uses the CMSIS-DAP variant of the picoprobe! One working version is this one.

I can't use the C1351 mouse on "Final Cartridge III"

The design of the Yaumataca circuit might not be optimal, as it causes issues with the way the FC3 software is using the SID muxes in desktop mode. For some reason, both Controller Ports are muxed at the same time to the SIDs POT lines, so it can accept a mouse at either of the ports without additional configuration. This however means that no two mice are allowed to be connected at the same time.

The Yaumataca design is not aware of this and uses a 10k pullup on POT X and POT Y to charge the measurement capacitor. This alone is not an issue. However, with the addition of the secondary fire buttons on the C64, this indeed causes issues as the high state is the pressed state while the grounded state is not pressed. This is opposite to how the Amiga handles its buttons.

If this issue occurs, just disconnect one of the controller ports.

Why is this not written in Rust?

Because USB Host Support for the RP2040 is not yet awesome

Isn't this yet another USB mouse and joystick to Amiga, Atari ST & C64 adapter

Exactly

Funny anecdote

The popularity of this project was increased dramatically just becausean Atari ST user was missing a mouse on a Commodore 64 party. This happened on the DoReCo (Dortmund Retro Computer) Party 2024 in Anröche, Germany.

Sources of Inspiration

My old project this here needs to surpass:
http://slamyslab.blogspot.com/2013/02/pcbs-for-usb-datasette-and.html

Infos about Mouse Wheels on the Amiga:
http://bax.comlab.uni-rostock.de/en/hardware/amiga-usb-mouse/

For the pinout:
https://www.c64-wiki.de/wiki/Maus

Information about the Commodore 1351:
http://sensi.org/~svo/%5Bm%5Douse/

Micromys C64 and Amiga Mouse Protocol:
https://wiki.icomp.de/wiki/Micromys_Protocol

Parts

25
QtyValueFootprintReferences
14DTC143ZLibrary:SOT-23_ohnesilkQ1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9, Q10, Q11, Q12, Q13, Q14
410kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR15, R16, R17, R18
2Conn_02x05_Odd_EvenConnector_IDC:IDC-Header_2x05_P2.54mm_VerticalJ3, J4
2DDiode_SMD:D_SOD-123D1, D2
11000uCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC1
1100uInductor_THT:L_Axial_L5.3mm_D2.2mm_P7.62mm_Horizontal_Vishay_IM-1L1
1PicoMCU_RaspberryPi_and_Boards:RPi_Pico_SMD_THU1

Questions

How big is the Yaumataca PCB?

It measures 36 × 53.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Yaumataca use?

25 parts, built around the DTC143Z. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Yaumataca KiCad files?

From the Slamy/Yaumataca repository on GitHub, at the commit this page was made from: the board is schematic/yaumataca/yaumataca.kicad_pcb and its schematic schematic/yaumataca/yaumataca.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Yaumataca design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 2 layers85 × 60 mmBLDC STC15W401, the printed circuit board in 3D

    BLDC STC15W401

    oshwcom/BLDC_STC15W401

    低成本(RMB 7元左右)12V的bldc驱动电路。基于STC15W401AS单片机。

    61 parts30Unlicense
  • 4 layers38.5 × 47 mmSIM7080, the printed circuit board in 3D

    SIM7080

    techstudio-design/sim7080_dev_board

    SIM7080 Dev Board hardware design files

    55 parts17
  • 2 layers17.8 × 21 mmVBUS Switch Addon Board, the printed circuit board in 3D

    VBUS Switch Addon Board

    suzan-works/XIAO_CH32X035

    Tiny microcontroller board equipped with WCH CH32X035. WCH CH32X035を搭載した小型のマイコンボード

    29 parts8MIT
  • 2 layers50 × 50 mmBf-034, the printed circuit board in 3D

    Bf-034

    botanicfields/PCB-MBUS-AquesTalk-pico-LSI

    MBUS Module of AquesTalk pico LSI for M5Stack

    56 parts6CC0-1.0
  • 2 layers78 × 40 mmNode base, the printed circuit board in 3D

    Node base

    LanternD/NB-Scope

    Hardware and software design for NB-Scope.

    79 parts6Apache-2.0
  • 2 layers60 × 80 mmGalaxy A5 dual node, the printed circuit board in 3D

    Galaxy A5 dual node

    DerRKDCB/meshphone

    meshtastic Samsung Galaxy A5 standalone offline dual node

    87 parts5
  • 4 layers129 × 121 mmMinyasX Combined, the printed circuit board in 3D

    MinyasX Combined

    kunichiko/X68k-MinyasX

    MinyasX は、Windows (AT互換機) 用の FDD を無改造で X68000 に接続して使えるようにするアダプタです。

    232 parts2MIT