CALCnet 2.2 is a robust networking protocol and driver for two-wire devices, designed especially with timing for 6MHz TI graphing calculators. It is the culmination of a long-running, frequently inactive project of mine to allow more than two calculators to connect at once. The final published version was demonstrated to work properly on networks of nearly a dozen calculators, and has also been tested on networks fragmented across large geographic areas. The protocol can be implemented in a very small memory footprint and is robust to a noisy, high-latency physical layer, ideal for an ad-hoc network strung together by students or hobbyists.
CALCnet 2.2 is a flagship feature of the popular Doors CS 7 shell and GUI for TI graphing calculators, and can be used simply by running CALCnet 2.2-enabled programs from Doors CS. For more information, you can check out the links, images, and videos below.
Background and Features
While devices and machines with clock cycles to spare have evolved to harness increasingly-complex network protocols, especially the widespread IEEE 802.3 (Ethernet) and IEEE 802.11 (WiFi) families of specifications, less-powerful devices have historically engaged in only limited two-unit communication. A particularly unfortunate example is TI graphing calculators. This ubiquitous, relatively-inexpensive computing platform is owned by millions of high-school and college-aged students around the world, but only natively supports a two-unit transfer mechanism. Built around a z80 microprocessor executing at 6MHz or 15MHz, it is incapable of participating in modern networks without external supporting hardware, but has sufficient computation power to support a robust network tailored to its strengths and weaknesses. CALCnet 2.2 presents such a protocol, boasting point-to-point and point-to-multipoint communication, asynchronous tranceptions, failure resistance, robustness against noisy channels, and many other features of a reliable and extensible network protocol. The implementation is small, fitting into under 1KB of z80 assembly code, and is shown to perform with superior reliability and at comparable speeds than even existing two-unit transfer protocols.
CALCnet 2.2 is designed to be a feature-complete network protocol for general-purpose communication. The initial flat “local-area” CALCnet 2.2 network was later enhanced with more capability via globalCALCnet (gCn), which permits “bridges” (including computers) to connect local networks of low-resource devices to internet resources. CALCnet can transmit one-to-one messages and one-to-many broadcast messages; it is built to be robust and to maintain correctness in the presence of collisions and noisy channels. The CALCnet 2.2 protocol uses the unique 10-digit ID code of each calculator as a hardware address, analogous to a MAC address; it does not assign anything akin to an IP address to each calculator. Packets are constructed to allow network endpoints other than the intended recipient of a packet to ignore data after the first five bytes, leaving a higher percentage of the CPU time free for other calculation and computation, especially important on low-speed, CPU-constrained devices such as calculators. Because CALCnet2.2 operates as a an asychronous interrupt, a program need only copy an outgoing message to a buffer or occasionally check another buffer for incoming messages rather than wait for a send or receive to complete successfully.
Complete details of the protocol can be found in the CALCnet2.2 Whitepaper linked below.
- CALCnet2.2 Whitepaper
- View a demonstration video of CALCnet2.2 in action.
- Doors CS 7, containing the reference CALCnet 2.2 implementation.
- Using CALCnet 2.2 in z80 assembly programs for the TI-83 Plus and TI-84 Plus.
- Flourish, a tech demo combining the screens of several graphing calculators, demonstrated below.
- NetPong v1.0, a Pong clone across arbitrary many calculators screens, demonstrated below.
- CALCnet 2.2 on Slashdot. globalCALCnet was also later featured on Slashdot.
- CALCnet 2.2 on Hackaday. globalCALCnet was also later featured on Hackaday