foreword

As a professional computer software developer, I can tell you that some of the greatest programmers start with the simplest of hardware and the most fervent determination.

Mastering a small computer system (such as the Texas Instruments graphing calculator) not only feels fantastic, but also teaches core programming concepts and solidifies ways of thinking that mediocre programmers seldom grasp. I have been in the TI graphing calculator community for well over a decade, as has Christopher (known among us as “Kerm Martian”). Throughout that time we have watched each other’s humble beginnings, been amazed as our successful (and at times overly ambitious) projects flourished, and even watched others learn from us. I can think of no one more capable of teaching the basics of programming the TI-83 Plus series graphing calculators, and ensuring you have fun along the way, than Christopher “Kerm Martian” Mitchell.

My own fascination with graphing calculators, and particularly the TI-83 and TI-84 Plus series, began in the late 1990s, when only cripplingly slow dial-up and mailing lists bound us together. The TI-GRAPH LINK cable allowing connection between a computer and a graphing calculator had only recently made its debut, eliminating the need to painstakingly hand-type TI-BASIC games and utilities. At the time, I thought the program editor was merely for typing notes. It wasn’t until I discovered the programming chapter of the thick, cryptic TI-83 manual that I realized it could do so much more.

I spent many days reading the entire manual over and over, striving to understand every command I could execute from within a TI-BASIC program. I became enamored with the concept of taking a limited set of instructions and transforming the calculator into anything I could imagine. Before I knew it, I was spending 7th grade math class happily playing my own random number guessing game while others struggled to stay awake at their desks. The idea of sculpting complex applications (and let’s face it, games) in my own mind and then pouring them out onto the calculator keys captivated me and pulled me into the world of software development.

Once I had mastered TI-BASIC, my curiosity did not cease. How does TI-BASIC work? What happens when the calculator executes a TI-BASIC command? What happens behind the scenes? How does the calculator know how to display graphs, or what to do when a key is pressed or a menu item chosen? I discovered that the answers lay within a mysterious second programming language that was all the rage—assembly language. This language consists of the raw instructions that the calculator’s processor executes; it was used to write the calculator’s OS and the interpreter that makes TI-BASIC possible.

For years, programmers had been writing in assembly language to create programs even more powerful and flexible than what TI-BASIC allowed. To share in the fun and understand all of the TI-83 Plus’ inner workings, I knew I had to learn it. From that moment on, I made it my goal to learn everything there was to learn about the underlying software that makes the TI-83 Plus series tick. Even after years of reverse engineering the OS (and, on occasion, exploiting some of its more interesting security vulnerabilities), it remains an elusive goal.

For as long as I can remember, Christopher (or Kerm) has humbly granted himself the title of “world’s most prolific calculator programmer,” which as it turns out, is a well-deserved description. Despite TI-BASIC’s reputation as a relatively limited language compared to the calculator’s native assembly language, Christopher started cranking out programs soon after learning it and has never stopped—from TI-BASIC to assembly programs to FLASH applications.

Christopher’s crowning achievement in the world of programming TI-83 Plus applications is Doors CS, a powerful, versatile calculator shell (a program that provides a user interface for running other programs). I can still recall the first version of Doors CS, written in pure TI-BASIC and requiring tedious manual configuration to overcome some (but not all) of TI-BASIC’s shortcomings. As a calculator shell requires total access to the calculator’s memory and the variables contained within for management and execution of programs, TI-BASIC is not a language conducive to producing a great shell. Despite this and a bit of negative criticism, Christopher persevered and strove to improve upon it no matter the cost, eventually implementing it in assembly language and adding many useful features and tight integration with the TI operating system. Some of my favorite memories are of staying up very late at night (and into the early morning) with Christopher, reverse engineering some of the more mysterious parts of the OS to diagnose lingering issues in Doors CS’ interaction with existing calculator functionality.

Today, Christopher has produced one of the community’s leading shells, software to allow using a calculator over the internet for chatting and playing calculator games with others, and other projects too numerous to mention. Cemetech.net has evolved from his personal website into a haven for anyone interested in programming TI graphing calculators or receiving help in doing so.

Some of the greatest members of the calculator community—longtime developers like Dan Englender, Michael Vincent, Benjamin Moody, and countless others—made calculator programming the great learning experience and joy it is for so many, and it is safe to say that Christopher stands with them.

I have no doubt that Christopher’s unique understanding of the TI-83 Plus series, the TI-BASIC language, and all that lies beyond will prove to be a valuable asset as you go through this book. It will teach you all there is to know about TI-BASIC, assembly language, and everything in between. And it will help you explore the wonder and awe that can be found in calculator programming.

Enjoy!

Brandon Wilson
Senior Software Developer
Advanced Call Center Technologies (ACT)