Note before proceeding that these programs were written for a CoCo 1 or 2 with a disk drive, to download ASCII BASIC programs. I doubt that they would work on a CoCo 3, they would need some small changes to be able to download tokenized BASIC, and they certainly won't work without a disk drive. (But if you want a cassette version, let me know, and I'll put it on my list of things to do.)
I have three programs freely available to handle these tasks. Unfortunately, these must be typed-in by hand. Even more unfortunately, one of them is a machine-language program, which means entering it by hand is tedious and error-prone. So, the first of these three is a small BASIC program that makes the machine-code entry easier.
That first BASIC program, called BINENTRY.BAS, reads
its input one line at a time, and part of each line is a checksum.
If any typos were made on a line, the checksum will not match, and
the computer will beep and prompt you for the same line again.
The task is still tedious, but at least you will know when you
are done that it was done right.
The machine-code program that you then key in, COMM4.BIN,
is a small communications program. It knows how to get data from
the serial port at 9600 baud (eight bits, no parity, 1 stop bit).
It simply leaves this sitting in memory, starting at address 4000
(hexadecimal). It is up to some other program to do something good
with that. If you downloaded machine-code, you could just save it
using the SAVEM command. However, if it was a BASIC
program, there is just no built-in command to tell Color BASIC to
save it from memory like that with the right file type.
The third program, SAVEBA2, calls COMM4.BIN,
and then handles the saving-to-disk part. It reads through the memory
buffer that the communication program filled, and writes it out as
a data file. The clever bit is, after writing it out, it does
some low-level work on the disk to find the directory entry for
that file, and adjusts its file type to be BASIC saved in ASCII
format.
All told, there are about ninety lines of BASIC you need to type, followed by about twenty-five lines of machine-code. Once that is done, you will be able to download programs to your Color Computer through its serial port! It still takes a little work, but you should never again need to key in another program that you find out there.
You will need a cable to connect your CoCo to your other computer. Assuming that the other computer meets the RS-232C spec, and is wired as DTE, you would wire the cable as follows. The CoCo end is a DIN-4 connector, the other end is a DB-25:
For a cheesy ASCII-art picture of the DIN connector pinout, see my description of the serial port, but note that the picture there is of the connector on the back of the machine; depending on which way you look at it, the connector that plugs into it will be numbered backwards. Be careful!
I have found it tremendously useful to have one of those RS-232 line testers, with LEDs showing which lines are being driven high or low. Before connecting things together, I plug that into each of the two connectors, one at a time, and see that they are not both trying to transmit on the same wire. If they are, I know I need a null-modem in between them.
This is the easy part. Tedious, maybe, but straightforward. Double-check for typos! These programs POKE bytes into memory, and do low-level munging on the disk's directory, so any mistakes could result in horribly trashed disks. Check your work! And test them on a scratch disk!
Enter and save the two BASIC programs first:
BINENTRY and
SAVEBA2.
Then run
BINENTRY.BAS as follows to enter COMM4
in BINENTRY format
and save it as COMM4.BIN as follows.
This program wants a filename to save, and then a pile of
binary (actually hexadecimal) data. Give it COMM4.BIN
as the filename, and then enter
the data.
If you make a typo, it will beep and prompt you with the same line
number again. Only when a line has been entered correctly (ie:
only when the checksum matches) will it prompt you with a
new line number. Don't ignore the beep or the line-number prompt!
It will not accept the next line until the one that it is asking
for has been properly entered.
After you enter the last line, it will automatically save the data into the file you named.
Although you could run COMM4.BIN by itself, and then
do anything you like with the data that it leaves in its buffer,
it is much easier to let SAVEBA2 call it and save
the results for you. This is described next.
Despite the long description that follows, SAVEBA2
is easy to use. Run it, enter a filename, hit 'Enter' once or
twice at the right times, and then enter 'Q' to finish. The main
drawback is that it is very slow.
SAVEBA2 uses COMM4.BIN to handle the
reading of the serial port, but then does the extra work of
saving the received program into a data file, and changes its
type to BASIC ASCII.
Since we have only a 16K buffer to work with, huge programs
will have to be sent in chunks. SAVEBA2 will call
COMM4.BIN repeatedly, appending all received data
into the same file, until you tell it to stop. On the computer
that is sending the file, you should edit it into pieces that
are less than 16K each, and send them when SAVEBA2
is ready for them.
When started, SAVEBA2 loads COMM4.BIN,
asks you for a filename, and then goes into its "receive" loop.
Each time around that loop, it waits for you to signal that you are
ready to send by hitting 'Enter', calls COMM4.BIN to
get a buffer full of data, and then (slowly) PEEKs that data from
the buffer, lists it on the screen, and writes it into the file you
named. Eventually, it will finish the entire buffer, and start the
loop again. When there is no more data to send, enter the letter
'Q' before you hit 'Enter', and SAVEBA2 will
break out of that loop, and finish up by adjusting the new
file's type.
While data is being accepted by COMM4, the activity
indicator will blink much more rapidly than before. When no data
is coming in, it goes back to its once-per-second rate. And once
it has got some data, ten seconds with no data is enough to
make it give up and return control to BASIC. You may have to
watch carefully to see the indicator blinking at the faster
rate; you would be surprised how fast a small file will fly by
at 9600 baud! You could miss all the action if you look the
wrong way for just a second!
The tricky bit here, communication aside, is adjusting the
file's type. Disk files written from BASIC programs are not
normally recognized as BASIC programs; they are just data files.
But SAVEBA2 is clever: it uses low-level disk
operations to find the directory entry for the new file, and
adjusts it to make the type into "BASIC ASCII". Just as an
extra assurance that it did the right thing, it prints the message
"FOUND file IN T,S" when it finds the directory entry to
adjust, where T and S are the track and sector number that the
directory entry was in. It should print this message exactly once.
The only things to be careful about are to send only chunks of
program that are less that 16384 bytes each; and to wait until
SAVEBA2 has finished listing/saving each and prompts
you for more, before you send the next chunk.
Break out the Doritos!
Please let me know how it goes! So far, I have no reports of anyone using this stuff. I hate to think that all this work was for nothing, or that some little problem might be making it unusable. I have tested these on my own machines, so they should work. If they don't, I really do want to hear about it, and get them fixed!
Cheers!
Bill.
Back to my top-level CoCo page