Mike's incredibly flashy CoCo page!
 


What's a CoCo? It's the Tandy/Radio Shack TRS-80 Color Computer. Conceived as a low-cost home computer project in the late 1970's, the first production CoCo came out in January 1980, with 4K of memory and a $400 price tag. The fist computer I ever used was my grammar school music teacher/family friend Mr. Corder's 16K CoCo. I was fascinated with the machine, and my parents thankfully put one on layaway at the local Radio Shack. Eventually, I got my own 16K gray cased CoCo 1 and my parents didn't watch much TV after that!

CoCo 1

CoCo 2

CoCo 3

The CoCo came in several varieties in its lifespan from 1980 to 1989 (or so). The original large gray cased CoCo 1, briefly changed over to a more modern white case, then repackaged into a smaller white case (CoCo 2) and then in 1986 was enhanced as the CoCo 3. Memory size started out at 4K with the CoCo 1 and went up to 512K for the CoCo 3.

While the CoCo had a far superior processing unit (Motorola 6809) than its competition at the time, it was hampered by a lack of sophisticated video and audio hardware. This limited its potential as a game platform, which is where the Atari and Commodores of the world were really able to capture the market share and licensed games. We in the CoCo community had to deal with "Donkey King", "Ms. Maze", "Draconian" and other look-alikes for most of our games. But what we lacked in games we made up with in an extremely powerful built-in BASIC from Microsoft, a real-time multiuser/multitasking operating system in OS/9, and MacPaint and MacWrite clones in CoCo Max and MAX-10.

Assembly language mixed with BASIC was a favorite way of mine to program the machine. Use BASIC where simplicity is more important than speed, and use assembly where the opposite is true. Using this method I developed a few pieces of software (and some hardware)

Color Legends BBS: This was a bulletin board system built to be a look-alike to a BBS my friend Rich Tsao developed on his IBM XT in (I think) Pascal. Rich was a real genius in his design of that software, and he had what he called "Special Effects Command Interpreter" which basically was a markup language. For instance, <$D3$> would maybe change the text color or something. There were effects like "slow typing", a spinning "cursor", color changes, beeps, etc. This was a way to add impact or emotion to your posting that was really fun and unique. My friend Jason Dessel had the spare phone line in his house, so I gave him the software which he quickly personalized and added an on-line game gateway to. The Big Generator BBS was up and running, and answered calls at 1200 baud.

The interesting thing about the design of this BBS was the interaction between its assembly language and BASIC components. I took the idea of a program that appeared in RAINBOW magazine called "remote2", which hooked itself into BASIC's input and output routines and echoed them to the modem. It's clever, because you use a PRINT statement and the text goes on the screen and out the modem at the same time. It's a security risk because from BASIC's perspective, it doesn't know the difference between a key typed on the keyboard and one coming in on the modem. If your progam aborted, your dial up user would be at the BASIC prompt and could, in today-speak, "execute arbitrary code"!

So, I liked the idea of hooking into the PRINT command; I added a few things to it too. ANSI color, a terminal bell, SECI codes, some others I'm sure I forgot to mention... that took care of the output. For input, however, I created a special function. Since each BBS command was a single key, it was pretty easy. Kind of like INKEY$ for the modem. And it would do stuff like detect when carrier is dropped. So, in the event the BBS program aborted, it would not be possible for the user to get into anything.

One limitation of the CoCo 3 was that in BASIC, even though the machine might have 512K, to be compatible with the earlier models BASIC's space was limited to 32k. I saw this as a huge waste, and in something as string-oriented as a BBS, those string variables sitting in BASIC's ram space would have taken more room than was available. So, I devised a means in which you could "swap" strings in and out of the unused memory pages on the CoCo 3. In fact, I loaded whole text files into these areas and retrieved them when needed. I thought this was pretty sneaky and I was smugly pleased with myself for being so.

The only place where a user would input more than one key was when posting a message. Knowing how slow BASIC is, I wrote a whole editor in assembly code. I know it did word wrap, of course had the SECI code and some other stuff. Despite my concerns, nobody ever complained about it. I guess it worked ok.

There were some limitations though. Every message was a separate file on the CoCo disk, which allocated files in "granules" of 2k. So there weren't many messages possible. This could have been changed, but it didn't seem to be a problem. Jason had 2 or 3 disk drives. Another thing I remember was that it wouldn't work at 300 baud. No idea why. But by that time there really weren't too many people using 300 baud modems anyway. All in all I'd say the program was successful. Jason seemed happy with it.

Some related supporting documentation for this project: the BBS program, BASIC portion, the assembly portion, the ANSI test screen, and Rich's journal which I used as a template to build the CoCo version.

AT6060 Robot Controller: In high school we had a pneumatic robot in the electronics lab. The robot's controller was this awful 6502 based "trainer" with 7 segment LED displays and a hex keypad. It was barely a step up from 8 switches and a LOAD button. Programming it was about as fun as beating your head with a brick. I told my Mr. Robinson (my friend and electronics teacher) that I thought the programmer sucked and I could do better. I was familiar with the "dead bug" construction method- this is where you glue a chip upside down to an existing board and wire it point-to-point upside down. (I dead-bugged a 6551A chip into a CoCo disk controller so I could have the equivalent of a RS-232 pak and disk controller without having to buy an expensive multi-pak interface) This time I dead-bugged a TTL latch into a disk controller, built a board with 8 transistors and relays to control the pneumatic valves of the robot, and wrote the software to run it. The software had two parts; there was a full-screen editor that allowed you to edit the programming sequence, and there was a graphic display of the robot that allowed you to simulate its motion before you accidentally slammed the thing into whatever it was you were working on. Everyone thought it was a hit, the local Lab-Volt rep came in and saw it and was amazed. We took the contraption down to Lab-Volt HQ, it was in the newspaper, and, well, you can read more about it...

