TMO Project Log – Introduction
I’d like to introduce my current project called TMO. TMO is (or rather, will be) a handheld electronic game system. It features a 16×16 dot-matrix LED screen, very simple sound (beeps and such), and input via a wheel controller and several buttons. I’m still working on finalizing the design, but this gives the general idea. The name TMO stands for “Teensy (or Tiny) Multifunction Orthogon”. I was inspired to start this project by the character BMO from Adventure Time, and as such I wanted to keep the name similar to note the inspiration.
I’ve made quite a bit of progress to date, but there is still an awful lot to be done. You can see the progress of hardware development on my breadboard to the right. There’s a 6×5 display as well as a wheel controller, single button, and speaker hooked up to the Teensy on my breadboard right now. This is an adequate setup for testing as I write the software but will soon need to be expanded.
I essentially need to write a full-featured operating system to handle all the planned capabilities. Such necessities include driving a display, sound generation, input handling, long-term storage, and a tty terminal interface for testing/debugging/configuration on the fly, and providing an easy to use API for game development. This software is called TMOOS (Teensy Multifunction Orthogon Operating System). You view the source code here on GitHub.
I’ve made a considerable progress on the software so far. The display driver works well but it will need to be modified to work with the final display. Input is working well and is essentially finished. The sound driver needs rewritten for hardware that I have not built yet. Originally I was going to try to use a software frequency generator, but quickly realized this was not feasable for anything other than low frequencies. There is a rudimentary graphics API capable of drawing glyphs via the familiar Bit Blit method as well as various geometric shapes. There is also the skeleton of a Game API that will abstract away system specific methods from game code. The tty interface is a work in progress, and is currently only useful for outputting debug information. There are facilities in the OS to dynamically adjust CPU frequency based on software load, but more testing will need to be done with this to find an optimal configuration. While I am testing the CPU will be locked at 16 Mhz.
There’s still a heaping bunch to be done as far as hardware design and construction is concerned. I need to build the final display board that will control the large LED matrices with shift registers as opposed to being hooked directly to the pins of the Teensy. My current plan for sound is to use a 555 timer chip to output a variable frequency square wave corresponding to a variable voltage sent from the Teensy. This won’t allow for a huge range of frequencies (maybe 150 Hz – 1.5 Khz), but will be adequate for this application. System power still needs designing, but I’m planning on running everything from rechargeable batteries that will be charged by USB or (maybe) solar. Finally, all the hardware will be housed in a nice painted aluminium enclosure.
Progress is slow right now as I’m attending college and working a day job, but I keep things moving when I can. I’ll be posting more logs and probably articles about hardware and software theories of operation as I go.
Update: If you want to follow my progress more closely, you can read the software notes and project (hardware) notes that I ramble in as I’m working.