WarpSpeed Manual.txt

From ReplayResources
Jump to navigationJump to search

WarpSpeed Manual

text found at Project64

Please check the text for credits - no edits below this line


You now own the most useful and complete cartridge utility ever produced for
the Commodore 64 and 128 computers: the Warp Speed (TM) Accelerator Cartridge
from Cinemaware. It contains the fastest Commodore-compatible DOS ever
produced, allowing you to format disks, load, save, verify and copy files up to
ten times faster than before! In addition, Warp Speed includes: a full-featured
machine language computer-and-disk-drive monitor/assembler with up/down
scrolling and integrated sector editor; an expanded DOS wedge for convenience
when using a disk drive; complete support for two or more disk drives,
including a 30-second two-drive copier for making convenient backups of your
unprotected disks; a reset button for recovering control of your computer when
you experience a "crash" and an "unnew' feature to restore BASIC programs after
a reset.
All Warp Speed functions work identically on the 64 and 128 in both 64
emulation and 128 native modes in both 40- and 80-columns, and are fully
compatible with most commercial software, including many heavily protected
programs that are incompatible with other cartridge utilities. All loads,
boots, saves and verifies as well as disk and file copies will be accelerated
10 or more times on all 1541, 1571 or 1581 (and fully compatible) disk drives.
Although no speed increase may be apparent, the cartridge can also be safely
used with any other Commodore compatible disk drive that leaves the cartridge
port open such as the MSD drives and several harddisk drives available from
third parties.
The 128/64 mode selection switch can also be used to disable the cartridge in
C64 mode in those rare instances when incompatibilities with commercial
software result.
Whether you are a beginner, a serious hacker, or a professional developer, you
will find Warp Speed an indispensable aid which you may never remove from your
computer once you have it plugged in!

        Copyright  1988 Alien Technology Group. All rights reserved.
            Warp Speed is a trademark of Alien Technology Group.



Before installing or removing your cartridge, be sure the computer has been
switched off. Never install or remove your Warp Speed cartridge with the
computer switched on! You may not cause any damage to your computer system if
you do, but do it often enough and either the cartridge or the computer itself
will eventually cease to function.
To activate your cartridge on a C64 (or to power up a C128 in C64 mode), slide
the switch marked 128/64 to the 64 position. To leave the cartridge disabled on
a C64 (should you ever want to do that for any reason), or to power up a C128
in native 128 mode, slide the switch all the way back to the 128 position (make
sure that the label does not interfere with moving the switch fully to the 128
or 64 position). Then turn the computer on normally. The Warp Speed copyright
message will appear to let you know the cartridge has been properly enabled. To
enable/disable the cartridge fully at any time (or to switch between 64 and 128
modes on a C128), slide the switch to the desired position and press <reset>.
C64 owners should use the reset switch built into the Warp Speed cartridge,
C128 owner should use the 128's built in reset switch (so that the disk drives
are also properly reset).
Warp Speed can be used in either 40 or 80 column mode (providing you have the
proper video monitor and cables) on a C128. C128 users who wish to use their
128 in 64 mode with Warp Speed disabled should set the cartridge switch to the
128 position, and hold down the <Commodore> key while powering up or resetting.
Holding down the control key instead will by-pass the normal disk auto-boot on
C128s. To prevent conflicting with copy-protected programs, the DOS wedge is
automatically disabled in 128 mode on auto-booting disks.


When the Warp Speed cartridge is inserted into the expansion port of your
computer, the fast disk access routines are automatically engaged during all
disk loads and saves. The routines will work with any application which uses
Kernal load and save routines but not the Kernal restore routine (which resets
the load and save vectors back to their default values). The fast load routines
are the most compatible of any comparable cartridge-based loader and work with
approximately 99% of all commercially available software. However, the
fast-loading DOS can be easily disabled and re-enabled if necessary.

Files saved with a 1541 disk drive without the aid of Warp Speed are written out


in a skew 10 format. This means that after each sector is written to a disk,
nine sectors are skipped before the next sector is used. Warp Speed loads these
files as fast as the data goes by the drive head, approximately 500% faster
than a 1541 alone. If, however, the files were saved using a 1571 disk drive or
with the Warp Speed fast save function, they will have been written in a skew 6
format, skipping only 5 sectors each time, and can be loaded up to 1,000%
faster than a normal Commodore 64. Other fast loaders can only load these files
about 300% faster. Files will always be saved at the skew 6 format with Warp
Speed, making the save just as fast as the load (or faster).
Most older commercial programs were created with a 1541 disk drive, and should
be file copied to new disks using Warp Speed so that the maximum improvement in
loading times can be obtained. This is very easy to do using the built-in file
copier. Warp Speed will load, save and verify at the same speed regardless of
the type of disk drive, (or mode on a Commodore 128). The scratch and validate
commands will work fastest if the drive is a 1571 in double-sided mode. Note:
1581 disk drives are internally track buffered and always load and save at the
fastest possible speed when using Warp Speed.

                                 THE DOS WEDGE

