My main purpose in reassembling my system was to retrieve old software and text from my articles about TI-99 programming which was locked on my old TI old 5.25" diskettes. In the process, I've modified the old adage: "I've forgotten more than I ever knew about TI-99 programming." Unfortunately, I've also discovered that I do not have all of my old original source code, and so I cannot reproduce all of the fancy programming techniques I used to write about. So, let me warn you: if you've stumbled on these pages looking for really good TI stuff, or a lot of sage advice or advanced TI-99 programming, sorry. Even at my best I was often a sledge-hammer programmer. Elegance never was not my strong suit.
But as I do retrieve stuff and make it intelligible, I'll post it here. If there are inactive links below it's because I'm still working on the conversion, assembly or whatever.
Anyway, I start with a new PC utility, initially helped me find and extract these vital texts and executables, and continues to be useful for managing my diskette images.
I never had the skill to write the appropriate low-level disk access routines necessary to read actual TI diskettes on a PC. Besides, Paolo Bagnaresi's TI99-PC program does that and a lot more. But I wanted to work in the Windows GUI, and I wanted to be able to format text files (especially my old 'Companion' files) and extract BASIC code, so I wrote my File and Image Reader, a PC utility to read and convert individual TI files or V9T9 diskette image files (if you're reading this you know what they are) into PC-understandable format.
I revised the program in 2010 and now include the capability of reading CF volume lists and individual diskette images from the CF, formatting individual volumes, and writing images to CF card volumes and vice versa.
The zip file contains the latest executable and the help files, as well as complete source. It's under active development, so be careful. On the other hand, it's totally free (and worth every penny!.)
I used to sell some of this stuff, either directly, or through vendors like Oak Tree Systems. Then I started posting it as 'shareware' up on the old Compuserve forum. Now it's free for the taking, laughing at, using, whatever...
The writer's friend... well, what it did was convert TI-Writer DV80 files into 'Companion' IV254 files, and vice-versa. The program was able to maintain very simple formatting settings and make the files at least readable to the other program. This program was written in Extended Basic, so I present the listing, and the executable. It's not great code but you can use it to 'translate' any 'Companion' docs I post here.
This code was my second most significant project, next to my home budget system. Unlike the budget, this was intended for public consumption. It was not the best or most comprehensive set of 40-column utilities ever written, but it was free and largely original. Not that there is more than one way to write a VWTR instruction, but original in the sense that I didn't just take someone else's complete system and copy it to mine; I created my own code using snippets from everywhere, but using my own calling syntax and general 'architecture.'I also created it and distributed it in multiple forms. First I built a version which supported plain BASIC using the Mini-Memory or the Editor-Assembly package, then I converted the stuff for Extended BASIC support.
100 CALL INIT
110 CALL LOAD(28706,0,0,0,0,0,0,0,0)
120 CALL LOAD("DSK1.MTXT40:O")
130 CALL LOAD(28706,160,0,255,224,32,0,63,255)
Here's an original ad letter for the MiniMem version:
February 27, 1985
P.O. Box 1343
Round Rock TX
78680 Dear Editor,
I would like you to insert the text below as a classified ad in the next issue of MICROpendium.
TURN YOUR MINI-MEM INTO A 40-COLUMN CARD!
17 machine-language utilities load into the MINI-MEM allowing complete access to 40-column text mode. No other hardware needed! Display and keyboard input routines emulate PRINT, DISPLAY AT, INPUT, ACCEPT AT, plus three selective screen scrolls, alternate character set, inverse video, more. Cassette only. $12.95 includes shipping and documentation. NEW! Machine Language graphics dumps for OKIDATA printers! Disk only. Just $10.95 includes shipping and documentation, and bonus utility that works with Extended Basic. (MA residents add 5% sales tax). R. G. Minutillo, 74 Hawthorne St. Roslindale MA 02131.
I count 94 words @$.20 and have included
$18.80 as payment. If you have catagories include my ad under 'software' if
The letter and the ad were about the last MiniMem version I produced before selling my TI. It code itself is slick and fairly bug-free. I'm not sure what version I saved on my backup diskettes, but it seems to work, and in any case, I include the source if you want to perfect it. Lately, there has been a list compiled of 'Landmark Programs' for the TI, and this MiniMem version of the 40-column utilities made the list! So how come I only sold 12 copies?
Interestingly, the product competed with (and undercut in price) the Display Enhancement Package, sold by Oak Tree Systems, which was the vendor for another program of mine, a French language vocabulary drill I wrote for my friend Dorothy.
Although the '40-Column Pack' was originally sold in cassette format (designed for mini-memory, remember) I've assembled the object code, source and a slightly older version of the documentation onto a V9T9 format virtual diskette. I also post the actual executable as a separate DF80 file, my own versions of CHARA1 and CHARA2 alternate character sets, and the V9T9 diskette image.
I have had more than my usual quanta of fun and frustration recreating the source of the Extended BASIC version of these utilities.
The source code for the Extended BASIC version was the most significant block of code that was 'lost' when I started this reconstruction effort. In fact, for a while, I couldn't even lay my hands on a working version of the object code. I was anxious about this because a lot of my later programming was in Extended BASIC and depended on the availability of these utilities. They used to exist in several forms, including a specialized form permanently loadable via a simple CALL in the personalized version of Extended BASIC which I had built for my GRAM-KRACKER™,... but that's another story.
After some digging around in the FTP archives at WHTECH I found one version of the old object code in the Compuserve archives. This is not the version I originally posted in the DL4 library (by this point I was out of the 'shareware' market.) The version I found had been posted because someone else had written their own household budget system that used my utilities! (That's actually a pretty neat thing, that someone else found my stuff useful and built other code around it. In fact, I have a vague memory of getting an email from that guy long after I had sold off my TI system. He was looking for the source code. Ironic!)
So here's that XBasic package in object file format.
The calling syntax for this version is 'similar' to the mini-mem version, but different. Here are some of the syntax rules that I found in one of my old files. Note especially the added
and the additional 'count' parameters in the scrolling routines. While the brackets make it look like some of the parameters are optional, and perhaps in later versions they were, here in the 'standard' version they are not. Also note that while this ancient text lists three specialized screen dumps for Okidata printers, they are in fact not in the 'standard' version, although they did appear to make it into the GK version. The standard ascii DUMP is present in the standard version, however, and does work (to PIO only).
("TEXT") (graphics mode only)
("RETURN") (text mode only)
("OKDMP") ("OKDMPS") ("OKDMPD")
Also note that there are no routines to load and unload those custom character sets. The Gram Kracker had made those routines obsolete, since I had rewritten GROM 0 to use my lovely (and highly idiosyncratic) character set full time. Furthermore, my GK modified Extended Basic had new CALLS to load the 'large' character set from the console's main screen, and of course I had modified that character set as well. But I digress...
To help re-create the source for this project I loaded up the object file I had found in the Compuserve archives and then ran an Extended BASIC disassembly program, capturing the output in a text file. I studied the disassembly and matched up sections of the Mini-Mem version source code, including variables. They actually matched up pretty well, although the sequence was a bit jumbled because I had moved variables, buffers and code around to maximize the 'left-over' memory space available in my modified Extended BASIC. Also I had needed to add a GPLLNK and a DSRLNK routine, which were otherwise unavailable to assembly language routines in Extended BASIC. I had multiple versions of these utility routines, and found two that matched the disassembly almost perfectly. The GPLLNK was an exact match, and the DSRLNK was very close to Wes Johnson's version from his TI-Keys program, another old favorite of mine.
Anyway, it took several passes before I caught all of the code differences, and all of the typos I had introduced along the way, but I finally was able to produce an assembled object code listing that matched the disassembled original almost line for line, and more importantly, that worked! Of course, it wasn't quite a perfect match: I had found at least one obvious section of code in the original that I had written twice, once as an internal routine called with a BL command and once as an external routine called with CALL LINK. It wasn't much, but I couldn't bear the thought of leaving the duplicate code in place, so for the 'redux' version I changed the external routine to simply call the internal routine, and in the process, saved a few bytes, enough to reduce the 'sector size' of the object code from 63 sectors to 62.
The only other change I made was correction of a bug I noticed which called the wrong exit in a small error-checking routine in one of the scrollers. (That's what I get for error-checking!) Actually, all of those scroller routines could use a bit of tightening. even though they do 'work as designed.'
After I produced the first 'facsimile' version, I quickly did some more minor clean up work, introducing a much neater and shorter version of DSRLNK and a more reliable but slightly longer GPLLNK, removing some unused buffers and variable spaces, and removing six bytes of extraneous code from the 'return to extended basic' subroutine. Six Bytes! A stupid exercise, maybe, but a genuinely moving reminder of why it was so rewarding to program for the TI. Saving six bytes, or one 256 byte diskette sector, or a couple of milliseconds of execution time, could be a meaningful goal, and a real achievement.
I've still got more clean-up to do, but I present here a diskette image which contains the original object code and the recreated source (all called XB40:xxx.) I also include the current state (as of 1/1/04) of the slightly more refined version, called X40:xxx. There is also a copy of a new demo, XB2004TEST, and a copy of SYSTEX, in case you actually want to use any of this! This is another V9T9 format image file, but it is 1440 sectors (DSDD). I also offer separately both new versions of the object code:
Someday I'll tackle the disassembly of the old OKIDATA dumps in the GK version, and maybe I'll try to (re)create those optional parameters which (perhaps) used to exist. (I could also put in a lot more sophisticated error checking, but that's not really my bag...) [N.B. it's now 2008, four years on, and I haven't done either...]
I was hot for FORTH once: I was intrigued by the 64 column editor in the TI version and by the relatively easy access to machine resources. These days I realize that FORTH is pretty much doomed to be a system-control language because of its limited approach to I/O and data storage: you would have to graft on a file system for true data and document portability.
Anyway, in my heyday, I made up a customized master FORTH diskette that included a lot of fairly standard modifications including using a double-sided diskettes for more storage, changing the screen dump routines to PIO, and preloading editors, etc. The main content of this original disk, and my main FORTH project, was a game called The BlueBird of Happiness. To run the game you boot the diskette and the execute a
The game exit isn't especially clean, and the game itself is one of my typical goofy efforts, although it uses rather fancy bitmap graphics. In any event, I present an image of the V9T9 double-sided diskette below.
I mention on one of the other pages a short rather abstract musical number I programmed on the TI. I also wrote the usual simple and stupid games as I was learning the system, and some slightly more sophisticated that I liked and played a lot, which says something about me, I guess. None of these are very fancy or earth shattering, but I have made a diskette image which collects them. The diskette includes a couple which may or not be my work, all or in part, but read the text file below for further true confessions.
I'll include my latest CATALOG program that offers multiple output options, including RS232 for text capture, and special 'label' formatting for HP and Okidata printers. That diskette will coming soon, I promise... (but don't hold your breath.)
I alluded to the story of how I adapted my Extended BASIC 40-column routines for the Gram Gracker. Here's the full story in two formats: text extracted from the original source with my TIFiles utility and hand-converted to HTML, and the original file stand-alone, with a TIFILES header and a sanitized PC filename. This was posted on Compuserve, and that's my old (old) Compuserve ID at he end.
I loved the mini-memory and wrote this short piece about using the minimem POKEV call instead of assembly language. I don't know if it was ever published except on Compuserve; can't remember. Same deal as the GPL article: a link to cleaned up text converted to HTML and a link to the original file, in this case in 'companion' format.
I was obsessed with inverse video and wanted to use it in my programming. I was also into FORTH, and so I eventually wrote this short piece which was published in a FORTH Dimensions March/April 1987 issue.
[Note from 2008: I recently jumped back into FORTH, and while searching through available documentation, I found two different tutorials which, to my horror, provided three different and better ways of achieving inverse video. Good thing the editors of FORTH Dimensions didn't realize those other articles existed. Anyway, these tutorials are presented below.]
Just some stuff I've assembled and put into OpenOffice format for easier printing, reading, editing, etc. None of this is original and all original copyrights are retained.
The TI FORTH Manual The original manual edited into a single volume.
George L. Smyth's FORTH Tutorial Collected and combined into a single document
Lutz Winkler's FORTH Tutorial.odt Yes, I was obsessed with FORTH documentation for a while
Lotus 1-2-3 Formats Not really relevant to the TI, but I do use the original Lotus 1-2-3 file format for fast and effective data exchange.