I’ve really enjoyed reading all of the stories on the stories page, so I thought I would send in mine….
|
When the TRS-80 hit the scene in 1977, I was in junior high school. I had already had some access to computers and BASIC programming – our school had three ASR-33 Teletypes, that we could use to dial up to an HP minicomputer at the School District headquarters, at a blazing 110 baud, with most programs saved and loaded to/from paper tape…. I had gotten seriously into programming on the HP’s. Spent many hours each week sitting in front of those ASR-33′s, dialed up – skipped lunch hours, stayed after school, came in early before school started – I was clearly hooked. But the TRS-80, and other microcomputers, seemed a quantum leap to me; you could have your own machine, and you could do graphics and all instead of this “hardcopy-only” output thing. On weekends, I would often go to the mall, and spend time playing with the TRS-80 in Radio Shack, until the salespeople would kick me out …
|
Of course, the TRS-80 wasn’t the only microcomputer in my life. The local Heathkit store had the H-8, which seemed pretty cool (and sometime later – don’t remember when – the H-11A came along, which was a Heathkit repackaging of the DEC LSI-11/2). But the H-8 was fairly expensive, especially considering all the extra stuff you needed to buy in order to make it useful, and you had to assemble it yourself, which I didn’t want to do if I could avoid it. The one I really wanted, though, was this thing I’d seen in some of the computer magazines called an Ohio Scientific Challenger C1P. It was less expensive than the others, you could hook it up to an ordinary TV for display, and *gasp* it could do COLOR! That was what I wanted.
|
I spent months and months of begging, whining, pouting, and generally being annoying, in an attempt to get my parents to buy me a C1P as a junior high school graduation present. They didn’t want to do it, because they were convinced that I’d play with it for a few days, and then put it aside and never use it again. But I managed to be miserable enough that they finally agreed to get me a computer of my own, but there was one catch – they would not get me the C1P, because we could only get it by mail order; they wanted to get something from a store, so they had a place they could easily return it to if it arrived DOA, or bring it in for repairs if that were ever necessary.
|
So, they asked if I would be happy with a TRS-80 instead. I somewhat reluctantly agreed – I *really* wanted the color graphics of the C1P, but I realized I probably wouldn’t get anything at all if I held out for the Challenger. So shortly after the last day of my last year of junior high school, we went to Radio Shack and bought a TRS-80. Neither my parents nor I could have anticipated the kind of impact that black and silver/gray box would have on the rest of my life …
|
I tore the boxes open when we got home, and put it together; the desk in my bedroom was already cleared off, and the computer was set up on the desk, where it stayed for many years. It was a very baseline configuration – Level II BASIC, 4K RAM, no Expansion Interface, no printer, no modem, only the cassette tape for program storage. Except for the RAM, it would remain in that configuration for as long as I had it. As for software, I got the Casino Games Pack with it, as well as Invasion Force. For the next year, saved up my lunch money, and bought just about everything Radio Shack offered that would run in 4K – various adventure games, Microchess, Eliza, and others – and, of course, T-Bug. Just about every day after school, I would come home, turn on the TRS-80, load something from cassette (maybe a commercial program, maybe one of my own), and hack around with it until dinner time – and then come back and continue hacking after dinner, until either I went to bed, or until something came on TV that I wanted to watch (which was rare….). Many times I’d even skip dinner – I had been a chubby teenager, but I started to lose weight pretty quick after I got the computer.
|
After a while, I started to take a real interest in Z80 machine language programming – I already knew something about 8080 machine language before I had even gotten the TRS-80, and I too had Barden’s Z80 book, and the small Mostek Z80 instruction set reference (which came with T-Bug, I think?). All of my early attempts were hand-assembled with paper and pencil, and poked in manually with T-Bug. Eventually, I learned the art of writing position independent code, and would have my hand-assembled programs in DATA statements in a BASIC program, allocate up a string constant, and loop over the opcodes in the DATA statements, POKEing them one by one into the space that was allocated for the sting constant (where I could get to them by just taking the VARPTR address of the string and POKEing it into the USR() function vector – a trick I learned from somewhere, I forget where … much easier than having to reserve high memory at the MEMORY SIZE? prompt). But that all got pretty old after a while – hand assembling code was fun for a bit, but eventually I wanted the Editor/Assembler – and that meant upgrading to 16K RAM.
|
I didn’t think I could *ever* save enough money for the Radio Shack 16K upgrade (funny how you view money when you’re 15 years old….), and my parents certainly weren’t going to get it for me, so I decided to do it myself – bought an aftermarket 16K upgrade kit from the back of a magazine. It took quite a while to save up for the kit – as I recall, it was about $100.00, and came with eight 16Kx1 DRAMs and replacement DIP shunts. It arrived by parcel post about 3 weeks after I sent away for it, and when I received it, I couldn’t wait to get it installed. I took the TRS-80 system unit into the bathroom, tied one end of a copper wire around my wrist for grounding, tied the other end to a cold water pipe, and then opened the machine up. I remember that I ripped out the old 4Kx1 DRAMs and the old DIP shunts, broke the right tabs out of the new shunts, installed them, and then started to put in the new DRAMs. Everything was going great until I got to the last of the memory chips; one of the legs wouldn’t go into the DIP socket correctly, so I tried to force it – snapped most of the leg right off the chip. My heart sank – destroying that chip would almost certainly mean having to save up more money, buying a replacement (and they were something like $12.00 or so each – it would take a couple of weeks to come up with that money), and either having the computer non-functional in the meantime, or going back to the 4K configuration. However, after some thought, I opted for a different strategy – I found a spool of heavy-gauge, lacquer-insulated copper magnet wire, took the lacquer off the ends of a small piece of it, then wrapped one end tightly around the “stump” of the broken-off DIP leg, and shoved the other end into the DIP socket. Then I closed up the machine, and hoped for the best. And you know what? It worked! The machine came right up, and it knew it had 16K! “Now,” I thought, “I have a really powerful machine!”.
|
We went out to the mall the next weekend, and stopped into Radio Shack, where I convinced Mom to get the Editor/Assember package for me (even though she had no idea what it even was for….). I also got a better debug monitor than T-Bug – I forget what it was called, but I got it out of the TSE catalog; the big feature it had, that I wanted, was that it did disassembly, which T-Bug did not. But as soon as I finally had all of these development tools available to me, a particularly difficult school year began, and my TRS-80 hacking time got dramatically reduced. I did pick up some of the “… and Other Mysteries” series of books during that year, and spent a bit of time reading them. I was particularly intrigued by the “TRS-80 BASIC Decoded and Other Mysteries” book (I think that was what it was called), and spent a reasonable amount of time going through the ROM with the disassembler and the book; this book got a few ideas cooking in my head about hacks I could do to BASIC, but I never seemed to have time to really do much about them.
|
One of the things that was difficult about this particular school year, was that during this year that I started to discover girls in a really big way. There was one particular Pretty Young Thing that I had my eye on, and I spent a lot of my spare time that year trying to get a date with her. In fact, she repeatedly told me that she wanted to, but she could apparently never work out the timing – on any given day, it seemed that we couldn’t get together after school because she had her after-school job, and homework and chores to do, and she always had previous plans for the weekend, so she’d suggest that we could defer until the following weekend. So I kept waiting for the next weekend, the one after that, the one after that, etc., etc., etc. You’ve probably guessed by now, she never intended to go out with me at all, and on the last day of our junior year, we had a confrontation about it; she told me that she wasn’t interested in going out with me, and never really had been, and that she basically thought that it was pretty funny that I put so much effort into trying to get a date with her, when I should have picked up the hint that it was never going to happen. I was crushed; I went home, went straight to my room, and pretty much didn’t come out except for meals for the next three days. Didn’t talk to anybody; pretty much didn’t even get out of bed. But after about the third day of that, I couldn’t do that anymore either, and decided to put some of my newly found teenage angst to productive use, before I got over it … I fired up the computer, and started on a hacking binge that lasted most of the summer.
|
Over that summer (between junior year and senior year of high school), I set out to create my Magnum Opus – a set of extensions to BASIC that implemented all of the stuff that Disk BASIC had, except for things that were disk-related; things like long error messages (“SYNTAX ERROR” instead of “?SN ERROR”…), string editing (MID$ on the left of the equation), binary/string number conversions (CVI/CVF/CVD/CVI$/CVF$/CVD$), multiple USR() functions – pretty much all of the non-disk features from Disk BASIC. Plus some other stuff – changing the cursor (block cursor, blinking cursor, no cursor at all), disabling/enabling the BREAK key from BASIC – little convenience things that I thought were neat. I worked on this project as if my life depended on it. I’d get up in the morning (well, more likely, in the afternoon…), got some food, and then started hacking on it immediately. Hack all day until dinner time, eat (sometimes….), then back to work until bed time. When I would go to bed, I’d turn off my monitor, but leave the system unit on, so I didn’t have to reload my code from tape the next day. Mom got upset that I was leaving the machine on overnight, so I learned to put a piece of black electrical tape over the power LED before bed – she was none the wiser…. I used the “TRS-80 BASIC Decoded…” book to find things like vectors to the tables where the error messages were stored (my code replaced those vectors), tables with vectors to the BASIC intrinsic functions (I replaced all of the vectors that would have normally just jumped to a “?L3 ERROR”…), routines to do string operations and math, and all kinds of stuff.
|
As I worked on this, the code got big – way bigger than I was prepared for. I got very paranoid about losing my work – every time I saved a new copy of the source, I saved two copies on each of two different tapes, and I had rotating sets of tapes – one save never wrote over the immediately previous save, so that in case a save failed, I never wrote a bad save over the previous good save. (You’re probably thinking, “that’s just common-sense system admin practice”, but I didn’t know that at the time – I just knew that TRS-80 tape saves failed to load a non-trivial percentage of the time, and I didn’t want to lose all my work….)
|
Because of the way the tape-based Editor/Assembler worked, your assembly source code, and the assembled object code, had to be able to fit into memory together (since all of the source code was permanently memory-resident, and the object code was assembled into memory, from which you would write it out on to a tape). Eventually, this was no longer possible – the source code had gotten too big. Initially, I started stripping out comments in order to make room, but that only worked for a while. In the end, I had to break the source code into two separate pieces, assemble them separately and write their object code to separate tapes, and then bring the two pieces of object code into memory under a debug monitor, which I would then use to write a new tape that had the entire object code in one file.
|
The software was finished by the time school started again in the Fall. I will say, I was really proud of it – the resident piece only used about 2K of RAM (and it allocated and protected its own memory, just like Disk BASIC – no need to reserve space for it at the MEMORY SIZE? prompt), and it added all of this functionality to BASIC. And it worked – as far as I could tell, there weren’t any signifigant bugs left in it when I finally set it aside – and I tested the heck out of it. I never used any of that functionality in any “real” programs, of course – I was more interested in the challenge of implementing the program than in actually using it. And, the whole project certainly kept my mind off of the girl who’d crushed my heart earlier that year.
|
During that last year of high school, I found out that the husband of one of my teachers had a TRS-80 at home. So, I asked her to ask her husband if he’d like to take a look at this little set of BASIC extensions I’d written. Eventually, the word came back that he really didn’t need a program like that, since he already had a disk drive (and therefore, Disk BASIC), but sure, he’d be happy to take a glance at it. So I brought in a tape, gave it to the teacher, and she said she’d take it home to her husband. I didn’t hear anything else about it for several weeks – until one day when the teacher sent for me during my last class. Her husband had come into school to pick her up, and while he was there, he wanted to meet me – it seems that he was totally blown away by the idea that such complicated software could be implemented by one 16-year-old, working alone. Unfortunately, he was the only other person who ever used this software – I had an idea that I wanted to publish it through TSE, or one of the other mail order places, but I never quite got around to it; plus, I wasn’t sure there’d be much of a market for a programming tool for cassette-based users, since they wouldn’t be able to run any of their extended programs without loading my BASIC extensions (from cassette) first – I wasn’t sure anyone would go through the effort.
|
Unfortunately, for most of the rest of that school year, my TRS-80 was at Radio Shack, being repaired – it had a flaky problem that would cause the machine to power up to a screen full of garbage (instead of “MEMORY SIZE?”) when it was powered on. Except, of course, while it was at the repair center, when it worked perfectly…. I forget what the actual problem turned out to be, but we had to send it back three times before they got it working reliably again. So, I spent most of my senior year hacking a new platform – the Apple II+ that our school had just acquired. It had 32K of RAM, *and* a floppy drive. Many afternoons were spent going through the ROM on that machine, too (a bit easier than the TRS-80, because Apple provided more docs than Tandy), and examining and modifying Apple’s DOS. Our (a couple of friends and I) main tool for DOS hacking was a sector editor I’d written, which I called “AppleZap”, a very weak imitation of SuperZap on the TRS-80 – lame, yes, but it did the job… (not that I had ever actually used SuperZap, since I had no floppy drives – I’d only seen some of the docs.) But anyway, the rest of this Apple hacking is another story entirely, best left to another web site…
|
I graduated from high school that spring, and (having already signed up for my courses ahead of time), I knew that I would need to learn Pascal for my first semester at college. I had a passing familarity with Pascal already – I had a number of books about the language, but had never used it. So, I got myself a copy of Tiny Pascal for my TRS-80, and set about learning the language. I soon discovered that Tiny Pascal was not really adequate for learning “real” Pascal, but I started playing with the innards of Tiny Pascal as well – I figured, I was able to productively dink around with the innards of BASIC, so why not try it with another language. I only ever implemented one extension – a random number generator function (using the random number generator in the BASIC ROM). But it was an amusing project, and on a lark, I decided that it’d be interesting to write it up and submit it to a computer magazine to see if they’d publish it. So, I typed it up (on a manual typewriter, even for the program listings – remember, my machine never did have a printer), put it in a nice envelope, and sent it into BYTE magazine. A few weeks later, I started looking for the rejection letter to come in the mail, and lo and behold, there soon arrived an envelope from BYTE. When I opened it up, I was shocked to find a check for $50.00, and a letter stating that “your submission will be published in a future issue of BYTE”. The check was what’s known as a “binder check”, and cashing it obligated me to not submit the article to any other magazines in the meantime (not that I’d saved a copy – silly me, I had not made a copy for myself before I sent the original in); the letter explained that further payment, in the amount of $50.00 per page, would be forthcoming when the article was finally printed. I *did* make a copy of the check, as a souvenir. After a few months, the article hadn’t been published (and therefore, I didn’t get the rest of my money), so I wrote them a note asking what was up. They sent back a nice response asking me to be patient, and my article would be published soon. Four months later (I had already started my freshman year in college by this time), I wrote them another letter asking the same question. After about another month, they sent back a reply – it didn’t look like they’d be able to find space for my article anytime in the forseeable future, so they decided to kill it – but I could keep the original $50.00 as a “kill fee”. And thus, I didn’t *quite* get my 15 minutes of fame – at least, not from that. More than 15 years later, I’m still waiting for my 15 minutes …
|
Once I started college, I had access to all kinds of truly cool hardware – class assignments were done on our Sperry/Univac mainframe, my work-study job was in a lab with a bunch of Apple II microcomputers, and there were various other minicomputers and microcomputers that I could use. Plus, we had some of those newfangled “IBM-PC” machines, and would soon start getting some of the “PC/XT” systems, too. Sad to say, it didn’t take long before the TRS-80 was taken off of my desk and put on to the floor, replaced by a Heathhit H19 terminal (borrowed from my work-study job), and a 1200 baud Novation Cat modem (also borrowed from work), which I used to dial in to the mainframe at school, and eventually into a Digital PDP-11/40 (obtained by our lab from another department that was planning to throw it away) that I helped set up Unix on, and which provided me with my first system administration job.
|
Now, lets fast-forward to present day – 1999. These days, I work for the largest information technology company in the world (who’s name I won’t mention, but I will tell you that it has three letters…), and work with more computers, and more different types of computers, than I could have ever imagined back in high school. It’s fun – a *lot* of fun, in fact. But I don’t think it’s quite as much fun as it was back then. Those of us working with the TRS-80, and other micros, were doing something bold, something pioneering – we were doing things that had never been done before. Sometimes I wish I’d been a few years older at that time – so I could have afforded more, and better, hardware, and maybe been able to produce things that others could use – to have been more of a player in the microcomputer revolution than just a spectator. But as it is, that machine, and the experiences I had with it, helped prepare me for the things I’m doing today. The TRS-80 ignited a true curiousity and enthusiasm about technology in me, which has not burned out to this day.
|
And as for that TRS-80 … it’s still there, in my mother’s house. After I finally moved out on my own, she carefully packed up the machine, and all of the software, so they’d be ready for me to pick up – which I have never gotten a chance to do in the last 13 years (mostly because it’s 300 miles away from me, and for the first 7 of those 13 years, I did not have a car….).
|
For 13 years, it has been awaiting its resurrection, in its little tomb of cardboard, with it’s little cassette drive, and it’s hacked-up 16K upgrade (never did replace that one chip…). But now that I’ve finally bought a house, I am planning to get it as soon as I can, as well as all of the books and the software (if the tapes will even still read) that go with it. I already have a place ready for it to be set up. It will be there when I have children of my own – children who will probably grow up with 750 MHz Pentium VI’s running Windows 2010 – for me to show them, and tell them “let me show you something Daddy did when he was … well, not much older than you are, really.” (and they’ll probably say “You used a language without objects, prototyping, and full polymorphism?? Jeez, how did you ever get anything done?” )
|
And once in a while, it’ll be there to just fire it up, and look at that screen that says:
|
MEMORY SIZE?
RADIO SHACK LEVEL II BASIC
READY
>_
|
and think to myself, “Wow, wasn’t that a time….”
|
|
|