Category Archives: Retro Computing

What are the odds?

Back in the early 1980s, a friend of mine had TRS-80 Model III in their house. His mother was a writer, and had gotten it to use for writing books.

I believe it was this TRS-80 where I saw a version of Monopoly that taught me a strategy I had never learned as a kid:

The computer bought EVERYTHING it landed on, even if it had to mortgage properties to do so.

This simple strategy was a gamble, since you could end up with too many mortgaged properties and no source of income from rent. But. by doing this, the computer would end up owning so many random pieces it made it difficult to own a monopoly yourself.

And since then, that is how I played Monopoly. When it worked, it created some awfully long games (if no one had a monopoly to quickly drive other players bankrupt when they landed on their hotels).

In more modern times, I have watched YouTube videos concerning Monopoly strategies. They will break down the statistical odds of landing on any particular piece of property. For example, you know a pair of dice can produce values from 2 to 12. If truly random, the odds of getting a “1 and 1” should be the same as getting a “3 and 5.” Rather than focus on dice rolls, the strategies take into consideration things that alter locations: Go To Jail, Advance to Go, Take a Ride on Reading, etc.

These cards existing means there are more chances for a player to end up on Go, Reading Railroad, Jail, etc. This means the property squares after those spots have more chances of being landed on.

Board with board games. Move along…

But I digress… As Internet Rabbit Holes do, this led me to watch other videos about statistics in things like card games. In a randomly shuffled deck, there should be as much chance for the first card to be Ace of Spaces as there is for it to be Three of Clubs. It is random, after all.

For that first card drawn, that is a 1 out of 52 chance to be any card in the deck. (52 cards in the deck.)

But as a game plays on, there are fewer cards, so the odds of getting any of the remaining cards increases. For the second card drawn, you now know there is a 0% chance of getting whatever the first card is, and a 1 in 51 chance of getting any of the rest.

And so it continues…

For games like Blackjack or 21, you do not really care if it is a Ten of Diamonds or a King of Hearts or a Queen of Clubs or a Jack of Spades. They all have the value of 10 in the game. Thus, the likelihood of drawing a ten card is much higher than any other card in the deck.

You have four suits (clubs, spades, hearts, diamonds) so there are four of each card – Aces, Two through Ten, Jacks, Queens, and Kings. This means there are 16 cards in the deck that could be a value of 10 in the game. When you draw the first card, you should have a 16 in 52 chance of it being a ten card. That is about a 33% chance!

If you pay attention to what cards have been seen (either by you having it, or seeing it face up with another player), you can eliminate those cards from the possibilities — changing the odds of what you will get.

This is basically what I understand card counting to be. If you play a game, and you know you’ve seen three Kings so far (either in your hand, or played by others), you now know instead of four chances to draw a King, you only have one.

Math is hard. Make the computer do it.

I know this has been done before, and quite possible even on a Radio Shack Color Computer, but I thought it might be fun to create a program that displays the percentage likelihood of drawing a particular card from a deck. I suppose it could have the Blackjack/21 rule, where it treads 10, Jack, Queen and King the same, versus a “whole deck” rule where each card is unique (where you really need an 8 of Clubs to complete some run in poker or whatever game that does that; I barely know blackjack, and have never played poker).

I plan to play with this when I get time, but I decided to post this now in case others might want to work on it as well.

I envision a program that displays all the cards on the screen with a percentage below it. As cards are randomly drawn, that card’s percentage goes to 0% and all the others are adjusted.

It might be fun to visualize.

More to come, when time allows…

M1PQ

Grade school (and junior high, and high school, and college) would have been easier if I could remember all the “facts” I read in text books, or that my teachers told me. But, most of them left my mind moments after they entered. Yet, somehow I can remember…

POKE 113,0:EXEC 40999

I also remember things like:

POKE 65495,0

And even…

FOR A=0 TO 255:POKE 140,0:EXEC 43345:NEXT

