The PC-based component of a two-part Linux driver for using a TI calculator as an external keyboard

Overview

./i68logo.png

Introduction

i68apollo is the computer-based component of the two-part i68 (*I*​nput from Motorola *68*​000[fn:4]-based calculator) prototype userspace driver intended to allow the use of a Texas Instruments TI-83 Plus, TI-89 or TI-92 Plus calculator as an external keyboard under Linux. i68apollo is not intended to work under any other operating system.

i68apollo requires its sister component i68soyuz to function, which you can find here.

For the time being, i68 requires that the calculator be plugged in via a SilverLink cable. No other means are supported, including TiEmu. If you want to use i68, get ready to spend money on old hardware.

Building

i68apollo is written in Rust and requires standard Rust utilities to compile. Go here to install them, if you haven’t already.

If you’re unfamiliar with the Rust build process, here’s an expedited guide:

  1. Install cargo, like I said
  2. Open a terminal and cd to the directory you’ve downloaded/cloned/pulled this repository to.[fn:2]
  3. Once there, you’ll type either cargo run or cargo run --release to compile and run with either the debug or release compilation profiles, respectively.

How to Use

  1. Plug your calculator into your computer with a SilverLink USB cable.
  2. Start i68soyuz on your calculator by following the instructions in that project’s repository.
  3. When prompted to “start apollo”, start i68apollo with either cargo run or cargo run --release.
  4. Go ahead and “press any key” on your calculator. i68apollo and i68soyuz will then exchange version information. If there is a version mismatch, both will mutually abort the connection. Otherwise, you should at this point be able to type on your computer with your calculator.
  5. Press the ON key on your calculator at any point to quit.

Troubleshooting

  • Ensure that the major (first number) and minor (second number) versions of i68apollo and i68soyuz match. If they do not, you must install the up-to-date version of the offending component.
  • If you get an error saying something about being “unable to create virtual keyboard”, make sure uinput is running. You can do this by running sudo modprobe uinput in your terminal.
  • If you get an error about “not being able to find link cable”, make sure the link cable is plugged in, and that your USB ports are functioning correctly. Try running lsusb to determine if the SilverLink cable is visible to the operating system.
  • If you get an error about something being “busy”, make sure you aren’t running any other programs that might be trying to access the link cable, like TiLP2 or TI Connect.
  • If for whatever reason i68apollo fails to exit when i68soyuz does, press Control-C in the terminal to force it to quit.

Additional Notes

Quirks and Misdemeanors[fn:3]

  • Because TI calculators have a somewhat… nonstandard keyboard layouts, many of the special keys are not properly implemented. Keys like SIN, MODE or ^ instead produce bogus function key presses. Furthermore, combinations like 2nd~+~I fail to produce the expected result. This is partially due to the limitations of the Rust uinput crate, and partially due to the limitations of X11’s (or XKB’s, rather) default keyboard configuration. Perhaps future work will address this, perhaps not. Messing with X11 internals gives me the heebie-jeebies.

Future Improvements?

  • I would like to implement some kind of support for the TI PLT-KBD, but due a dearth of documentation this may not be possible.[fn:1]
  • It’d be nice if the two components could send some configuration information between each other, such as which key should be used to exit, or how the calculator should report its key matrix.
  • Manually loading i68soyuz onto the calculator is a pain, it’d be nice if i68apollo could do that automatically. Could probably be done by loading the calculator’s directory, executing i68soyuz if found, checking its version, and either proceeding if everything passes or else issuing a “silent download” to install the latest version, then proceeding.
  • Overall robustness could really use some improving.
  • It’d be desirable if I could roll an XKB configuration for the TI-92 Plus. It’d be really annoying and complicated, especially since it has so many nonstandard KeySyms and multigraphs and modifiers and such, but I think it could be done.

The Name

i68apollo is named for the Apollo spacecraft used as part of the joint Soviet-American Apollo-Soyuz Test Project. As I am American, and i68apollo is the “local” component of i68, I named it after the American part of the mission.

i68soyuz, the “foreign” component of i68, was named likewise for the Soviet spacecraft.

Footnotes

[fn:4] Now something of a misnomer, following the successful to port to the z80-based TI-83 Plus.

[fn:3] https://www.youtube.com/watch?v=urcL86UpqZc&t=472s

[fn:2] If you don’t know how to use the terminal, then I’m sorry but this might be little over your head. For what it’s worth, you probably don’t really want to run this anyway. It’s hacky and gross and brittle and obtuse and unpleasant to use, and all for very little benefit. If you still do regardless, you’re probably technically inclined enough to figure it out yourself.

[fn:1] I think it should be possible to hook the relevant interrupt for link port I/O and the log the tx and rx queues to reverse-engineer the protocol, but I have yet to try it. I think it’s pretty simple–just sending a remote-control packet with every keypress–but I haven’t been able to get anything working under that assumption. Perhaps the protocol is more bidirectional than I knew–the keyboard may require the calculator to identify itself before it can send keycodes, or something else entirely. This footnote is entirely speculation.

