The following message was originally posted on V128's ComLink network on January 30th,
1995, by Adam Fanello. It has been edited and condensed.
FROM THE BEGINNING...
I started on a C128 version of Color 64 four years ago because, as a programmer, I liked
Color 64's flexibility and large selection of mods and games, but I wanted to use the C128
mode. Initially, V128 was simply Color 64 running in C128 mode. That made it faster and
let us add more mods without the worry of running out of memory. V128 has evolved
greatly since its first release three years ago. Myself, and others, have added feature upon
feature to V128, in both mods and upgrades. It has surpassed its Color 64 heritage, and has
become a far more powerful entity. Unfortunately, this same heredity that V128 originally
used as a crutch to launch it into rapid popularity is now serving as shackles, limiting it
from full maturity and expansion. First, V128 must be built upon an operating Color 64 system. Initially, this helped earn
easy converts from Color 64 to the new software. But now, it only serves to complicate
setting up a new system. In order to use V128, a new SysOp must first get Color 64, then
convert it to V128, then pile on layer after layer of mods and upgrades, just to achieve was
is commonly considered a base system. This does not make a very marketable product.
While a freeware Color 64 can help with much of this problem, this dilemma is not the
entire story. Color 64's, and thus V128's, base code is obsolete and difficult to work with! When Greg
Pfountz started splitting the system into separate overlays, about a decade ago, he was
using cutting edge programming. However, overlays are bulky and inefficient in their
repetitive code and long loading times. While the onset of hard drives have assisted to
minimize this problem, it still remains. Color 64 was created to run on floppy drives. Now
hard drives, with sub-directories and fast access, are the norm. The difficulty of working
with Color 64 and V128 systems is that they have undergone so many changes since the
basic structure was created. One of the prime reasons V128 has yet to have a functional
YMODEM protocol, is due to the absolute mess of the upload and download BASIC
coding. It is what we programmers call "spaghetti code." It's all a big jumble of branching
around and "hacks" to add features and fixes, all the way back to when Greg Pfountz
added multi-Punter! All of V128's layers and layers of mods, even once all merged in, leads to conflicts. There is
just too much code, fighting over the same lines and the same variables. It all leads to
conflicts. This is all especially difficult for those who don't consider themselves
programmers. I spend much of my time helping people track down conflicts between mods.
We aren't just running one BBS program here. This is V128 plus a mesh of mods, upgrades
and "hacks." What is needed, is a fresh start. A new system, and a new standard. One that
has what we all want built in, and lets you add what YOU want, without worry of conflicts.
A system with a base flexibility that can have every system look and act completely
different, without changing a single line of BASIC. And, a system that is built on a base
structure, designed and intended to be expanded upon. What we need, is Centipede!
BACKING UP A LITTLE...
I recognized the need for this system long ago, as did all those who nagged me to write it.
But I didn't want to leave Color 64. It is the base of V128's being, and what I had learned
to blindly love. Things started to change when Fred Ogle ended Color 64 v7.3's life on the
market. He believed he was serving the fatal blow to V128. He'd be kicking himself now to
learn his act was the catalyst to the next evolutionary step for Color 64 and V128! My original intent was to make "System V128," which was described as Color 64 v7.3 with
V128 and many of the existing V128 mods built in as standard features. This would include
a new manual that would combine Color 64's and V128 into a single work. Had I stuck to
that plan, System V128 would probably be out by now. But I didn't. Before going too far
into System V128, I asked for input from existing V128 owners via a survey of twenty-one
questions. The results were startling! More people than I had expected had realized the
need for a larger overhaul. EVERY respondent was ready and willing to scrap their hard
fought for main overlays, for new ones. This support from my customers gave me the push
to start seriously considering some more drastic steps in improving V128. I started with a
new menu structure based upon the same concepts of the highly flexible, and highly
popular G-Menu mod. With a new, fully customizable menu and command structure, I
began to modularize the BBS. Initially, I simply starting with what would have been
System V128, and rearranging and renumbering code into smaller modules. I then saw the
use in multiple layers of modules. Then levels of variable killers. Then I started discovering
some secrets of Commodore BASIC: Hidden variables, great speed increases via less
individual variables and arrays, and reading variables in as program code rather than from
sequential files. Even the machine language began to modularize for easy additions. A new
BBS program was forming before my eyes. Past suggestions, thoughts, and experiences
flowed from my hands onto paper and keyboard alike. Simply assimilating it all into a
manageable form took a couple of weeks! The resulting code that I am now laboriously
typing out will be, Centipede. It's the system you've always wanted. A system whose
abilities include what I have talked about here, plus so much more, while STILL running
all those hundreds of on-line games that have been written for Color 64 and V128 over the
past decade! I had intended to wait until Centipede was in beta testing before composing this message.
Unfortunately, with little information comes the rumors, misunderstandings and fears. I'd
like to conclude this message with my assurances that I am NOT dumping Version 128 or
Color 64! Those systems are, in essence, the father and grandfather of Centipede.
Centipede may be the new kid on the block, but I will not forget its proud lineage. I will
continue to provide Color 64 and V128 support and V128 sells up to and following the
release of Centipede. As always, your suggestions and questions are not only welcome, but actively solicited.
Thank you for taking the time to read this message.
Adam Fanello of BugSoft
4822 Larwin Ave.
Cypress, CA. 90630-3515
Nature Reserve BBS: (714)-828-7296 and (714)-952-2696 (Handle: ANT)
Or Contact him by the Hot-Link listed below!!
BugSoft Home of Centipede BBS ©1997 by Adam Fanello.
The following message was originally posted on V128's ComLink network on February 20,
1995, by Adam Fanello. It has been edited and condensed.
There has been many questions (prodding actually) on some specifics about Centipede... so
I am typing up some here from my notes. I have two notebooks and a disk box of 4" x 5"
cards full of data. One notebook has the computer's memory map, and the other contains
BASIC variables and file formats. The cards describe each BASIC overlay and module,
and, each script, machine language, and variables file. The following is information from these notes. While in some sort of order in my notes
(usually numeric or alphabetic), they will probably appear to be random by topic. Some
will be general ideas, some specific programming techniques, and whatever else comes to
mind. Information will be presented at all levels of expertise. Some may require detailed
programming knowledge, some Color 64 or V128 knowledge, and some nothing beyond
what you already know about telecommunications. It's all mixed together here. I'm leaving
it up to you to get what you can out of it all. This should answer many of your questions,
while undoubtedly creating new ones. (Sigh.) ;) The C128 has two TOD (time-of-day) clocks. Color 64 uses only one of them for, you
guessed it, the time of day. It uses what is called the jiffy-clock for keeping track of time
on-line or idle time. The jiffy-clock, however, is not very accurate. Centipede uses the
second TOD clock to keep the jiffy-clock accurate. Thus we have the accuracy of a TOD
clock, with the ease of use of the jiffy-clock. I haven't done anything on it yet, but I hope to use the extra 48k of those with 64k of video
RAM for the local buffer. Your users have a buffer in their term program, why shouldn't
you? V128 uses whatever space is left over in the BASIC program area for the buffer, and
Centipede will continue to do so for those of us with only 16k of video RAM. SwiftLink support will be included in the basic package. Also in planning, is BURST mode reading of SEQ files on Burst compatible drives, and
direct access to the SCSI drive on Lt. Kernal systems. Both offer incredible speed increases.
Oh.. also for downloading files. A 26th screen line will be added at the bottom, containing a little information on the
current user on-line. This will be in addition to the (modified) SysOp View Panel with full
detail that you can bring up at almost any time without notice to the user on-line. Centipede will not be running in 40c mode. Users can of course still call in 40c and
Centipede will use a simulated 40c screen, but still be in RGB mode. Supporting two
screens creates a small slow-down and puts some memory out of use, as well as creating
other programming headaches. I've yet to find anyone to continue running V128 on a
composite screen for a great length of time, so I'm dropping that. Split screen chat mode is of course in here, and I'm working on a full-screen editor. File transfer protocol ML files are self-serving. What I mean by that is that they handle any
details specific to their own protocol internally, so that you can mix and match any file xfer
protocols into your bbs, without any modification to BASIC. If you don't want to run all
the protocols, you don't have to, and any new protocols can be added simply by copying
them to your HD and adding them in the Protocol Maintenance area. Text can be output to the modem by way of a modified basic PRINT command. Instead of
Color 64's a$="text":sysc(0) to output a string, you may use [print"text" instead. The old
Color 64 commands still work, but the new Centipede way gives us the full flexibility of the
print command, including PRINT USING formatting. Color 64's sysc(5) and sysc(8) (input strings from disk and modem) are supplemented to
put the results in any string you want, rather than just tx$. To read a complete SEQ file
into the a$() array: a=0 : do until st : a=a+1 : sysc(8) : =a$(a) : loop One overlay and up to three levels of modules may be in memory at a time. So the list of
files in memory may look like: "ovl.main", "mdl.upload", "mdl.ud-dir". (I couldn't find
any example using all four levels, but it's nice to have it available.) You may also have two
modules of the same level in memory at once using a technique of 'hiding' one of them.
This allows you to sort-of 'gosub' to a routine in another module. Such as uploading from
the e-mail module. Which brings me to private files transfers. You 'e-mail' a private file to another user, by
attaching an upload to a piece of mail. A user may have any number of private files at a
time. They are held or deleted with the e-mail they are attached to. Files can be copied between two drives or the same one, by opening the two files, and
executing a single SYS call. A SYS call lets you set the cursor at any line and column on the screen. The ML finds the
shortest path there in c/g, or pops you directly there for ANSI callers. Another SYS lets you scan a file for a specific character. Centipede has four individual levels of dim and variable killers. Translation routines for ASCII, Commodore color/graphics, and ANSI are separate ML
files. New ones can be easily added. Overall variable structure has been changed a bit. Many individual variables from Color 64
have been moved into one of two arrays: d%() and d$(). Using d$(2) may not be as clear as
pw$ for the user's password, but it's a trade off for memory and speed. BASIC's ROM
code can calculate the exact memory location of an array index much faster than it can do a
sequential search through every variable name in search of an individual variable.
Continuing the same example, d$(2) has a three-byte overhead in the variable space, while
pw$ uses seven! More commonly used variables such as lv for the user's level were left
alone. There is a maximum of 15 message bases, with 26 categories in each. Create your own menus. Sample ones will be included as starting points. Starting with the
main menu and standard sysop menu, you can define every hotkey to run whatever routine
you like, including other menus! Hence, sub menus. Each hotkey has the following
attributes: command name, access level, killer type (dim or variable), graphics
requirements, filename of module or overlay, routine number in that module, and new
program and support files directories to use in that routine. Scripts of up to 25 lines use the same attributes for loading modules as menus, plus can
display SEQ files and display and respond to simple Y/N prompts. Directory locations, as mentioned above, can be modified from their defaults from menu
options. Each location is defined by it's device number (8-15), file prefix, and one or two
disk commands. The prefix option is particularly useful for CMD owners, who can create
prefixes such as "3:/msgbase2/" for the second message base on partition #3, in the
subdirectory msgbase2. You can also send the two commands of "cp3" and
"cd//msgbase2", but I'm told the prefix method is faster. Users can set their own experience levels between: Beginner, Knowledgeable, and Expert.
This effects things such as the detail of help automatically shown at menus and prompts. Users may setup their own default message base scans to read or skip any message bases
they wish, automatically. You may lock users out of any message base or u/d category, regardless of their access level.
You may also set daily time limit adjustments for each user, which will give them more or
less time than normal at their access level. Short-View file descriptions in the directory listing (up to 38 characters) offers more detail
than a little 16 character file name. Users may select whether or not they wish to have them
displayed. This only supplements the full detailed file descriptions in the Color 64 style. Caller log and variables are saved right after user logs off, rather than after five minutes of
idle time. At present, the idle script is only used for calling networks, and time for this
script can be set between one and sixty minutes. Screen savers are separate modules, making for easy changing screen savers. You may also
select the delay for the saver to kick in, between one and fifteen minutes, or not at all. You set multiplication factors for credits awarded for downloading and uploading. Using
this, you can select whether a user gets credits right away for uploading something, or
when somebody downloads their upload, or a combination of the two. If you so setup your menus, you can allow users to flag files for download while viewing a
directory listing. Up to 50 files may be flagged, from any combination of directories. Flags indicate if your modem supports DTR, if you wish the BBS to take the modem
off-hook when you are using it, and if you are using a SwiftLink. Baud rates supported are
300-4800 on the rs-232 port, and 300-38400 with SwiftLink. You may select whether or not you want Menu Phrases shown for each menu, and phrases
are accessed faster than V128's Prompt Macros are. There is built-in support for Network 64 v1.26, and ComLink. You may enter a line of any miscellaneous information about a user in their account
record. There is also a field for a real name, if you allow handles, for possible support of
other networks in the future that demand real names. You may use a local mode password to keep house guest(s) from getting into areas of the
BBS they should not be poking around in. Will use the proper terminology of "RETURN" or "ENTER" depending on the user's
graphics mode. Menu hotkeys and levels when reading messages are customizable: Quit, reply in public,
private reply, reread previous, reread last, skip forward, skip backward, jump thread,
backup a thread, jump category, non-stop read, post in other thread or begin new one,
scratch, edit, move, scratch thread, change thread subject, download message. Mailbox e-mail reading hotkeys are also customizable: Edit user's account (level 9 only),
reread same, backup one, delete, hold, reply, download, quit. And finally, the message editor commands: Attach a file (e-mail only), quote from reference
msg, upload msg, full-screen edit, continue line edit, clear msg, list lines, edit lines, delete
lines, insert lines, send, abort. There are up to 15 U/D categories with up to 26 directories in each. Each directory has the
attributes: name, disk location, allow downloads, allow uploads, access level. Caller log is more flexible than Color 64. The log for the current call is stored in a 'hidden'
variable array, so as to not create any variable conflicts. The permanent log is stored in a
REL file, of which you define the length. The REL format allows for fast searches and
viewing in either direction. It also saves memory. Support for dual-lined system on multiplexed Lt. Kernal. (And CMD HD if CMD ever
makes a real multiplexer.) Re-written, faster, message threading, message regeneration, and u/d directory
regeneration routines than Color 64 or V128. File transfer protocols: ASCII, XMODEM Checksum, CRC, and 1k, YMODEM and
Ymodem-Batch, and Punter and Mutli-Punter. In addition to the old Color 64 message subject for a thread (now called a thread name),
the users may change the message TOPIC field for each message. Message headers in the
file contain only the data. The actual header format is created via BASIC, and can be
modified. Two columns are used for 80c users. A modem module handles initializing, answering, hanging up, on/off hook, baud rates, and
other modem commands. Specialized modules can be created for each modem type. Date and Time can be read from a CMD device, or entered manually. Variables can be stored in program form and quickly loaded (much faster than reading
from a SEQ file) and can be easily modified by putting the changes in an array and
GOSUB'ing to a routine. For those who are familiar with them, it is similar to .INI files
under Microsoft Windows. Here are some of the features of V128 that I ran across in my notes, while they are
definitely still a part of Centipede: Split screen chat mode, local buffer, SysOp View Panel,
Programmable function keys, RAMDOS support, MCI, SupeRes detect and ANSI
auto-detect, auto-pause (may expand on it), digitation player, ANSI translation, Sim40c,
Message threading (although handled in a faster manor), MembVars, plus pretty much
everything else I forgot to mention.
Yow! That was all quite a book! You asked for it though. ;) As always, your suggestions and questions are not only welcome, but actively solicited. Thank you for taking the time to read this message.
Adam Fanello of BugSoft 4822 Larwin Ave. Cypress, CA. 90630-3515
Nature Reserve BBS: (714)-828-7296 and (714)-952-2696 (Handle: ANT)
Or Contact him by the Hot-Link listed below!!
BugSoft Home of Centipede BBS ©1997 by Adam Fanello.
Copyright © 1996,1997,1998,1999,2000 Timothy J. Allen, revised: July 6, 2000
Questions? Send E-Mail to:
OR
OR
azloner@earthlink.net Return to The Commodore Color Pages home page.