The DOS wedge consists of a group of commands to reduce the amount of work
involved when using the disk drive. These commands simplify the operations of
loading and saving flies. formatting disks,viewing directories, etc.
LOADING FILES. To load a machine language file, use the percent <%> key
followed by the file name and <return>. This is the same as typing load
"filename",8,1 from BASIC. To load a program to the start of BASIC, use the
diagonal slash </> key followed by the name of the BASIC program to load, then
press <return>. This is comparable to typing load "filename",8. To load and run
the first file on the disk, press the Commodore <C=> and <run/stop>keys at the
same time (<shift><run/stop on a C128 in 128 mode). This will ALWAYS load the
first file on a disk - we have fixed the bug in Commodore's DOS which would
occasionally cause the wrong file to load.
When loading from multiple drive systems. Warp Speed will search both drive 8
and drive 9 looking for the file. If it finds the file, it will change the
currentlv logged drive to the drive on which it found the file.
SAVING FILES. To save a file, type the back-arrow key followed bv the name of
the file, then <return >. This corresponds to the BASIC command save
"filename",8. The file will be saved to the currently logged drive unless the
drive number is specified using the BASIC form of the save command.


using the number sign <#> followed by the drive number and <return>. This will
set the default drive to use with all other DOS wedge commands. You can toggle
between drive 8 and 9 (or drive 10 and 11) by just typing <#> and <return>.
Typing <##> will print the number of the currently logged drive to the screen
without changing it.

VERIFYING FILES. To fast-verify a file, type an exclamation mark <!> followed
by the name of he file, then press <return>. This is equivalent to the BASIC
command verify "filename",8,1. This feature can be used in one of two ways. It
can be used immediately after saving a file to make sure the image on disk
matches the file in memory. Otherwise, it can be used to verify that a file on
the disk is intact and contains no errors, and to show it's start and ending
addresses, without actually loading the file into memory. In this case, ignore
the "VERIFY ERROR" message, as this is normal (it just means that you don't
have the file in memory). Any other message indicates a problem with that file.

BOOTING FILES. To load and run a binary (machine language) file whose execution
address is the start of the file, you can use the asterisk <*> key followed by
the name of the file to boot and <return>. This is the equivalent to the C128's
boot "filename" command but it is also available in C64 mode.
LISTING FILES AND DIRECTORIES. You can list any normal text file to the screen
using the ampersand <&> key followed by the name of the file and <return>.
There is no equivalent BASIC command to do this, but it is similar to the
MS-DOS "TYPE" command. To new the directorv of a disk, type a dollar <$> sign
then return. The directory will be printed to the screen without affecting
program memory. In both cases, you can pause the listing and restart it by
using the spacebar, or exit at any time using <run/stop>. Typing two dollar
signs in a row, as in <$$> <return> will list the name of the disk and the
total number of unused blocks remaining on the disk. You can also include
parameters after the dollar sign to limit the directory display to files which
match the parameters. for example <$tr*=s> <return> would only list the entries
for sequential files beginning with the letters "tr". You can use any of the
previous DOS wedge commands with the directory display created with the <$>
command, by typing the appropriate command letter at the start of the line
containing the directorv entry for the file you want to load. save, verify,
type or boot. You do not have to erase the extra characters on the screen such
as the file size, the built-in routines will look for the quote marks
surrounding the file name, and ignore anv extra data on the line if it finds
ACCESSING THE DRIVE COMMAND CHANNEL. The commercial "at" <@> key followed by
<return> will print the current drive error status to the screen. This is the
equivalent of doing an open 15,8,15 from BASIC and reading the error channel.
You can also send a command to the drive in this way. See the


following section on formatting disks or the section on Drive Commands for more
information on using the drive command channel. For additional information on
this subject, be sure to read the user's guide which came with your disk drive,
as the drive commands are well documented there with many examples.
FAST-FORMATTING A DISK. To fast format (new) a disk, type <@> <f> <return> then
answer <y> to the "are you sure?' prompt. This is equivalent to the open
15,8,15,"n0:diskname,id":close15 BASIC command, and executes a fully-verified
fast format (which will erase anv previous data that may have existed on your
disk). You can include a disk name or disk ID in the command if you desire, as
in <@ > <f0:mydisk,id>, but it is not required. If you have a 1571, the disk
can be formatted as either single- or double-sided, by setting the drive to the
appropriate mode. Sec the following "Utility Commands" section for information
on setting single- or double-sided mode.
the english pound <œ> key followed by <return>. To enter the built-in
machine language monitor, use the pi <pi> key and <return>.


Several additional utility commands which start with the up-arrow <up-arrow>
key can be used from BASIC or from the DRIVE COMMAND feature in the menus. They
are also available from the machine language monitor (described later) when
preceded by the commercial "at" <@> character
The disk menu command, <up-arrow$>, will load the directory into the computer's
memory and will allow you to scroll up and dpwn through the directory to select
a file to load and/or run. This feature is also available from the menu
functions on the FILE UTILITIES sub menu. This command is particularly useful
when you have a very long directory to search through (such as on a very full
disk or on a 1581 drive). It takes the same amount of time to load the
directory into memory with this command as it would to print the entire
directory to screen with the DOS wedge <$> directory command, so there is a
short delay before the directory is displayed after issuing this command.
Because the directory must be loaded into the computer's memory in order to be
able to scroll through it, any BASIC program currently in memory will be
overwritten by the directory data.
Once the directory has been displayed, use the cursor up/down kevs to highlight
the file you wish to use. Then press the diagonal slash </> key to load and run
a BASIC program. or <return> to start a self-booting machine language program.
Other options available are the asterisk <*> key to execute a "boot" (see the
explanation of the "*" command in the DOS wedge section), <up-arrow> to re-load
the directory (if you change disks), or <run/stop> to exit. The "*more*"


