Skip to the content
2 layers60.5 × 31.5 mmPs2-serial mouse adapter, the printed circuit board in 3D

Ps2-serial mouse adapter

necroware/ps2-serial-mouse-adapter89

PS/2 to serial port mouse adapter

Size
60.5 × 31.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
13
Nets
44
Pads
85
Tracks, vias
81, 0
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
27 Nov 2020
Updated
27 Jun 2024

Overview

Ps2-serial mouse adapter is an open-source printed circuit board by necroware, from the necroware/ps2-serial-mouse-adapter repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 60.5 × 31.5 mm with 13 parts on 44 nets, routed with 81 tracks and 0 vias.

It is built around the MAX232N. Its parts include 5 capacitors, 2 ICs and 1 resistor. It belongs with the interfaces and adapters boards of this library.

Main components

1

README

README.md

PS/2 to Serial Mouse Adapter

Many retro PCs were used with serial port mouse and don't have any PS/2 ports. Unfortunately most of the serial mice are broken or expensive today. Furthermore they were mechanical devices with a heavy steel ball to track the movement. This mechanics got dirty quite fast and was not the best user experience anyway. A better solution are optical PS/2 mice, most of which unfortunately would not work on a serial port. This adapter can be used to connect such a PS/2 mouse to a serial port of a retro PC.The Adapter is made from through-hole parts only, so it is very easy to solder and due to Arduino based solution, it is also a very nice device for tinkering, experimenting and learning about mouse protocols.

ps2-adapter

How does it work?

The serial port on the computer communicates with the mouse using basically two pins - RTS and RX. RTS is used for notification and RX for the actual data transfer, which contains mouse position, buttons state etcetera. A standard PS/2 mouse on the other hand uses completely incompatible protocol and transfers the data between the mouse and the computer using the Data and Clock pins. If we want to connect a PS/2 mouse, to a serial port, we need some instance in between, to translate between the two different protocols. In this adapter the translation is done using an Arduino Mini. However, there is another problem. PS/2 mouse protocol uses so called TTL logic, which simply means, that the voltage of 0V means a logical zero and 5V means a logical one. TTL logic is what Arduino uses as well, but a serial port, or also called RS232, uses another voltage levels. Any voltage below -3V is a logical one and a voltage above +3V is a logical zero. So, it is not possible to connect Arduino output directly to the serial port. It simply will not work and needs another translator, which converts TTL voltage level to RS232 levels. In this adapter such conversion is made by a well known MAX232 IC. The software is written in C/C++, it is a simple Arduino project, which can be used in Arduino Studio as usual.

How to use?

This project contains everything you need to build your own adapter. You can use the gerber files to order a PCB. The list of materials is below. After soldering the adapter, connect the Arduino Mini using an USB to TTL adapter to your PC and flash the firmware using the Arduino IDE. If you don't know how to do that, please refer to the documentation of Arduino.

ATTENTION! The USB port (PWR1) on the adapter is only for powering the circuits, it is not a data port!

Connecting the adapter to the PC is very simple. Plug your PS/2 Mouse into the adapter, connect a mini USB cable to power the adapter. Plug the adapter into a serial port of your PC. Turn on the PC and use a serial mouse driver of your choice. The adapter was tested with Microsoft, Logitech and Cute mouse drivers. Cute Mouse Driver is part of FreeDos project and is free and open source.

Jumper Settings

There are two jumpers, which can be used to set different modes. Currently you can choose between 2- and 3-button mouse modes and select so called remote and streaming mode. Remote mode sends mouse data all the time and has a better response times in current implementation. Streaming mode sends only data, when mouse position or button state changes. Unfortunately, this mode is currently not in a good shape. It has a higher delay and can result in some timing issues. However, it is interesting to have it for experimental purpose. Default values are when the jumpers are unset.

JP1SettingDescription
1-2unset3-button Logitech mouse
1-2set2-button Microsoft mouse
3-4unsetremote mode
3-4setstreaming mode (experimental)

Bill of materials

Reference#LCSCDescription
U11Arduino Pro Mini 5V (ATMega168 or better)
U21C911187MAX232 or compatible DIP16 package
RS2321C141882DB9 female RS232 port
MOUSE11C77848PS/2 female port
PWR11C46398Mini-USB port for power supply
C1-55C1064481µF electrolytic capacitor
R11C5743610kOhm resistor (pull-up)
JP112x2 jumper header (optional)

Known issues

The code is still in development. It works, but it still has some flaws. Timing is really important in this project and sometimes mouse drivers seem not to get a response in time from the adapter. Usually just executing the driver once again will initialize the mouse.

