That TRS Jack On Your Graphing Calculator Does More Than You Think

It’s not Apple IIs, and it’s not Raspberry Pis. The most important computing platform for teaching kids programming is the Texas Instruments graphing calculator. These things have been around in one form or another for almost three decades, and for a lot of budding hackers out there, this was the first computer they owned and had complete access to.

As hacking graphing calculators is a favorite for Maker Faires, we were pleased to see Cemetech make it out to this year’s World Maker Faire in New York last weekend. They’re the main driving force behind turning these pocket computers with truly terrible displays into usable computing platforms.

As you would expect from any booth, Cemetech brought out the goods demonstrating exactly what a graphing calculator can do. The most impressive, at least from a soldering standpoint, is their LED cube controlled by a graphing calculator. The electronics are simple, and just a few 595s and transistors, but this LED cube is taking serial data directly from the link cable on a graphing calculator. Of course, the PCB for the LED cube is designed as an Arduino shield for ease of prototyping, but make no mistake: this is an LED cube controlled by a calculator.

If you can send serial data to a shift register from a graphing calculator, that means you can send serial data to anything, bringing us to Cemetech’s next great build featured this year. It’s an N-gauge model train, with complete control over the locomotive.

There’s a lot more to controlling model trains these days than simply connecting a big ‘ol variac to the tracks. This setup uses Direct Cab Control (DCC), a system that modulates commands for locomotives while still providing 12-15V to the tracks. There’s a good Arduino library, and when you have that, you can easily port it to a graphing calculator.

Cemetech is one of the perennial favorites at Maker Faire, and over the years we’ve seen everything from the Ultimate TI-83+ sporting an RGB backlight and a PS/2 port to a game of graphing calculator Whac-A-Mole. It’s all a great example of what you can do with the programmable computer every 90s kid had, and an introduction to computer programming education, something Cemetech is really pushing out there with some hard work.

