Supra 128

So, I decided to switch the BBS software from Color 64 to Supra 128. Why? Well, that’s a long story. But this is a blog and not a message on the BBS so I’m happy to explain.

Why leave Color 64?

It’s a great BBS and getting into it for a few weeks reminded me just how flexible and powerful it was, especially for a computer like the Commodore 64.

There are several great Color 64 BBSes accessible via telnet already (try The Oasis!).

I thought two things:

  1. Color 64 is already well-represented
  2. I have a 128 so why use only half of that power?

I managed to salvage all of my original Supra 128 BBS floppies and make copies of them. I also saw the latest version of Supra 128 posted to Bo Zimmerman’s site was 4.5. So I thought, “I already have it, let’s roll with it!” Let’s pause for a moment to discuss the history of Supra 128.

My original floppy of Supra 128. Yep, it’s two-sided. Side 1 is BBS stuff, side 2 is network stuff

Supra 128 was originally written by Julian Burger. Julian lived in the San Francisco Bay area of California. He wrote the software to be a cleaner version of Color 64 but to take advantage of the 128. If you look at the overlays you will see how he structured his code:

-boot module: consists of lines 0-9600, some 30000s (all programs start in the 30000s), one 40000, a line that printed to the local screen and one 60000, an error trap
-main module: lines 32000-34000
-msgs module: lines 30000-34990
-trans module: 30000-35900
-edit module: lines 45000-45740

It was built this way so the edit module could easily be swapped in and out. The main prompt, Press Any Key, file routines and overlay loaders were all in -boot, lines 0-9600.

There have been several rumors as to what happened to Julian. Some said he died but he told me on a call in 1990 (or 91, can’t remember) that he got a job in Washington state and needed to sell the software. That is all he told me. Well, we all know which computer behemoth is in Washington state and what they were doing around the late 90’s. Also if you do some quick Google searches you will see shout-outs and mentions to Julian Burger for his contributions to Microsoft Remote Desktop. Julian has moved on from Microsoft.

Anyway, at the time Julian sold the rights to the software to Jim Abraham. Jim was already a legend in the Color 64 community and had transitioned his BBS, the Magic Circus BBS over to Supra 128. He bought the software and continued to support it until 1992 which is when I got out of BBSing due to the fire (see previous posts).

I thought that was the end of the story for Supra 128. After all that is all that is written at Bo Zimmerman’s site.

I posted some messages on some Facebook Commodore enthusiasts groups and got a couple of messages directing me to a 4.7 release. I downloaded it and gave it a spin but could not get it to work. I thought that some ][/\><()]3 (“hacker”) had simply taken 4.5, modified it to their BBS, called it 4.7 and put it up. Boy was I wrong.

As it turns out Jim sold the rights to Supra 128 to a gentleman, WD Stewart. WD has done some amazing work with it, adding Z-Modem, compatibility with Fidonet, fixing a lot of the bugs that were in the software and really giving some power to X-Modem and Punter.

Unfortunately I cannot get this version to run and am going to continue to work to do so.

So, why Supra? Well yes, it was partially because it was a challenge. Also it was because my Color 64 password file got corrupted by all of the bots hitting port 23. With that dead in the water and not wanting to make users sign up again I went with Supra.

Why not Centipede?

I thought long and hard about it and Centipede is a serious BBS package. I may switch over to it.

But being the only Supra 128 BBS on telnet (currently) is kind of cool to me.

How I did It

I thought that since Color 64 was already Telnet-ready with just a couple of modifications that Supra could easily get online. So I fired up the latest version of Supra on the 128 and got to the waiting for call screen when it went into this crazy loop hammering the modem with the init string set up in the config app.

The sexy stuff. The glorious life of debugging line 31265. What peek i, pr and r all equal.

All in all I spent about a week testing and debugging it and finally got it to work. Here is what needs to be changed:

All of this is in the -main (or -ma) overlay:

Start lower in the code at line 34610. I’ll explain what the line is and what the change does.

34610 poke2584,peek(2585):print#5,i$:i=ti:p$="":do:get#5,op$:p$=right$(p$+op$,2):loopuntilp$="ok"orti-i>119:ifp$="ok"thenreturn:else34610

