[Coco] GOTO and code maintainability

Gene Heskett gene.heskett at verizon.net
Tue Sep 8 13:00:15 EDT 2009

On Tuesday 08 September 2009, John Donaldson wrote:
>   I agree with your logic. The problem I see is that almost ALL
>assemblers on,  what ever processor it runs on has both these commands.
>Even the old PDP8/11's I use to program on had them. I question is "If
>they are so BAD why were they invented in the first place and why does
>even the  MSDOS assembler still have them. I would have thought that
>assemblers would have evolved to the point that  you did not  need them
>John Donaldson

Chuckle, I too have to admit that it has been occasionally difficult to do 
something without a goto in both C or B09.

But goto's aren't known by that name in assembler.  Stack housekeeping in 
assembly makes lots of folks write code that is actually bigger because they 
don't make use of re-usable subroutines.  Some of my later stuff does do 
this, and because its re-usable code, the executable is smaller.  The call 
overhead can make it slower if used to excess like is done in rzsz for the 
crc checking.  I'll get to that again below.

But a nights sleep on the problem usually gives me an idea of how to re-
arrange the code that is actually a more readable format and that makes the 
need for the goto disappear.  Not always of course, but often enough the 
phenomena has gotten my attention.  Whether that works for others or not 
depends on the individuals thought/dream processes I think.

Our C compiler (using cprep19 and with all the accessory utils, like 
ansifront.12, cnoy, copt2 etc) can generally deal with a goto if the src code 
stays under 30k or so, and this was an area I only ran into once, in rzsz.  
It did have size limits of course although the improvements I made to the 
last, cprep19 preprocessor module of it were sufficient to allow me to build 
rzsz-3.36 with it, and that total src was a bit over 34k for either rz or sz 
IIRC.  I don't recall if there were goto's used in Chuck Foresbergs rzsz code 
or not, too many years since I last built that particular utility.  Its on 
rtsi, or was at one time.  If not there now, let me know and I'll see if I 
can send it up again,  I know it works flawlessly between the coco3 and this 
linux boxes version of sz or rz when I'm logged into it with minicom from 

This is a file moving utility that really could use some help, it still does 
the crc calculations a byte at a time, and it should not.  Using the table 
lookup crc function (that BTW doubled its cps speed), it really should only 
do this once for every 256 byte block sent.  I think that would enhance its 
speed quite a bit, which on a stock coco is just over 450 cps on any 
connection speed above 4800, rising to about 725 cps on a nitros9/6309 
machine using a 9600 baud setting.  By doing the crc check as a single call 
that looped over the buffer without all that call overhead, I'd think that 
1000 cps on a 6809 coco might be reachable, and 1500 cps or better on a 
6309/nitros9 machine.

OTOH, like kermit, it can by diligent effort, move a perfect copy of a file 
over a 40 mile stretch of un-insulated, wet barbed wire fence if it had to.  
Both of those protocols were designed to work over less than perfect analog 
circuits from the ground up.  It takes a really broken phone circuit, one you 
almost couldn't talk over to make rzsz actually give up.

One other thing about that rzsz code, it checks to see by what name it was 
invoked, and will switch to xmodem or ymodem protocols if invoked as sx or 
sy!  They aren't nearly as robust a protocol, but with a good circuit...

So one can use a disk editor (dEd) to make directory entries that are named 
sx, sy that actually point to the sz executable's fd sector in the last 3 
bytes of the directory entry, ditto for rx & ry.  Just don't forget to add 
$20 to the length of the directory for each such link created, and increment 
the link count in the fd sector for the file.  I was always going to write a 
utility to do that, but never got a round tuit, my fault of course, an amiga 
got in the way.

Os9/nitros9 handles what is called a hardlink in linux flawlessly as long as 
the link counts in the fd are maintained, unless someone has removed that 
code, not knowing what it was for.

FWIW, I exercised those xmodem and ymodem protocols too before uploading it 
all those years ago.  They work.

I suspect that the hardlink ability is a little known fact about os9 though. 

Your trivia facts for the day. :)


Cheers, Gene
"There are four boxes to be used in defense of liberty:
 soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
The NRA is offering FREE Associate memberships to anyone who wants them.

Truthful, adj.:
	Dumb and illiterate.
		-- Ambrose Bierce, "The Devil's Dictionary"

More information about the Coco mailing list