You might also like...
auto-epp-rs is a program that manages the energy performance preferences (EPP) of your AMD CPU using the AMD-Pstate driver.

auto-epp-rs is a program that manages the energy performance preferences (EPP) of your AMD CPU using the AMD-Pstate driver. It adjusts the EPP settings based on whether your system is running on AC power or battery power, helping optimize power consumption and performance. This project is a rewrite of the original Python version jothi-prasath/auto-epp in Rust, aiming to improve memory efficiency and overall performance.

A Rust CLI that makes mechanical keyboard sound effects on every key press
A Rust CLI that makes mechanical keyboard sound effects on every key press

Rustyvibes A Rust CLI that makes mechanical keyboard sound effects on every key press Rustyvibes.mp4 Installation macOS: brew install kb24x7/rustyvibe

That program use on platform windows. And if you write any text on uncorrect keyboard layout, that program for that.
That program use on platform windows. And if you write any text on uncorrect keyboard layout, that program for that.

📌 This program is designed to translate text into the correct layout when typing is incorrect. 📌 Example ghbdtn - привет Just (by default) pressing

on-screen keyboard display for your coding streams.

⌨ OSKD (On-screen key display) OSKD is an on-screen keyboard display that can be used during streams. It provides an intuitive and easy-to-use interfa

Shared k-mer content between two genomes

skc skc is a simple tool for finding shared k-mer content between two genomes. Installation Prebuilt binary curl -sSL skc.mbh.sh | sh # or with wget w

Automatic application-aware keyboard layer switching for Windows

komokana Automatic application-aware keyboard layer switching for Windows About komokana is a daemon that listens to events emitted by komorebi and co

excss is a small, simple, zero-runtime CSS-in-JS library with just two APIs.

excss excss is a small, simple, zero-runtime CSS-in-JS library with just two APIs.

INput maCROs: program your keyboard/mouse

incro INput maCROs: program your keyboard/mouse See macro-template for macro example. Build it and place the resulting *.so file in macros/ directory

TMM is a Linux native game modding tool. it allows to install and depoly mods for Linux native and wine games.

Tux Mod Manager TMM is a Linux native mod manager made with the Tauri toolkit. It can install, load, remove and deploy mods for both Linux native and

Owner
Joseph Burke
Student and hobbyist programmer, fan of Rust, Lisp, and AWK. "Object oriented programs are offered as alternatives to correct ones" - Edsger W. Dijkstra
Joseph Burke
Command Line Scientific Calculator. Free Forever. Made with ❤️ using 🦀

██████╗███████╗ ██████╗ ██╔════╝██╔════╝██╔════╝ ██║ ███████╗██║ ██║ ╚════██║██║ ╚██████╗███████║╚██████╗ ╚═════╝╚══════╝ ╚═════╝ -

zahash 17 Oct 28, 2023
A simple command line based RPN calculator

stak A simple command line based RPN calculator Usage stak can be used in two modes: one-shot from the command line, or in an interactive shell One-sh

null 1 Nov 17, 2021
An interactive Bayesian Probability Calculator CLI that guides users through updating beliefs based on new evidence.

Bayesian Probability Calculator CLI Welcome to the Bayesian Probability Calculator CLI! This command-line tool is designed to help you update your bel

Ben Greenberg 4 Apr 25, 2023
A UI component library for Leptos, based on Tailwind Elements.

leptos-twelements A UI component library for Leptos, based on Tailwind Elements. Installation (for projects using cargo leptos) Use the nightly rust c

Sebastian Meßmer 4 Oct 20, 2023
Execution of and interaction with external processes and pipelines

subprocess The subprocess library provides facilities for execution of and interaction with external processes and pipelines, inspired by Python's sub

Hrvoje Nikšić 375 Jan 2, 2023
AUR external package builder

AUR Build Server Goal This project aims to provide an external package making server based on any PKGBUILD based project. Right now it pulls AUR packa

Seïfane Idouchach 2 Sep 11, 2022
Cucumber testing framework for Rust. Fully native, no external test runners or dependencies.

Cucumber testing framework for Rust An implementation of the Cucumber testing framework for Rust. Fully native, no external test runners or dependenci

Cucumber Rust 393 Dec 31, 2022
REC2 (Rusty External Command and Control) is client and server tool allowing auditor to execute command from VirusTotal and Mastodon APIs written in Rust. 🦀

Information: REC2 is an old personal project (early 2023) that I didn't continue development on. It's part of a list of projects that helped me to lea

Quentin Texier (g0h4n) 104 Oct 7, 2023
Open-source, external CS2 cheat.

?? ProExt - A game enhancer for CS2 ?? Features: ESP ??️ Aimbot ?? Triggerbot ?? Crosshair ⌖ Radar ?? Bomb Timer ?? Spectator List ?? Styling ??️ ...a

Vytrol 5 Nov 29, 2023
Rust library for integrating local LLMs (with llama.cpp) and external LLM APIs.

Table of Contents About The Project Getting Started Roadmap Contributing License Contact A rust interface for the OpenAI API and Llama.cpp ./server AP

Shelby Jenkins 4 Dec 18, 2023