Those Radio Shack Color Computer BASIC commands seem to be forever stored in my long term memory. Even some 6809 assembly remained after decades of non-use:

START LDX #1024
LOOP INC ,X+
CMPX #1535
BNE LOOP
BRA START

Why do I still remember this!?

Another thing that is etched in to my memory is M1PQ.

In my junior high school English class (around 1981-1982) I met a boy named Jimmy. Jimmy was my gateway in to home computers, Hitchhiker’s Guide to the Galaxy, phone phreaking and much more. I believe he also introduced me to bulletin board systems.

Neither of us had a home computer (as we called them back then) yet, but we’d visit the local Radio Shack (so long ago, it not only existed, but has a space in the name separating the words). Using a TRS-80 Model III and their 300 baud modem, we’d dial in to local Houston, Texas BBSes. Radio Shack is also where I learned to program BASIC. I recall using a book Jimmy had, and writing programs out on paper, then going in on Saturday to type them in and see if they worked. (Back then, Radio Shacks and most everything else was closed on Sunday in Texas due to “Blue Laws,” whatever they were.)

Apple NET-WORKS

At the time, few “home computers” existed. The IBM-PC, if it existed at all, would have been brand new and not generally known by non-business customers. If a school had a “computer room” it would have been most likely populated with Apple 2 machines or TRS-80s. (Though one of my schools had some Commodore PETs.)

Most of the bulletin board systems I dialed in to ran on Apple 2s using software called NET-WORKS. Here is the Wikipedia entry:

https://en.wikipedia.org/wiki/Net-Works_II

The BBS Documentary website has a disk image of it:

http://software.bbsdocumentary.com/APPLE/II/NETWORKS/

And as I wrote up this article, I even found a website about this BBS, including some documentation!

https://www.callapple.org/documentation/networksii-bbs/

In those early days, many BBSes did not have the concept of “username” and “password.” Some just used a password! I guess we were more honest back then, since if you registered and tried a password someone else already had, the BBS would just say “that password is already taken.” Security? What’s that?

Some systems used a username and password, similar to today, but you didn’t even get to choose your password. They used a user number encoded in to a randomly generated password. Apple 2 Net-Works (and, I believe, BBS Express for the Atari 8-bits) did that. For example, if you were user 42, your randomly assigned password might be “A42BC”. I have never seen the source, but it appeared to just chose three random letters and stuck the user number after the first letter. I recall my BBS Express password was a similar format, but “A42BCD” with an extra character.

But Apple Net-Works had a flaw. When you first ran the software to configure it, it would assign a password for the SysOp (system operator) who would be in control of the BBS. It would generate the password M1PQ. SysOps who did not realize this would be using a password that hackers would most certainly try as their first guess.

I don’t know where I learned about this, but probably on some hacker or phreaker BBS … which was probably running the Net-Works software ;-)

At the time, I thought this was some kind of secret backdoor built in to the software, but today I expect it may have been caused by the non randomness of random.

See also: my article on the RND command in Color BASIC.

If you powered up an Apple 2 fresh, and printed ten random numbers between 1-100, I expect you’d get the same series of numbers each time you powered up and did that. (Any Apple 2 users here who can confirm?)

You get these same random numbers every time you power up the CoCo.

If Apple BASIC worked like that, then perhaps it was just code not taking any steps to seed the random number generator so each time it ran from a fresh power up, it would generate the same sequences of “random” numbers.

Either way, M1PQ was a well-known SysOp password for the NET-WORKS BBS software.

You can see I have even referenced it here on this site:

The 1983 Radio Shack Color Computer BBS package is back… This time on Arduino!

The reason I mention this is convoluted. Yesterday I received a letter from Change Healthcare, which I had never heard of. It was informing me of a data breach that happened this past February 2024. I was affected, and could sign up for free credit monitoring.

I had never heard of this company, and suspected this to be a scam. What a clever way to get folks to give out their personal information — “hey, sign up to free credit monitoring. Just give us your social security number, date of birth, and account numbers to monitor.” Yeah, right.