prompt will appear if the directory is longer than will fit on the screen.
Simply use the cursor keys to scroll the display up or down as needed.
The kill fast-dos command, <up-arrow k>, disables only the fast loader -- all
other functions, including the DOS wedge, will remain active. This command must
be issued before attempting to load Quantum Link(tm), for example, as the
Q-Link program does not tolerate any sort of fast loader to be active, and will
hang if it detects that you are using one. Use the enable fast dos command,
<up-arrow e>, to re-activate and reset the fast load, fast save and restore
(NMI) vectors.
The colors command. <up-arrow c> can be used to reset the screen colors to
their default values and clear the screen. This is useful in two different
situations. One is when ,&~u accidentallv break out of a program and the screen
is left in an unreadable mode. such as multi-color or bit-map (graphics) mode.
The other is when booting a program which assumes that the default screen
colors are present and changes the text color to black, while leaving the other
colors untouched. Since black letters on a black background are difficult to
read, we added this command so you can set things back to Commodore standard
before booting such a program.
The unnew command, <up-arrow u>, can be used to restore a BASIC program after a
new command, or after using the reset button to recover from a crash.
The re-number drive command, <up-arrow r>, or <up-arrow r> <drive number> can
be used to temporarily change the device number of the currently logged drive
to another number. If, for example. you had two disk drives, both set as drive
number 8, you could turn one off, then use the <up-arrow r> command to change
it to be drive 9, then power up the second drive (which will still be drive 8)
and have a powerful two drive system work with.
Thc screen hard-copy command. <up-arrow h>. will print a copy of the screen
contents to a printer designated as device number 4 (text screens only). When
used with the DOS wedge type file <&> command, it can be used to print out a
short text file without having to load up a word processor! (This feature is
also great for printing those "readme.doc" files that come with many public
domain programs.) Note: Printout will occur in uppercase/lowercase mode, rather
than uppercase/graphics. This is the same mode you get on a Commodore 64 when
you press <shift> and < Commodore> at the same time.
Owners of 1571 disk drives will appreciate the set format commands, <up-arrow
s> and <up-arrow d> for single- and double-sided modes, respectively. These
commands will alloww you to use a 1571 in single- or double-sided mode
regardless of whether you are working with a C64 or C128, and regardless of
what mode you are in. We recommend placing the drives in double-sided mode at
all times, especially when scratching a file or validating a disk, as these
processes will go much faster when the drives are in double-sided (2 Mhz) mode.
A few exceptions to this rule are: don't place a 1571 in double-sided mode when
loading most copy-protected


Commodore 64 software, don't place them in double-sided mode when working with
"flippy" disks, and don't place them in double-sided mode if you intend to
format a disk as single-sided, as both our fast-format and Commodore's own
format routines use the drive's current mode to determine whether to format the
disk as single- or double-sided. If your 1571 drive has trouble initializing or
reading a single-sided disk when set to double-sided mode, then you should
contact Commodore to obtain their upgraded drive ROMs, which are considerably
improved over the original ones and have fixed this problem, or set the drive
back to single-sided mode.

Using the Menu Functions

The english pound key, "f", activates the built-in menu-driven features of Warp
Speed. Upon entering the menu system, the Main Menu will appear. There are nine
options to select:
1.  View Directory
2.  Sector Editor
3.  File Utilities
4.  Single Copier
5.  Dual Copier
6.  Drive Command
7.  Set Drives
8.  ML Monitor
9.  Quit To BASIC
Select the desired option by moving the highlighted cursor up or down with the
cursor keys and then press <return>; or you can choose an option by pressing
the number key corresponding to the option you wish to select. Two other keys
are also active in the menu system: the "Q" key can be used to exit directly to
BASIC no matter what level of menu you are in, while the spacebar by itself can
be used to swap source and target disk drive assignments and a shifted-space
will set the target drive to be the same as the source drive.
Here are brief descriptions of the nine main menu choices available.
Use this function when you want to display the current source and target disk
directories on the screen. If the directories are too large to fit on the
screen at one time, the screen will scroll. You can pause the listing at any
point by using the spacebar, pressing it again will allow the listing to
continue. You can terminate the directory listing at any time with the
<run/stop> key, if you have two drives you may have to press it twice (once for
each directory). Use <q> to return to the Main Menu.


