{"id":51117020,"url":"https://github.com/mrdotx/zenith-xt-usb","last_synced_at":"2026-06-24T22:38:58.797Z","repository":{"id":111126981,"uuid":"342859247","full_name":"mrdotx/zenith-xt-usb","owner":"mrdotx","description":"zenith keyboard 5-pin to usb converter","archived":false,"fork":false,"pushed_at":"2026-06-14T03:01:35.000Z","size":17647,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-06-24T22:38:52.031Z","etag":null,"topics":["5-pin","adapter","arduino","at","atmega32u4","converter","din","ibm","key","keyboard","macro","mouse","ps2","tap","tmk","toggle","usb","xt","zenith"],"latest_commit_sha":null,"homepage":"https://github.com/tmk/tmk_core","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrdotx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-02-27T13:08:56.000Z","updated_at":"2026-06-14T03:01:59.000Z","dependencies_parsed_at":"2023-06-02T18:30:50.921Z","dependency_job_id":"59cd0641-517c-4c28-804f-792070c93ad5","html_url":"https://github.com/mrdotx/zenith-xt-usb","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mrdotx/zenith-xt-usb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdotx%2Fzenith-xt-usb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdotx%2Fzenith-xt-usb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdotx%2Fzenith-xt-usb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdotx%2Fzenith-xt-usb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrdotx","download_url":"https://codeload.github.com/mrdotx/zenith-xt-usb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrdotx%2Fzenith-xt-usb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34752465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["5-pin","adapter","arduino","at","atmega32u4","converter","din","ibm","key","keyboard","macro","mouse","ps2","tap","tmk","toggle","usb","xt","zenith"],"created_at":"2026-06-24T22:38:57.417Z","updated_at":"2026-06-24T22:38:58.786Z","avatar_url":"https://github.com/mrdotx.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Zenith Keyboard Converter\n\nThe converter translates IBM PC keyboard protocols to use classic keyboards with USB ports. It supports both IBM XT and AT protocols, and all of scan code set 1, 2 and 3 with one firmware.\n\nThis project is intended to integrated existent TMK XT, PS/2 and Terminal converters.\n\n![Zenith XT](images/zenith_xt.jpg)\n\n## Hardware\n\nFirmware supports ATMega32u4 and ATMega32u2 by default, Teensy2 or ProMicro can be used.\nWire controller pins below to keyboard signals, besides VCC and GND. This is compatible for Soarer's converter.\n\n- Data    PD0\n- Clock   PD1\n- Reset   PB6 or PB7 (For some of XT keyboards. Not needed for AT, PS/2 and Terminal)\n\n### 5-Pin DIN 180° (DIN41524) female assignment\n\n![Pro Micro 5-Pin DIN Pinout](images/5-pin_din_pinout.png)\n\n| 5-Pin DIN | Description | Cable color | Board Pin |\n| :-------: | :---------- | :---------- | :-------: |\n| 1         | Clock       | black       | 2         |\n| 2         | Data        | red         | 3         |\n| 3         | Reset       | white       | 10        |\n| 4         | GND         | green       | GND       |\n| 5         | +5V         | yellow      | VCC       |\n\n## Keyboard discrimination\n\nThis section explains how the converter determines proper protocol and scan code set for keyboard. The converter need to do that before starting to receive and translate scan codes from keyboard.\n\n### Keyboard ID\n\nAfter startup the converter sends 0xF2 command to get keyboard ID and sees how the keyboard responds to the command.\n\nResponse from keyboard:\n\n- XT keyboard doesn't support any command and returns no response.\n- AT keyboard should respond with 0xFA to the command but returns no keyboard ID.\n- PS/2 keyboard should respond with 0xFA to the command, followed by keyboard ID, such as 0xAB86.\n- Terminal keyboard should respond with 0xFA to the command, followed by keyboard ID, such as 0xBFBF.\n\nNow we can discriminate the keyboard and determine suitable protocol and scan code set as described below.\n\n### Protocol\n\n- Signals from XT keyboard are recognized by XT protocol.\n- Signals from AT, PS/2 and Terminal keyboard are recognized by AT protocol.\n\n### Scan code Set\n\n- Scan codes from XT keyboard are handled as CodeSet1.\n- Scan codes from AT and PS/2 keyboard are handled as CodeSet2.\n- Scan codes from Terminal keyboard are handled as CodeSet3.\n\n## Firmware\n\nThe next descriptions refer to Linux, but can certainly also be applied to windows systems, in a slightly modified form. The unimap layers are configured as shown in the following pictures:\n\n![Layer 0](images/layer_0.png)\n![Layer 1](images/layer_1.png)\n![Layer 2](images/layer_2.png)\n\n### Flash firmware\n\nFirst (if not already done) install the Arduino environment to compile and flash the firmware:\n\n```bash\nsudo pacman -S avr-libc avrdude\n```\n\nDownload the precompiled firmware from [zenith-xt-usb/firmware](https://github.com/mrdotx/zenith-xt-usb/tree/master/firmware) or build it by yourself:\n\n```bash\nmake clean\nmake\n```\n\nFirst of all, we should identify to which serial device the Pro Micro is connected to (normally it is /dev/ttyACM0). Connect the Pro Micro to the USB port of your computer and verify it with the list of serial devices:\n\n```bash\nls /dev/tty*\n```\n\nNavigate to the directory where the firmware is downloaded or compiled. Quickly connect `GND + RST` pins on the Pro Micro to enter the Bootloader mode and execute the following command to flash the firmware:\n\n```bash\nsudo avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:zenith_usb.hex\n```\n\n### Update firmware\n\nIf you want to update the firmware you can execute the following command:\n\n```bash\nsleep 3 \u0026\u0026 sudo avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:zenith_usb.hex\n```\n\nAfterwards you have 3 seconds to press `Numpad 0 + Caps Lock` to enter the Bootloader mode\n\n## beeper\n\nTo dis-/enable the piezoelectric beeper press `Alt + Esc`\n\n## Links\n\n- [hasu - IBM PC Keyboard Converter](https://geekhack.org/index.php?topic=103648.0)\n- [TMK Keymap Editor](https://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?ibmpc_usb_32u4_xt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrdotx%2Fzenith-xt-usb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrdotx%2Fzenith-xt-usb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrdotx%2Fzenith-xt-usb/lists"}