Over on YouTube, user @ms-ex8em pointed me to the November 1988 issue of Dragon User magazine and a little program that helps you type in machine code program listings accurately.
I recall spending countless hours typing in machine code programs from Rainbow Magazine “back in the day”. These programs would be a few lines of BASIC followed by dozens or hundreds of lines of DATA statements with numbers that represented the bytes of the machine language program.
One such program I specifically remember was Zonx, a cool game with background sound effects. It appeared in the October 1985 issue. You can see what I typed in by checking out page 65. And page 67. And page 68. And page 70. And page 71.
And, somehow, I managed to type all of those numbers in and get a working program!
Rainbow did have one thing to help — and perhaps I used it. They had a small program you could run, then as you typed in your program listing, when you got to specific lines you could hit a key and it would spit out a number (a checksum?) and see if it matched their numbers:

Above, you can see what number should be expected when you got to line 150, 310, 440 and so on. After all the code was typed in, the final number it should give you was 238. This required you to type in the program exactly as it appeared including spaces and any other formatting.
It was not optimal, but it was better than nothing.
I also saw some BASIC loaders for machine language that took matters into their own hands, and had built-in checksum values in their DATA statements. For example, they would put a specific amount of numbers on each line, with a checksum of those numbers at the end. Say that amount of numbers was five. A line might look like this:
1500 DATA 1,1,1,1,1,5
In that silly example, you could add up ever five bytes you READ and then compare that to the 6th byte in each line. If it matched, continue. If it didn’t, the loader code would print some kind of message, hopefully indicating what line had a mismatch.
I always appreciated program listings that did that.
Now, back to @ms-ex8em… The code they shared was quite different. You can find it on page 12:
I will do my best to type it in here, accurately.
10 REM HEX LOADER
20 CLEAR 200,31599
30 INPUT"START";ST
40 INPUT"END";ED
50 FOR J=ST to ED STEP 8
60 PRINT USING"##### : ";J;
70 INPUT A$
80 CS=0
90 FOR K=1 TO LEN(A$)
100 CS=CS+K*VAL("&H"+MID$(A$,K,1))
110 NEXT K
120 INPUT" = ";C
130 IF S<>CS THEN PRINT"CHECKSUM ERROR-TRY AGAIN":SOUND 1,1:GOTO 60
140 FOR K=0 TO 7
150 POKE J+K,VAL("&H"+MID$(K*2+1,2)
160 NEXT K,J
First comment… There appears to be a mistake in line 150. It should have two closing parens at the end of the line.
Now let’s see what this code is doing.
In line 10, the CLEAR reserves memory (so BASIC cannot use it) starting at 31599. This is because the machine language program will load starting at 31600.
In line 40, the user is asked to input the start and end of the program they will be typing in.
In line 50, there is a FOR/NEXT that goes from start to end, stepping by 8. This tells me they expect 8 bytes of data on each line the user types in. The first input should be at 31600, then the next at 31608 and so on.
The user types in the 16 characters (representing 8 hex bytes) shown in the box below. They look like this:
31600 : 8E7B6F9F74Be012B = 1016
In line 80, a checksum is calculated by adding up the value of each character typed in that line.
In line 120, the user is asked to type in the checksum shown in the data listing.
In line 130, if the number the user typed in (from the data listing) does not match value the program calculated, an error message prints and it goes back to let the user retype the entire line.
If it matched, line 140 will then go through those 16 characters and create the byte value for each of the 8 data bytes and POKE them into memory at the proper place.
This repeats until the end address is reached. At that point, some new assembly language program has been loaded into memory starting at 31600.
Pretty cool!
The problem @ms-ex8em was seeing with this program was a ?TM ERROR. That is most likely showing up in line 150 because of the missing paren. Fix that, then maybe the rest will work ;-)
I thought this was a neat way to enter in machine code. What other neat ways did you see back then?
Comment away…
It’s interesting that this concept kept going on for a few years.
I would say that the programs that were written in pure BASIC, or for that sake machine code programs that had assembler listings (in addition to DATA statements to type in) tended to be educational to some degree.
But for those programs that just were pages on and on with DATA statements it seems like it would had been better to just put the programs on cassette tapes, sold separately.
Was the idea to have ads on the same or the adjacent page to the DATA listings hoping that those who typed in the listings would also read the ads?
My impression is that those super long listings were more common in English language magazines (I mostly read Your Computer from the UK, but IIRC some US Commodore magazine found it’s way over here too) than in the Swedish magazines where basic were more common, and the DATA statements typically were game graphics and maybe some shorter machine code routines.
Going off on a complete tangent, it’s interesting how “routine” stopped being used and “function” became common at about the time languages like C started being common.
I certainly recall plenty of “endless pages of DATA” listings in Rainbow. I wish I had tried to learn machine language much earlier. I just skipped over all those assembly listings, early on.
Worse than ads in the middle of listings were when something would start on page 10, then say “Continued on page 105.” Didn’t newspapers used to do that?
Routine. Ah, GOSUB – go to subroutine. I was going to say I don’t remember what I called them, but in typing that, I realize “line 1000 is the input routine” so yeah, routine. I guess function came to me from C, as well.
Worse: apps.
Does anyone say “I’m writing an app for the BBC Micro?”
Before computerized desktop publishing I think that “continued on page 105” were somewhat common, although it was likely seen as bad workmanship from the editor. I think it was more common in the 1970’s electronics magazines that I happen to have than in the 1983-1985 home computer boom magazines that I also happen to have.
Re apps:
Before smartphones were a thing, in Sweden/Swedish an application was something that you sewed on to clothing, and a mobile was a thing that would hang from the ceiling for the smallest children to watch when it would move due to air drag and whatnot. Semi recently someone found an old book about these topics called “Applications and mobiles” (but in Swedish) and a photo of that book became a small meme circulating the net for a while :)
Oh yes, I am familiar with that kind of “mobile.” But the term application in sewing is new to me, though probably exists here.
The UK used “mobile telephone”, which made much more sense to me than “cellular telephone.” Most users have no idea what “cellular” implied. Thus, “cellphone” is more of a term, rather than a description now.
But that brings me to a very important part that we haven’t
[Continued on Page 70]
I love Zonx! Yes the sound blew me away.
In 1984, I moved from Houston, Texas to Broaddus, Texas (population 225). I bet I had the only computer in town other than a few PETs and maybe 3 Apple 2s at the school. Rainbow was my connection to the outside world. I remember typing in Zonx and was fascinated by the “heavy metal” music it played, and full background sound effects. It, and Grabber, may be the only two CoCo 1/2 games that did something like that.