Use this option when you want to edit a data or program file without loading
the complete file into memory first, or to change something in the disk
directory (such as the spelling of a file name or to lock or unlock a file).
See the following section for more information on using the sector editor, or
the summary pages for a listing of the available commands. Use <q> to return to
the Main Menu from the sector editor.
Choosing this option will bring up a second menu of choices for file handling.
From this new menu, you can automatically copy one or more files, scratch
(delete) one or more files from a disk directory, select a file from the disk
auto-menu feature, use a drive command (to validate or format a disk, for
example), set your source and target drive assignments, or return to the Main
Menu. If you arc working on a double-sided disk, be sure to use the <up-arrow
d> command to set the drive(s) into double-sided mode. See the list in the
command summary for an explanation of the commands available in the sub-menu
selections. Note: The largest file which can be copied by the file copier is
limited by the available RAM, and will further be affected by the size of the
disk directory of the source drive, which is also stored in RAM during the copy
process (and which can get very large, especially for 1581 users). If you
attempt to copy a file larger than the available RAM (approximately 220 disk
blocks max), the copy will fail, and you may have to press the RESET button to
regain control of your computer. Special Note: the File Copier is the ONLY way
to back up 1541/1571 disks to or from a 1581. We intentionally did not create a
way to copy whole 5 1/4" disks to a 1581, as this 1) this wastes over half the
1581's storage capacity (1581's have 40 sectors per track versus a 1541's 17 to
21) and 2) required more room for code than we had available in our cartridge
ROM and 3) would not have been that much faster than using the file copier to
do the same thing. You are better off creating a sub-directory for your 5 1/4"
disks on a 1581 and file copying your data to it. See the user's guide which
came with your 1581 for information on how to create and use sub-directories on
your 1581.
Select this function when you wish to copy a single- or double-sided disk using
one or two disk drives, or to copy a 1581 disk (using either one or two 1581
disk drives). This copier compresses the data during the read process, so many
1541 disks which are not completely full can be copied in only one or two
passes. This utility also verifies both the source and target disk for bad
sectors. If you have a source disk which this copier will not copy (because of
an error on the diskette), then you ~ll have to format a new disk, and use the
file copier (in the File Utilities menu) to copy all of the files which are
still intact from the damaged disk to the new disk. Note: Double-sided disks
can, of course, only be copied on a


1571 disk drive. You must also use the SET FORMAT option from the copier
sub-menu to change the setting from SINGLE to DOUBLE in order to copy both
sides of a 1571 diskette. A 1581 disk can only be copied to another 1581 disk.
You cannot mix a 1541/1571 and a 1581 with this copier, but you can use two
1581's together. Both sides of a 1581 disk will be copied regardless of the
SINGLE or DOUBLE setting.
Choosing this option will activate a sub-menu similar to the one for the Single
Copier (above). As its name suggests, you need two disk drives to use this
nibble-type copier which can copy either single- or double-sided disks (with
two 1571 drives) in approximately 30 seconds per side. If you want to copy a
double-sided disk with this copier, you must use the SET FORMAT option from the
sub-menu to switch from SINGLE to DOUBLE (even if the drives are already in
double-sided mode). This copier, while extremely fast, is not as reliable as
the fully verified single copier described above. It is, however, write
verified, so that it will report any errors created during the copy process. If
you have difficulty copying a disk with this copier, try switching your source
and target drives. If this still does not enable you to make a working copy,
then you will need to use the Single Copier with this disk or this hardware.
Note: This copier is designed for copying only unprotected software, and will
not copy diskettes which are copy-protected. It will not work with two 1581's,
use the Single Copier for that.
Use this menu option when you want to send a command to the drive or read the
drive status. Press <return> to get the error status; or enter any drive
command by pressing the letter of that command followed by <return> (see Drive
Commands). You can also enter any of the utility commands at the ">" prompt
(the commands which begin with an up-arrow). Be sure to include the "up-arrow"
when entering these commands. Press <#> <return> to select a different drive.
Press <q> to return to the main menu.
Allows you to select the source and target drives for the file copier, disk
copiers and sector editor.
Enters the machine language monitor (see Machine Language Monitor later in the
manual). You can return to the main menu from the ML Monitor by using the "xm"
Exits the menu system and returns you to BASIC.


Drive Commands

