My first paid programming gig ($20) was implementing the XMODEM checksum in 6502 assembly for a BBS sysop who had bought an early 1200 baud modem, only to find that his Atari BASIC BBS software was computing the checksum so slowly that it still created slowdowns in file transfers and needed a USR() that could compute it faster.
I learned a lot about protocols and algorithms from that exercise (now trivially simple, but wasn't for me at the time).
One of the annoying things is that the most convenient way to encode a short machine code subroutine was in a BASIC string. But BASIC strings are not loaded in a predictable location in RAM, so any code intended to be encoded in a BASIC string has to be relocatable (using only relative branches/jumps). That's not an issue for a simple XMODEM checksum calculation, of course.
On the Sinclair computers (incredibly popular in the UK, the BASIC was not written by Microsoft) it was in fact possible to predict where the program would be loaded, so a very popular place to store machine code was in a REM statement. This also had the advantage that you could save the machine code by saving the BASIC program.
On the ZX81, the first byte of the payload of a REM statement at the beginning of the program was at address 16514, hence:
RAND USR 16514
was the command to run the machine code. (RAND set the random number seed and was just used as a convenient way to turn the USR function into a BASIC statement. The contents of the BC register were the return value from USR).
That's what it was! As a kid I had the TRS-80 Coco, related to the Sinclair, and I remember one of those graphing programs you typed in from Rainbow magazine, and I think it was able to plot the equation you had in a REM statement, that also had to be on a particular line number. There was a statement at the top of the program, like what you have here (maybe a POKE?), and I always knew it did something magical to be able execute from a REM statement, but I could never put it together.
The Star Trader game was also really ahead of its time.
There was no Google, and I've forgotten about it until just now. But, that makes sense. Thanks.
Even better, there were hooks that allowed a machine-code routine triggered by & to further interpret the rest of the statement, so you could have a special-purpose "&print" statement, for instance.
BBSs were a huge part of my life in the 90s. I wanted teenagers of today to be able to feel the same thrill of socializing like we did back then. BBSs are not as good as the Internet, obviously, but there are no full fidelity replacements for BBSs nowadays - if you were there, you get it.
I was a 'sysop' in 1983. Had I known BBS would still be discussed today I would've snagged a video recorder and took video. It was a TRS-80 Model III with two floppies with an auto-answer 300 baud MODEM. After business hours only.
I'd say there were both advantages and drawbacks to the BBS scene. The biggest single advantage was that it tended to be local - of necessity, since long-distance phone calls to reach distant systems could cost a fortune, even at night rates.
There were attempts to address this. Networked forums became available, and there was PC Pursuit, an effort by Telenet to sell off-peak capacity on their X.25 network to people wanting to call faraway BBSes. A user could dial in to a local access number, then use their network to dial out to a remote system, provided their network could dial it from a nearby modem pool.
This remark reminded me (when locals were king) that at one time (late 80s, early 90s?) the US Small Business Admin. created a BBS that enabled access via modem and a long-distance toll-free number on Sprint. It lasted for less than a year, but having back-and-forths getting to know people across the country was a real treat.
BBSes were a very big part of my early computer days. I learned real programming in high school teaching myself and hacking on BBS source code in Pascal. Not knowing that I would soon be on the Internet, one of the reasons I went to university in a city was so that there would be local BBSes. All of that had huge impact on my life and I’m just one small example. I and many others owe huge thanks to Ward Christensen and all those who carried on what he started.
Was it Telegard? WWIV was originally in Pascal but by the time I got to it, it had been rewritten in C++. Telegard was built off the Pascal version of WWIV (if I'm remembering right). There was another BBS based off WWIV in Pascal, but I don't remember the name.
I started on a Commodore 64 and C-NET BBS then was gifted a PC in late 1990 and WWIV was the closest thing with source code. We had a pretty decent modding community for both C-NET and WWIV. Good times.
That’s a name I remember from my youth. I became pretty interested in all these curiously named file transfer protocols (Xmodem, Zmodem, Kermit, bimodem, etc.) and learned what I could from poring over microfiche archives of magazines and papers at the local library.
BBSes was such a huge part of being into computers in the 80s and 90s.
I really wish this culture could be understood by future generations. Yes, we have the BBS Documentary movie but we need so much more. Everything non-US is underdocumented, and all the subcultures such as the eLiTe scene, the demo scene, the vision impaired stuff, all of that risks being forgotten with time.
This is a relevant reflection and I have contemplated collecting BBS memories from my network and strangers. Will be doable once my kids are a bit older and work is a bit leds intense.
Let us stay in touch!
2:206/149 or about in my profile and you’ll find me :)
Even when you had a networked forum like FidoNet's Echomail (or Usenet, for that matter), it would take time for messages to propagate through the network - and they could sometimes fail to be delivered.
What are some websites that host the text files, ansi art, and computer programs from old school BBS systems? I would really love to be able to mirror that with wget and explore it in emacs.
One of the more popular DOS-based BBS software platforms of the early 90s was VBBS. It was interoperable with WWIVnet, which is part of why it was popular.
Its author/developer/maintainer was blind. You can imagine how well it worked with screen readers and other accessible technology (which was primitive at the time, and yet somehow better than it is today).
Text on a terminal is much better suited to accessibility technologies, whether readers or braille terminals. BBSes were all about text on terminals, and it was a place where folks who used accessibility tools could choose whether to identify themselves as someone who needed it... and most of the time if they chose not to make it known, none of the other users had any idea.
"You are your own words" is a BBS-ism. For people who are in the deaf community or who used tools because of their sight, being able to be known primarily by their words and not by the way that they used them was absolutely incredible.
I want to see a documentary of this in the style of alternating scenes of a) narration over still photos and b) contemporary music alongside silent video of the people behind this community.
An amazing guy, and not much of an attention seeker. That he stayed at IBM all his productive work life (1968-2012) says something, especially as "His last position with IBM was field technical sales specialist."
I had a meeting with him (as a customer) in probably 2007. Super unassuming and humble guy. I had no idea who he was during the meeting until after, when I saw him get in his car with an XMODEM license plate and googled him and found the connection. RIP, Ward.
I knew him as one of the co-founders (with Randy Seuss and Ted Nelson) of Evanston's Itty Bitty Machine Company, a storefront that sold (among other things) Digital Group 8085/Z80/6502 machines. My high school friend, Alex Ellingsen, worked there (while in high school).
Recently, I've been playing with MMBasic (for E32s and RPi2040s) and a question about XMODEM and YMODEM came up on their online forum. Ward responded immediately to my inquiry, and gave me the exact information I needed.
I met him back around 1980... and yet this is the first I'm learning of the Itty Bitty Machine Company... I'm sorry I didn't hear about this from him along the way.
BBSes were a big part of my pre-teen years, before dial up internet access became available in my area. Really difficult to explain to younger folks what it was like. XMODEM was the file transfer protocol for more than a decade, as I recall.
A friend who works in embedded systems pointed out that XMODEM protocol communication is used everywhere in embedded; it may be that the protocol is more widely shipped now than it has been in the past!
Many Cisco, Adtran, Juniper etc switches and routers have it in their firmware also.
Kermit is interesting also, though my understanding was that it was not quite as good as taking advantage of higher available data rates; am I wrong about that?
Entirely possible I don't understand something as I'm not sure what you mean by taking advantage of higher data rates. We're sending data over UART at the max rate that doesn't introduce too many bit errors. Mainly we needed a protocol to correct for the bit errors (by rerequesting data) and I've always used x/y/z modem for that purpose.
I picked Kermit this time because I didn't want to implement x/y/z modem again and had never used Kermit.
This [1] claims Kermit is faster in some instances depending on what features you have enabled.
I was wrong, and you are correct! I had thought that XMODEM was more efficient as the bandwidth increases but I was wrong; due to the fixed length of time for the ACK response, the efficiency drops to under 80% at a data rate of 9600bps; Kermit does not have this issue.
Kermit defaulted to settings that would transmit 8-bit data over 7E1 through a noisy 110 bps channel (not really, but that gives the flavor - though it could do that if asked). Much-maligned because most terminal programs implemented the base case and nothing more, which was awful.
It was not trivial to reconfigure, but if you did, it had very good throughput. And if you had to make an EBCDIC/ASCII translation, it did that well. Kermit always works. That's the point of the protocol. If you want it to be fast, that's up to you. I did not realize this until I met Kermit gurus who taught me.
I remember riding my bicycle over to the local sysop's place to pay $5 cash for my BBS account as a young teen. Looking back this was probably ill advised and risky. Turned out the sysop was only a couple of years older than me.
> Christensen, along with partner Randy Suess,[2] members of the Chicago Area Computer Hobbyists' Exchange (CACHE), started development during a blizzard in Chicago, Illinois, and officially established CBBS four weeks later, on February 16, 1978. CACHE members frequently shared programs and had long been discussing some form of file transfer, and the two used the downtime during the blizzard to implement it.[3][4][5]
I feel like many of us programmers here could do with a blizzard, weeks without work to just build things. If you're like me, so often you're so busy it's hard to ever stop and just build things for fun, for play.
Well, this isn't how I expected to learn of his passing. All of the people I would ask for confirmation are gone, as our computer user group members have aged out.
Ward was a first principles thinker. Lately he was very active with Blinkies, helping folks learn to solder and make their own electronics.
Back in the days before boot ROMs were standard computer hardware, you had to use the toggle switches on the front of a computer to enter programs and data, even if you had a tape or disk drive.
Usually, this involved reading a page containing the bootstrap program, and toggling it into the computer. This process was repetitive, and error prone, because you're moving your attention back and forth, and can easily lose your place.
Ward solved this problem by recording himself reading the the boot loader to audio cassette tape. He could then hit play, and enter the data given to him by his recorded self, and focus only on the switches. ;-)
--
The origin of ReSource
Once upon a time, Ward had written a program, and some time later, needed to modify it, but found he had lost the source. He wrote a new program called resource, one of the first reverse assemblers.
--
Ward once entered a "shortest useful program" contest in the days of CP/M. Here is his entire entry, in Octal, as listed on page 6 in [1]
Smodem was a game changer. So was HS/Link. Being able to chat while still doing a download was awesome. Realizing that you can upload and download at the same time was awesome. When those protocols came out they blew my mind... and before that the first time I got the added speed from Zmodem over Xmodem I was amazed as well.
I sure miss those days. First modem was 2400 baud, so I was kind of a late comer.
Does anyone have an actual notice or obituary other than an anonymous Wikipedia edit? I'd like to check in with some of the CBBS people I know, but having an actual obit would be good.
Bummer. Not sure it's possible to overstate the impact BBSs had on me and my life between 1983-1997 (and all the things downstream of that). Certainly used a whole lot o' Xmodem initially.
The link below is to a PDF of an article penned by Ward and Randy Suess for the Nov. 1978 issue of Byte, called "Hobbyist Computerized Bulletin Board". Details their development and functions. [0] Followed by a link to the 2019 NYT obit for Seuss. [1]
94 comments
[ 2.3 ms ] story [ 161 ms ] threadI had an online text chat with him on Compuserve back in the 80's; he was surprised anyone knew who he was. Nice guy.
My first paid programming gig ($20) was implementing the XMODEM checksum in 6502 assembly for a BBS sysop who had bought an early 1200 baud modem, only to find that his Atari BASIC BBS software was computing the checksum so slowly that it still created slowdowns in file transfers and needed a USR() that could compute it faster.
I learned a lot about protocols and algorithms from that exercise (now trivially simple, but wasn't for me at the time).
what's a USR()?
asking cuz USRobotics was a modem company
https://www.page6.org/archive/issue_11/page_24.htm
One of the annoying things is that the most convenient way to encode a short machine code subroutine was in a BASIC string. But BASIC strings are not loaded in a predictable location in RAM, so any code intended to be encoded in a BASIC string has to be relocatable (using only relative branches/jumps). That's not an issue for a simple XMODEM checksum calculation, of course.
On the Sinclair computers (incredibly popular in the UK, the BASIC was not written by Microsoft) it was in fact possible to predict where the program would be loaded, so a very popular place to store machine code was in a REM statement. This also had the advantage that you could save the machine code by saving the BASIC program.
On the ZX81, the first byte of the payload of a REM statement at the beginning of the program was at address 16514, hence:
was the command to run the machine code. (RAND set the random number seed and was just used as a convenient way to turn the USR function into a BASIC statement. The contents of the BC register were the return value from USR).The Star Trader game was also really ahead of its time.
There was no Google, and I've forgotten about it until just now. But, that makes sense. Thanks.
There were attempts to address this. Networked forums became available, and there was PC Pursuit, an effort by Telenet to sell off-peak capacity on their X.25 network to people wanting to call faraway BBSes. A user could dial in to a local access number, then use their network to dial out to a remote system, provided their network could dial it from a nearby modem pool.
Can dang or another mod move the parenthetical modifier?
That was my third attempt at being concise and informative...
Was it Telegard? WWIV was originally in Pascal but by the time I got to it, it had been rewritten in C++. Telegard was built off the Pascal version of WWIV (if I'm remembering right). There was another BBS based off WWIV in Pascal, but I don't remember the name.
https://en.wikipedia.org/wiki/Telegard
I started on a Commodore 64 and C-NET BBS then was gifted a PC in late 1990 and WWIV was the closest thing with source code. We had a pretty decent modding community for both C-NET and WWIV. Good times.
You're probably thinking of Renegade, which lives on at https://renegadebbs.info/
Yep, it’s one of those names I can’t think of without seeing it emblazoned in green on a black background on my old Apple Monitor III screen.
I really wish this culture could be understood by future generations. Yes, we have the BBS Documentary movie but we need so much more. Everything non-US is underdocumented, and all the subcultures such as the eLiTe scene, the demo scene, the vision impaired stuff, all of that risks being forgotten with time.
Let us stay in touch!
2:206/149 or about in my profile and you’ll find me :)
Finding something online was a journey and it's often the journey that teaches you more than the destination.
:-)
What are some websites that host the text files, ansi art, and computer programs from old school BBS systems? I would really love to be able to mirror that with wget and explore it in emacs.
Edit: http://www.textfiles.com/directory.html looks good.
https://www.kmoser.com/bbs/
The demo scene is still alive and kicking, by the by :)
Its author/developer/maintainer was blind. You can imagine how well it worked with screen readers and other accessible technology (which was primitive at the time, and yet somehow better than it is today).
Text on a terminal is much better suited to accessibility technologies, whether readers or braille terminals. BBSes were all about text on terminals, and it was a place where folks who used accessibility tools could choose whether to identify themselves as someone who needed it... and most of the time if they chose not to make it known, none of the other users had any idea.
"You are your own words" is a BBS-ism. For people who are in the deaf community or who used tools because of their sight, being able to be known primarily by their words and not by the way that they used them was absolutely incredible.
(edit: typo)
I want to see a documentary of this in the style of alternating scenes of a) narration over still photos and b) contemporary music alongside silent video of the people behind this community.
http://www.bbsdocumentary.com/director.html
Recently, I've been playing with MMBasic (for E32s and RPi2040s) and a question about XMODEM and YMODEM came up on their online forum. Ward responded immediately to my inquiry, and gave me the exact information I needed.
Very nice guy.
Many Cisco, Adtran, Juniper etc switches and routers have it in their firmware also.
I picked Kermit this time because I didn't want to implement x/y/z modem again and had never used Kermit.
This [1] claims Kermit is faster in some instances depending on what features you have enabled.
[1] http://www.columbia.edu/kermit/perf.html
It was not trivial to reconfigure, but if you did, it had very good throughput. And if you had to make an EBCDIC/ASCII translation, it did that well. Kermit always works. That's the point of the protocol. If you want it to be fast, that's up to you. I did not realize this until I met Kermit gurus who taught me.
I feel like many of us programmers here could do with a blizzard, weeks without work to just build things. If you're like me, so often you're so busy it's hard to ever stop and just build things for fun, for play.
Ward was a first principles thinker. Lately he was very active with Blinkies, helping folks learn to solder and make their own electronics.
Back in the days before boot ROMs were standard computer hardware, you had to use the toggle switches on the front of a computer to enter programs and data, even if you had a tape or disk drive.
Usually, this involved reading a page containing the bootstrap program, and toggling it into the computer. This process was repetitive, and error prone, because you're moving your attention back and forth, and can easily lose your place.
Ward solved this problem by recording himself reading the the boot loader to audio cassette tape. He could then hit play, and enter the data given to him by his recorded self, and focus only on the switches. ;-)
--
The origin of ReSource
Once upon a time, Ward had written a program, and some time later, needed to modify it, but found he had lost the source. He wrote a new program called resource, one of the first reverse assemblers.
--
Ward once entered a "shortest useful program" contest in the days of CP/M. Here is his entire entry, in Octal, as listed on page 6 in [1]
[1] http://vtda.org/docs/computing/AltairUserGroup/AltairUserGro...RIP Ward.
But XMODEM is still the oldest.
They were successor protocols designed and implemented to fix perceived shortcomings in the original one.
1977: https://en.wikipedia.org/wiki/XMODEM
1985: https://en.wikipedia.org/wiki/YMODEM
1986: https://en.wikipedia.org/wiki/ZMODEM
SModem supported simultaneous upload/download and chatting.
I sure miss those days. First modem was 2400 baud, so I was kind of a late comer.
Maybe HN should carry a black banner today.
https://www.theregister.com/2024/10/15/ward_christensen_obit...
[0] http://vintagecomputer.net/cisc367/byte%20nov%201978%20compu... (pp 150-157)
[1] https://www.nytimes.com/2019/12/20/technology/randy-suess-de...
The XYZ Modems: https://web.cecs.pdx.edu/~rootd/catdoc/guide/TheGuide_226.ht...
As far as I can recall, it didn't have a sliding window, once protocols, like kermit, added sliding windows the speed jumped a huge amount.
Well worth watching.