Tested Mice

If you test the adapter with a mouse, which is not in this list please consider to submit a report to improve the compatibility of the adapter.

  • Logitech Optical Mouse M-BT58 (USB, PS/2, Optical)
  • NagerIT Fair Mouse (USB, PS/2, Optical)
  • Typthoon Optical Mouse (USB, PS/2, Optical)
  • Microsoft IntelliMouse Optical (USB, PS/2, Optical)
  • Microsoft IntelliMouse "Classic" (PS/2, Balled)
  • Microsoft Basic Optical Mouse (USB, PS/2, Optical, produced 2021)
  • Microsoft Comfort Optical Mouse 300 (USB, PS/2, Optical)
  • IBM 33G5430 (PS/2, Mechanical)

Links

Special Thanks

  • creopard from dosreloaded.de for testing with MS IntelliMouse Optical
  • moravec from dosreloaded.de for donating the original IBM 33G5430 mechanical mouse

Parts

13
QtyValueFootprintReferences
51uCapacitor_THT:CP_Radial_D4.0mm_P1.50mmC1, C2, C3, C4, C5
110KResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1
1Arduino_MiniPackage_DIP:DIP-24_W15.24mm_SocketU1
1Conn_02x02_Odd_EvenConnector_PinSocket_2.54mm:PinSocket_2x02_P2.54mm_VerticalJP1
1DB9_FemaleConnector_Dsub:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mmRS232
1MAX232Package_DIP:DIP-16_W7.62mm_SocketU2
1Mini-DIN-6ps2-serial-mouse-adapter:Mini_DIN_6_LCSC_C77848MOUSE1
1USB_B_Minips2-serial-mouse-adapter:USB_Mini-B-Jing_Extension_LSCS_C46398PWR1

The 12 most common of 13 parts.

Similar boards

  • 2 layers40 × 55 mmPs2usb, the printed circuit board in 3D

    Ps2usb

    rasteri/HIDman

    Adapting USB devices to work on old computers

    26 parts432
  • 2 layers132.1 × 45.7 mmIPoS, the printed circuit board in 3D

    IPoS

    peterheinrich/InternetOverSpaghetti

    Transmitting IP packages over a pair of spaghetti thus demonstrating how media independent IP really is.

    42 parts342
  • 2 layers79.7 × 35.1 mmUSB-2-232, the printed circuit board in 3D

    USB-2-232

    LimeProgramming/USB-serial-mouse-adapter

    Convert USB mouse to Serial mouse using Pi Pico

    29 parts50MPL-2.0
  • 2 layers148.3 × 116.6 mmKiCAD RetroArduInput, the printed circuit board in 3D

    KiCAD RetroArduInput

    RetroFuturisticEngineer/RetroARDUInput

    Use USB Keyboards, Mice and Joysticks on PC/XT, PC/AT, Tandy 1000, Atari, Amiga, C64 and Apple

    48 parts25LGPL-2.1
  • 2 layers99.1 × 99.1 mm6809v2, the printed circuit board in 3D

    6809v2

    jbevren/6809v2

    Code and design repository for the 6809v2 SBC: To be released at VCFMW 13

    60 parts22
  • 2 layers100 × 45 mmTranscribe, the printed circuit board in 3D

    Transcribe

    cyberboy666/_transcribe_

    midi to rs232 bridge - for performance control of old video mixers and switchers

    28 parts20
  • 2 layers40 × 67.3 mmNMEA0183-WiFi Multiplexer, the printed circuit board in 3D

    NMEA0183-WiFi Multiplexer

    AK-Homberger/NMEA0183-WiFi-Multiplexer

    Reads NMEA0183 messages from two serial lines and forwards multiplexed messages to USB-Serial and WLAN as UDP broadcast.

    10 parts15GPL-3.0
  • 2 layers279.4 × 203.2 mmZ180GDC, the printed circuit board in 3D

    Z180GDC

    lynchaj/rhyophyre

    Single Board Computer featuring Zilog Z180 processor and NEC µPD7220 Graphics Display Controller

    249 parts12

Questions

How big is the Ps2-serial mouse adapter PCB?

It measures 60.5 × 31.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ps2-serial mouse adapter use?

13 parts, built around the MAX232N. 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 Ps2-serial mouse adapter KiCad files?

From the necroware/ps2-serial-mouse-adapter repository on GitHub, at the commit this page was made from: the board is kicad/ps2-serial-mouse-adapter.kicad_pcb and its schematic kicad/ps2-serial-mouse-adapter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ps2-serial mouse adapter design in my own project?

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