"*!^
Exploriog bow
DECB stores data
OQ disk — aijd a
great utility to edit it!
Play
lloliot Za|>!
Just type in this DECB
program, and if you
have a Speech/Sound
pak listen in!
CONTENTS
Ed/tor's Page 2
Letters 2
OS'9 "cd" Utility 3
Marl( l-ieilpern
CoCo3 Consumer Information 4
Frank Swygert & Others
DECB Disk Structure 6
Robert Gault
Operating System 9 1 1
Rick U Hand
Adventures in Assembly Part 1 16
ArtFlexser
RoboZap 18
EricStriger
Advertisers Index BC
Pennsylvania
Don't forget to make
plans for the PennFest
coming in August!!
Philadelphia
POSTMASTER:
If undeliverable return to:
FARNA Systems PB
Box 321
WR, GA 31099
J
If your address is incorrect, send me a postcard!
the world of 68' micros page 1
WANTED: EDITOR FOR
"68' micros" MAGAZINE
Must have good general knowledge
of the CoCo and all hardware, interest
in OS-9 and OS-9/68K machines. Must
have at least a 486 clone with 8MB
RAM and 40MB free hard drive space
for necessary software. Should have
some experience with DTP software
(software will be provided). Must have
reliable Internet connection or ability
to get one. Token payment will be
made to editor - negotiable. Editor will
be required to gather information and
layout pages on provided template.
Publisher will maintain mailing data-
base, advertising, shipping, and pro-
duction. Write or call Frank Swygert c/
FARNA Systems (mailing and e-mail
address below), 912-328-7859 5-1 0pm
EST weekdays, 9am-10pm EST week-
ends. Alt applicants considered.
So a few people panicked. Don't worry,
"the world of 68' micros" will keep coming
even if someone doesn't apply for the po-
sition advertised above. Yes, I'm still look-
ing. I'm considering dropping the price to
$20 per year and the frequency to quar-
terly (those already with subscriptions will
get an extra issue - no one will lose any-
thing!). That will keep the magazine going
a couple more years and give me ample
time to actually do all the necessary work.
Will this cause a lot of you to drop your
subscriptions? I hope not: You are in no
danger of losing any money - you never
have been. I keep all magazine money in
a separate account so that if I did have to
suddenly quit publishing I could refund any
remaining funds. As long as the magazine
IS being published, no refunds will be
made. And I still intend to publish through
volume seven (until July 2000) as long as
there are enough subscribers to make it
worth while (at least 75-80 - still have
about twice that number). Let me know
what you think!
You know, I got to thinking. Maybe no
one wants to edit the magazine while I am
still over the operation. Does anyone feel
more like taking it over altogether? I would
be willing to discuss that as a possibility.
If interested in taking over publication and
production of 268'm, just get in touch with
me and we'll explore some options.
Well, with spring here and more people
getting outside and away from their com-
puters, there haven't been many letters.
So no letters column this time around.
Don't forget me! A letter or two for next
issue would be nice. Ask a question, let
me know what you are stilt doing with your
CoCo or 68K OS-9 machine, etc.
I know this issue is late - later than I'd
like. My military unit has had some deploy-
ments, meaning we have been short
handed, and I've had to work some over-
time. On top of that, we're getting ready
for a major "test" of the unit's capabilities
early next year. That means week long "war
games" with lots of overtime. Getting ready
for one of those now, and another is sched-
uled for August and November. I should
be able to work around all this and keep
issues from being so late, but they will
occasionally be late again. Sorry for the
inconvenience, but this is a part time, one
man operation!
Until next issue, keep your CoCo's alive
and kicking!
A Quick Letter for ColorZap93
I just went through an issue with Jeff
and someone I sent Colorzap-93 to. The
program will only work on the Coco3 emu-
lator if the "horizontal interrupt mode" is
engaged. This can be done with two op-
tions in the latest version of the emulator.
You might want to add an editorial com-
ment about this. I have since made a mi-
nor code change as a work-around. Look
at the start of the source code where I time
the horizontal interrupt to determine the
clock speed. That can be changed to count
the vertical interrupt if a 16 bit register is
used to do the counting.
Robert Gault
Thanks for the tip Robert! Now people
with the emulator can make the change or
run in the proper mode.
I'll add that anyone wishing the program
on disk can send $5 to cover copying, ship-
ping and handling. But if you want to learn
assembly, enter the program into your as-
sembler and study what each segment of
the well commented listing does.
the v\forld of 68' micros
Publisher:
FARNA Systems PB
P.O. Box 321
Warner Robins, GA 31099-0321
Editor:
Francis (Frank) G. Swygert
Subscriptions:
US/Mexico: $24 per year
Canada: $30 per year
Overseas: $50 per year (airmail)
Back and single issues are cover price.
Overseas add $3.00 one issue, $5.00 two
or more for airmail delivery.
The publisher Is available via e-mail
dsrtfox@delphi.com
Advertising Rates:
Contact publisher. We have scales to suit
every type of business. Special rates for
entrepreneurs and "cottage" businesses.
Contributions:
All contributions welcome. Submission
constitutes warranty on part of the author
that the work is original unless othenwise
specified. Publisher reserves the hght to
edit or reject material without explanation.
Editing will be limited to corrections and
fitting available space. Authors retain copy-
right. Submission gives publisher first pub-
lication rights and right to reprint in any
form with credit given author.
General Information:
Current publication frequency is bimonthly.
Frequency and prices subject to change
without notice. All opinions expressed
herein are those of the individual authors,
not necessarily of the publisher. No war-
ranty as to the suitability or operation of
any software or hardware modifications is
given nor implied under any circum-
stances. Use of any information in this
publication is entirely at the discretion and
responsibility of the reader.
All trademarks/names property
of their respective owners
ENTIRE CONTENTS COPYRIGHT
1998, FARNA Systems
page 2 the world of 68' micros
Changing DirectariGS
A standalone '^ccf utility
Mark HGilpern
Here is a program I wrote in "c" quite a white back to imple-
ment a stand-alone 'cd' utility. It gets around the memory protec-
tion problem by calling _os_permit() to get access. For this to
work the program must execute as super-user (group 0). If you
will not always run this as super-user you must modify the code
somewhat (make the module owned by group and toss in a
_os_setuid() to change yourself to group early in the program).
If you have no MMU or are not running the SSM extension there
is no memory protection.
/*** This is the first of 2 files ***/
#include<types.h>
#include<stdio.h>
#include <process.h>
#include <errno.h>
#include<cglob.h>
#jnclude<modes.h>
error_code findjDroc_desc(processJd, procid **);
main(ujnt32 argc, char **argv)
{
char ^pathname = argv[1 ];
ujnt32 mode = S_IREAD;
/* change data directory */
procid *nrie, *dad;
/* if no directory was specified, check for default */
if (argc~1) pathname = (char*)getenv("HOME");
if (pathname==NULL) exit(E_BPNAM);
/* check for execution directory change request */
if (argc>2)
{
if (!strcmp(argv[1 ],"-x")) pathname = argv[2];
nnode = SJEXEC;
/* change execution directory */
}
r do the directory change */ ^
errno = _os_chdir(pathname,mode);
if (errno) exit{errno);
/* find my process descriptor */
errno = find_proc_desc(_procid, &me);
if (errno) exit(errno);
/*find my parent's process descriptor*/
errno = find_proc_desc(me->_pid, &dad);
if (errno) exit(errno);
/*copy over the directory information */
errno = _os_cpymem(_procid,&me->_dio,&dad->_dio,DEFIOSIZE);
if (errno) exit(errno);
/* and exit */
exit{0);
}
/*** the next file is for the find_proc_desc() function ***/
#include <process.h>
#include <sysglob.h>
/* to get system globals */
#include<stddefh>
/* for 'offsetofO macro */
#include <modes.h>
r for pemriit access modes V
#include <ermo.h>
extern processjd j3rocid;
/* my id */
r
** Usage:
processjd procjd;
** procid *proc_desc;
** errno = find_proc_desc (procjd, &proc_desc);
7
error_code find jDroc_desc(processJd proc__id.
procid **proc_desc)
{
ujnt32 *ptab;
ujnt32 size;
/* first, find the system's process 7
/* database table 7
(void)_os_getsys((offsetof (sysglobs,d_prcdbt)),si2eof(u_int32*
(glob_bufr)&ptab)i
/* get access to this memory region 7
/* number of bytes we need access to 7
/* (size) is the process id of Interest, 7
/* times size of each pointer entry (4) 7,„ .
/* plus the size of one entry (4) 7
size = (procJd+1)*4;
errno = _os_permit(ptab,size,SJREAD,_procid);
if (errno) return{errno);
/* got the table, lets index into it 7
*proc_desc = (procid*)ptab[proc_id];
r finally, get access to that memory 7
(void)_os_pennnit(*proc_desc,sizeof( procid),
S_IREADtS_IWRITE,_procid);
/* note, don't need error checking on 7
/*the last _osj3ermit(), since the call 7
rshould only fail if not running 7
/*as super user, since the first pemnit 7
/*call worked, we must be a SU 7
return (0);
}
Questions? I can be reached via e-mail at:
heilpern@microware.com. If you don't have
e-mail access, feel free to write the editor in
reference to this article
Ron Butt Itti/ites \lou Jo Attend
PennFest '98
The Second Pennsylvania CoCoFest!
August 15th and 16th
Sam -5pm each day
Holiday Inn East
4751 Lindle Road
Harrisburg, PA 17111
(Call 717'939-7841 for reservations)
Many vendors have already registered to attend!
Buy software, hardware, meet new and old friends,
learn new tricks, hear the guest speakers,
and most of all, have fun!
Admission is $5 per person per day or
$15 for a "Family Pass" good for both days.
For more information contact Ron Bull
Phone 717-834-4314
ronbull@aoLcom
www.geocities.com/SiliconValleyA/ista/1412
the world of 68' micros page 3
Celer Ccmputer 3 Ccnsumer Inf crmatien
frank Swrseri & ^€ther§*^
Editor: Rather than edit the following, I printed as it was
originally written five to six years ago. At the time, the Intel
386SX/1 6MHz processor was the popular choice for home
computers, with 286 models between 12 and 16 MHz the
most numerous. This was edited from various sources.
I. WHAT IS A COLOR COMPUTER?
The Tandy Color Computer 3 is a very inexpensive yet
powerful connputer for the home or small business. The
original Color Computer, introduced in 1980, boasted eight
colors at a time when all other Radio Shack computers in
the TRS-80 line were monochrome (one color - green or
amber on a black background), hence the name "Color
Computer". Unfortunately, the name has a toylike conno-
tation. The Color Computer 3 is not, however, a toy. It can
do all those things generally expected of personal comput-
ers. Technically, it compares quite favorably with comput-
ers priced much higher.
The Color Computer is probably the most versatile per-
sonal computer on the market. In its simplest form, it can
be used with a TV set and Nintendo-like cartridges. In its
most complex form, it can be configured with a multisync
color monitor, a hard drive, and run several programs at
the same time with the OS-9 operating system. The Color
Computer uses standard peripherals (except monitors) such
as serial printers, floppy disk drives (360K and 720K), hard
disk drives, and modems. It offers an amazing combina-
tion of simplicity, power, and versatility.
II. WHAT CAN IT DO?
The Color Computer will not run software designed for
other personal computers (i.e., it is not IBM- or Apple-com-
patible, although the BASIC computer language that is in-
cluded with the standard Color Computer 3 is nearly iden-
tical to the GW-BASIC used by IBM-compatible comput-
ers). Nevertheless, the software necessary for doing all
tasks commonly done on personal computers is available
for the Color Computer 3. Professional quality programs
exist for many vahed applications, including the following:
WORD PROCESSING programs feature index and table
of contents generation, mail merge, editing in multiple win-
dows, programmable macros, spelling and punctuation
checkers, with up to 160 pages in memory at one time
(512K machine).
DATABASE programs for both general and specific needs
(e.g., recipes).
SPREADSHEET programs offer up to 512 columns by
1024 rows, with graphics.
DESKTOP PUBLISHING programs include a tremendous
variety of fonts and clip art, for use with any printer.
GRAPHIC DESIGN programs allow the Color Computer
user to simply and inexpensively create custom title screens
for home or business videos, or "slide shows" for business
presentations.
MUSIC programs support MIDI-equipped music synthe-
sizers.
TELECOMMUNICATIONS programs support all major
protocols for going "on-line", and include VT-100 and VT-
52 mainframe terminal emulations. One can get on the
Internet through on-line services that still use a "shell" ac-
count (such as Delphi), but there are no graphical web
browsers available. Electronic mail, broker services, travel
services, information services, etc., are available through
Delphi, which still has a text interface. Internet "use-nef
groups are also available. While the text interface doesn't
offer all the "pretty pictures" of the graphical web browsers,
it has the advantage of being simple and fast.
EDUCATION* programs range from learning the ABC's
to calculus.
COMPUTER LANGUAGES available for the Color Com-
puter include C, Pascal, LOGO, BASIC-09, and FORTH09.
Simplified word processing, file, and spreadsheet appli-
cations are available in cartridge form and are both less
expensive and easier for the beginner to use than similar
programs for other computers. Most software for the Color
Computer is generally less expensive (sometimes quite a
bit less) than similar software for other computers. In addi-
tion to standard software applications, the Color Computer
3 has built-in scientific and foreign language symbols, and
arithmetic, tngonometric, and logarithmic math functions.
The Color Computer 3 can utilize the OS-9 disk operat-
ing system (optional), which is probably the most powerful
operating system available for any personal computer. OS-
9 is based on UNIX (used on large mainframe computers).
It is the operating system used by NASA when communi-
cating with satellites and the space shuttle. It transforms
the Color Computer into a true multitasking system, which
simply means it is capable of running several programs on
the screen at the same time, in independent "windows",
like a $2000 IBM PS/2. "Multi-Vue" is a program that makes
the power of OS-9 readily accessible through the use of
"point-and-click" icons (pictures), much like the Macintosh.
III. HOW DOES IT COMPARE?
The heart of the Color Computer is a so-called "eight-bit"
microprocessor, the Motorola 6809E, which is a more pow-
erful microprocessor than the 6502 used in the Apple ll's
and the Commodore 64/128. The 6809 possesses several
sixteen-bit registers used for mathematical, logical, and
graphics operations, giving it some of the power of six-
teen-bit computers such as the Commodore Amiga, the
Macintosh, and the IBM AT.
The maximum clock speed of the Color Computer is 1 .788
MHz, almost twice as fast as an Apple He that sells for five
times as much! Note that clock speed is NOT a good mea-
sure of computer speed, as the efficiency of the chip is
more important The Color Computer 3's exclusive GIME
(Graphics Interrupt Memory Enhancement) chip, and the
powerful OS-9 disk operating system, working together,
allow the Color Computer 3 to surpass the speed of a typi-
cal IBM PC In many benchmark tests. Indeed, at its intro-
page 4 the world of 68' micros
duction, Tandy officials demonstrated the Color Connputer
3 beating Tandy's own 1000 SX running at 7.16 MHz. The
Color Connputer 3 is fast enough for any home or small
business needs. It compares favorably to an Intel 80286
processor running at 12MHz. Remember, the Windows
graphical user interface requires a lot of power and memory.
If you've been around Intel machines for a long time, you
should remember that it didn't take a lot of power to do
most common tasks until Windows came along!
From the factory the Color Computer 3 comes with 128K
of memory. This can be inexpensively increased to 51 2K
with Tandy or third-party cards, and up to 1 megabyte with
a third-party upgrade. Most available programs require only
128K, although some of the latest and larger programs re-
quire 512K of memory.
Screen resolution in the text mode may be either 40 col-
umns by 24 lines or 80 columns by 24 lines. Screen resolu-
tion in the graphics mode may be either 320 dots horizon-
tally by 192 dots vertically (320x192, with sixteen colors
on the screen), or 640x192 (with 4 pure colors on the
screen). Both text and graphics high resolution modes can
be increased by software to 80x28 or 640x225 (12.5% more
dots per screen than IBM CGA resolution of 640x200). In
the highest resolution graphics mode, the four pure colors
may be combined to form even more colors. Additionally,
a total of 64 pure colors are available, which, through a
technique called "palette-switching", provides animation
abilities not possible on low-cost IBM-compatibles (for ex-
ample, a flickering fire). All lower resolution graphics and
text modes of the earlier Color Computers are also sup-
ported so that older programs will work. The large charac-
ters of the older 32x16 text screen are easy on the eyes of
senior citizens or others with visual impairment.
The Color Computer 3 may be used with a TV set (color
or b&w), a composite monitor (color or monochrome), or
an analog RGB monitor, or even all three simultaneously!
The RGB monitor is required for the high resolution text
modes, but most programs support both TV (composite)
and RGB modes. Other than the monitor, the Color Com-
puter is compatible with IBM-standard peripherals such as
floppy disk drives and disks (both 5.25 inch and 3.5 inch),
hard disk drives, modems, and, with an inexpensive "se-
rial-to-parallel converter", printers (even laser pnnters).
Tandy 1000 series joysticks, mice, and printers plug right
in. More exotic peripherals such as video digitizers, MIDI
interfaces (for use with music keyboards), and sophisti-
cated voice synthesizers are also available. Use of a cas-
sette recorder is supported as a very inexpensive and simple
alternative to a disk drive.
IV. WHY BUY A COLOR COMPUTER?
if you have a need for a specific program that is not avail-
able for the Color Computer, or you would like or need to
maintain compatibility with computers at work, buy a com-
puter that meets that need. HOWEVER, if you simply need
"a computer" for writing a novel, tracking the stock market,
putting out a Cub Scout newsletter, or predicting the next
eclipse of the moon, the Color Computer 3 will fill the bill
admirably. Consider these advantages:
LOW COST: A basic system consisting of computer,
Tips for new users ea&er tc get started
1 . NEVER, EVER plug or unplug anything into the large side
port while the computer is turned on! If you do, you could blow
the processor. This Isn't an expensive part, but it is tedious to
replace. A 40 pin chip has to be desoldered and removed from
the circuit board, a socket soldered in, and a new processor put
in the socket. A TV shop would charge about $30 to pull the
original processor and put in a socket, and a processor is about
$20.
2. Game cartridges (program Paks) plug into the side port.
Turn the computer off, plug in the pak, then turn it on. These
games all self-start. Some have instruction screens, others you
need the book for or will need to experiment with. Applications
came in cartridges also, not just games.
3. Some games and such will ask what kind of monitor you
have. Select either TV or Composite, (Color) monitor if you have
a TV or monitor that plugs into round connectors on the back of
the CoCo. The RGB monitor is special for the CoCo3. They aren't
real expensive, used ones are under $100. Multi-sync monitors
work, but have to sync down to 15.75KHz for the CoCo. This is
the same as the old IBM compatible "CGA" monitors. NEC Multi-
Sync and Multi-Sync II monitros work fine.
4. Games on disk are pretty easy. With the disk drive control-
ler plugged into the computer and the disk drive power on, put a
disk in with the label side up. Now type DIR on the computer
and press the ENTER key. You will have a directory of what is on
the disk (that's why DIR... short for DIRectory).
5. Gamesor programs that end in .BIN are binary or machine
language programs. To start one of them, type:
LOADMTROGRAM <ENTER>
PROGRAM will be the name before the BIN, <ENTER> means
press the ENTER key. The game will start. Some you end by
pressing the red <BREAK> key. Others you have to press the
RESET button on the back, next to the power button . If that doesn't
end it, hold the <CTRL> and <ALT> keys down and press the
RESET button. You will get a picture on the screen of three of
the programmers who worked on the CoCo at Tandy. Press the
RESET button again and the game will end. <CTRL> <ALT>
RESET clears everything from memory. You can of course turn
the power off, but if you do, count to FIVE before turning the
power back on. It doesn't like sudden off/on cycles, could blow
the processor!!
6. Games of programs that end in .BAS are BASIC programs
written in the BASIC computer language. The CoCo has BASIC
built in, so all you have to do is type:
RUN"PROGRAM <ENTER>
PROGRAM will be the name before the BAS. <ENTER> means
press the ENTER key. The game will start.
All BASIC games should end by pressing the <BREAK> key,
but if it doesn't do the same as with BIN programs.
7. You will need a few blank disks for later. What you want is
5.25" DOUBLE DENSITY disks, or 360K disks. DO NOT get
5.25" HIGH DENSITY disks (1.2MB), as they won't work right.
Any Radio Shack will be able to get disks, and computer stores
MIGHT have some.
disk drive, and monochrome monitor is only $400. An ab-
solute beginner, supplying his or her own TV and cassette
recorder, could get started for only $100!
continued on page 21
the world of 68' micros page 5
Color Computer Disk Basic Disk Structure Robert Gauit
And a binary disk editor - ColorZap 93 - to boot!
When Tandy finally marketed a disk system for the Color Com-
puter, it did all users a big favor by releasing complete details on
disk structure under Disk Basic. This made it possible for users
to write some very interesting programs for the disk system and
even find ways to overcome bugs present in DOS version 1.0.
Happily Tandy and Microware were just as forthcoming when
OS-9 was released. The complete details on disk structure un-
der OS-9, different from Disk Basic, were documented.
Among the first programs written for the Coco disk systems
were disk editors. These programs made it possible to read raw
data from a disk, modify it if desired, and write it back to a disk
ignoring the directory and file structure. This permitted users to
repair the trashed disks, directories, and files which sooner or
later happen to everyone.
My favorite disk editor for OS-9 is dEd by Doug DeMartinis.
For some time I wanted an equivalent program for Disk Basic
and finally wrote it myself. The source code for this Disk Basic
look and workalike to dEd is part of this article. It can be com*
piled without any changes by my patch to Tandy's EDTASM (which
i sell as EDTASM6309) or any other assembler that can use
lower case, local labels, and multiple FCBs. Readers who have
stock EDTASM can still assemble the program by replacing alt
labels of the form a@ with standard labels and using upper case
for all source code. Replace any FCB 1,2,3 statements with
separate FCB and FDB lines as needed. However, before look-
ing at the source code let's see how Disk Basic organizes a disk.
Tracks, Sectors, and Granules
Regardless of your computer or disk operating system, disks
must be formatted before use. Formatting is the process that
takes a blank disk and partitions it into pieces that can be used
by a computer. Disk Basic separates the disk into 35 pieces called
tracks that are numbered 0-34. Each track is about 6,250 bytes
(8 bit words) of which 6,084 are divided into 18 pieces called
sectors, numbered 1-18, while the rest are system control bytes.
Each sector contains 338 bytes where 256 bytes are for data
and the rest are for system control.
Tandy describes the system control bytes in detail in the "Own-
ers Manual & Programming Guide" for Disk Basic but this can
be ignored by all but the most inveterate hackers. However, all
users should know how the data portion of the disk is organized.
Remember the data is stored in 256 bytes per sector, 18 sectors
per track, and 35 tracks per disk side. This is a total of 161 ,280
data bytes per disk side.
Coco Disk Basic reserves track 17 for the directory. You can
think of the directory as a special file that stores the names,
location, and file types of all files on the disk side. The other 34
tracks are divided into 68 pieces called granules. Each granule
is 2,304 bytes long or 9 sectors and there are two granules per
track. You may be saying, "If the tracks have already been di-
vided into sectors, why are they also divided into granules?"
Sectors are the low level structure of a disk, while granules are
the low level structure of Disk Basic files. Putting it differently,
the minimum space that a file can reserve under Disk Basic is
2,304 bytes even if the file is one byte long. This minimum re-
served space is known as a granule in Disk Basic or a cluster
under OS-9 where it can be as small as a 256 byte sector. Since
the minimum space a Disk Basic file can reserve is one granule,
it is easy to see that the maximum number of files per disk side
is 68, the total number of granules.
Why are the Disk Basic clusters larger than OS-9 clusters?
There is a trade off between wasted space and the possibility of
file fragmentation. Large clusters can waste disk space but they
page 6 the worid of 68' micros
help prevent the sectors of a file from being scattered all over a
disk. Tandy madfe an arbitrary choice for large cluster size.
Directory and File Allocation Table (FAT)
I have already said that track 17 is reserved for the directory,
the index for all files on the disk. In Color Disk Basic, the direc-
tory track has the following structure: sector #1 not used, sector
#2 file allocation table (FAT), sectors #3-11 directory entries,
sectors #12-18 not used. The FAT only uses the first 68 bytes of
sector #2, corresponding to the 68 granules on the disk. The FAT
is a map of the granules used by each file with the byte number
equivalent to the granule used. If a FAT byte has the value $FF
then it is not in use. A FAT byte value from 0-$43 points to the
next granule in a file. A FAT byte value of $C0-$C9 indicates the
number of sectors in the last granule.
If you have been following this closely, you may be asking,
"Why have a FAT value of $C0?" This is a special case for zero
length files that still are assigned one granule; $C0 indicates
that no sectors were used. You may also have been wondering
why Disk Basic does not use a 40 track disk. Clearly there is
sufficient room in both the FAT and directory entry area to cover
78 granules worth of files. This unfortunately, is an example of
Tandy marketing expertise. The disk structure can support 40
tracks, but Disk Basic software cannot. It is simple to patch Disk
Basic to format and access 40 tracks per side but the file system
still cannot make use of the extra tracks. So much for 40 track
disks under Disk Basic, let's get back to the directory structure.
Each directory entry uses 32 bytes. The first 8 bytes (0-7) con-
tain the left justified file name. The next 3 bytes (8-10) contain
the extension (ex. .BAS). Byte 11 indicates the file type: =
BASIC program, 1 = BASIC data file, 2 = machine language
program, 3 = text editor source file. Byte 12 indicates whether
the file is ASCII ($FF) or binary format ($00.) You may remem-
ber that Basic programs are normally saved to disk in tokenized
format. They can be saved in ASCII text format by the command
SAVE"filename",A. Byte 13 is the number of the first granule in
the file and bytes 14-15 indicate the number of bytes used in the
last sector of the file. Finally, bytes 16-31 were reserved for fu-
ture use and must be all zeros for compatibility with Tandy's
EDTASM that does use these bytes.
The directory entry section starts with all bytes having the value
$FF. As entries are added, the table grows and sooner or later
some files will be deleted. When this happens, the first byte of
the entry for the deleted file is set to $00. The next new file is
added into this vacated slot.
Why a Disk Editor?
There are many reasons for using disk editors ranging from
simple curiosity, to disk repair, to breaking copy protection
schemes. Have you ever deleted a file and immediately had the
sickening feeling of erasing the only copy of a 40 hour project?
With a good disk editor, you stand a very good chance of being
able to recover the file. This is because the file still exists on the
disk until the space is reused. What has been lost is the chain of
granule entries in the FAT and the first letter of the file name in
the directory. If you change the first name byte from $00 to what-
ever it was and reenter the FAT information, your file will be re-
covered. You can find the first file granule by looking at the direc-
tory entry, to find the rest you must look at each granule on the
disk for identifying text or code.
Colorzap-93 is a machine language disk editor for Coco3 only.
With it you can select for examination drives, granules, tracks,
or sectors and modify any byte. You can search a disk for a
pattern of bytes either hexadecimal or ASCII. One powerful op-
tion is the ability to link to any file on the disk and scroll through
the file without having to know where the file sectors are located.
Information displayed on screen can be sent to a printer. For
those of you who use OS-9, Colorzap-93 looks and works like
dEd so you only have to remember one set of commands.
Colorzap-93 works ia an 80 column screen with a fast clock
setting. However, the program tests your original clock speed
and uses that speed for all disk I/O. The original clock speed is
reset when you exit the program. Colorzap-93 supports D0S1 .0,
DOS 1.1, and RGBDOS. The program has a repeat key function,
so holding down an arrow key permits rapid scrolling through
sectors. The program auto starts on loading with the first screen
displayed being the instructions.
The Source Code
There are two ASM files used with Colorzap-93. There is a
short file EDTDEFS that is a list of equates (equ) which I use
with several of my programs. The main file, COLORZAP, is some
1700 lines long. Most of the critical lines have comments and I
will not cover the code further except to point out several inter-
esting routines that you may want to use in your own programs.
Lines 1 1 60 - 1 320 determine whether the CoCo is running at 1
or 2 MHz by counting loop cycles between interrupts. Lines 1 730
- 1 950 determine what screen colors are currently in use so that
the program can use reverse colored letters regardless of the
user's preference. Lines 16610 - 16990 are a repeat keys routine
based on code by Roger Schrag. Lines 17020 - 17030 make the
program auto-starting.
You will notice that whenever possible, I make calls to the
Basic ROM routines. This makes the program much shorter than
it otherwise would be. 1 am therefore indebted to the information
contained in the Spectral Associates, "Basic Unravelled" series.
If you have questions about the code or cannot get it to com-
pile and run, send questions by e-mail to:
robert.gault® worldnet.att.net
' Basic entry points for Coco3 D0S1 .1
title EDTDEFS
00100
00110
00120
00130 els equ $F6E0
00140 wdth32 equ $F652
00150 wdth40 equ
00160 wdthSO equ
00170 locate equ
00180 prints equ
00190 decout equ
00200 scrprt equ
00210 dskcon equ
00220 trkzro equ
00230 getchr equ
00240 ikeyim equ
00250 waitky equ
00260 hedtkO equ
00270 read equ 2
00280 wnteequ 3
00290 charad equ
00300 getnch equ
00310 getcch equ
00320 binval equ
00330 linbuf equ
00340 CR equ
00350 LF equ
00360 bik equ '
00370 colon equ ':
00380 bkspc equ $08
00390 zero equ $8a two bytes are always fdb
00000 title COLORZAP-93
00010 * (c) by Robert Gault September 1993; VR. 1.6
00020 ' Full ml version of a disk editor program
00030 * Emulates dEd [by Doug DeMartinis (c) 1987] from the OS-9 world.
00040 * 9-29-93 Seek, Edit, Write, Find, Next, Copy, Repeat keys
00050 • 10-10-93 Link, Unlink, and correction needed to find, next, copy, etc.
00060 * 10-15-93 When linked, last sector stops printing at last byte.
00070 * 10-20-93 Corrected bug in linkyedit: bad char does not leave edit
$F65C
$F679
$F8F7 enter with reg.a=column reg,b=row
$B99C
$BDCC send # in reg.D as ASCII
$A30A
$C004 POINTER TO DSKCON ROUTINE
$D7B8
$A1 B1 blink while waiting
$87 in key image
$ADFB wait for key no blink; go to Basic on break
$A6
$9F
$A5
$2B
$2DC
Basic line buffer
$0D
$0A
00080 * Down arrow roll-over in last sector corrected.
00090 • 10-21-93 Added adjustable max values for track/sector.
00100 * 1 1-02-93 Corrected spelling of "hexadecimar,
00110 * 12-28-93 Handle incorrect file structure; ie. files where last sector
00120 * contain zero bytes. Adjust maxgrn when adjusting maxtrk &
00130* maxsec.
00140 * 3-3-94 Added info to help screen.
001 50 * 4-6-94 Changed repeat keys to K and records to R
00160 * 5-6-94 Added (P) screen dump to printer.
00170 * 1 1-2-95 Corrected error in xitopn routine which had an incorrect
001 80 * error trap. Added auto start routine.
00190
00200 org
00210 fgetnm rmb 2 get file name offset
00220 fopen rmb 2 open file offset
00230 fstfcb rmb 2 set file FCB offset
00240 fget rmb 2 get record from file offset
00250 flof rmb 2 get length of file
00260 fclose rmb 2 close file offset
00270 fdir rmb 2
00280
00290 org $E00
00300 start bra begin program has fixed exec loaction
00310 data equ *
00320 drive rmb 1 working values
00330 trackrmb 1
00340 sector rmb 1
00350 gran rmb 1
00360 recnumrmb 2 record number of open file; max=612
00370 lof rmb 2 length of file
00380 Istsec rmb 1 last sector flag; O=:not FF= last sector
00390 fcblst rmb 2 bytes in last sector+$ee; points to buffer
00400 linhdr rmb 1 counter; holds $00, $10,$20,.,$F0
00410 color rmb 1 0=normal; FF=reversed
00420 stndcl rmb 1 normal attributes used by program
00430 revrcl rmb 1 reverse color attrs
00440 hexfig rmb 1 0=hex; FF=ascii
00450 mtcflg rmb 1 0=no match; FF=matth used by next; set by find
00460 splits rmb 1 0=no split; FF=split match across sector boundary
00470 mtctrk rmb 2 this holds track & sector of last find
00480 frcnum rmb 2 this hold record number of linked match
00490 fndloc rmb 2 find offset in buffer
00500 endmtc rmb 2 end of current match data in target buffer
00510 hextoc rmb 1 x screen location; hex. table
00520 rownum rmb 1 y screen location
00530 asctoc rmb 1 x screen location; ascii table
00540 iol rmb 1 temp, i/o storage
00550 io2 rmb 1
00560 repfig rmb 1 0=repeat key not installed FF=installed
00570 cpyfig rmb 1 copy active flag 0=no FF=yes
00580 drvmax rmb 1 filled by program; varies with 35-40 tk system
00590 maxtrk rmb 1
00600 maxgrn rmb 1
00610 maxsec rmb 1
00620 dos rmb 1 indicates DOS version
00630 •0=DOS1,0. 1 =0031.1, 2=RGB-D0S, 3=unknown
00640 drvflg rmb 1 FF=drive set 0=dnve not selected
00650 opnfig rmb 1 file open flag; O=none FF=open
00660 enddat equ * what follows does not get erased
00670 clock rmb 1 O=slow 1 =fast
00680
00690***************************************************************
00700 * Customize Colorzap-93 by changing the DOS jump tables.
00710 * Addition of functions to the table Must be accompanied by *
00720 * simultaneous additions to the first RMB table above.
00730********************************* — ********
00740
00760 dosiO fdb $c8a4 get file name
00760 fdb $c468 open file
00770 fdb $c808 point to fcb
00780 fdb $c2ccget record
00790 fdb $cd5d get LOF
00800 fdb $ca3b close
00810 fdb $cbd2 dir
00820 dos11 fdb $c952 get file name
00830 fdb $c48d open
00840 fdb $c838 point to file fcb
00850 fdb $c2e6 get record; reg.D=record number
00860 fdb $'ce39 get LOF
00870 fdb $cae9 close all files
00880 fdb $ccacdirreg.B=drive#;
$eb = drive #
00890
00900 * system equates
00910 iobffr equ $989 i/o buffer for find/next
00920 eiobuf equ iobffr+$100
00930 mtctrg equ $d00 match characters stored
here; target
the world of 68' micros page 7
00940 tmpbuf equ $lda temporary buffer; 256 bytes
00950 secmaxequ 18max. sector value; min.=1
00960 ' table positions are - n
00970 hextbl equ 5*$ 100+3 x=5;y=3
00980 asctbl equ 58x=58
00990 hexcel equ 3 size {in spaces) of a single
table byte
01000
01010 * Include many standard defs^based on
ROM Basic
01020 include EDTDEFS
01030 title COLORZAP-93
01040 page
01050
01060 begin ldx$fffe
01070 cmpx#$8c1b
01080 beq b@
01090 leax a@-1,pcr
01100 jmp prints
01110a@ fee /SORRY! THIS PROGRAM IS FOR/
01120 fob CR
01130 fee /THE C0C03 ONLY!!/
01140 fcb CR,0
01150 b@ jsrwdthSO
01160 orcc #$50 determine system clock rate
01170 cira
01180 Idb $ffOO
01190 c@ Idb $ff01
01200 bpl c@
01210 d@ Idb $ff00
01220 Idb $ff01
01230 bmi d@
01240 e@ inca
01250 Idb $ff01
01260 bpl e@
01270 andcc #$af
01280 clrb
01290 empa#8
01300 bto sctock
01310 incb
01320 sctock stb clock
01330 stb $ffd9 set fast clock
01340
01350 clr$71 set for cold restart
01360 ldx#data
01370 Idb #enddat-data
01380 cIra
01 390 a@ sta ,x+set all data to
01400 decb
01410 bne a@
01420 ldx#iobffr
01 430 stx$EE set drive buffer to FCB buf
#1 location
01440 Ida #secmax
01450 sta maxsec
01460 ldx#$322 max drive & track; 4 drives
35 tracks
01470 stxdrvmax
01480 Ida #$43 max gran; 35 track system
01490 sta maxgrn
01500 Idx$c002 pointer to disk basic
01510 cmpx#$2004
01520 beq init
01530 inc dos at least dosLI
01540 IdxScOOa DOS
01550 empx#$df00
01560 beq init
01570 me dos at least RGB-DOS
01 580 * ldx#$2243 probably RGB system; 35 tracks
01590 ' sbcmaxtrk
01600 Idx[$d936] alt RGB-DOS DSKCON entry
01610 cmpx#$3476 pshs d,x,y,u
01620 beq irgb
01630 inc dos
01640 bra init
01650 irgb Ida $150 read max drive
01660 sta drvmax
01670 init inc sector sector can't be
01680 Idx#$c58f console in
01690 tstdos
01700 beq init2
01710 Idx#$c5bc
01720 initS stx$16b
01730 Ida $FE08 current attributes
01740 anda#%00111111
01750 tfr a,b
01760 anda #7o00111000 keep foreground
01770 Isra nomnalize 0-7
page 8 the world of 68' micros
01780 Isra
01790 Isra
01800 adda #8 foreground palettes start at 8-15
01810 andb #%00000111 keep background
01820 ldx#$FFBO start of palettes
01830 Ida a.xget foreground color
01840 anda #%00111111
01850 Idb b,xget background color
01860 andbr/oOOmill
01870 sta I4,x attr 6; store palette colors
01880 stb 15,x attr 7
01890 sta 6,x attr ,6
01900 stb 7.x attr ,7
01910 Ida #%00110111 attr 6,7 normal; attr 7,6
reverse color
01920 sta $FE08 set new attributes
01930 sta stndcl keep an image
01940 Ida #%00111110 reverse color attributes
01950 sta revrct keep an image
01960 Idxzero remove ON BRK and ON ERR
01970 sb($fe0cONBRK
01980 stx$fe0eON ERR
01990 leax drven-.pcr set new error dnver
02000 Ida #$7e
02010 sta $191
02020 stx$192
02030 Ibsr ckdos
02040 jsr[fclose,xl
02050 sta $ffd9 fast clock
02060 Ids #$7ffe set stack
02070 Idd #2 set two FCBs; #1 not active
02080 stb $95b active FCBs ^ 2
02090 ldx$928 point to FCB #1
02100 sta ,x closed
02110 decb =1
02120 std 7,xrecord number - 1; will print as
02130 leax mcmd, per set return address
02140 pstis X
02150 Ibra help display help screen then
go to command
02160
02170 drverr leas 2,s pop return; entered via JSR
02180 cmpb#54 bad record
02190 beq xerr
02200 err2 cmpb#52 file not found
02210 bne xerr
02220 leax NEmsg-1,pcr
02230 jsr prints
02240 jsrgetchr
02250 jsr unlink
02260 xerr Ids #$7ffe
02270 bra main
02280 NEmsg fcb CR
02290 fee /FILE does not exist!/
02300 fcb
02310
02320 ctrkey pshs d,x speeds up arrow key
functions; needed even with
02330 ldx#$152 repeat key routine
02340 Idd #$ff08
02350 ckip sta ,x+
02360 decb
02370 bne ckip
02380 puts d,x,pc
02390
02400 main ldx#iobffr needed because some disk
routines change it
02410 stx$ee
02420 Ibsr screen acquire data and show sector
02430 mcmd bsr wcmd print CMOS:
02440 circpyfig
02450 jsrgetchr wait for a key press
02460 cmpa#'A
02470 bio mcmd2
02480 anda #.not.$20 make upper case
02490 mcmd2 bsr evicmd evaluate key
02500 bcs mcmd loop if not command
02510 bsr cmdjmp execute command
02520 bcs mcmd if illegal arguments loop
without read
02530 bsr cirkey
02540 bra main if legal arguments get new data
02550
02560 evicmd leay cmds.pcr point tocommand table
02570 cmpa#'Q quit and
02580 beq evO
02S90 empa#'D drive select always available
02600 beq evO
02610 tstdrvfig all others must make sure
drive was selected
02620 beq nodrv
02630 evO Idb #cmdend-cmds total # of commands
02640 ev 1 ompa ,y+ hunt
02650 beq ev2
02660 decb
02670 bne evi
02680 ev3 comb indicate error
02690 rts return with carry set
02700 ev2 pshs b
02710 Idb #cmdend-cmds
02720 subb .s+ reg.b=cmd#(0toc-1)
02730 cIra clear carry
02740 rts
02750 nodrv leax ndrmsg-l.pcr
02760 jsr prints
02770 jsrgetchr
02780 bra ev3
02790 ndrmsgfcc /Please select a drive!
Hit any key when ready/
02800 fcb
02810
02820 cmdjmp leax jmptbl.pcr
02830 Isib
02840 abx point to command
02850 jmp [,xj
02860
02870 wcmd Idd #21 col=0 row=22
02880 jsr locate
02890 leax blklin-1, per blank line
02900 jsr prints clear command line
02910 Idd #22
02920 jsr locate
02930 leax cmdb(t-1,pcr
02940 jmp printSprint CMDS:
02950 emdb<t fee /CMOS:/
02960 fcb
02970 cmds fee ''H/?DGTSCEFNWZQ^''
02980 fcb $0A down arrow
02990 fee /KLUIRP/
03000 cmdend equ *
03010
03020 jmptbl equ ^
03030 fdb help
03040 fdb help
03050 fdb help
03060 fdb setdrv
03070 fdb setgrn
03080 fdb settrk
03090 fdb setscS
03100 fdb copy
03110 fdb edit
03120 fdb find find string: hex or alpha numeric
03130 fdb next find next occu ranee
03140 fdb wrtsec write sector to disk
03150 fdb zap erase sector
03160 fdb quit return to Baste
03170 fdb secup increment sector
03180 fdb seedwn decrement sector
03190 fdb repkey
03200 fdb link
03210 fdb unlink
03220 fdb reset adjust max track & max sector
03230 fdb setscR actually set record*
03240 fdb print dump screen to printer
03250
03260
03270 biklin fee / /40spaces
03280 fee / /40spaces
03290 blkln2 fee / /40spaces
03300 fee / /40spaees
03310 fee / /40spaces
03320 fee / / 39spaces
03330 fcb
03340 twoblk fee I I 2 spaces
03350 fcb
03360 betwn fee / / 5 spaces between
hex. & ascii tables
03370 fcb
03380
03390 sure leax surmsg-1 ,pcr
03400 jsr prints
03410 sure2 jsrgetchr
03420 anda #.not,$20
03430 cmpa#'Y
03440 beq sr
03450 coma
FARNA Systems
Your mo5t complete source for Co\or Computer ar)d 05-9 information!
Post Office Box 321
\Narner Robins, GA 51099
Phone: 912-32S-7S59
E-mail: dsrtfox^deiphi.com
XKC^O ^3 ^^.t-g^ ^^ C^>C%/\/.Ai3>=l, ^-tO OV^^/V,S^>^,S
BOOKS:
Mastering OS-9 - $30.00
Completely steps one through learning all
aspects of OS-9 on the Color Computer.
Easy to follow instructions and tutorials.
With a disk full of added utilities and soft-
ware!
Tandy's Little Wonder - $25.00
History, tech info, hacks, schematics, re-
pairs,... almost EVERYTHING available for
the Color Computer! A MUST HAVE for
ALL CoCo aficionados, both new and old!!!
This is an invaluable resource for those
trying to keep the CoCo alive or get back
into using it.
Quick Reference Guides
Handy little books contain the most refer-
enced info in easy to find format. Size
makes them unobtrusive on your desk.
Command syntax, error codes, system
calls, etc.
CoCo OS-9 Level II : $5.00
OS-9/68000 : $7.00
Complete Disto Schematic set: $15
Complete set of all Disto product schemat-
ics. Great to have... needed for repairs!
CMCK OUT W€ NEW
[LOW PRICES ON NITHO PMVUCTS!]
See editorial in this issue for details^
SOFTWARE:
CoCo Family Recorder: Best genealogy
record keeper EVER for the CoCo! Re-
quires CoCo3, two drives (40 track for OS-
9) and 80 cols.
DECB: $15.00 OS-9: $20.00
DIglTech Pro: $10.00
Add sounds to your BASIC and M/L pro-
grams! Very easy to use. User must make
simple cable for sound input through joy-
stick port. Requires CoCo3, DECB, 51 2K.
ADOS: Best ever enhancement for DECB!
Double sided drives, 40/80 tracks, fast
formats, extra and enhanced commands!
Original (CoCo 1/2/3) : $10.00
ADOS 3 (CoCo 3 only) : $20.00
Extended ADOS 3 (CoCo 3 only, requires
ADOS 3, support for 512K-2MB, RAM
drives, 40/80 track drives mixed) : $30.00
ADOS 3/EADOS 3 Combo: $40.00
Pixel Blaster -$12.00
High speed graphics tools for CoCo 3 OS-
9 Level II. Easily speed up performance of
your graphics programs! Designed espe-
cially for game programmers!
Patch OS-9 - $7.00
Latest versions of all popular utils and new
commands with complete documentation.
'Auto-installer requires 2 40T DS drives
(one may be larger).
TuneUp : $10.00
Don't have a 6309? You can still take ad-
vantage of Nitro software technology!
Many OS-9 Level It modules rewritten for
improved speed with the stock 6809!
Thexder OS-9
Shanghai OS-9 : $10.00 each
Transfer your ROM Pack game code to
an OS-9 disk! Requires ownership of origi-
nal ROM pack.
Rusty : $10.00
Launch DECB programs from OS-9! Load
DECB programs from OS-9 hard drive!
NitrOS-9:
Nitro speeds up OS-9 from 20-50% de-
pending on the system calls used. This is
accomplished by completely rewriting OS-
9 to use all the added features of the Hita-
chi 6309 processor. Many routines were
streamlined on top of the added functions!
The fastest thing for the CoCo3! Easy in-
stall script! 6309 required.
Level 3 adds even more versatility to Ni-
tro! RBF and SCF file managers are given
separate blocks of memory then switched
in and out as needed. Adds 16K to sys-
tem RAM... great for adding many devices!
NitrOS-9 V.2.0: $10.00
NitrOS-9 Level 3: $10.00
Th^ AT306 05-9 Sirii^la Board Computer
AT306 Motherboard Specs:
16 bit PC/AT I/O Bus (three slots)
MC68306 CPU at 1 6.67MHz
Four 30 Pin SIMM Sockets
IDE Hard Drive Interface
Floppy Drive Interface (1 80K-2.88M)
Two 1 6 byte Fast Serial Ports (up to 1 1 5K baud)
Two 'Temninar Serial Ports (no modem)
Bidirectional Parallel Port
Real-time clock
PC/AT Keyboard Controller (five pin DIN)
Included Software Package:
"Personal" OS-9/68000 Vr 3.0
(Industrial with RBF)
MGR Graphical Windowing Environment
with full documentation
Drivers for Tseng W32i
and Trident 8900 VGA cards
Drivers for Future Domain 1680
and Adaptec AAH15XX SCSI cards
Many PD and customized utilities and tools
The AT306 is a fully Integrated single board computer. It is de-
signed to use standard PC/AT type components. Sized the same as
a "Baby AT" board (approximately 8" square). Compact and inex-
pensive enough to be used as an embedded controller! Use with a
terminal (or terminal emulation software on another computer) or
with a video card as a console system. Basic OS-9 drivers are in
ROM, making the system easy to get started with.
HACKERS MINI KIT (FARNA-11100): Includes AT306 board, OS-9 and drivers,
util software, assembly Instructions/tips, T8900 1MB video card. Add your own
case, keyboard, drives, and monitor! ONLY $5001
Call for a quote on turn-key systems and quantity pricing.
Warranty is 90 days for labor & setup, components limited to manufacturers warranty.
Microware Programmers Package -
Licensed copies of Microware C compiler, Assembler, Debugger,
and many other toolsl
With system purchase: $65.00 Without system: $85.00
the worid of 68' micros page 9
03460 srrts
03470 surmsgfcb CR
03480 fee / Write sector to disk; are you sure?/
03490 fcb
03500
03510 hprntS jmp prints
03520
03530 header pshs y
03540 cirlstsec
03550 leax copyrt-1,pcr
03560 bsr hprntS
03570 leax head 1-1, per drive
03580 bsr hprntS
03590 Ida drive
03600 jsrdecprt print decimal number
03610 Idd #12*$100+1 across, down
03620 jsr locate
03630 leax head2-1,pcr gran
03640 bsr hprntS
03650 Ida gran
03660 bmi hi directory track does not have
gran value
03670 Ibsr hexprt print hexadecimal number
03680 hi Idd #23*$100+1
03690 jsr locate
03700 leax head3-1,pcr track
03710 bsr hpmtS
03720 Ida track
03730 jsrdecprt
03740 Idd #36*$100+1
03750 jsr locate
03760 leax head4-l,pcr sector
03770 bsr hprntS
03780 Ida sector
03790 jsrdecprt
03800 Idd #48*$100+1
03810 jsr locate
03820 leax head4b-1,pcr
03830 bsr hpmtS
03840 ldx$928 point to FCB #1 ; recnum may
not - last sector
03850 Idd 7,x
03860 subd #1
03870 cmpdiof
03880 bio h2
03890 com Istsec
03900 h2 jsrdecout
03910 Idd #62*$ 100+1
03920 jsr locate
03930 leax head4c-1,per
03940 bsr hprntS
03950 Idd lof
03960 jsrdecout
03970 Ida #CR
03980 jsrscrprt
03990 bsr flipct reverse colors
04000 leax head5-1,per print byte numbers
04010 jsr prints
04020 bsr normcl normal colors
04030 Ida #CR
04040 jsrscrprt
04050 puis y,pc
04060
04070 normcl pshs a,cc
04080 Ida stndcl
04090 norml2 sta $fe08
04100 puis a,cc,pc
04110
04120 flipclpshs a,cc
04130 Ida revrcl
04140 bra norml2
04150
04160 copy rt fee / /
04170 fee /COLORZAP-93(e) Sept. 1993 by
Robert Gault VR. 1.6/
04180 fcb CR,0
04190 head1 fee /DRIVE. #/
04200 fcb
04210 head2 fee /GRAN: $/
04220 fcb
04230 head3 fee /TRACK: #/
04240 feb
04250 head4 fee /SECT:#/
04260 feb
04270 head4b fee /RECORD #/
04280 fcb
04290 head4c fee /LOF #/
04300 fcb
page 10 the worid of 68' micros
04310 head5 fee / 0123456789
A B C D E F/
04320 fee / / 6 spaces
04330 fee /O 2 4 6 8 A C E /
04340 fcb
04350 footn fee / 0123456789
A B C D E F/
04360 fee / / 6 spaces
04370 fee / 1 3 5 7 9 B D F/
04380 feb
04390 footr2 fcb CR
04400 fee /# = decimal number
$ = hexadecimal number/
04410 feb
04420
04430 error leax errmsg-l.pcr
04440 jmp prints
04450 errmsg fcb CR
04460 fee 'Disk I/O error! Drive not ready.'
04470 fcb CR,0
04480 wrking fee /Working .... Floppy drives
are slow./
04490 feb CR,0
04500
04610 screen jsrclsetear screen
04520 leax wrking-1,pcr
04630 jsr prints
04540 clrlinhdrclear counter
04550 tst Opnfig
04560 beq secred
04670 ldx$928 pointer to FCBs
04580 Ida 3,x
04590 sta gran
04600 pshs a
04610 Ibsr elets
04620 deeb
04630 puis a
04640 bita #1
04650 bne noeir
04660 cirb
04670 noeIr addb 4,x
04680 stb sector
04690 Idd 19,x get bytes in last sector
04700 addd See add buffer location
04710 std fcblst
04720 bra nxtino
04730 secred Ida #read command for dskeon
04740 Idb drive tell dskeon the parameters
04750 std $EA
04760 Idd track
04770 std SEC
04780 Ibsr diskon
04790 Ibne error
04800 nxtInO Idd zero
04810 Jsr locate
04820 Ibsr header print common header with
drive.gran, track, sect
04830 IdySEE point to dskeon buffer
04840 nxtlin pshs y
04850 Ibsr flipel flip colors
04860 Ida linhdrget row counter
04870 Ibsr hexprt print ASCII hexadecimal
04880 Ida #colon
04890 jsr serprt
04900 Ibsr normcl reset colors
04910 leax twoblk-1,pcr
04920 jsr prints
04930 Idb #16 print 16 ASCII hexadecimal bytes
04940 sloop 1 Ida ,y+ print byte value
04950 tst opnfig
04960 beq sluplb
04970 tst Istsec
04980 beq sluplb
04990 cmpy febtst
05000 bis sluplb
05010 Ida #$ff
05020 sluplb bsr hexprt
05030 Ida #blk print space
05040 jsrscrprt
05050 deeb
05060 bne sloopi
05070 leax betwn-l.pcr 5 space gap
05080 jsr prints
05090 Idy.s recover buffer pointer
05100 Idb #16 print ASCII character or-."
05110 sloop2 Ida ,y+
05120 tst opnfig
05130 beq slup2b
05140 tst Istsec
05150 beq slup2b
05160 cmpyfeblst
05170 bis slup2b
05180 Ida #$ff
05190 slup2b bsr aseprt
05200 deeb
05210 bne sloop2
05220 Ida #CR
05230 jsrscrprt
05240 Ida linhdr update line header; $10 per line
05250 adda #$10
05260 sta linhdr
05270 puis y
05280 leay $10,y update line/buffer pointer
$10 per line
05290 empa#0 finished a sector?
05300 bne nxtlin no?; then loop
05310 Ibsr flipel
05320 leax footr1-1.per
05330 jsr prints
05340 Ibsr normcl
05350 leax footr2-1,per message #=dee. $= hex.
05360 jmp prints
05370
05380 aseprt anda #$7f remove fes bit
05390 empa#$7f printer sees this as delete
05400 beq period
05410 cmpa#btk
05420 bhs norm
05430 period Ida #'. exclude control codes
05440 norm jmp serprt
05450
05460 hexprt pshs a print binary* as ASCII
hexadecimal
05470 Isra get MSN
05480 Isra
05490 Isra
05500 Isra
05510 bsr digit
05520 puis a
05530 anda #$F
05540 digit cmpa#9 is it a number
05550 bis numb
05560 adda #7 must be letter; offset to letters
05570 numb adda #'0 convert to ascii
05580 jmp serprt
05590
05600 decprt tfr a,b print byte as ASCII decimal
05610 eira
05620 jmp deeout decimal out
06630
05640 cmdst2ldx#linbuf+1
05650 Idd ,x
05660 tsta was there an entry?
05670 bne cmd3
05680 andec #.not.4 no entry; indicate bad entry
05690 rts
05700 cmd3 tstb
05710 bne hxDbin
05720 tfr a,b
05730 Ida #'0
05740
05750 hxDbin bsr hexbin convert ascii hex
reg.D tp binary in reg.A
05760 bcs hxDxit
05770 Isia
05780 Isia
05790 Isia
05800 Isia
05810 exg a,b
05820 bsr hexbin
05830 bcs hxDxIt
05840 pshs b
05850 adda ,s+
05860 bra notlet
05870 hxDxit rts
05880
05890 hexbin suba #'0 convert ascii hex. in
reg.A to binary in reg.A
05900 bcs invaH
05910 cmpa#9
05920 bis notlet
05930 suba #7
05940 cmpa#$F
05950 bhi invaH
continued on page 12
operating system nine
CoCo IV ideas
Rick Ulland
Posted recently gn the Internet
CoCo List concerning talk about
the possibility of creating a
"CoCo4""
Come on people. The CoCo had
its day, it saw the light, but please
get a grip and move on! There will
not be a CoCo IV or V or VI or
whatever There is no money. You
barely support the WIe" people still
giving...
ME:
I'm afraid I must agree with you
to some extent. Gone are the days
when a person could finance a
good idea by making a few origi-
nal CoCo addons. But this sort of
hardware has low budget potential,
in that you don't need the $5000
boardcutting or workstation class
development system. Anyone with
a pClone and $500 can make a
small run of sub10 MHz parts.
Now what you do with them... if
'new' means 'take the CoCo design
and tack a xyz on it' there would
be no reason at all to build a
CoCo4. It's original mission has
been filled. For Joe User, budget
computing consists of castoffs from
the pClone wars. If you want stable
multitasking, use linux. If you want
lots of applications, use Win3.1
and reboot every few hours.
This brings us to CoCo4. Our
community has a larger than nor-
mal share of hobbiests. These are
the guys that used to build TV daz-
zlers and twist tie old teletypes to-
gether. The resulting machines
weren't that useful in themselves,
but they developed the techniques
and people that got us (the com-
puting public) where we are today.
But where have we gone? The
fastest Pentium wonderbox is noth-
ing more than a really big Altair. It's
got huge drives, it's got wastelands
of DRAM, perps to amaze the most
jaded hacker But it's still a one in-
struction wide path to a lone cpu -
- CP/M with animated wizards. I
refuse to believe this represents
the ultimate in computing architec-
ture.
But commercially viable comput-
ers aren't hackable. You pretty
much run the motherboard they
sold you. As long as 'commecially
viable' means 'really fast Altair'
they're kind of boring, so we should
investigate a new paradigm that
can later be scaled up in the Atlair-
>Wintel mold.
The solution proposed is true
'multiprocessing'. Rather than one
overworked wafer laboring under
Its Own Fan, a 'computer' would
be a collection of cpus working to-
wards a possibly common goal.
This is going to require software a
little beyond biilyBASIC, bringing
us to the CoCo3 and OS9. This
alternative opsys has a smart
scheduler, doesn't leak, and is al-
ready segmented in exactly the
right places, with each 'process'
nearly independent enough to
move offboard already. And in
hardware the CoCo has been us-
ing dual port DRAM (cpu, com-
bined refresh/video) for years.
Great for the hackers involved,
ignores the guy that needs a $50
upgrade path. So we've decided to
stay as CoCo like as possible in
the prototypes of any "CoCo IV".
This way, anything useful can be
drawn up as a CoCo version.
Where it ends, we'll see. I've al-
ready designed a board that con-
trols interupts through hardware,
taking a big task away from the
CPU under OS-9 (but pretty use-
less for DECB users).
But Frank recently told me about
a fellow in Great Britain who has
done what was discussed in Chi-
cago a couple years ago - well,
almost. When the first seminar on
the CoCo IV project was held at the
Chicago CoCoFest in 1997, the
general consensus was that the
best way to pursue a prototype
would be to make an I/O controller
that took a lot of the general work
tasks away from the main proces-
sor. This would plug into the side
port and take care of the keyboard,
interrupts, and anything else we
could give it. The board would have
a 6809, a PIA or two, and what-
ever necessary circuitry to do the
jobs given it. Then OS-9 would be
patched to use the added proces-
sor.
We weren't the first to get this
idea! This Briton did almost the
same thing with a Dragon and
Dragon DOS (Tano's version of
DECB) some years ago. Only he
went an easier route - let the CoCo
be the I/O procesoor and the
added 6809 the "main" one!
Sounds so logical it is hard to see
why we didn't think of it! Since the
CoCo processor is already pro-
grammed to do all the I/O func-
tions, leave it alone! Pass the code
crunching to another CPU, in this
case clocked at 3MHz. and let the
CoCo process the results! This
chap says it works fine, and will be
sending Frank some schematics
and code later. Hope he comes
through, I can't wait to see this stuff
and start designing a board any
OS-9 user would be proud to have!
the world of 68' micros page 1 1
ColorZap93 (continued from page 10)
05960 notlet andcc #not.1
05970 orcc #4
05980 rts
0599C invall orcc #1
06000 hxxit rts
06010
06020 decbin ldx#linbuf+1
06030 orcc #1
06040 Ida ,x
06050 beq decxit
06060 Idycharad
06070 pshs y
06080 stxcharad
06090 jsr$AF67
06100 puis y
06110 stycharad
06120 tstopnflg
06130 beq db
06140 tstcpyfig
06150 bne db
06160 Idd binval
06170 andcc #-not.1
06180 rts
06190 db tsta
06200 bne baddrv
06210 Ida binval+1
06220 cirb
06230 decxit rts
06240
06250 Inkmsg fee /Must link to file!/
06260 fob
06270 unlmsg fee /Must unlink file!/
06280 fcb
06290 setdrv tstopnflg
06300 beq a@
06310 ulerrleax unlmsg-1,pcr
06320 ulerr2 jsr prints
06330 jsrgetehr
06340 orcc #1
06350 rts
06360 Inkerr leax lnkmsg-1,pcr
06370 bra uterr2
06380 a@ leax drvnum-l.pcr
06390 Ibsr cmdset print query; get answer
06400 bsr decbin convert to binary
06410 bcs baddrv
06420 cmpadrvmax
06430 bhi baddrv
06440 sta drive
06450 cira
06460 deca
06470 sta drvflg indicate drive selected
06480 bsr setgrn
06490 bcs b@
06500 bne b@
06510 bsr settrk
06520 b@ Idxzero
06530 stxmtetrk
06540 sbcfndloc
06550 clrmtcflg
06560 rts
06570 baddrv coma
06580 rts
06590 drvnum fee /Drive: #/
06600 fcb
06610
06620 setgrn tstopnflg
06630 bne ulerr
06640 leax grnnum-1,pcr
06650 Ibsr cmdset
06660 Ibsr cmdst2
06670 bcs nogrn
06680 bne nogrn
06690 cmpamaxgrn
06700 bhi baddrv
06710 sta gran
06720 Ibra cicts
06730 nogrn eira
06740 rts
06750 grnnumfcc / Gran: $/
06760 fcb
06770
06780 settrk tst opnflg
06790 bne uterr
06800 leax trknum-l,pcr
06810 Ibsr cmdset
page 12 the world of 68' micros
06820 Ibsr decbin
06830 bcs baddrv
06840 cmpamaxtrk
06850 bhi baddrv
06860 sta track
06870 bsr ssec
06880 cIra
06890 rts
06900 trknum fee / Track: #/
06910 feb
06920
06930 recmsg fee /RECORD #: /
06940 fcb
06950 setscS tst opnflg
06960 beq ssec
06970 Ibra ulerr
06960 x@ bra baddrv
06990 setscR tst opnflg
07000 bne setrec
07010 Ibra Inken-
07020 setrec leax recmsg- 1, per
07030 Ibsr cmdset
07040 bcs x@
07050 Ibsr decbin
07060 cmpdlof
07070 bhi x@
07080 cmpd#0
07090 beq x@
07100 std reenum
07110 ssecO ldx#(obffr
07120 sb<$ee
071 30 ldx$928 pointer to fcb #1
07140 stx$f1
07150 Clr15,x
07160 clr16,x
07170 clr17,x
07180 ctr18,x
07190 clr6,x
07200 clr$d8 used as GET/PUT flag; 0=get
07210 Ibsr ekdos
07220 jsr[fget,x]
07230 sta $ffd9
07240 ctra
07250 rts
07260 ssec leax seenum-1,pcr
07270 Ibsr cmdset
07280 Ibsr decbin
07290 bcs x@
07300 cmpa#0
07310 beq x@
07320 cmpamaxsec
07330 bhi x@
07340 Sta sector
07350 bra etcgrn
07360 secnum fee/ Sector: #/
07370 fcb
07380
07390 cictslda gran calculate track/sector from
gran#
07400 idb #1 sectors start at 1
07410 bita #1
07420 beq a@
07430 Idb #10 sector=10 on odd grans
07440 a@ cmpa#33 track 16
07450 bis b@
07460 adda #2 compensate for track 1 7
07470 b@ Isra
07480 std track
07490 andcc #.not,5
07500 fts
07510
07520 clcgrn Ida sector calculate gran# from
track/sector
07530 cIrb even gran
07540 empa#9
07550 bis a@
07560 ineb odd gran
07570 a@ Ida track
07580 cmpa#17
07590 beq d@
07600 bio b@
07610 deca compensate for track 1 7
07620 b@ tsia 2 grans/track
07630 pshs b
07640 adda ,s+
07650 c@ sta gran
07660 andcc #.not.5
07670 rts
07680 d@ Ida #$FF directory no gran number
07690 bra c@
07700
07710 quit leax a@-1,per
07720 jsr prints
07730 jsrsure2
07740 bcs hxit
07750 Ibsr setclk
07760 imp [$fffel
07770 a@ fee /QUIT Are you sure?/
07780 fcb
07790
07800 help jsr els
07810 leax helpms-l,per
07820 a@ jsr prints
07830 Idd ,x
07840 bne a@
07850 b@ jsrgetehr
07860 beq b@
07870 cIra
07880 hxit rts
07890
07900 helpms fee "H gets this message; also /
or?"
07910 feb CR,0
07920 fee "Up/Down arrows move to next/
previous sector"
07930 fcb CR,0
07940 fee "D select drive number; [gran, track/
sector]"
07950 fcb CR.O
07960 fee /G select gran value/
07970 feb CR,0
07980 fee /T select track value; [sector]/
07990 fcb CR,0
08000 fee /S select sector value; R record #
if linked/
08010 fcb CR,0
08020 fee /Ccopy current sector to D,T, 8/
08030 fcb CR
08040 fee / enter each value separately with
ENTER key/
08050 fcb CR,0
08060 fee /E edit current sector/
08070 fee /; must Write sector to make changes
permanent/
08080 feb CR,0
08090 fee /F find string; hex. or alphanumeric;
case sensitive/
08100 feb CR
081 10 fee /; quit search in progress with any key/
08120 fcb CR,0
081 30 fee /P print screen; preset BAUD for 2MHz
from BASIC/
08140 fcb CR,0
08150 fee /N next occurance of string/
08160 fee /; starts at last match regardless of
current sector/
08170 fcb CR
08180 fee ' no action if last find/next
unsuccessful'
08190 fee /; quit searching with any key/
08200 fcb CR,0
0821 fee A/V write cunrent sector to disk/
08220 fcb CR.O
08230 fee /L link to disk file; 'ENTER' gives
directory./
08240 fcb CR,0
08250 fee /U unlink from disk file/
08260 fcb CR,0
08270 fee /2 zap current sector with selected
value/
08280 feb CR.O
08290 fee /K repeat key function. Use ONLY if
your ROM does not/
08300 fee / have built in repeats./
08310 feb CR.O
08320 fee /Q quit program for Basic/
08330 fcb CR,0
08340 fee /I Adjust allowable maximum track
and sector values /
08350 fee /for oddball disks;/
08360 fcb CR
08370 fee / usually 34 or 39T & 1 88.
USE CAUTION!/
08380 fcb CR,0
08390 fee / /
08400 fee /Q indicates optional parameters/
08410 fcb CR,0
08420 fee / /
08430 fee /any key returns to mam screen/
08440 fcb 0,0
08450
08460 secup tst opnflg
08470 beq a@
08480 Idd recnum
08490 cmpdiof
08500 Ibhs baddrv
08510 addd #1
08520 bra d@
08530 a@ Idd track increment sector; track if
necessary
08540 cmpbmaxsec
08550 beq b@
08560 incb
08570 bra c@
08580 b@ empamaxtrk
08590 Ibeq baddrv
08600 Idb #1
08610 inca
08620 c@ std track
08630 Ibra cicgrn
08640 secdwn tst opnflg
08650 beq e@
08660 Idd recnum
08670 subd #1
08680 beq g@
08690 d@ std recnum
08700 Ibra ssecO
08710 e@ Idd track decrement sector; track if
necessary
08720 cmpb#1
08730 beq f@
08740 decb
08750 bra c@
08760 f@ tsta
08770 g@ Ibeq baddrv
08780 Idb maxsec
08790 deca
08800 bra c@
03810
08820 cmdsetjsr prints print command and get
answer
08830
08840 * Replacement for Basic line input. Needed
because Basic prints CR at
08850 * end of input,
08860
08870 linein ldx#linbuf+1
08880 Iinin2 Idb #1
08890 linlup jsr$A171
08900 cmpa#bkspc
08910 bne notbs
08920 decb
08930 beq linein
08940 leax -1,x
08950 bra echo
08960 notbs empa #$1 5 shift left arrow
08970 bne noclin
08980 din decb
08990 beq linein
09000 Ida #bkspc
09010 jsrscrprt
09020 bra din
09030 noclin cmpa#3break
09040 orcc #1
09050 beq linxlt
09060 cmpa#CR
09070 bne inschr
09080 cira
09090 linxlt pshs cc
09100 dr,x
09110 puis ccpc
09120 inschr cmpa#blk
09130 bio linlup
09140 cmpa#'z+1
09150 bhs linlup
09160 cmpb#250
09170 bhs linxtt
09180 sta ,x+
09190 incb
09200 echojsrscrprt
09210 bra llntup
09220
09230 wrtsec Idb drive write sector to disk
09240 stb $EB
09250 Idxtrack
09260 sb($EC
09270 wsec2 ibsr sure
09280 bcs nowrt
09290 Ida #write
09300 sta SEA
09310 Ibsr diskon
09320 bne badcpy
09330 nowrt rts
09340
09350 * Copy sector to any other sector at any drive
or track
09360
09370 copy com cpyfig
09380 leax cpymsg-l.pcr
09390 bsr cmdset
09400 Ibsr decbin
09410 bcs badcpy
09420 cmpadrvmax
09430 bhi badcpy
09440 sta $EB
09450 bsr more
09460 cmpa maxtrk
09470 bhi badcpy
09480 sta SEC
09490 bsr more
09500 cmpa maxsec
09510 bhi badcpy
09520 sta $ED
09530 bra wsec2
09540 more Ida #colon
09550 jsrscrprt
09560 jsr linein
09570 Ibsr decbin
09580 bcs badcpy
09590 ris
09600 badcpy coma
09610 rts
09620 cpymsgfcc /Enter destination Drive#<CR>
Track#<CR> Sector#<CR>: /
09630 fcb
09640
09650 * Fill sector with any single character; ie. erase
sector
09660
09670 zap leax zapmsg-1,pcr
09680 Ibsr cmdset
09690 Ibsr cmdst2
09700 bne badcpy
09710 bcs badcpy
09720 IdxSEE
09730 cirb
09740 zioop sta ,x+ fill write buffer
09750 incb
09760 bne zIoop
09770 Ibra wrtsec
09780 zapmsg fee/Enter ZAP byte: $/
09790 fcb
09800
09810 * Find any hex. or ascii character string up to
125 hex or 250 ascii
09820 'bytes of data.
09830
09840 find Idd #21
09850 jsr locate
09860 leax fndmsg-1,pcr
09870 jsr prints
09880 fndinp Idd #22
09890 jsr locate
09900 leax blkln2-1,pcr
09910 jsr prints
09920 Idd #22
09930 jsr locate
09940 leax fndh-1,pcr
09950 tst hexflg
09960 beq findh
09970 leax fnds-1,pcr
09980 findhjsr prints
09990 ldy#tmpbuf
10000 Ibsr linein
10010 cmpa#3 BREAK key
10020 bne fnd2
10030 com hexflg
10040 bra fndinp
10050 fnd2cmpx#linbuf+1
10060 Ibeq badcpy no input for find
10070 tst hexflg
10080 bne fasdl
1 0090 fhex Idb ,-x
10100 Ida #"0
10110 cmpx#linbuf+1
10120 beq h1byt
10130 Ida ,-x
10140 hibyt Ibsr hxDbin
10150 Ibcs badfnd
10160 sta ,y+
10170 cmpx#linbuf+1
10180 bne fhex
10190 ldx#tmpbuf cassette buffer used as
temporary hold
10200 pshs X
10210 ldx#mtctrg
10220 hi Ip Ida ,-y
10230 sta ,x+
10240 cmpy.s
10250 bne hllp
10260fasci2 leas 2,s yank temp data
10270 stxendmtc save end of match data
10280 tdxzero
10290 stxmtcfig clear match and split find
indicator
10300 stxfndloc
10310 leax 1,x
10320 sb<frcnum initialize to record #1
10330 bra fndwds now go get it
10340
10350 fascii ldy#linbuf+1
10360 pshs X
1 0370 ldx#mtctrg
10380 h2tp Ida ,y+
10390 sta ,x+
10400 cmpy ,s
10410 bne h2!p
10420 bra fasci2
10430
1 0440 * find the string
1 0450 fdwdsO Idd zero
10460 std fndloc
1 0470 tst mteflg
1 0480 beq fndwds
10490 com splits
10500 fndwds tst opnflg
10510 beq fndO
10520 Idd recnum
10530 cmpdiof
10540 bhi fpk3
10550 pshs x,y,u
10560 Ibsr ssecO
10570 puts x,y,u
10580 jsrSalcl
10690 bne fpk3
10600 Idd recnum
10610 addd#i
10620 std recnum
1 0630 bra fp5
10640fpk3 Idd frcnum
10650 std recnum
1 0660 Ibra ssecO
1 0670 fndO bsr readsc
1 0680 jsr $a1 c1 check keyboard break on any
key
10690 beq fpkl
10700fpk2 Idxtrack
10710 sbcSec
10720 dra
10730 rts
1 0740 fpk1 Idd Sec get track/sector
10750 cmpbmaxsec max sector?
10760 beq fpl
10770 incb
10780 bra fp2
10790 fp1 cmpamaxtri^
10800 bne fp3 end of disk; stop reading sectors
10810 Ida #$80+19
10820 sta Sed sector; will create illegal read
below
10830 bra fp5
10840fp3 Idb #1
1 0850 inca
10860fp2 std Sec
the world of 68' micros page 13
28456 S.R. 2, New Carlisle, IN 46552
2 19-654-7080 eves & ends MO, Check, COD; US Funds
Shipping included for US, Canada, & Mexico
MM/1 Products (OS-9/68000)
CDF $50.00 - CD-ROM File Manager! Unlock a wealth of files on CD with the MM/1 ! Read most text and
some graphics from MS-DOS type CDs.
VCDP S50.00 - New Virtual CD Player allows you to play audio CDs on your MM/ 1 ! Graphical interface
emulates a physical CD player. Requires SCSI interface and NEC CD-ROM drive,
KLOCK $20.00 - Optional Cuckoo on the hour and half hour! ! Continuously displays the digital time and
date on the /term screen or on all open screens. Requires I/O board, I/O cable, audio cable, and speakers.
WAVES vr 1 .5 $30.00 - Now supports 8S VX and WAV files. Allows you to save and play all or any part of
a sound file. Merge files or split into pieces. Record, edit, and save files; change playback/record speed.
Convert mono to stereo and vice-versa! Record and play requires I/O board, cable, and audio equipment.
MM/1 SOUND CABLE $10.00 - Connects MM/I sound port to stereo equipment for recording and play-
back.
GNOP $5.00 - Award winning version of PONG{tm) exclusively for the MM/I , You'll go crazytrying to
beat the clock and keep that @#$%& ball in line! Professional pongists everywhere swear by (at) it! Requires
MM/ 1 , mouse, and lots of patience.
CoCo Products (DECB)
HOME CONTROL $20.00 - Put your old TRS-80 Color Computer Plug n' Power controller back on the
job widi your CoCo3! Control up to 256 modules, 99 events! Compatible with X-IO modules.
HI & LO RES JOYSTICK ADAPTER $27.00 - Tandy Hi-Res adapter or no adapter at the flick of a
switch! No more plug and unplugging of the joystick!
KEYBOARD CABLE $25.00 - Five foot extender cable for CoCo 2 and 3. Custom lengths available.
MYDOS $15.00 - Customizable, EPROMable DECB enhancement. The commands and options Tandy !el^
out! Supports double sided and 40 track drives, 6ms disk access, set CMP or RGB palettes on power-up.
come up in any screen size. Speech and Sound Cartridge support, point and click mouse directory, and MORE
OPTIONS than you can shake a stick at! Requires CoCo3 and DECB 2.1.
DOMINATION $18.00 - Multi-Player strategy game. Battle other players armies to take control of the
planet. Play on a hi-res map, Become a Planet-Lord today! Requires CoCo3, disk drive, and joystick or
mouse.
SMALL GRAFX ETC.
"V and 'TRI" cables. Special 40 pin male/female end connectors,
priced EACH CONNECTOR - $6.50
Rainbow 40 wire ribbon cable, per foot - $ 1 .00
Hitachi 63B09E CPU and socket - $13.00
MPI Upgrades for all small MPIs (satellite board) - $10.00
Serial to Parallel Convertor with 64K buffer
and external power supply - NOW ONLY $28.00!!!
Serial to Parallel Convertor (no buffer)
and external power supply - ONLY $18.00!!!
2400 baud Hayes compatible external modems - $15.00
Serial to Parallel Convertor or
Modem cable (4 pin to 25 pin) - $5.00
ADD $3.00 SifeH FOR FIRST ITEM, $L00 EACH ADDITIONAL ITEM
SERVICE, PARTS, & HARD TO FIND SOFTWARE WITH COMPLETE
DOCUMENTATION AVAILABLE. INKS & REFILL KITS FOR CGP-220,
CANON, & HP INK JET PRINTERS, RIBBONS & vr. 6 EPROM FOR CGP-
220 PRINTER (BOLD MODE), CUSTOM COLOR PRINTING.
Terry Laraway
41 N.W. Doncee Drive
Bremerton, WA 98311
360-692-5374
10870fp5 idd See get start address of buffer
10880
addd fndloc add last "found at" offset
10890 mtlp4 tfr d,ynow try to match from new address
10900
tst mtcfig
10910
bne mttp2
10920 mtlp3 ldx#mtctrg point to target buffer
10930
cir splits
10940
leau ,y update buffer address
10960 nntlp2 cmpy #eiobuf are we past end of
1 sector buffer?
10960
bhs fdwdsO yes?; then advance 1 sector
10970
cIr mtcfig clear match flag; ie. no match
10980
Ida ,x+
10990
cmpa,y+
11000
bne mtlp3
11010
com mtcfig
11020
cmpxendmtc end of target buffer?
11030
beq gotit
11040
bra mtlp2
nosobadfnd Idxzero
11060
stx mtctrk
11070
stx fndloc
11080
clr mtcfig
11090
rts
mooreadsc Ida #2
miOsta Sea
11120tst$ed
11130b
Tii bdread
11140lbsr diskon
insobeq xread
meobdread Ida maxsec
11170sta $ed
11180bread2 cira
11190leas 2,s
11 200 xread rts
11210
11220*
now calculate markers for tables
11230gotitlda Sed
11240
anda #$7f remove possible flag
11250
sta Sed
11260
tfr u,d reg.U = location in dskcon buffer
11270
subd See
11280
stb fndloc+1 sector offset for find
11290
clr fndloc
11300
Idd Sec
11310
cmpb#1
11320
beq gt1
11330
decb
11340
tst splits
11350
beq mark
11360
decb
11370
bra mark
11380gt1 deca
11390
Idb maxsec
11400
tst splits
11410
beq mark
11420
decb
11430markstd mtctrk
11440
std track
11450
Ibsr cicgrn
11460
tst opnfig
11470
beq mark2
11480
ldx$928
11490
Idd 7,x
11500
subd #1
11510
tst splits
11520
beq mark3
11530
subd #1
11 540 marks std recnum
11550
std frcnum
11560
Ibsr ssecO
11570mark2 Ibsr screen show correct sector data
11580
ldx#hextbl
11590
stxhexloc
11600
Ida #asctbl
11610
sta ascloc
11620
Idb fndloc+1
11630
Ida rownum
11640
deca
11650mklp1 inca divide reg.B by 16
11660
subb#$10
11670
bcc mklpl
11680
sta rownum
11690
addb #$10
11700
pshs b
11710
Ida #hexcel size
11720
mul
11730
addb hexloc
page 14 the worid of 68' micros
11740 stb hexloc
11750 Ida ascloc
11760 adda ,s+
11770 sta ascloc
11780 Idb rownum
11790 jsr locate
11800 Ibsr flipcl
11810 jsriocate
11820 Idd hexloc
11830 jsriocate
11840 idd #22
11850 jsriocate
11860 Ibsr normcl
11870 Ibra endchk
11880
1 1 890 fndmsg fee /BREAK toggles hexadecimal
byte vrs. ASCII string/
11900 fob CR,0
11 91 fndh fee /Search byte string: $/
11920 feb
1 1 930 fnds fee /Search character string: /
11940 feb
1 1 950 keys feb $c up arrow
11960 fdb moveup
11970 feb $0a down arrow
11980 fdb moved n
1 1 990 feb $09 right arrow
1 2000 fdb movert
12010 feb $08 left arrow
12020 fdb movelf
12030 feb CR
12040 fdb endedt
12050 feb
12060 fdb edinp edit input
12070
12080 endedt cir color remove reversed color from
display
12090 Ibsr eddisp
12100 Idd #$c5e normalize CLEAR & up arrow
12110 stb $a26e
12120 sta $a27e
12130 Idx#$ed84 enable cursor
12140 stx$f812
121 50 endchk orcc #1
12160 rts
12170
12180 edtmsg fee /ENTER exits Edit CLEAR =
ASCII uparrow/
12190 feb
12200
12210 edit tstopnfig
1 2220 beq a@
12230 ldx$ee
1 2240 empx feblst
1 2250 bne a@
12260 tstlstsec
12270 bne endchk
12280a@ ldx#$1212 prevent cursor generation
12290 stx$f812
12300 Idd #$c5e swap CLEAR & up arow
12310 sta $a26e
12320 stb $a27c
12330 Idd #22
12340 jsriocate
12350 leax fndmsg-1, per print Edit messages
12360 jsr prints
12370 leax edtmsg- 1, per
12380 jsr prints
12390 tplefttdu $ee sector buffer begin edit
1 2400 ldx#hextbl row column
12410 stxhexloc
12420 Ida #asctbl column only; row same as
hex. section
12430 sta ascloc
12440 revbyt com color
12450 bsr eddisp
12460 edinp Idd hexloc
12470 tst hexflg are we changing hex. section or
aseii?
1 2480 beq hexin
12490 Ida ascloc if hex, adjust x location
12500 hexin jsriocate move cursor
1 2510 tst hexflg what type of input do we need?
12520 bne inchr
12530 bra mbyte
12540
12550 eddisp Idd hexloc
12560 jsriocate
12570 tst color
12580 beq eddsp2
12590 Ibsr flipcl make reverse
1 2600 eddsp2 Idd hexloc
12610 jsriocate
12620 Ida ,u
12630 Ibsr hexprt
12640 Ibsr normet make normal
12650 Ida ascloc
12660 Idb hexloc+1
12670 jsriocate
12680 tst color
1 2690 beq eddsp3
12700 Ibsr flipcl make reverse
12710 eddsp3 Ida ,u
12720 Ibsr ascprt
12730 Ibra normcl make normal
12740
12750 check pshs a,x test for special edit keys
12760 leax keys, per
12770 chkip Ida ,x+
12780 beq gokey
12790 cmpa,s
12800 beq gokey
12810 leax 2,x
12820 bra chkIp
12830 gokey leas 3,s
12840 jmp [,x]
12850
12860 inchr bsr read1
12870 cmpa#'
12880 bio check
12890 sta ,u
12900 Ibsr flipcl make revers
12910 jsrscrprt
12920 Ibsr normcl make norma)
1 2930 bra movert
12940
12950 inbyte bsr read1
12960 sta iol
12970 Ibsr hexbin
12980 Ida Iol
1 2990 bcs check
13000 bsr inbyt2
13010 bsr read1
13020 sta io2
13030 Ibsr hexbin
13040 Ida io2
13050 bcs check
13060 bsr inbyt2
13070 Idd iol
13080 Ibsr hxDbin
13090 sta ,u
13100 bra movert
13110inbyt2 Ibsr flipcl make reverse
13120 jsrscrprt
13130 Ibra normcl make normal
13140
13150 readi Ibsr flipcl
13160 jsrgetchr
13170 Ibsr normcl
13180 cmpa#3
13190 bne enread
13200 com hexflg
13210 leas 2,s
13220 Ibra edinp
13230 enread rts
13240
1 3250 movert Idd hexloc
1 3260 jsr locate
13270 cIr color
13280 Ibsr eddisp
13290 teau 1,u
1 3300 tst opnflg
13310 beq dspyrt
1 3320 tst tstsec
13330 beq dspyrt
13340 cmpu feblst
13350 bio dspyrt
13360 Ibra tpleft
13370 dspyrt inc ascloc
13380 Ida ascloc
13390 cm pa #74
13400 bhs rowdn
13410 Ida hexloc
1 3420 adda #hexcel size
1 3430 sta hexloc
13440 Ibra revbyt
13450 rowdn inc rownum
13460 Ida rownum
13470 cmpa#i8
13480 Ibhl tpleft
13490 Idd #5*$1 00+58
1 3500 sta hexloc
13510 stb ascloc
13520 Ibra revbyt
13530
1 3540 movelf Idd hexloc
13550 jsriocate
13560 cIr color
13570 Ibsr eddisp
13580 mvtf2 leau -l,u
13590 dec ascloc
13600 Ida ascloc
13610 cmpa#58
13620 bio rowup
13630 Ida hexloc
13640 suba #hexcel size
1 3650 sta hexloc
13660 bra mvlf3
13670 rowup dec rownum
13680 Ida #50
1 3690 sta hexloc
13700 Ida #73
13710 sta ascloc
13720 Ida rownum
13730 cmpa#3
13740 blo gobot
1 3750 bra mvlf3
13760 gobot Ida #18
13770 Sta rownum
13780 leau $100,u
1 3790 mvlf3 tst opnflg
13800 beq Ifdone
13810 tstlstsec
1 3820 beq Ifdone
13830 cmpu feblst
13840 bhs mvlf2
13850 Ifdone Ibra revbyt
13860
13870 moveup Iddhexloc
13880 jsriocate
13890 cIr color
13900 Ibsr eddisp
13910 leau -$10,u
13920 dec rownum
13930 Ida rownum
13940 cmpa#3
13950 bhs updone
13960 leau $100,u
13970 Ida #18
13980 sta rownum
1 3990 tst opnflg
14000 beq updone
14010 tstlstsec
14020 beq updone
14030 mvup3 cmpu feblst
14040 blo updone
14050 dec rownum
14060 leau -$10,u
14070 bra mvup3
14080 updone Ibra revbyte
14090
14100 mo vedn Idd hexloc
14110 jsriocate
14120 el r color
14130 Ibsr eddisp
14140 leau $10, u
14150 inc rownum
14160 tstopnfig
14170 beq mvdn2
14180 tstlstsec
14190 beq mvdn2
14200 cmpu feblst
14210 blo mvdn2
14220 Ida rownum
14230 bra mvdnS
14240 mvdn2 Ida rownum
14250 cmpa#18
14260 Ibis revbyt
14270 mvdn4 leau -$100, u
14280 Ida #3
14290 sta rownum
14300 ibra revbyt
continued on page 19
the world of 68' micros page 15
Adventures in Assembly, Part 1 Art Fiexser
Some assembly excercises and solutions by the creater of ADOS.
Here is an exercise in assembly lan-
guage programming. It is afl very well to
read these tutorials and assemble the
programs that go with them, but to learn
assembly language, it is also necessary
to practice writing programs by yourself.
So, here's something to get you started.
The "answers" are in the files
TUTA1A.SRC and TUTA1B.SRC, with
some commentary following the listings.
But I encourage you to not look at these
until you've had a whack at doing it your-
self. Practice makes perfect!
Exercise #1
Write a program that wilt clear the
screen with a particular color when you
type the initial of the name of that color.
When the screen has been cleared, the
program should loop back to the begin-
ning and await another color key. Keys
that are not color initials should be ig-
nored, except for the break key, which
should cause the program to exit to BA-
SIC. Since some colors share the same
initial, we'll use the following as our color
codes:
X = black ($80)
G = green ($8F)
Y = yellow ($9F)
B = blue ($AF)
R = red ($BF)
W = buff ($CF)
C = cyan ($DF)
M = magenta ($EF)
O = orange ($FF)
For an additional challenge, see if you
can make the program work properly re-
gardless of whether the input is in lower
or upper case. It is possible to accom-
plish this with just a single added instruc-
tion (an AND instruction, if you must
know!)
Exercise #2
This is not really a separate program-
ming problem, but rather a more sophis-
ticated approach to solving #1 than the
most straightfonward one. The straight-
foHA/ard approach to #1 involves using 9
separate CMPA #<byte value> instruc-
tions, one to check for each possible color
key. This approach is shown in
TUTA1A.SRC. It works very nicely when
there are only 3 or 4 keys to be scanned
for, but gets a bit cumbersome when
there are more. The program in
TUTA1A.SRC has a lot of repetitious
code in it, and, as in Basic programming,
that should hint that a more efficient pro-
gramming approach may be called for.
So, see if you can write a program that
accomplishes the same thing as de-
schbed in #1 , but which uses a lookup
table containing pairs of bytes instead of
multiple CMPA instnjctions. The first byte
of each pair will be the ASCII value for
the color name initial, and the second will
be the byte that the screen will get filled
with to produce that color. One advan-
tage of this approach is that the program
can very easily be modified to define a
new key and the screen fill byte that goes
with it, just by adding an additional pair
of bytes to the lookup table. To allow
maximum flexibility, do not have the pro-
gram assume that the lookup table con-
tains any fixed number of entries. Rather,
just have the program look for a byte
value of zero to tell it when it has come
to the end of the lookup table (such a byte
Is referred to as a "terminator").
TUTA1B.SRC contains a program that
uses this approach.
00100 *TUTA1A.SRC
00110 *ARTFLEXSER
00120 ORG $3000
001 30 *FILLS SCREEN WITH APPROPRIATE
COLOR WHEN KEY IS
001 40 ^PRESSED THAT IS THE INITIAL OF
THE COLOR NAME
001 50 START JSR [$A000] GET
KEYPRESS
00160 BEQ START LOOP IF NO KEY
PRESSED
00170 CMPA #3 BREAK KEY?
00180 BEQ EXIT YES, RTS
00190 ANDA #$DF ENSURE
UPPERCASE
00200 CMPA #'X BLACK?
00210 BNE GRN
00220 LDA #$80
00230 BRA FILSCR
00240 GRN CMPA #G GREEN?
00250 BNE YELO
00260 LDA #$8F
00270 BRA FILSCR
00280 YELO CMPA #'Y YELLOW?
00290 BNE BLUE
00300 LDA #$9F
00310 BRA FILSCR
00320 BLUE CMPA #*B BLUE?
00330 BNE RED
00340 LDA #$AF
00350 BRA FILSCR
00360 RED CMPA #'R RED?
00370 BNE BUFF
00380 LDA #$BF
00390 BRA FILSCR
00400 BUFF CMPA #'W BUFF?
00410 BNE CYAN
00420 LDA #$CF
00430 BRA FILSCR
00440 CYAN CMPA #'C CYAN?
00450 BNE MAG
00460 LDA #$DF
00470 BRA FILSCR
00480 MAG CMPA #'M MAGENTA?
00490 BNE ORNG
00500 LDA #$EF
00510 BRA FILSCR
00520 ORNG CMPA #'0 ORANGE?
00530 BNE START NO, GET
ANOTHER KEY
00540 LDA #$FF
00550 *F1LL SCREEN WITH BYTE VALUE IN
A REGISTER
00560 FILSCR LDX #$400
00570 TFR A,B 2 BYTES ATA TIME
00580 L00P1 STD ,X++
00590 CMPX #$600
00600 BLO L00P1
00610 BRA START DONE, GET NEW
KEY
00620 EXIT RTS EXIT ON BREAK
KEY
00630 END START
00100*TUTA1B.SRC
00110*ARTFLEXSER
00120 ORG $3000
001 30 *FILLS SCREEN WITH APPROPRIATE
COLOR WHEN KEY IS
00140 ^PRESSED THAT IS THE INITIAL OF
THE COLOR NAME
001 50 START JSR [SAOOOJGET
KEYPRESS
00160 BEQ START LOOP IF NO KEY
PRESSED
00170 CMPA #3 BREAK KEY?
00130 BEQ EXIT YES, RTS
00190 ANDA #$DF ENSURE UPPER
CASE
00200 LEAX TABLE, PCR X=START
OF TABLE
00210 LOOP CMPA ,X CHECK KEY
AGAINST TABLE ENTRIES
00220 BEQ FILSCR FILL SCREEN IF
FOUND
00230 TST ,X++ END OF TABLE?
00240 BEQ START YES, NOT IN
TABLE, GET NEW KEY
00250 BRA LOOP NO, CHECK
NEXT TABLE ENTRY
00260 EXIT RTS ADIOS.AMIGO
00270 FILSCR LDB 1 ,X GET COLOR
BYTE VALUE
00280 LDX #$400 START OF
SCREEN
00290 L00P1 STB ,X+ PUT COLOR
ON SCREEN
00300 CMPX #$600 END OF
SCREEN?
00310 BLO LOOP1 NO, CONTINUE
00320 BRA START YES, GET NEW
KEYPRESS
00330 *TABLE OF 2-BYTE ENTRIES
00340 * 1 ST BYTE IS COLOR INITIAL
00350 * 2ND BYTE IS THE SCREEN DISPLAY
VALUE FOR THE COLOR
page 16 the world of 68' micros
00360 TABLE FCB X BLACK
00370
FCB
$80
00380
FCB
G
GREEN
00390
FCB
$8F
00400
FCB
Y
YELLOW
00410
FCB
$9F
00420
FCB
*B
BLUE
00430
FCB
$AF
00440
FCB
R
RED
00450
FCB
$BF
00460
FCB
W
BUFF
00470
FCB
$CF
00480
FCB
C
CYAN
00490
FCB
$DF
00500
FCB
M
MAGENTA
00510
FCB
$EF
00520
FCB
ORANGE
00530
FCB
$FF
00540
FCB
TERMINATOR
00550
END
START
Comments on TUTA1 A.SRC
Line 190 ANDA#$DF
This instruction converts any lowercase
input to uppercase. Lowercase letters
have ASCII values starting with "a"=$61 ;
uppercase letters start with "A"=$41 . The
difference between the ASCII codes for
the upper and lowercase versions of the
same letter Is that the lowercase version
has bit 5 equal to 1 and the uppercase
version has this bit equal to 0.
The individual bits of an 8-bit byte are
numbered 0-7, starting with the bit at the
right. Thus, a bit's number corresponds
to the power of two that that bit position
represents.
76543210 bit
"A" = $41 =%01 000001
"a" = $61 =%01 100001
Note that the percent sign is used to
signify a binary quantity. Some assem-
blers, though unfortunately not Edtasm+,
will accept this notation.
(editor: Thus the easy explanation for
bits and bytes ~ a single byte is one char-
acter on the screen, so megabyte is a
million characters on the screen, etc.
Good explanation for novices!)
When you AND two binary quantities
(call them M and N) together, each bit
position of the result P is determined
solely by the bit values in the corespond-
ing bit positions of M and N. Bit 3 (say) of
P will be a one if and only if Bit 3 of M
AND Bit 3 of N are BOTH one. Looking
at each bit position separately, we can
then say that if we AND a particular bit
position with a 0, the result must have a
zero in that bit position, regardless of
whether the original bit value in that posi-
tion was a one or a zero. (1 AND 0) = 0;
(0 AND 0) = 0. Also, if we AND a bit po-
sition with a one, its value will be un-
changed. (0 AND 1 ) = 0; (1 and 1 ) = 1 .
What good is all this? It allows us to
reset a particular bit position to a zero
while preserving ail of the other seven bit
positions unchanged, which is exactly
what we need to convert lowercase to
uppercase input. That is. if we AND the
ASCII value of the keypress with
%1 1 011111 (=$DF),wewill force Bit 5 to
assume a value of zero while leaving the
other bits alone. So, by inserting an ANDA
#$DF instruction, we can then allow sub-
sequent instructions of the program to
check only for the uppercase forms of
the letters. Incidentally, the AND opera-
tor works exactly the same in Basic. Try
this little one-liner, which converts an in-
put letter to uppercase:
10 INPUT A$:?CHR$(ASC(A$) AND
&HDF):GOTO10
While we are on the subject, the OR
operator is pretty much the mirror image
of AND. If you OR a bit with a 1 , the re-
sult is a 1. (0OR1) = 1; (10R1) = 1.
But if you OR a bit with a 0, you preserve
its value: (0 OR 0) = 0; (1 OR 0) = 1 . So,
if you have a need to force a particular
bit position to be a one, you do this by
ORing with a quantity that consists of
zeroes in all bit positions except the criti-
cal one. Thus, for example, to force low-
ercase instead of uppercase, which in-
volves setting Bit 5 to a one, we would
use an ORA #%001 00000, (or ORA
#$20, in language that Edtasm+ under-
stands). Incidentally, forcing a particular
bit to be 1 or is called SETTING it or
RESETTING it, respectively.
Lines 560-610
These lines contain the routine that fills
the screen with the desired byte value.
Note that in this version, a TFR A,B in-
stnjction is used to duplicate the contents
of the A register into the B register. Thus,
if A contained $80, the D register, which
consists of the A and B registers taken
together and considered as a 1 6-bit quan-
tity, would contain $8080. Copying A into
B allows use to use a STD, X++ instruc-
tion to fill the screen two bytes at a time,
which is faster than if we had used a STA
,X+ instruction.
Comments on TUTA1B.SRC
Line 200 LEAX TABLE,PCR
This instruction does the same thing as
LDX #TABLE, as far as what value gets
put into the X register. However, the
LEAX TABLE,PCR form allows the pro-
gram to be RELOCATABLE. That is, it
will still work properly if we load it in with
an offset (PCR stands for "position
counter relative", by the way). TABLE, in
this program, is at location $3029, which
happens to be $1 9 bytes beyond the byte
that follows the LEAX TABLE.PCR in-
struction (I can tell this by looking at my
assembled printout, produced by A/LP/
NO. and seeing that the LEAX instruc-
tion translated to a sequence of bytes
ending with a $19).
The difference between the LDX
#TABLE form and the LEAX
TABLE. PCR form is that LDX #TABLE
means that TABLE will be considered as
being located at $3029, regardless of any
offset that is used in loading the program,
while LEAX TABLE, PCR means that
TABLE is considered to be located $19
bytes beyond the start of the instruction
that follows the LEAX. The latter loca-
tion will be at $4029 instead of $3029 if
we offset load the program by $1000 so
that it loads in at $4000. A relocatable
program will assemble to produce the
same sequence of bytes, regardless of
any ORG statement that is included with
the source, so that the program will be
equally happy anyplace in memory. It is
a good idea to get into the habit of writ-
ing programs that are relocatable, since
it is so easy to do, thanks to the structure
of the 6809's instruction set. Use BRA
and BSR instead of JMP and JSR to pre-
serve relocatability, if the address you
wish to jump to is not a fixed one, such
as a ROM call.
Line270LDB1,X
This instruction says to load the B reg-
ister with the byte that is in the address
one beyond that pointed to by the X reg-
ister. That is, if X contains $4000, B is
loaded with the contents of location
$4001 . The value of X is not changed by
this instruction, but is left at $4000. In the
program, X points to the ASCII value of
a letter— the first byte of one of the pairs
of bytes that make up the lookup table.
LDB 1 ,X will therefore load B with the
color byte that follows the ASCII code —
the second byte of the con-esponding byte
pair. It is important to keep straight the
difference between LDB 1,X and LDB
,X+. The latter instruction (if X = $4000)
will load B with the contents of address
$4000. and then change the X register
so that it contains $4001 . In the program,
the incrementing of X to point to the next
byte pair is taken care of by the TST ,X++
instruction in line 230.
This instmction also
checks for the zero
terminator at the end \
of the lookup table.
the world of 68' micros page 17
BY ERIC
STRIKER
This simple BASIC game puts the Tandy Speech/Sound Cartridge (SSC) to work if you have one! Those familiar with
the SSC will realize the "misspellings" are intentional as the cartridge "speaks" phoneticly. So spelling has to be
"adjusted" to get the desired sounds. A good excercise in using the SSC in BASIC programs.
1REMR0B0TZAP V1.02
2 REM BY ERIC STRIGER 1986
5 PCLEAR4:PMODE4.1:SCREEN1,1:
SCREENO,0: CLS0:PCLS1
9 REM CLEAR STRING SPACE
10 CLEAR1000:DIM MAP(32,19). FE(16),
RB(16),MN(16),MI(16),EX(16)
11 REM VARIBLE TABLE
14 REM SC=SCORE
15SC=0
19 REM HS=HIGH SCORE
20HS=1000
24 REM BS$=BLACK SPACE &
DS$=DOUBLE BLACK SPACE
25 BS$=CHR$(128);DS$=BS$+BS$
29 REM LV=LEVEL
30 LV=1
34 REM NM=NUMBER OF MEN
35 NM=3
50 ROB$="U3L2U3R3U2LU3R3D3L2D2
R3D4L2ND3L3Er
55 MAN$="E3NF3U4NF2NHNG3UNRU"
60 FEN$="U4NRNLU2NE3NH3U3"
65 M1N$="NR2NL2NU3NE3NH3"
70 EXIT$="NR3U3NR2U3R3"
74 REM REMOVE REMARK IF YOU
HAVE RS-SPEECH AND SOUND PACK
75 V=&HFF00:V1=&HFF7E;V2=-1
90 GOSUB 700:IF V2=-1 THENA$=
'ROWBOT ZAP":GOSUB955:FORT=1TO
100:NEXTT
95 PU\rV31T10O1L4CL200O4BA#AG
#AG#FEE-DC03BA#AG#GF#FEE-DC0
2BA#AG#GF#FEE-DC#C02BA#AG#GF
#FEE-DC#C01BA"
96 B$=" PREPAIR FOR BATTAL
99 NM=3:LV=1
100 REM TITLE SCREEN
105 CLS0:A$="BY ERIC STRINGER
1986 PRESS ANY KEY TO BEGIN
*INSTRUCTIONS HIT '@' * ":SC=0
110 PRINT@0,STRING$(32.CHR$(143+
RND(7)*16));:PRINT@64.STRING$(32,CHR$(143+
RND(7)*16));:PRINT@32,USING"SCORE
###### HIGHSCORE ######";SC.HS
115C1=(RND(8)-1)*16
120 PRINT@96,DS$;STRING$(4,CHR$
(131+C1));DS$;STRING$(4.CHR$(131-k:1));DS$;
STRING$(4.CHR$(131+C1));DS$;STRIN
G$ (4.CHR$(131+C1));DS$;STRING$(4,
CHR$(131+C1));
125 PRINT@128,DS$;CHR$(143+C1);
DS$; BS$:CHR$(138+C1);BS$;CHR$(143
+C1);DS$;CHR$(143+C1);DS$;CHR$(143
+C1);DS$;BS$; CHR$(138+C1);BS$;CH
page 18 the worid of 68' micros
R$ (143+C1);DS$;CHR$ (143+C1);DS$;
BS$;CHR$(133+C1);CHR$(138+C1);DS$;
130 PRINT@160,DS$;CHR$(143+C1);
DS$;BS$;CHR$(138+C1);BS$;CHR$(143+
C1); DS$;CHR$(143+C1); DS$;CHR$(143
+C1);DS$;BS$;CHR$(138+C1);BS$;CHR$
(143+C1);DS$;CHR$(143+C1);DS$;BS$;
CHR$(133+C1);CHR$(138+C1);DS$;
135 PRINT@192.DS$;CHR$(143+C1);*ST
RING$(3,CHR$(140+C1));CHR$(130+C1);
BS$;CHR$(143+C1);DS$;CHR$(143+C1);
DS$;CHR$(1 43+C 1 ) ;STRING$(3,CHR$(1 40+
C1));CHR$(130+C1);BS$;CHR$(143+C1);DS$;
CHR$(143+C1);DS$;BS$;CHR$(133+C1);CHR$
(138+C1);
140 PRINT@224,DS$;CHR$(143+C1);DS
$; BS$;CHR$(138+C1);BS$;CHR$(143+C
1);CHR$(131+C1):CHR$ (131+C1);CHR$
(143+C1);DS $;CHR$(143+C1);STRING$
(3,CHR$(131+C1));CHR$(136+C1);BS$:
CHR$(143+C1);CHR$(131+C1);CHR$(131 +
C1);CHR$(143+C1);DS$;BS$;CHR$(133+C1);
141 PRINTCHR$(138+C1);:PLAY"C01BA"
145 PRINT@256,STRING$(8.CHR$(128
));STRING$(4,CHR$(131+C1));DS$;CHR$
(129+C1);CHR$(131+C1);CHR$(131+C1);
CHR$(130K;i);DS$iSTRING$(4.CHR$(131-K:i));
150 PRINT@288,STRING$(11.CHR$(128
));CHR$(134+C1);DS$;CHR$(143+C1);DS$;
CHR$(133+C1);DS$;CHR$(143+C1);DS$;
BS$:CHR$(138+C1);
155 PRINT@320,STRING$(10.CHR$(128
));CHR$(134+C1);DS$;BS$;CHR$(143+C1);
STRING$(2.CHR$(131+C1));CHR$(135+C
1);DS$:CHR$(143+C1);STRJNG$(3,CHR$(1314C1));
CHR$(136+C1);
160 PRINT@352,STR!NG$(9,CHR$(128
));CHR$(134+C1);DS$;DS$;CHR${143+C1);
DS$;CHR$(133+C1);DS$;CHR${143+C1);
165 PRINT@384,STRING${8,CHR$(128
));CHR$(135+C1);STRING$(3,CHR$(131+C1));
DS$;CHR$(143+C1);DS$;CHR$(133+C1);
DS$;CHR$(143+C1);
170PRINT@416.STRING$(32,CHR$(143+
RND (7) *16));175A$=RIGHT$(A$.LEN(A
$) -2)+LEFT$(A$.2):PRINT@448,LEFT$(
A$,32);
180 C2-RND(7)*16:PRINT@480, STRING
$(31 .CHR$(143+C2));:POKE1024+51 1 .143K;2
185 l$=INKEY$:IF 1$="®" THENGOSUB
1000:GOTO110ELSEIFI$=""THEN110
190 GOSUB200:GOSUB800
195 GOTO 300
200 REM DISPLAY SCORE AND LEVEL
205 CLSO
210FORZ=1 TO 25
215 PRINT@0,STRING$(32,CHR$(143+
RND (7ri6));
220 PRINT@32,USING"SCORE ######
HIGHSCORE ######";SC,HS;:PRINT@
64,STRING$(32,CHR$(143+RND(7)*16)):
225 PRINT@224,STRING$(32,CHR$(143
-hRND (7)*16));
230 PRINT@256.STR1NG$(32,CHR$(143
+RND(7)*16));:PRINT@256+12.USING"LEVEL
##";LV;
235 PRINT@288,STRING$(32.CHR$ (143
+RND(7ri6));
240 PRINT@320,STRING$(32,CHR$(143
+RND(7ri6));:PRINT@320+12.USING"MEN
##";NM;
245 PRINT@352,STRING$(32,CHR$(143
+RND(7)*16));
246 B$=RIGHT$(B$,LEN(B$)-2)+LEFT$(B
$,2):PRINT@384,LEFT$(B$,32);STRING$(32,
CHR$(143+RND(7ri6));
250 NEXT Z:RETURN
300 REM MAIN GAME CONTORL
305 JX==JOYSTK(0):JY=JOYSTK(1):PK=
PEEK (65280)
310 IF JX<20 THEN PX=PX-1
315 IF JX>42 THEN PX=PX+1
320 IF JY<20 THEN PY=PY-1
325 IF JY>42 THEN PY=PY+1
329 REM UP DATE MAN POSITION
330 GOSUB 400
334 REM UP DATE ROBOT POSITION
335 GOSUB 500
340 T=D(1)+D(2)+D(3)+D(4)+D(5):IF T=0
THENQ=5:GOTO600
345 IF SC>HS THEN HS=SC
390 GOTO 300
400 REM MAN POSITION UP DATE
405 IF MAP(PX.PY)=4
THENQ=1:GOTO600 ELSE IF MAP(PXP
Y)=30RMAP(PX.PY)=1THENQ=3:GOTO
600 ELSE IF MAP(PX.PY)=6 THEN Q=2:
GOTO600 ELSE IF MAP(PX,PY)=2 THEN
Q=4:G0T0 600
406 MAP(OX.OY)=0:MAP(PX,PY)=5
410 COLOR 1,1:LINE((OX-1)*8.(OY-1)*10
+10)-((OX-1)*8+8,(OY-1)*10).PSET,BF
415 PUT((PX-1 )*8,(PY-1 )*1 0+1 0H(PX-1 )
*8+8,(PY-1)*10).MN.PSET
416 IF PK=126 OR PK=254 THEN 430
420 OX=PX:OY=PY:RETURN
430 REM DROP MINE
435 MAP(OX,OY)=6;PUT{(OX-ir8,(OY-
1)*10+10H(OX-1)*8+8.(OY-1)*10),MI,
PSET
440 GOTO 420
500 REMAN ROBOT UPDATE
505 FOR Z=1 TO 5
509 IF RND(INT(10/LV))=1THEN510
ELSE NEXTZ:RETURN
510 IF D(Z)=0 THEN NEXT Z:RETURN
511 LINE((PX(Z)-1)*8,(PY(Z)-1)*10+10)-
((PX(Z)-ir8+8,(PY(Z)-iri0),PSET,BF
512 MAP(PX(Z).PY(Z))=0
515 PX(Z)=PX(Z)+rSGN(PX-PX(Z))
520 PY(Z)=PY(Z)+rSGN(PY-PY(Z))
525 IF MAP(PX(Z),PY(Z))=3 AND LV<3
THENGOSUB550:NEXT Z:RETURN
530 IF MAP(PX(Z),PY(Z))=6 THEN GO
SUB 550:NEXTZ;RETURN
535 IF MAP(PX(Z),PY(Z))=5 THEN
Q=1:GOTO600
536 PUT((PX(Z)-ir8,(PY(Z)-iri0+10H(
PX(Z)-1)*8+8,(PY(Z)-1)*10),RB,PSET
537 MAP(PX(Z).PY(Z))=4
545 NEXT Z: RETURN
550 SC=SC+50:MAP(PX(Z),PY(Z))=0:PL
AY 'T1L255V3101ADCFABGEDV16ACG
ADV4EABCAEDB":D(Z)=0:RETURN
600 REM MAN KILLED RUTINE
605 IF Q=1 THEN B$=" THEY GOT YOU
!!!! ":NM=NM-1
610 IF Q=2 THEN B$=" STEPED ON YO
UR OWN MINE ":NM=NM-1
615 IF 0=3 THEN B$=" ZAP !!! YOU HAV
E BEEN ELECTROFIDE... ":NM=NM-1
620 IF 0=4 THEN B$=" YOU HAVE ESC
APE OUT AN EXIT..."
625 IF Q=5 THEN B$=" YOU HAVE KILL
ED ALL THE ROBOTS ON THIS LEVEL..
BONUS "'+STR$(LV*1 00)+".. ..":LV=LV+1:
SC=SC+100*LV
630 IF NM=0 THENB$=" *** GAME
OVER *** ":GOSUB200:GOTO95
635 IF V2=-1 THENA$=B$:GOSUB955
645 IF SC>HS THEN HS=SC
650 GOSUB200:GOSUB800
698 SCREEN1,1:GOTO300
699 END
700 REM DRAW PICES
705 PCLS1
710 DRAWC0BM128,95;"+ROB$
715 GET(126,94H1 26+8,84). RB,G
720 PCLS1:DRAWBM128,95;"+MAN$
725 GET(127,95)-(127+8,85),MN,G
730 PCLS1;DRAWBM127.95;"+MIN$
735 GET(124,95)-(132,85).MI,G
740 PCLS1:DRAWBM128.95;"+FEN$
745 GET(126.95)-(134,85),FE,G
750 PCLS1:DRAW'BM128,95;"+EXIT$
755 GET(127,95)-(135.85),EX,G
760 RETURN
800 REM SETUP SCREEN FOR PLAY
805 FORX=1T032:FORY=1T018:MAP(X,
Y)=0:NEXTY,X
810 PCLS1:POKE178,2:SCREEN1.1
815 REM SET UP BOUNDREIS
820 FOR X=0 TO 31
825 IF RND(10)=5 THENMAP(X+1 ,0)=2:
PUT(X+8*X,10)-(X+8+8*X.0),EX,PSET
ELSE LINE(X+8*X.1 0)-(X+8+8*X.0).PSET
.BF:MAP(X+1,1)=1
830 IF RND(10)=5 THENMAP(X+1,19)=2:
PUT(X+8*X,190)-(X+8+8*X,180),EX,PSE
T ELSE MAP(X+1,19)=1:L!NE (X+8*X,19
0)-(X+8+8*X,180),PSET,BF
835 NEXT X
840FOR Y=1 TO 17
845 MAP(1.Y+1)=1:LINE(0,20+10*(Y-1))-
(8,10+10*(Y-1)),PSET,BF
850 MAP(32,Y+1)=:1:LINE(8*31,20+10*(Y
-1))-(8*32.10+10*(Y-1)),PSET.BF
855 NEXT Y
860 REM PUT FENCES ON BORD
865NF=10*LV
870FORX=1 TONF
875 X1=RND(32):Y1=RND(19)
880 IF MAP(X1,Y1)<>0 THEN 875'
885 MAP(X1 , Y1 )=3:PUT((X1 -1 )*8, 10+10*
(Y1-1))-((X1-1)*8+8,(Y1-1)*10),FE,PSET
890 NEXT X
895 REM PUT ROBOTS ON SCREEN
900 FOR X=1 TO 5
905 X1=RND(32):Y1=RND(19)
910 IF MAP(X1,Y1)<>0THEN 905
915 MAP(X1,Y1)=4:PUT((XM)*8,10+10*
(Y1-1))-({X1-1)*8+8,(Y1-1)*10),RB.PSET
920 PY(X)=Y1 :PX(X)=X1 :D(X)=1 :UX(X)=
X1:UY(X)=Y1
925 NEXT X
930 REM PUT THE MAN ON SCREEN
935 X1=RND(32):Y1=RND(19)
940 IF MAP(X1,Y1)<>0 THEN935
945 MAP(X1,Y1)=5:PUT((X1-1)*8,10+10*
(Y1-1))-((XM)*8+8,(Y1-1)*10),MN,PSET
950 PX=X1:PY=Y1:0X=PX:0Y=PY:
RETURN
955 REM SPEECH OUTPUT
956 POKEV+1,52:POKEV+3,63:POKEV+
35.60
957 POKE65494,0
960 FOR 1=1 TO LEN(A$)
965 IF PEEK(VI) AND 128=0 THEN 965
970 POKE V1,ASC(M1D$(A$,I,1))
975 NEXT I
980 IF PEEK(VI) AND 128=0 THEN 980
985 POKE V1,13:F0RT=1 TO30*LEN (A
$):NEXTT:POKE65495,0:RETURN
1000 REM INSTRUCTIONS
1005 CLS1
1010 PRINrUSEING RIGHT JOYSTICK
KEEP AWAY FROM ROBOTS AND FEN
CES AND WALLS."
1015 PRINTTRESS FIRE BUTTON TO D
ROP MINES."
1020 PRINT-'E' ARE EXITS. BUT IF YOU
EXIT YOU DONT ADVANCE A LEVEL."
1025 INPUT-PRESS ENTER TO BEGAIN
";N$:CLSO:RETURN
ColorZap93 (continued from page 15)
14310 mvdn3 leau $10,u
14320 jnca
14330 mvdnS cmpa#19
14340 bne mvdnS
14350 bra mvdn4
14360
14370 nonext coma
14380 rts
14390 next tstmtcfig
1 4400 beq nonext
14410 Idxzero
14420 stxmtcflg clear match and split find
14430 tstopnfig
1 4440 bne nxinxt
14450 Idxmtctrk
14460 stxtrack
14470 stxSec system track/sector
14480 nxl2 Idxfndloc start search AFTER current
match
14490 leax 1,x
14500 sbffndloc
14510 I bra fndwds
14520 nxinxt Idd frcnum
14530 std recnum
1 4540 bra nxl2
14550
14560 repkey tstrepflg
14570 bne endrep
14580 Ida dos
14590 beq rpkl
14600 deca
14610 beq d1
14620 deca
14630 beq d1
14640 bra norep
14650 d1 Idx#$d8ce end of DOS 11 irq
1 4660 bra rpk2
14670 rpk1 Idx#$d7db end of D0S1 irq
14680 rpk2leay REPEAT.pcr
14690 Idu ,x
14700 cmpu#$8955
14710 bne norep
14720 sty,x
14730 com repfig
14740 endrep coma
14750 rts
14760 norep leax repmsg-1,pcr
14770 jsr prints
14780 jsrgetchr
14790 bra endrep
14800 repmsgfcc /Sorry, can't help you with your
current system./
14810 fob CR,0
14820
14830 opnmsg fee/Link to file: /
14840 fcb
14850 Ispn fee /A file is already open!/
14860 fcb
14870 isopn leax ispn- 1, per
14880 jsrphntS
14890 jsrgetchr
14900 orcc #1
14910 badink rts
14920 quitin andcc #.not,1
14930 rts
14940 link tstopnfig
14950 bne isopn
14960 leax opnmsg- 1, per
14970 jsr prints
14980 Ibsr linein
14990 bcs quitin exit on BREAK
15000 ldx#iinbuf+1
15010 tst,x
15020 beq dir
15030 decb
15040 leay xitopn.pcr
15050 pshs y
15060 clr,-s
15070 Ida drive
1 5080 sta $eb
1 5090 ldy#$94c
15100 pshs b
15110 Idd #$200b
15120 nmclr sta ,y+ erase file name area
15130 decb
the world of 68' micros page 19
RGBeest- $15.00
If you want to speed up DECB easily,
install on Hitachi 6309 and get RGBoost.
This patch for DECB uses the extra 6309
functions for up to a 15% gain in overall
speed. It is compatibie with all progranns
tested to date! Save an additional $5 by
purchasing RGBoost along with one of
my other products listed below!
EDTASM6309 va.Oa - S35>00
Patches Tandy's Disk EDTASM to support Hita-
chi 6309 codes! Supports all CoCo models,
including stock 6809 models. CoCo 3 version
uses 80 column screen, runs at 2MHz. YOU
MUST HAVE A COPY OF DISK EDTASM. This
is a PATCH ONLY! It will not work with "disk
patched" cartridge EDTASM
CC3FAX-$35.00
Receive and print weather fascimile maps from
shortwave! The US weather service sends them
all the time! Requires 51 2K CoCo3 and short-
wave receiver. Instructions for simple cable
included.
HRSDOS- $25.00
Move programs and data between DECB and
OS-9 disks! Supports RGB-DOS - move files
easily between DECB and OS-9 partitions! No
modifications to OS-9 modules required.
DECB SmarfWatch Drivers ■ $20.00
Access your SmartWatch from DECB! Adds
function to BASIC (DATE$) for accessing date
and time. Only $15.00 with any other purchase!
Robert Gault
532 N. Kenaud
Oroeee Fomte V^oode, Ml 45256
313-551-0335
Please add $4 S&H per order
15140
bne
nmclr
15150
puis
b
15160
pshs
X
15170
bsr
ckdos
15180
leay
,x
15190
puis
X
1 5200 sname imp [fgetnm.yl
15210
15220 dir bsr ckdos
15230
Idb
drive
15240
stb
$eb
15250
jsr[fc
ir,x]
15260
sta
$ffd9
15270
Ida
#CR
15280
jsrscrprt
15290
bra
link
15300
15310 setclk
pshs a,x
15320
Idx#$ffd8
15330
Ida
clock get default clock speed
15340
sta
a.xset correct clock rate
15350
puis
a.x.pc
15360
15370 Ckdos
bsr setclk
15380
leax
doslO.pcr
15390
tst dos
15400
beq
xckdos
15410
leax
dos 11, per
1 5420 xckdos rts
15430
1 5440 diskon
bsr setclk
15450
jsr[dskcon]
15460
sta
$ffd9
15470
tstSfO
15480
rts
15490
15500xitopn ldx#$1ff
15510 stx$957 file type
15520 idx#$100
1 5530 stx$97c record lengtti
15540 com opnfig
15550 Idd #r$l00+1
1 5560 bsr ckdos
15570 jsr[fopen,x]
15580 sta $ffd9
15590 orcc #1
15600 tst $973
15610 Ibeq badink
15620 bsr ckdos
15630 leay ,x
15640 tdx$928
15650 jsr[flof,y]
15660 sta $ffd9
15670 isr$b3ed
1 5680 std lof
15690 bsr ckdos
15700 jsr[fclose,x]
15710 sta $ffd9
1 5720 ldx#$200 binary format
1 5730 stx$957 file type
15740 ldx#$100
15750 sb<$97c record lengtti
15760 Idd rR*$100+1
1 5770 bsr ckdos
15780 jsr[fopen,x]
15790 sta $ffd9
15800 Idd #1
15810 std recnum
15820 Ibra ssecO
15830
15840 unlink tst opnfig
15850 beq nouink
15860 Ibsr ckdos
15870 jsr[fclose,x]
15880 sta $ffd9
15890 Idd zero
15900 sta opnfig
15910 std recnum
15920 std frcnum
15930 std lof
15940 ldx$928
15950 incb -1
15960 std 7,xclear file record number
15970 andcc #.not.1
15980 rts
15990 nouink orcc #1
16000 rts
16010
16020 * Next routine used pnmarlly for 35/40 track
disks but also can be
16030 * used to bypass certain copyrigtit sctiemes.
16040 rsmsg fee /Enter max values for
Track#<CR> Sector#<CR>: /
16060 fcb
16060 reset leax rsmsg-l.pcr adjust max values
for track/sector
16070 com cpyflg
16080 Ibsr cmdset
16090 Ibsr decbin
16100 bcs badrst
16110 sta maxtrk
16120 Ibsr more
16130 sta maxsec
16140 cirb
16150 cmpa#9
16160 bts a@
16170 incb
16180 a@ Ida maxtrk
16190 cmpa#17
16200 beq d@
16210 bio b@
16220 deca
16230 b@ Isia
16240 pstis b
16260 adda ,s+
16260 c@ sta maxgrn
16270 rts
16280 d@ deca
16290 bra c@
16300 badrst orcc #1
16310 rts
16320
16330 * PRINT: dump text screen to printer
16340 print Ida $ff22
16350 Isra
16360 bcs Z@
16370 Idd #$36fe
16380 sta $ffa2 $4000
16390 ldx#$4000
16400 stb $6f
16410 a@ Ida ,x++
1 6420 jsr [$a002] print to console out
16430 cmpx#$4fa0
16440 bne a@
16450 Ida #CR
16460 jsr[$a002]
16470 clr$6f
16480 rts
16490z@ leax prterr-1,pcr
16500 jsr prints
16510 jsrgetchr
16520 bra badrst
16530 prterr fee /printer not ready!/
16540 fcb
16550
16560 • REPEAT KEYS FOR THE RGB DOS
SYSTEM
16570 * Based on ttie code of Roger Sctirag in
Rainbow
16580
1 6590 * ADJUST ONLY RATEl or RATE2. Leave
everything else atone!
16600
16610 RATEl EQU 60time for repeat key in IRQs
16620 RATE2 EQU 3 ,05s repeat
16630 SCRUBEQU $3F row 6 not repeated
16640 KCLEAR EQU $14A RGB variable area
16650 KHOLDEQU $148 may need to be moved
16660 KEYBUF EQU $152 KEYBOARD BUFFER
16670 KBFEND EQU $15A
16680
16690
16700 REPEAT LDX #KEYBUF
16710 a@ LDA ,X+
16720 ANDA #SCRUB
16730 CMPA #SCRUB
16740 BNE A@
16750 CMPX #KBFEND
16760 BNE a@
16770 INC KCLEAR
16780 LDA KCLEAR
16790 CMPA #7
16800 BLO Z@
16810 CLR KCLEAR
16820 CLR KHOLD
16830 A@ INC KHOLD
16840 LDA KHOLD
16850 CMPA #RATE1
16860 BNE Z@
16870 SUBA #RATE2
16880 STA KHOLD
16890 LDX #KEYBUF
16900 b@ LDA ,X
16910 ORA #SCRUB
16920 STA .X+
16930 CMPX #KBFEND
16940 BNE b@
16950 Z@ JMP $8955 EXBasic IRQ
16960 zendequ *
16970
16980 ORG KCLEAR
16990 FDB
17000
17010
17020 org $16a
17030 jmp start
17040
17060 end start
FINALLY!!
THE END OF
CotorZap93
LISTINGS!!
page 20 the world of 68' micros
CcCc i Censumer Infc
continued from page 5
SIMPLE: The simple keyboard is
less confusing than those having nnany
unfanniliar keys. Disk BASIC is nnuch
easier to learn than MS-DOS. And
what could be sinnpler than Inserting a
Program Pak and turning on the com-
puter?
VERSATILE: The Color Computer
supports both TV sets and monitors,
disk drives (floppy and hard) and cas-
sette recorders, large character text
screens and 80 column screens. It can
be as simple or sophisticated as you
want
COMPATIBLE: with standard print-
ers (serial port built in, parallel print-
ers require a serial to parallel conver-
ter), disk drives, and modems (exter-
nal, maximum practical speed is 9600
bps).
POWERFUL: Multitasking, 64 col-
ors, programming languages sup-
ported - a good hacker's computer
RELIABLE: Widely used for control-
ling industrial processes, the Color
Computer has a long history of reliabil-
ity. Service is available at any Radio
Shack. The ROM-based Disk BASIC
operating system is immune to viruses.
"the world of 68' micros": an excel-
lent monthly magazine that, since
1992, has provided programs, help,
product reviews, and instruction for
users of the Color Computer.
DELPHI: a national telecommuni-
cation information service with a Color
Computer Special Interest Group, for
exchanging programs and information
with "CoCoNuts" across the country.
COCO-LIST: An internet mailing list
and use-net group of CoCo lovers.
Computers are playing an ever-in-
creasing role in modern society. The
Color Computer 3 is ideal for anyone
wanting to learn about them and how
to use them, without having to spend
a lot of money or attend special
classes. No other computer in the world
provides so much power for so little
cost.
NEW Hardware coming from
Cloud Nine
c/o Mark Marietta
3749 County Road 30
Delano, MN 55328
email : nnmarlett@isd.net
voice: 612-972-3261
512k - 2048k upgrade board
Just install SIMM memory in 512k in-
crements (2x256K 8 or 9 chip SIMMs).
Three chip SIMMs WILL NOT work! This
is a timing requirement, as the 8/9 chip
SIMMs use the same timing as the CoCo
DRAM upgrades.
SCSI Host adapter interface
• Comes with 0S9 Drivers, 6x09.
63b09e 1.78MHZ system "megaread"
times are -1 1 seconds with 512 byte sec-
tors (Nitros 2.00 Level3).
• 256/512/1024 Sector size selection
• FULL SCSI ID supported
• Parity generation, enable/disable. Can
use with parity devices such as ZIP drives!
• Gold plated card edge connector
• 50 pin SCSI header port
• Installation/Operation Manual
• Schematic package
• 0S9 Utilities SCSltools, SCSIdesc,
ZIP/JAZ Tools
• SCSltools - A BASIC09 utility that will
do low level SCSI commands.
• SCSIdesc - A BASIC09 utility pro-
gram that will create the SCSI descriptor
for you based upon the menu drive op-
tions inputted.
• ZIPJAZtools - This utility will allow the
features of the Iomega ZIP/JAZ drives.
Eject disk, software protection are some.
This utility isn't written yet, but I have the
documentation needed from Iomega. Will
do this soon!
These products should be avail-
able at the Chicago CoCoFest! Look
for me there!!
A 51 2K SIMM upgrade is ready to ship.
The unit will ship with the following items:
1 - 512K SIMM Memory Board with 8 or
9 chip 120ns or faster SIMMS
1 - Installation Manual
1 - Schematic package
1 - RSDOS Memory Test Program sup-
plied on 5 1/4" disk.
$40 each including shipping, UPS
ground, within the US. If you are outside
of the US please indicate method of ship-
ment desired and I will check into the
added cost, if any.
BlackHawk
Enterprises
New Products!
► Data Windows - $69.95 - A complete flat database program for OS-9/68K.
Facilities include database creation, searching, maintenance and report generation.
By Alpha Software Technologies.
» GNU TWO - $49.95 - This package include a new port of GNU M4. and the AUTOCONF
automatic configuration macros. Together with the included port of BASH these tools
make automatic configuration of software a much easier chore. Widely used on UNIX
and other operating systems, use it now on your OS-9 platform! Includes two new
manuals totaling about 110 pages.
• Model Rocketry Tools - $15 - Includes ports of tools for modeling and tracking the
performance of various configurations of model rockets. Essential tools for those
interested in designing rockets or achieving specified altitudes. Should run on any
OS-9/68K machine.
MM/1, MM/1 a and MM/lb hardware and other software still available, inquire!
P.O. Box 10552 • Enid, OK 73706-0552 • (405) 234-391 1
the worid of 68' micros page 2 1
CoNect
1629 South 61st street
WestAllis, Wl 53214
(pulland@omnifest.uwm.edu)
414-328-4043
Fast232- 16550 does serial! Port speed to 115200bps,
transfers up to 5000 cps. Addressable to four locations.
With 0S9 and Nitros9 drivers. $79.95
2nd Port Daughter Board - $45.00
OS9 Ivl2 Ml available!
Level2 Bundle
Dynacalc+Pgraph
Profile
TSEdit/Word+vi patch
Epyx TriPak
$49.95
os9, b09, mvue, more! plug-n-go for 6809
$19.95
$19.95
$12.95
$14.95
KoronisRift, Rescue Fractulus, Rogue
King's Quest 3
$9.95
Microscopic Mission
$4.95
Sub Battle Simulator
$4.95
Hardware
64Kupgrd 2 or 4 chip
$5.95
512K upgrdCusedj OK
$24.95
512K
$44.95
decb1.1rom + manual
$12.95
mpi upgrd sat. board
$9.95
cable, cassette
$5.95
cable, printer
$5.95
cable, rs232 (100ft!)
$19.25
coir mouse (1 button)
$9.95
mono composite monitor (used)
$24.95
OrchestraQOcc Pak
$12.95
DECS
Disk EDTASM (used)
$19.95
Disk ProFile (used)
$12.95
One on One
$7.95
Sands of Egypt
$7.95
ROMPaks too! (inquire for titles)
Parts (many more in stock!)
1488/89 .75
68b09e
6.95
1723 1.95
6821a
3.95
1773 6.95
SALT
2.25
2764 2.95
74*6
.35
6802 3.50
741s 133
.42
I've also been working on some A/flV hardware
that nnay be available later One of these itenns is a
revision of nny Expander idea that actually works on
nnost CoCo 3's, not just the occasional "right" one.
I'll keep everyone posted on any progress!
Check with nne for connplete disk drive systenns,
nnisc. hardware itenns, hardware repairs, and hard
to find new and used CoCo software not listed!
Shipping & Handling $4 US, $6 Can/Mex, $10 World
ojfworld destinations please consult local Postmaster!
StuoxgWauk
Box 361 Matthews, IN 46957 Phone 317-998-7558
CoCo 3 Software:
Soviet Bloc $15
GEMS $20
CopyCat $5
HFE- HPrint Font Editor $15
MM/1 Software:
Graphics Tools $25
Starter Pak $15
BShow $5
CopyCat $10
Painter $35
ADVERTISER'S INDEX
BlackHawk Enterprises
21
Cloud Nine
21
CoNect
BC
FARNA Systems
9, EC
Robert Gault
20
Hawksoft
14
Pennsylvania CoCoFest
3
Small Grafx
14
Strong Ware
BC
What are you waiting for?
Get your friends to subscribe to
the only magazine that still supports
the Tandy Color Computer...
''the world of 68' micros''!
The more people who want the support,
the longer it w i ll be here!
page 22 the world of 68' micros