World of Commodore presentation
geoLink IRC chat
geoLink login screen
geoLink setup screen
geoLink ping screen
tone007 running geoLink on an Educator 64
an early build on jasmaz' SX64 at World of Commodore
NOTE: I won't be doing any more work on this version of the
program; the source will remain available in case anyone else wants to
do bug fixes or enhancements. geoLink was essentially an
experiment to see if such a thing was possible. While some people have
had good results with it, it is not reliable enough for regular use.
geoLink is a
networked GEOS application for
the Commodore 64 and an RR-Net (or compatible) network card, written
using the ip65 network
stack. It was assembled and linked on the '64
using geoProgrammer (no
A technical presentation on
geoLink was given at the C=4 Expo on 2010-05-29. If you want to see
the source code, you can download
the disk image; I've also got
plaintext copies that I extracted from the image with a utility I
wrote in Java:
For information about geoLink, make sure to look at
the README on the disk. To ask
questions, please use the #geos channel on NewNet. If you are
having a problem with geoLink, being able to enter this channel with a
different computer will at least verify that your issue is not with
IRC itself. Or you can send an email
to shadowm at lyonlabs dot org. Note:
For Scandinavian users wanting to access
irc.swipnet.se has been reported to work well.
2010-04-26 Version 1.01 released with the
- All debug and motd ("message of the day") output has been turned
off to minimize screen rendering and scrolling. This should solve
problems with geoLink being unable to keep up while the motd is
being sent right after connection.
- Double-buffering of the screen has been turned off. This gives a
small but noticeable increase in rendering speed.
- The latest release
(2010-03-21) of ip65 is being
used. This includes a TCP fix ("when using tcp_listen, an incorrect
sequence number was being sent in the SYN/ACK packet"). I've also
changed my build scripts to remove some more unused features, which
gives me additional memory to work with. Per Olofsson (original
author of ip65) is now credited in the info dialog along with the
current maintainer, Jonno Downes.
- A separate buffer is now used to build screen output (rather
than re-using the TCP input buffer).
- The channel name in the title bar is not changed when a /join or
/part is sent, but only when the corresponding notification is
received from the server.
- Support for desk accessories has been removed.
2010-04-14 Version 1.00 released, including
an IRC client instead.
2009-12-05 First prototype (0.96) shown
at World of Commodore in
Toronto. Contained only a simple chat client that talked to a
Here is a D64 image of geoLink
(version 1.01), which is a bootable GEOS 2.0 disk. You must boot
this image from device 8. All you need to run it is a Commodore
64, a 1541 disk drive (or 1541 Ultimate) and a mouse (there's also a
joystick driver on the disk; to use it instead, hit Commodore-i and
use the keyboard to select it). Oh... and a network card! geoLink
requires an RR-Net compatible card, and has been tested with 64NIC+,
1541 Ultimate, RR-Net, MMC Replay, and FB-Net. It's also been reported
to work with an RR-Net on
This D64 contains the geoLink source
code in geoProgrammer format. You can find a copy of
geoWrite here if you want to have
a look through it. Note that I have made some small modifications to
ip65 to make it work with GEOS; the binary (ip65-geos) is on this
disk, and here is an svn diff from
the 2010-03-21 release that I
checked into my own Subversion repository. You'll also want to study
the API reference,
although not all of it applies to geoLink, since I didn't compile it
with all options enabled. I also had to create my own names for the
dispatcher constants to avoid naming collisions when using
geoProgrammer (compare the K_ constants
in geoLink.inc with the KPR_ constants in the API
reference). For register and hardware information, see Jens
Replay, or the
For those interested
in working on bug fixes or enhancements, here are instructions for
building it from source:
- Boot the client
- Double-click the
README file (there's a copy of geoWrite and several printer
drivers on the disk), and read it. For those without a
printer for their Commodore system, here's
a scan of the README to print out
on your more modern computer.
- Double-click the
geoLink icon to start the client.
- The first time
the program is run, a setup dialog will appear. Enter your network
information or click "use DHCP", then click the OK icon. It is
suggested that you use a MAC address beginning with Commodore's
reserved OUI of 00:80:10. DHCP negotiation may take a minute or
more the first time.
- When connected
successfully, the program will ask you to save your settings to a
file. Although not necessary, this will make starting the program
again much easier. If settings have been saved, a dialog will
appear when the program starts asking you which settings file to
use (you can also cancel that dialog and enter new settings).
- To test
connectivity, you can select
options/ping from the
menu. Enter a hostname or IP address to ping. The exit icon in the
upper right of this dialog will exit the ping module.
- To enter IRC,
options/IRC from the menu. Further information
can be found in the README.
- Make sure you have all the right tools. The source is written in
geoWrite, and to build it, you'll need geoAssembler and geoLinker,
which you can find on my GEOS
- Download the source
code. Dissolve the D64 and put all the files on the same disk or
CMD partition. You'll need a 1581 or larger; I used a 1581 partition
on a CMD hard drive. An accelerator like a SuperCPU or TurboMaster
will certainly help.
- For geoLink, assemble the following files one at a time with
- Link the object files from the above step into an executable by
running geoLinker and selecting the linkage directive file
geoLink.lnk. At this point you should have the geoLink
program on your disk, but it won't run yet.
- Build the embedder by assembling the following files with
- Link the embedder by running geoLinker and selecting embed.lnk. At
this point you should have a program named embed on your
- Run the embedder. This will embed the TCP/IP stack
(ip65-geos) into VLIR record 9 of the geoLink
executable created in step 4, and the monospaced font
(VIP64-mono) into record 8.
- You should now have a working copy of geoLink. Let me know if you
have problems building it and I'll try to help.
According to legend, rms was once asked
when the next version of emacs would be released, and replied "Sooner
if you help."
- FEATURE REQUEST: provide a way to cancel lengthy DHCP
negotiation if it is not responding
- FEATURE REQUEST: respond to CTCP version requests
- FEATURE REQUEST: randomize a valid MAC address if none has been
- BUG: incoming chat message may be echoed back as though geoLink
user had said it
- BUG: crash on exit (only when using 'q' command from
- BUG: IP address validator allows nonsense address to be entered
(but doesn't pass it)
- BUG: messages from C64 Contiki IRC client show in italics as
though they were PMs
- BUG: some combinations of cursor left and backspace will corrupt
the input buffer if it's larger than what will fit in the text
input area (no repro case)