But some searching led to many news articles about the data breach, including one on my insurance provider’s website. Apparently they used Change Healthcare and thus, this alert was legit.

I decided to sign up for the credit monitoring. During that process, I saw that the site had some tools you could use. One was a password verifier. I typed in “monkey123” (a famous password of modern times) and it said it was medium strength. Well, that password verifier sucks, I thought. But then I noticed it explained this password was in leaks and should not be used.

Interesting. Instead of just telling you the quality of your password, it could tell you if that particular password has been found in a data breach.

So naturally, I had to type in M1PQ:

M1PQ – The Apple Net-Works BBS default password.

Somewhere, out there, someone actually used M1PQ – the most infamous default password from the early 1980s BBS scene – on the internet, somewhere, and it got leaked.

So, kids, don’t use M1PQ. It wasn’t a good password in 1984, and it is not a good password in 2024.

Yet, it’s one password I have never forgotten.

Counting characters in a string in Color BASIC

And so it begins…

I want to visualize some playing card statistics, and the easiest way I could think of to do this was to write a program in BASIC. Of course.

There are many approaches I can take, so as I put figure it out I will “show my work” and experiments that help me figure out which one will work best.

For my task, I will greatly simplify a deck of cards by ignoring suits (I just care if it’s an Ace, a Five, a King or whatever). I figure I can store it as a 52-character string representing each card:

A123456789JQKA123456789JQKA123456789JQKA123456789JQK

I could “shuffle” this “deck” and end up with a string in “random” order. I believe I have touched on randomizing a list in the past, and had some great suggestions in comments on how to do it better. Forgetting all of that, let’s just say I end up with as string that gets randomized.

But I digress…

The next question will be: “How many Kings are left in the deck?”

Some of you will already see I am heading down a poor path for doing this, but let’s start there anyway.

One way of counting a specific character in a string is to loop through it and use MID$ to pull out an individual character. Something like this:

FOR A=1 TO LEN(A$)
IF MID$(A$,A,1)="S" THEN C=C+1
NEXT

That would count all the “S” characters that appear in the string. Since every time MID$ is used it has to build a new string representing that portion of the original string, this should be our slowest way to do this. On a system with tons of strings in use, string manipulation gets real slow. For such a simple program, this might be fast enough.

Another approach, which was originally shown to me during a word wrap article as a submission, would be to use VARPTR to get the memory location of the 5-byte string ID memory, and then go to the memory where the string bytes are stored and use PEEK to look for them. You can find details in my earlier article on VARTPR.

The memory location that VARPTR returns will have the length of string as the first byte (byte 0), then an empty byte (byte 1, always 0), then the next two bytes will be the address where the string is stored (bytes 2 and 3) followed by a zero (byte 4). Knowing this, something like this would do the same thing as MID$:

A=VARPTR(A$)
SL=PEEK(A)
SS=PEEK(A+2)*256+PEEK(A+3)
FOR A=SS TO SS+SL-1
IF PEEK(A)=ASC("S") THEN C=C+1
NEXT

And do it faster.

VARPTR is a legal BASIC function, but it still seems nasty to reach in to string memory to do this. Thus, I came up with the idea of using INSTR. This function returns the start location of a matching string in another string, or 0 if not found:

PRINT INSTR("ABCDEFG","D")

That should print 4, since a “D” is located at the 4th position in the string.

You can also add an additional parameter which is where in the string to start searching. Doing this:

PRINT INSTR(5,"ABCDEFG","D")

…would print 0, because it starts scanning at the 5th character (just past the D) of the string, and then won’t find anymore.

I could start using INSTR with a position of 1 (first character), and if it comes back with a value other than 0, I found one. That value will be the position of the found character. I could then loop back and use that position + 1 to scan again at the character after the match. Repeat until a 0 (no more found) is returned. That lets the scan for characters be done by the assembly code of the BASIC ROM and is even faster. It looks like this:

F=0
xxx F=INSTR(F+1,A$,T$):IF F>0 THEN C=C+1:GOTO xxx

And we put them all together in a benchmark test program…

10 ' COUNTSTR.BAS
20 A$="THIS IS A STRING I AM GOING TO USE FOR TESTING. I WANT IT TO BE VERY LONG SO IT TAKES A LONG TIME TO PARSE."
30 T$="S":T=ASC(T$)
40 '
50 ' MID$
60 '
70 PRINT "MID$:";TAB(9);
80 TIMER=0:C=0
90 FOR A=1 TO LEN(A$)
100 IF MID$(A$,A,1)=T$ THEN C=C+1
110 NEXT
120 PRINT C,TIMER

130 '
140 ' VARPTR
150 '
160 PRINT "VARPTR:";TAB(9);
170 TIMER=0:C=0
180 A=VARPTR(A$)
190 SL=PEEK(A)
200 SS=PEEK(A+2)*256+PEEK(A+3)
210 FOR A=SS TO SS+SL-1
220 IF PEEK(A)=T THEN C=C+1
230 NEXT
240 PRINT C,TIMER

250 '
260 ' INSTR
270 '
280 PRINT "INSTR:";TAB(9);
290 TIMER=0:C=0:F=0
300 F=INSTR(F+1,A$,T$):IF F>0 THEN C=C+1:GOTO 300
310 PRINT C,TIMER

And running prints:

Wow, using INSTR is six times faster than MID$? And four times faster than VARPTR. Nice.

Now you know a bit about what I need to do. I need to represent cards in a deck (and be able to “draw” cards from that deck) and calculate how many of a specific card remain in the deck.

Since I do not need to track or show the suits (hearts, spaced, clubs, diamonds), I figure I could use one byte in a string.

To be continued … but in the meantime, do you have a better approach? Comment away!

BASIC and many input options…

Earlier this year, Jason Pittman shared a BASIC program with me that drew representations of all the letters of the alphabet. It was a cute program, and did some fancy drawing.

To select a letter, there was this block of code:

130 PMODE3,1:A$=INKEY$
140 IFA$="A"THEN410
150 IFA$="B"THEN510
160 IFA$="C"THEN590
170 IFA$="D"THEN680
180 IFA$="E"THEN750
190 IFA$="F"THEN820
200 IFA$="G"THEN900
210 IFA$="H"THEN1020
220 IFA$="I"THEN1100
230 IFA$="J"THEN1130
240 IFA$="K"THEN1220
250 IFA$="L"THEN1340
260 IFA$="M"THEN1410
270 IFA$="N"THEN1490
280 IFA$="O"THEN1560
290 IFA$="P"THEN1680
300 IFA$="Q"THEN1780
310 IFA$="R"THEN1890
320 IFA$="S"THEN2020
330 IFA$="T"THEN2100
340 IFA$="U"THEN2190
350 IFA$="V"THEN2250
360 IFA$="W"THEN2360
370 IFA$="X"THEN2440
380 IFA$="Y"THEN2490
390 IFA$="Z"THEN2550
400 GOTO130

I thought it might be fun to ask you — in the comments — to tell me how YOU would have done this. I can think of one way, that uses an Extended BASIC keyword, and another way, that would work on Color BASIC.

For a series of options that are sequential (like “A to Z”) there are certainly some options.

As a part two … what if they were not sequential? What if it was for a menu that had options like “A, B, C, D, Q, Z” or whatever? That let me think of a third way to do it to work in Color BASIC.

Comment away!

Steve Bjork TRS-80 Model 1 source code…

From “The Big List of TRS-80 Software” I found two early Steve Bjork programs. These appear to be the two programs that appeared on the People’s Software tape:

PeoplesSoftware-TRS80-Model1

The first is a Bio-Rhythm program listed as biortsb.bas (which I assume the “sb” at the end is Steve Bjork):