Drive commands are commands that may be used directly from the Drive Command
option of the menu system, or (when preceded by a commercial "at" <@>) from the
DOS wedge or machine language monitor. These commands are detailed in the
manuals that come with your disk drive. A few of the more useful ones are:
<@f>, which does a fully verified fast-format; <@Uj>, which resets a disk drive
as though it had just been turned on; <@v>, which validates a disk to eliminate
bad "*prg" (splat) files from a disk directory and clean up the block
availability map (BAM) on heavily used disks; <@s0:> <filename>, which will
scratch (delete) a file from the disk, and <@r0:> <newname = oldname> which can
be used to change the name of a file on a disk from "oldname" to "newname". The
"@" symbol by itself will read the disk drive error channel and report the
status of the disk drive. The "greater than" symbol ">" can be used in place of
the "@" symbol, if you prefer. Do not include either symbol, however, when
using the Drive Command option from the menu system (it's already there for

Perhaps the most powerful features of the Warp Speed cartridge are the sector
editor and machine language drive monitor. They have been integrated together
to make a very powerful program creation, de-bugging and editing tool. To make
the most use of these features, it is helpful to know the hexadecimal numbering

Sector Editor

To enter the sector editor from BASIC, use the english pound <œ> and
<return> to activate the main menu and first choose 7.SET DRIVES from the
available options to set the source and target drives, then choose 2.SECTOR
EDITOR to activate the sector editor. Entering the sector editor from the menu
system will clear the editing buffer from $7E00 to $7EFF and set the default
track and sector to track 18 sector 1 (the start of the 1541/1571's directory
-change these numbers to track 40 ($28) sector 3 if you want the start of a
1581 directory). From the machine language monitor, you can enter the sector
editor with the <xs> command. Entering the editor in this way will not clear
the buffer or change the current track and sector settings, so you can go back
and forth between the editor and ml monitor as often as you like to modify a
file by tracing the file a sector at a time using the sector editor, making any
changes you need from the ml monitor, and then returning to the sector editor
to write the modified data out to disk, without having to load the entire file
into memory first.


To read a sector, type <r> <track> <sector> (where track and sector are two
digit hexadecimal numbers), or just <r> <return> <return> if both of the
default values are o.k. The desired track and sector will be read and the
contents transferred from the disk drive to the editing buffer at $7E00 in the
computer. Similarly, to write a sector back to a disk, use the <w> command.
To edit a sector, move the cursor to the desired position with the cursor keys,
then enter the new value in hexadecimal. Because of the size of the screen,
only half of a sector will be visible at a time. To see the other half, simply
move the cursor off the top or bottom of the data and the other half will
scroll on. If you are makihg changes to text, you can simply type in the
desired letters by pressing <t> to enter text mode. The <run/stop> key is used
to exit text mode.
Several keys allow you to move to a different sector on a disk, <+> will
advance you to the next sector, <-> will move you back one sector, <shift> <+>
will advance you one track, while <shift> <-> will move you back one track. The
<n> key will allow you to trace a file by moving you to the "next" track and
sector of that file (as pointed to by the first two bytes in the sector). The
<j> key will 'jump't to the track and sector pointed to by the bytes currently
under and immediately following the cursor. This can be used to move to the
beginning of a file from the pointers located in the directory, so you can edit
a file without ever having to manually enter a track or sector!
At any time, if you wish to enter the machine language monitor to disassemble
or edit the data, use the <m> command. Remember to exit back to the sector
editor with the <xs> command so that your changes won't be erased from the
If you have a Commodore printer attached as device 4, you can print out the
entire sector contents with the <p> command. This is not merely a screen dump,
both halves of the sector display will be printed together. If you are in the
second half of the sector data, pressing <home> once will move the cursor to
top of the screen editing area. Pressing it a second time will move you to the
start of the sector data. Pressing <clr/home> (<shift>-<home>) will erase the
buffer (fill it with zeroes) from the cursor position forward to the end of the
sector. Pressing <q> will exit the sector editor. The <run/stop> - <restore>
combination will always return you to BASIC (without crashing the machine as
with most other cartridges).
One very powerful (but somewhat dangerous) feature of this sector editor is its
ability to read a sector from one drive and write it out to another. BE CAREFUL
NOT TO DO THIS ACCIDENTALLY! You must set your source and target drives from
the main menu before entering the sector editor -- there was no room in our ROM
to make this command available from within the sector editor itself. If you
find that you don't have the correct target drive set, and you aeC already in
the sector editor, you can use the spacebar to switch source and


target drive assignments, or use a shifted-space to set the target drive to
equal the source drive. Please be careful you don't accidentally do this as
well! A well-placed write-protect tab can save you many headaches by protecting
you from such mistakes.

Machine Language Monitor

The machine language monitor is one of the most advanced monitors ever produced
for the Commodore 64 and 128. It was designed to be extremely flexible and
accept the syntax of most other previously available monitors, for example, you
can separate most parameters with spaces, commas, shifted spaces or sometimes
no spaces at all. All numerical entries in the monitor must be in hexadecimal
and entered as two or four byte values, and (except for the assemble command)
do not take the "$" symbol. As you become more familiar and comfortable with
the ml monitor, you may wish to re-read the examples included here for "expert"
techniques which can save you time and labor.
To disassemble memory, type <d> followed by addresses to start and end the
disassembly at; for example D 1000 1050 will disassemble memory starting at
$1000 and ending at $1050. You can pause and resume the disassembly at any time
using the spacebar, or terminate the disassembly with <run/stop>. If you leave
off the second address, such as D 1000 , then disassembly will start at $1000
and continue until you press the stop key or the end of memory is reached.
Typing <d> by itself will continue disassembly from the last address displayed
for about one-half a screen page and then stop. The <m> command (display memory
in hexadecimal) and the <i> command (interpret memory in Ascii) work
identically, except for the display format. You can also use the cursor up and
down keys to scroll forward or backward through memory. The following examples
show the use of these commands:

D C000 D000           disassemble from $C000 to $D000
M,C000,D000           display memory from $C000 to $D000 in hex
                      (note use of optional comma separators)
IC000D000             interpret Ascii from $C000 to $D000
                      (note optional lack of spaces between values)
D C000                disassemble from $C000 onwards
M                     display memory from current address onwards
                      for half of one screen page


You can use the <m> command to edit memory contents by typing over the display
and pressing <return>, and you can terminate a line with a colon so that the
rest of the information on that line will be ignored. For example, to display
and edit one byte of memory at $D020, without affecting the bytes which follow,
you would type the following:

M D020 D021

and the display would show:

.: D020 F6 F0 Fl F2 F3 F4 FO Fl

If you were then to type over the line like this:

.:D020 Fl:Fl Fl Fl Fl Fl F1 Fl ........

and then pressed <return>, you would get:

.:D020 Fl FO Fl F2 F3 F4 FO Fl
.: D028 _

and the border would turn white, indicating that the ml monitor had accepted
the new value at $0020 (the VIC border color register) but had ignored the
remainder of the input line. Two spaces in a row can be used instead of a
colon, if desired, to terminate an input line.
As the last example shows, whenever you type over an existing display value in
the monitor, that value is modified and the line is reprinted. Then the next
address is displayed and the cursor positioned for new input. This can be used
effectively to move selected memory contents from one address to another. The
following example demonstrates this feature. Suppose, for example, you wanted
to update a copyright notice in your file and change the date or name. Let's
say the previous notice was located in memory at $2020 and said "(C) XYZ CO.
1987" and you wanted to change it to "(C) XYZ INC. 1988". Since there is no
easy way to enter text from the ml monitor, you decide to use the text mode of


integrated sector editor instead. The following example shows how you might do
this. First you would enter:

M 2020 2028 <return>

and the computer would show:
.:2020 28 43 29 20 58 59 5A 20 (C) XYZ
.:2028 43 4F 2E 20 31 39 38 37 Go. 1987

Now type over the $2020 address and replace it with $7E00, like this:

.:7E00 28 43 29 20 58 59 5A 20 (C) XYZ

and press <return>. This will move a copy of the data to the sector editor's
editing buffer. when you press return, the new address of the second line will
be automatically computed and printed over the former value of $2028. Press
<return> again, and the next line will be transferred to $7E08 - $7E0F. Your
display would now look like this:

.:7E00 28 43 29 20 58 59 5A 20 (C) XYZ
.:7E08 43 4F 2E 20 31 39 38 37 CO. 1987

Now press <return> to exit the <m> display mode and type <xs> to enter the
sector editor. The display will change to the normal sector editor display, and
the first two lines will have the old copyright message on them. Cursor over to
the "C" in "CO." and press <t> to enter text mode. Now you can type in your new
text, "INC 1988". Press <run/stop> when you are finished typing and then <m> to
return to the ml monitor. Entering M 7E00 7E10 <return> should reveal the
modified text, which you can transfer back to $2020 using the same procedure as
we used to move it from $2020 to $7E00 in the first place, namely cursor up and
type over the $7E00 and enter $2020, then press <return> twice to copy the two
lines. Since your new text is one byte longer than your original, you will have
to press <return> one more time, but before you do, add a colon after the $38
(as in 1988) to limit the line to the exact number of bytes you want to move
(one), then press <return>. As this example illustrates, integrating the sector
editor with the ml monitor can have unexpected benefits.
Additionally, it is not necessary to use the <m> command to first display
memory before modifying it in this way. You can simply use the colon <:>


followed by the address to change and one or more bytes to enter, then press
<return>. For example tyhping the following line will change the screen colors
back to normal (default) Commodore colors:

:D020 0e 06 <return>

Like the <m> command, the <d> command will also allow you to change memory
contents, or copy code from one location to another. Feel free to experiment,
and let us know if you find any interesting tips or tricks!
To compare two areas of memory, use the <c> command followed by the start and
end address of the first block of memory followed by the start address of the
second block to compare to, as in C 8000 9FFF A000 to compare the block at
$8000 to $9FFF with the block at $A000 to $BFFF. Any addresses in the first
block which differ in content from the corresponding addresses in the second
block will be printed to the screen. You can use the spacebar to pause or
<run/stop> to abort the listing. You can also fill an area of memory with a
constant value aby using the <f> command followed by the starting and ending
addresses of the memory block and the value to fill with, as in F 0400 07FF 20
which will fill the screen memory area at $0400 to $07FF with $20's (spaces).
The <back arrow> key followed by a value will set the configuration (bank
select) register to the new value. This register is location $01 on a C64 and
$FF00 on a Commodore 128 in 128 mode. For example, <back arrow>34 on a C64 will
bank out the BASIC and KERNAL ROMs as well as the I/O block at $D000 to allow
you to access all 64K of the RAM in the C64 from the monitor. Using either
<backarrow> 00 or <backarrow> 01 in 128 mode will allow you to do the same
thing on a C128 for RAM banks 0 and 1, respectively.
The <r> command will display the current processor register and configuration
register values, as well as the current value of the system IRQ pointer at
$0314/$0315. These are the values which the processor will use if you issue a
<g> command to go (execute) a routine, as in G FCE2 to reset a Commodore 64. If
you wish the routine being called to return to the monitor on completion, then
end it in a BRK instruction. An RTS instruction would return you to BASIC. Any
BRK instruction will automatically execute a register display upon entry back
into the monitor.
YOU CAN HUNT FOR A SEQUENCE OF BYTES in memory with the <h> command, as in H
E000 FFFF 8D 00 DD which will hunt through the Kernal ROMs for all occurrences
of the sequence $8D $00 $DD. You can move a block of code from one memory
location to another using the transfer <t> command, as in


T 1000 1FFF 1002 to move the data which presently sits at $1000 to $1FFF to the
new location of $1002 to $2001. Note that you can move blocks up or down in
memory and overlap their current locations without worry, the cartridge uses a
"smart move" algorithm that won't accidentally turn into a fill command. Two
additional versions of the transfer command, <td> and <tc>, will transfer
blocks of memory to and from disk drive memory, respectively. Just remember "To
Drive" and "To Computer"!
To redirect all output from the screen to a printer attached as device number
4, use the <p> command to toggle the printer output on and off. While output is
redirected to the printer, no screen printing will occur.
The monitor includes a mini-assembler, which is accessed by the <a> command, as
in A1OOOLDA#$01 which will assemble the instruction LDA #$01 to $1000. Spaces
here are optional. All operands in the assembler must be entered as two or four
byte hex numbers, and be preceded by the "$" symbol. You can add a colon at the
end of a command line as a terminator so that any additional text on the screen
will be ignored. To exit the assembler, just press return on an empty line.
The <o> I/O command is used to switch between programming in the computer
memory and disk drive memory. Use o 08 to access drive 8 RAM, for example, or o
by itself to return to computer memory. Remember to enter the drive number in
hexadecimal for drives 10 or 11. All of the monitor commands are available when
programming in the disk drive except <r> (register display) and <backarrow>
(bank select).
The <$> command will list the directory of the currently logged drive to the
screen. <@#> can be used to log on a different drive, as in @#0A to set drive
10 as the default drive. As in the DOS wedge, the <@> command is used to read
or write to the drive's error (command) channel. All of the utility (up-arrow)
commands are available from the monitor, provided you precede them with a
commercial "at" (@), as in @<uparrow>R09 to renumber the currently logged drive
to drive 9 (see Utility Commands).
The load, verify and boot commands all work identically. The syntax is <l> (or
<v> or <b>) followed by the filename (in quotes) followed by an optional drive
number and an optional address (for relocated loads). A few examples should
make this clear. Entering L "MYPROGRAM" 1234 would cause the program named
"MYPROGRAM" to load from the currently logged drive and cause it to relocate
(start loading at) $1234. If the program "MYPROGRAM" was not on the current
drive, the cartridge would automatically search for it on a second drive, if
you had one, and load it from there. If you had typed L' "MYPROGRAM" 09 1234
then the cartridge would have looked on drive 9 first (though it would still
have checked drive 8 if the file was not on drive 9). If


you had left off the "1234" in either command, then the file would have loaded
to its normal (default) load address, normally the same address from which it
was originally saved. Because our monitor requires that you put the filename in
quotes, you can have any text you like between the command letter and the
filename, and it will be ignored. This is very useful if you have just used the
<$> command to list the directory to the screen, just cursor up to the line
containing the filename and type L,V or B at the start of the line and the
corresponding file will be loaded, verified or booted. If you relocate a load
with the boot command, the file will start executing from its new load address.
If the file was not designed to be relocatable (or even to be "bootable"), the
program may not execute properly if you do this.
The <s> save command also works similarly. The command format is <s> followed
by the filename (in quotes) then an optional drive number, then the starting
and ending addresses of the memory block to be saved, followed by an optional
new load address for the file. For example S"YOURPROGRAM" 08 1234 5678 9ABC
would take the area of memory from $1234 to $5678 (inclusive) and save it to
disk drive 8 with the filename "YOURPROGRAM" and give it a default load address
of $9ABC. This is the only Commodore monitor of which we are aware which will
allow you to relocate saves, which is most useful when creating files which
will eventually be loaded to inconvenient places like screen memory or the
stack. As in the load command, the drive number is optional, however if you
have more than one disk drive, it is a good idea to include it to prevent
accidentally saving the file to the wrong disk. If you don't specify a disk
drive number, the default (currently logged drive) will be used.
Finally, there arc five ways to exit the monitor! The <q> command will return
to BASIC, and restore the BREAK vector back to its normal power-up value
(pointing to BASIC Warm Start on a C64 and Commodore's monitor on a C128 in 128
mode). The <x> instruction will also exit to BASIC, but the BREAK vector will
remain set to re-enter the cartridge monitor for debugging purposes. <xs> will
exit directly to the sector editor (without initializing the sector editing
buffer). <xm> will exit to the cartridge main menu, and <xc> will cause a cold
start of BASIC (clearing the BREAK vector in the process).


Hexadecimal Numbers

Many operations involving computers use a form of numbering called
"hexadecimal' which can be very confusing to someone who has never seen them
before. In fact, hexadecimal numbers are often the biggest obstacle to learning
to program in machine language for most beginners. Yet hexadecimal numbers
(called "hex" for short) are actually very convenient for programmers -- that's
why you see them so often -- and are not really very difficult to learn.
To understand hex, you must first look at "normal" decimal numbers. In decimal
numbers, there are 10 digits, 0 through 9. That's why it's called decimal,
because "deci" means ten. Our decimal numbering system is based on the arabic
place-value system, which unlike the early Roman numbering system, assigns a
value to a digit based on its place within a number. For example, the numbers
12345 and 54321 both contain identical digits, but they certainly aren't equal!
The difference we perceive in these two numbers depends on the placement of the
digits within the number. In the first case, the "2" stands for two thousand,
in the second place, for twenty. To obtain the "real" value of the digit, we
multiply the digit by 10 (remember, its a decimal numbering system) several
times. How many times depends on the digit's position. In the first case, we
multiply it by 10 three times, (2*10*10*10) because there are three places to
the right of the digit. In the second case, we only multiply by 10 one time,
since there is only one digit to the right of the "2".

Hexadecimal numbers are also based on the place-value system. "Hex" means six,
and "deci" means ten, together that adds up to sixteen, and that's what it
means. Funny, we still add the parts of the word together the way the Romans
added the parts of their numbers together! Sixteen is the magic number that
makes "hex" work. First there are sixteen digits. That's right, the first ten
are still 0 through 9. But since we have no single digits that represent the
values ten through fifteen, programmers substituted other symbols from their
keyboards, and what they chose, logically enough, and in order, were the
letters "A" through "F". So now, if you see a single digit "hex" number, you
can immediately determine it's value. For example, the value of $A is ten (the
dollar sign in front is just their to help remind everyone that this is a hex
number and not a letter or decimal number). Multi-digit numbers work the same
way, except that instead of multiplying by ten, we now multiply by, you guessed
it, sixteen. For example, the hex number $FO is just fifteen times sixteen, and
the number $FOO is fifteen times sixteen times sixteen (we multiply by sixteen
as many times as there are digits to the right of the one we are working with).
Just as you might talk of there being a "tens" place and a "hundreds" place in
decimal numbers, there are