This is the line that polls the modem looking for an “ok” response. If it is not found then it keeps looping that do…loop routine. What you get here is a steady stream of “ATA” or “ATH0” (depending on your modem init string) sent to BBS Telnet Server which will respond “OK”. The problem is that it’s too fast for the application to assess.

I understand why Supra does this — it wants to make sure you have a modem connected before it waits for a call. Since we are dealing with Telnet BBS Server we don’t have to worry about that so we add an op$=”ok” just inside the do:

34610 poke2584,peek(2585):print#5,i$:i=ti:p$="":do:op$="ok":p$=right$(p$+op$,2):loopuntilp$="ok"orti-i>119:ifp$="ok"thenreturn:else34610

Now that the polling routine is fixed the BBS is going to think there is always a caller on the line. Let’s tell it otherwise:

31265 if(peek(f)andbe)=mothends(10)=ds(10)+1:print#5,"ata":print"‘"tab(15)e$" ringg":sysz%,2:gosub6570:p$=c2$+"a"+i$:gosub10

In this line f=52577, be=8 and mo=8. I forgot what be is but mo is the module/overlay we are in. peek(f), or peek(52577) polls the modem status. In the Telnet BBS world peek(52577) always returns a value. Those values are:

Off hook: 47
Ring: 191
Connected: 236

So change it to this:

31265 if(peek(f)andbe)=mothends(10)=ds(10)+1:ifpeek(f)=191thenprint#5,"ata":print"‘"tab(15)e$" ringg":sysz%,2:gosub6570:p$=c2$+"a"+i$:gosub10

This will tell the modem only to pick up if a signal is raised by Telnet server. It will then send “ata” to the caller.

Final change in -main:

31280 ifinstr("nect12002400",i$)thentx%(49)=val(i$)-300*(i$="nect"):gosub32800:poketx%(3),1:sys52684,128,10:ds(11)=ds(11)+1:goto31400

In the old modem world when a connection would be established the message “connect” would be sent for 300 baud callers, “connect1200” for 1200 baud and “connect2400” for 2400 baud callers. Supra has some built-in restrictions to set the BBS to allow only 1200 and up or only 2400 baud callers. Also, Telnet server doesn’t send the baud rate, only connect. So while this makes this line a bit useless we need to set a standard speed. Change it read this:

31280 tx%(49)=2400:gosub32800:poketx%(3),1:sys52684,128,10:ds(11)=ds(11)+1:goto31400

Where tx%(49) is a system variable which represents the current user’s baud rate.

There’s one more thing to change in the -boot/-bo module:

1130 sys2974:un=val(un$):poke2584,peek(2585):poketx%(45),us(9):poke7733,.:poke208,.:p%=1:gosub45:gosub230:input/.,p$:ifp%=2then5800:elseifp%=3then5850

This is the line which appears before the main prompt and detects if the carrier has dropped. With Telnet BBS Server it doesn’t read it so well so we need to give it a little help:

1130 sys2974:un=val(un$):poke2584,peek(2585):poketx%(45),us(9):poke7733,.:poke208,.:p%=1:gosub45:gosub230:input/.,p$:ifp%=2then5800:elseifp%=3orpeek(52577)<236then5850

Adding that orpeek(52577)<236 will tell it that carrier has dropped.

To hell with you too. Dropped carrier? -25 credits! I was intentionally testing the disconnect routine (it’s still buggy.)

And don’t forget you can use shorthand to cram more characters on a line. In C=64 basic we are limited to 2 lines of code per BASIC line. That’s expanded to 4 in BASIC v7 for the 128. But still if you are feeling cramped line 1130 can be written as:


No, there is no abbreviation for INPUT. INPUT# however is iN. Why didn’t they make it inP?

After that all you do is save it and run”supra and it’s up!

Woo Hoo Lordy Mama! Ain’t that PURDY?!


  1. WD Stewart on February 13, 2019 at 10:19 pm

    Awesome work. We’ll get 4.7 operational again. My focus is on old school modems and phone lines, but we should be able to insert both as options in the config.

    • sysop on February 13, 2019 at 11:27 pm

      Is telnet worth a .8 upgrade? or 4.7.1? since it was technically “unplanned”?

Leave a Comment