10 REM  BIO-RHYTHM ------ BY STEVE BJORK
20 DIMA(150)
30 FORX=1TO20
40 READA(X)
50 RESTORE
60 FORX=1TO20
70 READA(X)
80 NEXTX:A=0
90 FORX=9TO20
100 A=A+A(X):A(X+11)=A
110 NEXTX
120 CLS:PRINT" B I O - R H Y T H M"
130 PRINT:PRINT" BY STEVE BJORK":PRINT
140 INPUT"WHO ARE YOU";A$
150 INPUT"WHAT IS YOUR BIRTHDATE (M,D,Y)";M,D,Y
160 INPUT"AND THE DATE FOR CHART (M,Y)";B,C
170 Z=((C-Y)*365)-D-A(M+20)+A(B+20)+INT((C-Y)/4)
180 IF(Y/4=INT(Y/4))*(M<3) Z=Z+1
190 IF(C/4=INT(C/4))*(B>2) Z=Z+1
200 CLS
210 PRINT@960,""
220 FORX=1TO31
230 SET(17,X):SET(18,X):SET(49,X):SET(50,X):SET(81,X):SET(82,X)
240 SET(113,X):SET(114,X)
250 SET(33,X):SET(65,X):SET(97,X)
260 NEXTX
270 FORX=17TO114
280 SET(X,0):SET(X,32)
290 NEXTX
300 FORX=0TO30STEP5
310 SET(16,X):SET(19,X):SET(48,X):SET(51,X):SET(80,X):SET(83,X)
320 SET(112,X):SET(115,X)
330 NEXTX
340 FORX=5TO30STEP5
350 PRINT@INT(X/3)*64+3,X;:PRINT@INT(X/3)*64+58,X;:
360 NEXTX
370 PRINT@713,"LOW";:PRINT@729,"LOW";:PRINT@745,"LOW";
380 PRINT@720,"C";:PRINT@736,"C";:PRINT@752,"C"
390 PRINT@ 724,"HIGH";:PRINT@740,"HIGH";:PRINT@756,"HIGH"
400 PRINT@781,"PHYSICAL";
410 PRINT@796,"EMOTIONAL";
420 PRINT@813,"MENTAL";
430 PRINT@857,"NAME------------";A$
440 PRINT@921,"BIRTHDATE-------";M;"/";D;"/";Y
450 PRINT@985,"CHART DATE------";B;"/";C;
460 IF(C/4=INT(C/Y))*(B=2) A(10)=29
470 FORX=1TOA(B+8)
480 P=Z-INT(Z/23)*23:E=Z-INT(Z/28)*28:I=Z-INT(Z/33)*33
490 S=6.28319*(P/23)
500 GOSUB660
510 SET(INT(S*13)+34,X)
520 S=6.28319*(E/28)
530 GOSUB660
540 SET(INT(S*13)+66,X)
550 S=6.28319*(I/33)
560 GOSUB660
570 SET(INT(S*13)+98,X)
580 Z=Z+1
590 NEXTX:A(10)=28
600 PRINT@832,"FOR A NEW CHART";
610 PRINT@896,;"ENTER A '1'";
620 INPUTA
630 IFA=1GOTO140
640 CLS
650 STOP
660 T=S:U=S
670 FORW=1TO7STEP2
680 U=U*T*T
690 S=S-(U/A(W))+((U*T*T)/A(W+1))
700 U=U*T*T
710 NEXTW
720 RETURN
730 DATA6,120,5040,362880,39916800,6.22702E09
740 DATA1.30767E12,3.55687E14
750 DATA31,28,31,30,31,30,31,31,30,31,30,31

The second is a Perpetual Calendar program listed as percalsb.bas:

5  REM....PERPETUAL CALENDAR PROGRAM
6 REM....FOR RADIO SHACKS TRS-80
7 REM....BY STEVE BJORK
8 DIMA(150)
9 CLS:PRINT@400,"PERPETUAL CALENDER BY STEVE BJORK"
10 PRINT@ 448,"ENTER MONTH AND YEAR (MM,YY)";:INPUT M,Y
11 IF (M>12)+(M<1)THEN10
17 IF Y<100 THENY=Y+1900
18 RESTORE:FOR I=1 TO 12:READ V:NEXT I
19 FOR I=1 TO M:READ A$:NEXT I
20 B$=" ":L=0:IF INT(Y/4)<>(Y/4)THEN50
30 IF INT(Y/100)=(Y/100) THEN50
40 B$="LEAP-YEAR":L=1
50 T=INT((Y-1893)/4)
60 C=(Y-1893+T)/7:C=INT((C-INT(C))*7+.5)
90 RESTORE:FOR I=1 TO 12:READA(I):NEXTI:A(2)=A(2)+L
91 D=0:IF M=1 THEN 100
92 FOR I=1 TO M-1:D=D+A(I):NEXT I
100 D=(D+C)/7
110 D=INT((D-INT(D))*7+.5)
111 IF D=0THEND=7
120 CLS:PRINT@ 22,A$;" ";Y;" ";B$
150 T=0:FOR I=(D-2) TO 0 STEP-1:T=T+1:A(T+12)=(-I):NEXTI
160 P=1:FOR J=D TO 7:A(J+12)=P:P=P+1:NEXT J
164 RESTORE
165 W=0:FOR I=1 TO 12:READ X:NEXTI:FORI=1TO12:READB$:NEXTI
166 FOR J=8 TO 56 STEP 8:READ B$:PRINT@64+J,B$:NEXTJ
167 A$=" ":H=0:READ A,A$:IF A=0 THEN 170
168 IF INT(A)<>M THEN167
169 H=INT((A-INT(A))*100+.5)
170 FOR I=128 TO 832 STEP 128
180 P=0:FOR J=8 TO 56 STEP 8:S=I+J
190 P=P+1:Q=A(P+12)+(W*7)
191 Z=0:IF Q<10 THENZ=1
200 IF (Q<=0)+(Q>A(M))THEN220
210 PRINT@ S+Z,Q
211 IF H<>Q THEN 220
212 PRINT@ S+63,A$
220 NEXT J:W=W+1:NEXT I
270 END
1000 DATA31,28,31,30,31,30,31,31,30,31,30,31
1100 DATAJANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST
1200 DATASEPTEMBER,OCTOBER,NOVEMBER,DECeMBER
1300 DATASUN,MON,TUE,WED,THU,FRI,SAT
1400 REM...HOLIDAYS (M.D)
1500 DATA1.01,NEW YR,12.25,XMAS,2.14,VAL,7.04, 4TH,4.01,FOOL
1510 DATA10.31,HAL'WN
1800 DATA0,END

I have so far been unable to locate additional information on People’s Software, but it was produced by:

  • computer information exchange, inc.
  • box 158
  • san luis rey ca 92068

Can you find more about them?

Until then…

TRON arcade game clones for the CoCo

My all-time favorite arcade game was TRON, probably due to its connection with the Disney movie. I do not know if I played it much when it first came out, but during the time I lived in Broaddus, Texas (1985-1986 era) the local cafe had a TRON machine. I would walk home from school, stop in to get a .25 iced tea, and play TRON. I do not know how good I was at it, but I remember playing past enough levels that the game seemed to repeat and slow down.

Since then, I have only encountered TRON a few times. After moving to Des Moines, Iowa in 1995, I found a TRON in an arcade at our local Adventureland amusement park. I recall playing it there, but the joystick or spinner was in pretty bad shape.

I remember attending an arcade auction and a TRON game came up, but I stopped bidding at $250. I really wish I hadn’t, since years later, a TRON machine was for sale locally … for $1500.

My real interest in TRON came when a local bar-arcade opened and had a machine. I would stop by on my way home from work most days and play until I beat my previous score. Eventually, I had one “perfect” game where I got the score all the way up to where it would flip back over to 0 … and died on purpose. I was concerned that if I rolled the game back to 0, I wouldn’t get to enter my initials ;-)