Related documentation: The letter I wrote to Lab-Volt, the assembly language portion of the code, the BASIC portion, and the startup routine, a picture of the simulator.

Oh, what happened after that? Well, Lab-Volt thought the press coverage made them look bad. Internally the engineering team was apparently beat up badly because a 17 year old came up with a better solution than they did. Nobody from the company talked to me about it again, and a few years later I did recall seeing something similar they developed on the PC platform.

RadiChat: Before the internet, many of us got our online chat fix with systems called Diversi-Dial (ddial for short) and some work-alikes like Synergy Teleconferencing System and Galacticomm. A ddial was, essentially, an Apple II series computer loaded up with up to 8 300 baud modem cards. People could call up and talk to each other not at all unlike the way IRC works today. (just a LOT slower!) Anyway, I figured if a crappy 6502 running at 1Mhz could do that, it should be possible for a zippy 6809 running at 2Mhz to do it a lot better! Only problem was, there was no way to hook up 8 serial ports to a CoCo. And of course, I couldn't afford to buy a pre-built solution at the time. I did have a pile of Z80 SIO/0 chips I could have used, but I couldn't get them to interface properly to the 6809 bus. 6551A chips were the preferred CoCo UART at the time, but were costly. I came across a good deal on 2661 chips, so I bought 8 of those and a bunch of 1488/1489 RS232 drivers. A few TTL buffer chips and a hacked disk controller, and I had 8 serial ports on a CoCo. (what a wire wrapped monster that thing was) The whole mess was repacked into the case of a Z8000 based computer my Uncle Mike gave me. I added a 512x256 pixel orange plasma display to the CoCo video output to monitor the status of the system, and things were ready to go. I flowcharted the whole operating system, and wrote it in assembly language. I had it working with one modem and one terminal, and all was going fine until something fell and shorted the whole thing out, blowing up my CoCo 3. I never finished it, and eventually ended up throwing most of the pieces out. I kept the 2661 chips and the plasma panel, some of the CoCo pieces, and gave up.

From a design standpoint though, this software was the best thing I had ever come up with. It was entirely interrupt driven, it time-slice multitasked all active users, it used one re-entrant loop for everything and just task-switched their memory space in and out as needed. In reality it was more a multiuser operating system than it was a multiuser chat system. Sadly, I haven't been able to locate a disk with the source code on it though. Hopefully it will turn up.

Anyway, By then I had built a working 8Mhz 286 PC and I figured the CoCo days were over. I even cut off the plug from my CM-8 monitor, wired up a little 2-bit DAC and used it as a CGA monitor on my PC. Then I hacked it again and used it as the display for an AT&T video capture card. Yep, CoCo days were over.

Or so I thought...

Probably around 1993 or 94, I went to the Radio Shack in Howell. Sitting there on the table was a CoCo 3 for something like $25. I saw it, but left... and then came back and bought it. The guys there were sad to see it go, it was the floor model and they liked playing football on it. I put some of the pieces I had left over from the dead RadiChat CoCo 3 and I had a 512k CoCo 3 again. Back on Usenet, many people were dumping their CoCo stuff, and sure enough for a few bucks a pop, I had my CM-8 monitor back, disk drives, etc... then... eBay. Uh-oh. Let's say I have managed to amass a huge quantity of CoCo items. My original setup is back in force- the CoCo 3, FD-501 drive, and DMP-130 printer, the Modem IB, plus a ton of other stuff I can't even mention. Here's a partial database of the things I've managed to amass.

I was able to catch up with Jason, who now lives out in California. Much to my surprise I found out he wrote some programs based on my explanation to him about how the MMU in the CoCo worked. They were published in RAINBOW magazine (well, newspaper by then) in 1992. (page 1, page 2, page 3) He even thanked me in the article, which was nice. No problem Jason, glad what I taught you made an impact!

So where does this leave us today? Well, it leaves me with a pile of old computers, that much is certain. I'm going to look to reduce the size of the pile, as much of it is redundant. I'm sure going to keep some of the more historically significant machines I have, like the original 4K CoCo 1 or the CoCo 3 I have that's new in its box... So as I write this in December 2004 and if you're looking for some CoCo items let me know and I'll see if I really really need to keep it...

By the way CoCos make great little single board computers. You can get them for a few bucks, rip them apart, and have a 6809 computer with a couple of PIA's and RAM. Great for Nixie clocks, process or home automation, etc.

Some interesting links:

The CoCo has no dedicated sound hardware, but it does have a 6 bit DAC. So, with a tight software loop you have a multi-voice wavetable synthesizer. When did the first wavetable card come out for the PC? (snickering) anyway, some samples: "Axel F" and "Country Roads"

Peeks & pokes were like currency back in those days. Here's a list I grabbed off of an online service somewhere.

Some documents I prepared that I gave to Jason which he saved as reference material: memory and interrupts.

Online CoCo software library.

CoCo related images.