[InDev] jsTIfied, a Javascript TI-83+ Emulator
Published by KermMartian 12 years, 1 month ago (2012-01-24T20:31:54+00:00) | Discuss this article

For many years, perhaps since I first designed the fledgling version of SourceCoder 2.5, I have wanted to make a Javascript graphing calculator emulator. SourceCoder has a keypad that lets you enter tokens and symbols into its editor, but imagine if you could have a real calculator emulator right on the page to test your programs! Imagine if you could do BASIC development and testing online without having to touch an offline emulator or real calculator! This was my dream, but a combination of limited technology, limited experience, and legal hurdles restricted me from following through.

No longer.

First, the legal hurdles. It is illegal to distribute ROM images, so I couldn't make an emulator with a ROM image hosted on Cemetech. I couldn't even let people upload their own ROM images, or in any way let ROM images touch the Cemetech server. HTML 5 offers a solution to this conundrum in the form of what is called DOM Storage. Cemetech gives the javascript for my z80 core to clients, and they load their (legal, I hope) ROM image from their own personal calculator into their browser, but still entirely client-side. No ROMs are distributed in any form.

Second, the technical hurdles. The canvas element of HTML4/5 is powerful and fast enough to be manipulated and display a smooth image of a calculator screen in real-time. Modern computers and modern Javascript implementations are fast enough to run the massive code required for an emulated 6MHz CPU at faster than realtime. In addition, tools such as Google's Closure Compiler exist to optimize and compress Javascript for speed and size.

In a total of about four days separated by two months, I have put together jsTIfied, pronounced "justified", a Javasdript TI-83+ emulator. It is not ready for any public testing or release, and thus is sitting happily offline and not anywhere on Cemetech, but I'm proud to announce that it is fully-functional. As you can see from the screenshots below, I can do math, run applications, and I assure you, almost everything else an emulator such as PindurTI can do. Indeed, I owe a debt of thanks to Gergely Patai (or Patai Gergely), the author of the original PindurTI, for swathes of C code that I studied for jsTIfied, and for the key layout that I used for jsTIfied. In homage to PindurTI, I made the appearance resemble that much-loved emulator. I also owe thanks to JSSpeccy, a Javascript ZX Spectrum emulator that heavily contributed to my understanding of emulating a z80 processor, and some segments of code from which found their way into jsTIfied, especially in helping me to wrap my head around emulating interrupts.

I have great plans for jsTIfied, including letting you somehow test programs from the archives, run SourceCoder projects, and much more straight from your browser. Before that can happen, there are plenty of tweaks and changes for smoothness to be made and features to be added, so for now, enjoy the screenshots below!