My TRON high score from 2014.

This earned me a place on Up-Down’s wall of fame.

My TRON high score, immortalized in an instant photo.

To the best of my knowledge, that photo is still there, though the TRON machine died not too long after. They did get a TRON back a few times, but they all had issues — spinners that didn’t work, joystick that wouldn’t go in all directions, sound didn’t work, messed up screen, etc. I am very glad I got to play on a “good” machine all those times.

TRON-less.

Recently, I came across a video for a CoCo game called ElecTRON. I had forgotten about this TRON clone!

Then, I accidentally came across another CoCo game called KRON, which was another clone of TRON.

I now recall seeing both of these “back in the day” (and I likely had a “borrowed” copy of both of them at some point), but neither was a very good home version of TRON. It’s hard to replicate a game that needs a spinner and flight stick with a trigger ;-)

I just thought I’d share my TRON story, so there it is.

You can play these games online here:

Have fun! But probably not…

Steve Bjork’s TRS-80 Model 1 days

Steven Robert Bork (SRB Software) was such an iconic name in the Tandy/Radio Shack TRS-80 Color Computer community. Seeing his name on title screens of games etched it into my memory more than any other game author I can recall.

Recently, Roger Taylor spent over $6700 to acquire some of Bjorks software source code (disks and printouts) from an auction house. He has been discovering some interesting things, such as internal development tools Steve used as well as unfinished and unreleased programs. The archive goes back to Steve’s TRS-80 Model 1 days in the late 1970s.

One year before Steve wrote Popcorn for the CoCo, he had Space Ball for the Model 1:

I had also heard mentions of some multi-voice software music program he wrote. This was Soft Music:

I do not know how to use it, but when I figure it out, I will make a longer video of it. There appears to be several disks of songs available on a TRS-80 archive site, but I do not know how to get them in to the emulator yet.

There is also a Space Balls 2 which seems to be the same except for a countdown before the next ball drops.

Still a mystery is Galactic Fighter (not to be confused with a completely different game by that name released for the CoCo in 1984 by a different author). In a 2007 interview, Bjork described his Galatic Fighter game as similar to Galaxian, but predating it by three months. I see Galaxian listed as a September/November 1979 game, but I do not know when it was released in the USA. Wikipedia says Galaxian was the highest grossing game of 1980. I did manage to find this screenshot:

Roger Taylor has disks for this game, but is still working on safely getting them preserved and, hopefully, in a form that can run in an emulator.

Also during my research were two BASIC programs by Bjork – Perpetual Calendar and Bio-Rhythm. These appeared in a cassette tape collection called People’s Software./

Here is a link to the source of Perpetual Calendar that is supposed to be runnable in a web emulator, but I could not figure out how to start it:

https://willus.com/trs80/?-a+1+-p+10272+-f+1

And here is Bio-Rhythm on the same emulator site:

https://willus.com/trs80/?-a+1+-p+1226+-f+1

I do not know the date these were published, and do not see a date in the source listing. There may be a date in one of the other programs in the collection that might give us a clue.

Steve also created PEN BASIC, a program that added commands to the TRS-80 Model 1 for using a light pen device. I have heard him mention that he worked on a light pen, but never knew anything about it. Here is an ad mentioning it:

I also found a magazine article that goes in to details on the commands that PEN BASIC provides, and discusses how to use it.

And there is more to still be located… I see references to other things he created in the TRS-80 Model 1 days that I have yet to go searching for.

But one thing I have discovered is that Steve was known outside the pages of Color Computer magazines such as Rainbow. I find him referenced in articles in magazines of the day I had heard of (such as K-Power) and plenty I had never heard of (such as Softline and Today). There are some interviews, quotes, and a number of game reviews that mention his name as the author.

I now have a list of questions I wish I could ask Steve. When we were hanging out in Southern California, the subject of CoCo stuff would inevitably come up from time to time, but I wish I had dug deeper and learned more about some of his other works.

To be continued…