"sixteens" places and "two hundred and fifty-sixes" places in the same
positions in hexadecimal numbers. So the number $F4E3, which looks very
complicated, is really only another way of saying fifteen (the "F") times
sixteen times sixteen times sixteen added to four (the "4") times sixteen times
sixteen plus fourteen (the "E") times sixteen plus three. Written out in
decimal, that's (15*16*16*16) + -(4*16*16) + (14*16) + 3, and that equals
62691. With a little practice, you'll soon be able to do these conversions in
your head!


More Information

If you would like more information on programming your computer or using vour
disk drive, please consult the following publications.

1541 (or 1571 or 81 User Guide  Commodore (Strongly Recommended.)


The Anatomy of the 1541 Data Beckcr/Abacus Software

Commodore 1571 Internals               Data Becker/Abacus Software
Inside Commodore DOS                   Reston Publishing Company
Commodore Programmer's Reference       Howard W. Sams & Co.
Commodore 128 Programmer's Reference   Bantam Computer Books
Mapping the Commodore 64 & 64C         Compute! Books
Commodore 128 Internals                Data Becker/Abacus Software
Programming the 6502                   Sybex


We would like to thank the following people for helping to make Warp Speed a

Dave Morelli
Fred Wasserman
Bob and Phyllis Jacob
Eric Roberts
Jason Ranheim Company
and all the people who wrote in to comment on version 1.0! We hope you like
this new version-


Programming: Marty Franz, Joe Peter and Harald Seeley
User Manual    Harald Seeley

About ATG

Alien Technology Group is a small development company dedicated to extending
the "state of the art" in computer game and utility software. If you think you
would like to participate in that effort, write us at
ATG, 10264 Jeraback Drive, San Diego, CA 92131


Monitor Command Summary

All items in parentheses ( ) are required. Items in brackets <> are optional.
Commas are used to separate lists of items from which only one can be chosen.

Command                            Format

A Assemble Command      A (address) mnemonic <operand>

B Boot a file           B (filename") <Drive #> <address>

C Compare Memory        C (start address) (end address) (compare address)

D Disassemble           D <start address> <end address>

F Fill Memory           F (start address) (end address) (value)

G Go (execute)          G (address)

H Hunt                  H (start address) (end address) (val 1) <val x>

I Interrogate (ascii)   I <start address> <end address>

L Load                  L (filename") <Drive #> <address>

M Memory (hex)          M <start address> <end address>

O I/O                   O <Drive #>

P Printer Toggle        P

Q Quit                  Q

R Register Display      R

S Save                  S (filename") <Drive #> (start address) (end address) <load address>

T Transfer              T <D,C> (start address) (end address) (new address)
                           (D)rive or (C)omputer
V Verify                V ("filename") <Drive #> <address>

X Exit                  X<S,M,C>
back-arrow Configure    back-arrow (val)
$ Directory             $<pattern><=S,=P>

@ Drive Cmd @uparrow S, uparrow D, uparrow $, uparrow R, uparrow H, uparrow K,
  uparrow E, uparrow U, #<D#>, $,I,U,J,U9,F,N,V>



 !            verify              ! (filename)
 &            type file           & (filename)
 #            drive number        # <Drive #>
 $            directory           $ <pattern> < =s, =p, =l, =u >
 %            binary load         % (filename)
 /            normal load         / (filename)
 *            boot file           * (filename)
 backarrow    save file           back-arrow (filename)
 @            drive cmd channel   @ <command>


 up-arrow S           single sided        switch 1571 to single sided mode
 up-arrow D           double sided        switch 1571 to double sided mode
 up-arrow R<Drive #>  renumber            change device number
 up-arrow K           kill                kill fast load
 up-arrow E           enable              reenable fast load & save
 up-arrow U           un-new              restore basic program
 up-arrow H           hardcopy            print current screen to printer
 up-arrow $           disk menu           display directory in menu format
 up-arrow C           color               restore screen to standard colors
 C=/runstop           load & run first file on disk
                      shift / runstop on C128 in 128 mode)
 pi sign              enter machine language monitor
 pound key            enter main menu



 move cursor                                     <crsr>
 toggle highlighted selection                    <spacebar>
 toggle highlighted selection and move cursor    <return>
 toggle all files                                <a>
 toggle remaining files (below cursor)           <r>
 move cursor to top of directory                 <clr/home>
 new disk directory                              <up-arrow>
 start process on selected files                 <s>


 read sector from source drive                   <r> <track> <sector>
 write sector to target drive                    <w> <track> <sector>
 move cursor in sector                           <crsr>
 go forward one sector                           <+>
 go back one sector                              <->
 go forward one track                            <shift>-< +>
                                                 (both keys simultaneously)
 go back one track                               <shift>-<->
                                                 (both keys simultaneously)
 jump to track and sector under cursor           <j>
 next sector in a file                           <n>
 enter text mode                                 <t>
 exit text mode                                  <run/stop>
 enter ml monitor                                <m>
 print entire sector                             <p>
 clear sector from cursor to end                 <shift>-<clr/home>
                                                 (both keys simultaneously)
 swap source and target drives                   <spacebar>
 make target drive equal source drive            <shift>-<spacebar>
                                                 (both keys simultaneously)
 quit sector editor                              <q>

End of Document
Reformatted by iAN/HF