28 thoughts on “That TRS Jack On Your Graphing Calculator Does More Than You Think

  1. The TI-83 and -84 were the first glimmer of hope, that hobbyist computing would be back, after 16- and 32-bit virtual machines, MacOS, and Windows raised the barrier of entry on desktop computers in the late 80s, displacing and obsoleting the easy-to-interface 8-bit machines. These calculators had several very important features:
    1) A Z-80 based CPU, which was well documented and well supported in the hobby world.
    2) The ability to embed machine code into user programs (much like most versions of BASIC on 1st-gen 8-bit machines had).
    3) That very serial port that’s the subject of this article.
    4) a 128 x 96 pixel bitmapped display.
    5) Amazing battery life from 4 AA cells, thanks to CMOS circuitry and the non-backlit display, making portable computing highly practical.

    1. I grew up in the 80s and I don’t understand what you mean.

      I had an 8088 based Tandy with BASIC. I didn’t learn machine code but there were books about it at the library so the option was certainly available. I used to copy reader-submitted BASIC programs out of magazines and many if not most of them used a whole lot of PEEK and POKE so I guess someone was an x86 machine code hobbyist! I also read a lot of Popular Electronics and gadgets controlled by bitbang from a PC’s parallel port were not uncommon builds.

      The only thing I really thought was missing was an affordable compiler and/or assembler so that we could go beyond interpreted BASIC and make actual native executables. To me they were all priced for professionals only but maybe they just weren’t priced for children. In some earlier era were free or cheap assemblers/compilers a thing?

      Maybe in an earlier era you had some computer club or BBS where people helped one another get started entering machine code into Z80s by toggling switches or something like that. You have to keep in mind though, those clubs only existed in a few big cities. You were in a lucky minority to have that resource available to you. BBSs weren’t much better. Do you remember long distance charges? I was so jealous of people with local BBSs available. I wasn’t even allowed to have a modem as my parents were afraid that if I did I would rack up some huge telephone bill.

      The early 90s I guess were pretty crappy as there wasn’t much of a hobbyist-priced programming environment for Windows and QBASIC was getting very dated. That was a pretty short time though because then we had Linux, GCC and the internet. Kids these days have no idea how good they have it!

      1. That’s the thing. 8088 was okay, even 80286 was okay. But as soon as the ‘386 came out, all of the OSs switched to protected memory, and PEEK, POKE, and direct access to peripherals by programs went away, because these were all protected resources, owned by the operating system. This was why Microsoft stopped supporting GW-Basic and QBasic. Visual Basic was their answer, but this had a huge learning curve, compared with the text-based BASICs, and wasn’t included with Windows. There were very few consumer platforms that continued to use the older chips that you could easily hack, but the TI calculators were some of the few exceptions.

        1. Still, you can run code for the older systems, and even write code intended for an 8086 with plain VGA and whatever else, and it’ll run fine. Windows just emulates it. If you’re sticking to the old, super-standard stuff, it goes fine.

          I dunno about Windows 10, fortunately, but I bet if you can get the EXE for Qbasic, it’ll run. If it won’t, I bet it will under DOSBOX. Plus there’s also free compilers around for C, Java, and whatever else, that previously cost a shitload. Visual Basic isn’t too hard to pick up, and you can get quite complicated stuff done with it, without too much practice. It’s intended purpose seems to be a way of making front-ends for the database etc engines that do the real work, and for connecting modules together. It’s software glue logic. For a lot of applications, particularly niche stuff for particular lines of business, you could run your, eg, taxi office, from a VB program with a proper database behind it.

          You can also do stuff like interface an IBM Z-whatever system to a million-pound automatic cloth-dying system, say, whose drivers and software exist only for Windows. Script up a bit of stuff to talk to the IBM through whichever ODBC or SQL interface is relevant, then spit that at your big machine through whatever API it exposes. That’s what VB is for, scripting.

          Admittedly yeah, it’s ugly as shit.

          It’s learning curve? I dunno. Probably I wouldn’t want to learn programming from scratch on it, it wouldn’t be the best language. What is though? No flipping idea! I dunno, COBOL is nice and straightforward.

          The problem with learners, is, simple 8-bit machines with single-tasking BASIC interpreters built-in don’t exist any more. That was as important as the language.

          It’s a shame there isn’t some platform that lets you knock up simple 2D platform / puzzle / etc games on modern machines with a bit of BASIC. Like STOS or AMOS on the Atari ST and Amiga. They were traditional BASIC syntax and grammar, with sprites and music just built-in, seamlessly, with BASIC commands.

          Teaching programming doesn’t have to be as stupidly over-simplified as plugging frigging jigsaw pieces together. We’re not dealing with people who can barely read and write. Requiring actual typing isn’t too much to ask from children, or other learners.

          Apparently there were some “code camps” for American kids using Java, last I heard. Maybe that’ll do, again it has enough nice abstraction around the stuff that moves bitmaps, AKA sprites, about, as well as sound. And the grammar isn’t too awful, though there’s still a full 3 different types of bracket needed. Those curly brackets have a mental encapsulation function, as well as one for the compiler.

          1. “Still, you can run code for the older systems, and even write code intended for an 8086 with plain VGA and whatever else, and it’ll run fine.”
            No. Not only is this true, it’s not even possible. If the code requires access to the whole memory map, or direct access to peripheral registers, then it just flat CAN’T work on a protected memory CPU running under an operating system. The best you can hope for is that you could write an emulator for the hardware, that can provide whatever functions of the peripherals happen to be exposed by their device drivers. User-layer programming at the register level is BY DESIGN not possible with modern computers. You can argue that it’s for the best, but you really can’t make a case that there’s always a way to do this.

            “Script up a bit of stuff to talk to the IBM through whichever ODBC or SQL interface is relevant, then spit that at your big machine through whatever API it exposes.”
            You’re pretty much making my point for me. OBDC? SQL? Would you throw these at a beginner?

            “The problem with learners, is, simple 8-bit machines with single-tasking BASIC interpreters built-in don’t exist any more. That was as important as the language.”
            Yes. That WAS my point. This is why it was a breath of fresh air, seeing platforms in the 1990s that used old-style architectures. This is also the reason that Atmel and Microchip processors are so popular today, even in the presence of much higher-performing ARMs. For single-user machines, protected memory CPUs are just a pain.

            “Maybe in an earlier era you had some computer club or BBS where people helped one another get started entering machine code into Z80s by toggling switches or something like that. You have to keep in mind though, those clubs only existed in a few big cities. You were in a lucky minority to have that resource available to you. BBSs weren’t much better.”
            I did NOT have that resource. My first computer I built with a Z-80 MPU, 6 kB of static RAM, an MSI TTL counter chain implementing a bitmapped graphics display, and yes, a panel of toggle switches and LEDs with which I loaded the programs I assembled by hand. All of this was much easier than my later experiences with learning Windows programming.

            “Teaching programming doesn’t have to be as stupidly over-simplified as plugging frigging jigsaw pieces together. We’re not dealing with people who can barely read and write. Requiring actual typing isn’t too much to ask from children, or other learners.”
            I’m with you 110% on this one. I think that visual-interface programming systems were developed for the people buying stuff for schools, who themselves don’t have a clue about programming. I think anybody with any aptitude at all for creating software would get tired of these in about a week.

          2. Old-style code, that expects direct hardware access runs fine under modern OSes. The OS just emulates it. Fortunately most of the old code was written for much slower computers, so even with the emulation overhead it will generally run much faster on a modern machine.

            There’s some universal theory somewhere about a program not being able to know the difference between running on real hardware or emulated.

            It would be a very weird program that expects 8086-style direct access to the I/O and memory map, but also needed the full performance of a modern CPU. So it’s fine. The old stuff is emulated, to the point where it can’t tell the difference. There just wasn’t that much stuff back then in the hardware, so emulating it isn’t hard. Particularly PC stuff where things are nice and flat and orthogonal. New stuff is written for the modern era so that’s fine too.

            Even the BIOS, or whatever it’s called now, of a modern PC, has it’s own USB stack that can present USB storage as old-fashioned stuff that DOS could recognise. Since backward-compatibility is the entire and only reason we even use these shitty computers, it’s something that a lot of work’s been put into. It’s all there, and it has been all along, every time the PC has moved past some sticking point of the past, emulation has been slid in to allow all the old stuff to keep running transparently.

            No program requires real actual-bare-metal access to a computer. That’s partly what all this cloud bollocks is about (also hype). The emulation has come in from both ends, for software at one end, and allowing things like USB parallel ports to function like real ones from the other. Program sends an OUT, whatever, and instead of triggering some pins on a Centronics connector, it gets trapped, routed through the printer driver, possibly across the whole Internet for all anyone cares, and comes out in a lovely modern way while your 1986 software cheerfully feeds it in the old way.

            Anyway. Further on the thing about bloody jigsaw-programming, you’ve hit the nail on the head. The problem is teachers. AKA “those who can’t”. Often they’re years behind the real world, while their pupils have no problem at all understanding stuff the teachers are just too hidebound or lazy to get their heads around.

            The Micro-Bit thing is sort of nice, but IMO useless, because it’s electronics, not computing. It’s only any real use when it’s interfaced to things, it’s a microcontroller, not a computer. A proper lesson’s use would involve a soldering iron, or at least a breadboard.

            Kids need something a lot like the Spectrum or Atari ST. Where they can write little games. It would be very rewarding, and the sort of thing where some kids help the others, groups form, ideas are shared, etc. Maybe something like a tablet + keyboard is a way of doing it. Better, something to let kids write games for their own phones. Just needs something like BASIC, indeed actual BASIC, with the graphics and sound stuff available as commands like any other. Keep it relatively unsophisticated. No fucking pointers! Static typing, for numbers and strings. No bloody bytes or words either!

            Maybe they could start programming with one big game loop, then move onto a little scheduler, or independent objects with their own code, later.

            The ZX Spectrum is largely why the UK punches well above it’s weight in games software production even 35 years later. The other 8-bits too, but I think Sinclair deserves the biggest share of the credit. Our games industry makes the UK billions of quid, it’s very significant and certainly worth investing in.

            Besides all that, there’s the benefit in general of having a populace who understand logic, necessary implication, all the rest. Learning programming can make a person smarter in general, certainly in logical faculties, and I think it’s fair to say the world needs logical thinkers more than ever. It’s a preferable fate to a nation of bellythinkers queueing up to plead their fate with Simon Cowell.

          3. Well, I was responding to your example of making “old style” programs run on virtual machines, but that really wasn’t my point. My point was that non-memory-protected CPUs are both easier to understand and simpler to interface with the real world. I can see your points if you value only computing using keyboards, mice, and display screens, but when it comes to hacking, the object is often to manipulate real world things, and to control computing from real world quantities, and this is where 8-bit machines (and modern microcontrollers) excel.

            But as for real applications using PCs, the worst case I’ve seen is LinuxCNC, which attempts to do things in machine control that are beyond the limits of Atmel-based Marlin or other GRBL controllers. The bad news is, it does this using a parallel port, because that’s the only (reasonably) high-speed interface with determinate timing available on PCs. Which means, you have to find a PC old enough to come with a real parallel port, because USB parallel ports WILL cause your tool to smash into solid things. So yeah, that’s an example of where emulation doesn’t actually work. And I think you’re talking about “Turing-complete” machines: Alan Turing’s premise was that you can emulate any logically-complete computer on any other logically-complete computer, such that you can’t tell which one is being used. Oh. As long as the one you’re doing the emulating on has both infinite memory and infinite speed. Because it was just a thought exercise.

            Anyway, now I’m thinking that a TI-93 might be a great device for running a CNC machine!

            I think that learning programming (and logic in general) can limit you socially, though. There’s a sign on the transit buses here in Portland: “In priority seating, you must give up your seat for elderly or handicapped persons,” or something very close to that. It bugs me every time I see it: it makes no allowance for elderly or handicapped persons – it implies that they also (“you” not being exclusive to young and fully-able persons) must give up their seat for some other elderly or handicapped person. I’m getting close to their definition of “elderly”, so I’m starting to worry.

    1. Yes, and therein lies the problem – instead of teachers teaching the use of technology to solve really complicated problems, they are teaching pencil and paper techniques that apply only to a very limited set of simple problems. All of the math that needs to be memorized and worked without technology should be taught in the first three or four grades, for example, adding, subtracting, the multiplication tables, and fractions. Starting in about the 5th grade technology needs to be introduced, with emphasis on how to set up problems using algebraic concepts. Then, as the student progresses through the grades, more and more emphasis can be placed actually applying what has been learned to real-world problems.

  2. So I do want to point out @Brian Benchoff that the code running the trains is not ported from an arduino library at all actually. I never even looked at the C code for it. It’s a completely custom implementation written in z80 asm based of the NMRA documentation available here https://www.nmra.org/index-nmra-standards-and-recommended-practices
    So while there are very functional arduino libraries available to do this it had no bearing on the design and implementation of the software in this project.

  3. ” They’re the main driving force behind turning these pocket computers with truly terrible displays into usable computing platforms.”

    If memory serves, back in the day, the TIs did have labs that could plug into that port.

    1. They still do. And some schools even still use them! They are quite fun to play with in a school setting as well as just tinkering with. We did not have it running this year but we have an arduino library that works somewhat similar to the CBL 2 hardware you are most likely thinking of. ArTICL exposes linking routines from the arduino to the calculator to allow sending of aggregated data to the calculator. The Wack-A-Mole demo linked above is a good example of what it can do!

  4. This brings back memories…

    Back in… I’d say 1997-2000 or so, i used to offer my services online to perform mods to those old graphing calculators. Overclocking switches, LED and EL backlights, memory expansion, speakers… I remember playing a game demo called Daedalus on my TI-85. It was a greyscale Wolfenstein style shooter. Of course, memory limitations meant you couldn’t load much at a time, generally just a single level, but with a CPU overclock, it ran fast enough to be an impressive demonstration of what those machines could do.

    Some games supported sound via the serial port. Most was 1 bit sound, but very few games supported 2 bit sound. Also using the serial port, was the flash memory expansion. It worked sorta like an external drive, with an app to receive the directory and to send and receive files. It used a very early 2 wire serial 512 K or 1 MB flash memory chip.

    1. Whoa, I thought your name looked familiar… is this you?
      http://richfiles.solarbotics.net/

      I remember reading your site back in ~1998 or so when I first got my TI-83. You had the coolest hacks… actually tried a few and being inexperienced, none worked. DIY serial link? Never connected, got the Graphlink for Christmas instead. TI-83 Turbo – never worked, probably installed wrong (did you sell capacitors by mail? I think I still have the one you sold me!) Backlight mod – broke a screen trying to re-assemble it, ended up swiping a school calculator and exchanging the guts with mine, then sneaking it back in! My dad stopped me from trying to add SPinTerface. It looked cool as hell though.

      1. Yah, that was me.
        TI-82/83 were more finicky with the RC oscillator that set the clock frequency. TI-85/86 were downright easy.
        I did have a stockpile of screens back then… man it was nerve-wracking to install those backlights! I DID have to dip into my reserve at least twice. That was NEVER fun. made enough money doing those upgrades to but a nice multimeter and one of ever TI graphing model (besides the ones I didn’t already have). Also paid for some N scale model railroad stuff and more tools. Once college started, It was hard to dedicate the time to it anymore.

  5. And I was there at the booth. I described for our host over there, why I obtained one. On the original discussion for the BASIC Stamp an individual bemoaned having both a TI83Plus and a Stamp2 and wondered how to connect them. A fellow provided those routines royalty free. I had mine translated to Stamp1 and typically use them to confirm that the whole business works.

    Besides the robot builders that booth attracted the majority. Oh and so did the Costumers.

    Oh and Brian the trio wants to know when they’ll be encountering Mike again……

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.