../../images/stop.gif
ACORN ATOM EMULATOR v1.32
Wouter Ras ©, Delft, Oct 1997 - May 1998

Welcome to the Acorn ATOM software emulator for PC's. NL versie
This program enables you to run most of the original Acorn ATOM software on your PC.
Minimum requirements:
 -80286 CPU (80486 DX-40 required for real time emulation)
 -VGA display
 -410 kB RAM conventional memory
 -MS-DOS 3.0

The full emulation pack contains the following files:
 -Atom.Exe       - Acorn ATOM software emulator (286+)
 -AtomCom.Exe    - Utility to transfer file from and to tape or original Atom
 -AtomTape.Exe   - Utility to read ATOM tapes into PC-memory
 -ReadMe.1st     - Latest information
 -ExtROM.Tap     - A tape image containing extension boxes
 -*.Doc          - Several documentation file

The emulator has been tested on several computers and turned out to work on
every one of them. The program is designed to run under an MS-DOS environ-
ment. It also works with Windows 3.1 and Windows 95, however, the full
screen mode is required. Timing, synchronisation and sound are better if run
in native MS-DOS mode than under Windows.

2. CONFIGURATION

The emulator can be configured to your own satisfaction. The preferences may
be saved in the ATOM.INI file. If there's no .INI-file at startup, the
emulator uses default values (between brackets). The parameters marked with
an asterisk (*) can be edited also from within the emulator desktop (see
chapters 4.2 and 4.3).

*ASMLayout   : The assembly listings in the built-in monitor can be
 (0)           displayed in two different ways, either using the ATOM
               notation (@ for immediate, # for hexadecimal numbers) or the
               regular notation (# for immediate, $ for hexadecimal numbers).

*Sound       : You can select whether or not you wish to have sound effects
 (1)           outputted to the PC-speaker or through the SoundBlaster.
               Detection of a SoundBlaster is done automatically.

-SpeedIndex  : If you can't get the emulator to run at the right speed, you
 (auto)        might want to specify a number here which sets emulation at a
               certain speed. The higher this number, the slower the
               emulation. For 486/Pentium machines this value should be
               about the speed of your CPU in MHz. On somewhat slower
               systems (eg. 486-40 MHz) the value of SpeedIndex must be a
               bit lower then the CPU speed.

-ExtROMFile  : The emulator is equipped with the AXR1 chip (see chapter 5.1)
 (EXTROM.TAP)  in the memory range A000h-AFFFh as a standard. If you would
               like to use other (EP)ROMs (boxes) at this address, you can
               specify a name of the file containing one or more boxes
               designed for this address-range. See chapters 4.2 and 6.1 for
               information on this fileformat. Up to 16 different boxes can
               be used at a time. If no filename is specified here, the
               emulator will load from the file EXTROM.TAP (if it exists).

-Use80x87    : The emulator now also supports the new Floating Point ROM at
 (0)           D000h by Leendert Bijnagte. This rom links to 80x87
               co-processor routines for super fast calculations. At least,
               an 80387 is required. If an older or no co-processor is
               present, this option should be set to 0.

-IgnoreZpFEh : Before sending a character to the printer, the ATOM compares
 (1)           it to the contents of zero page address FEh. If they are the
               same, the character is not sent to the printer. On BREAK, this
               value is set to 0Ah (LF), which for most printers means that
               all text is printed at the same spot.
               If this parameter in the .INI file is set to 1, the comparison
               to zero page address FEh is ignored, because memory address
               FF07h will be changed to 00h.

-BoxSwitch   : If you want to use only one box at A000h (no switching), set
 (1)           this value to 0. The first box in the file specified in
               ExtROMFile will be loaded. If no file can be found, the AXR1
               will be installed. See chapter 5.3 for more information.

-Box0onBreak : If this value is set to 1, the (EP)ROM in box no.0 will be
 (1)           reinstalled whenever the BREAK key (F12) is pressed. If this
               value is set to 0, the current (EP)ROM remains active.

-NMIResponse : This value, in the range 15 to 255, sets the reaction time
               after which the processor responds, when the NMI request line
               has gone low. In the ATOM, the NMI is used for transferring
               data between ATOM and the disk drives. To achieve the same
               transfer rate as on a real ATOM, this value must be set to
               approximately 40. The default value (also minimum for proper
               transfer with the standard ATOM DOS routines) is 15.

*Colors      : You can set all seven colors that are used during emulation
               ù BackGr is the backgroundcolor.
               ù ForeGr is the foregroundcolor.
               ù GreySb is the color of the "grey symbols" (C0h-FFh).
               ù Color0-Color3 are the colors in HIRES color modes.
               Each color is a six digit (3 bytes) hexadecimal number;
               the first byte stands for the amount of RED, the second for
               the amount of GREEN and the third for the amount of BLUE.
               The range for each of these bytes is 00h to 3Fh.

*Drives      : You can set the names of the image files, which will be opened
               on startup, for each drive.

3. KEYBOARD

Due to the fact that the ATOM's keyboard layout differs form the PC's
keyboard layout, a few keys have been changed. The most important are:
 -F12         : Break
 -Tab         : Copy
 -Alt           : Rept
 -CapsLock  : Lock
 -`             : ^

Furthermore the ATOM-cursorkeys have been replaced by the PC-cursorkeys.
Therefore the SHIFT keys are no longer required to move the cursor down or
left. (Note: If NumLock is on, only the arrows on the numeric keypad will
give the correct results!)

In a lot of games, however, it would be better if some keys had been placed
elsewhere or would have been swapped. This can be done by toggling between
the standard keyboard (as described above) and an alternate keyboard. When
the alternate keyboard has been selected, the following keys should be used:
 -Tab         : Left/right arrow
 -CapsLock  : Up/down arrow
 -Left Shift  : Ctrl
 -Ctrl/Alt     : Shift
 -Right Shift : Rept
 -Cursor Lf   : Lock
 -Cursor Rt   : Copy

Swapping between the standard and the alternate keyboard layout is done
during emulation by pressing the [F4] key. On BREAK (F12), the standard
keyboard is selected automatically.

The following keys have a special function:
 -F4             : Toggle between standard/alternate keyboard
 -F5             : Toggle between original/maximum CPU speed
 -F6             : Show box information
 -F8             : Enter emulator desktop, disk screen
 -F9             : Enter emulator desktop, tape screen
 -F10           : Enter emulator desktop, options screen
 -F11           : Enter emulator desktop, built-in monitor
 -Shift+F12   : Temporarily go to MS-DOS
 -Ctrl+F12    : Exit the emulator
 -Alt+F12     : Boot from disk-image in drive 0 (MouseDos Box required)
 -Print Scrn  : Capture screen to .BMP file

4. EMULATOR DESKTOP

Press F8, F9, F10 or F11 during emulation to enter the emulator desktop. On
the top line four divisions of the desktop are shown. They can be selected by
pressing [Alt] and the highlighted letter simultaneously or the corresponding
hotkeys F8, F9, F10 or F11.
 -Disk      : Alt+D (or F8)
 -Tape    :  Alt+T (or F9)
 -Options : Alt+O (or F10)
 -Monitor : Alt+M (or F11)

4.1 DISK

The Disk screen enables you to select the disk image (.DSK files). A disk
image file is recognised as such, if it is (19000h) 102,400 bytes in size.
A disk has of 40 tracks, with 10 sectors, consisting of 256 bytes, each.

On the left hand side of the screen all the disk images are shown. On a real
ATOM, with the 8271 FDC, it was possible to connect two double sided disk
drives:

   +----------------+   +-----------------+
   |  DRIVE 0    |    |  DRIVE 1    |
   | --------------- |    | --------------- |
   |  DRIVE 2    |    |  DRIVE 3    |
   +----------------+   +-----------------+

The four drive numbers are shown in the area on the right hand side of the
screen. Use the following keys:

  -Press the [Cursor Up] or [Page Up] key to move the cursor up.

  -Press the [Cursor Down] or [Page Down] key to move the cursor down.

  -Press [Tab] and [Shift+Tab] or the [0], [1], [2] and [3] keys to select
   a drive number.

  -Press the [N] key to create a new disk image. You must enter a file name.
   If there's no file with that name already, a new file will be created. It
   is not necessary to format it.

  -Press the [O] key or [Enter] to "insert" an image in the specified drive.
   If the cursor is pointing to the last spot (where there's no file name),
   the drive will be emptied.

  -Press the [S] key to save the names of the images into the .INI file. The
   next time the emulator is run, the same disk images will be opened
   automatically.

  -Press the [P] key to toggle the write protect attribute of the disk in
   the highlighted drive.

Loading of files from a disk image is done from the ATOM itself. First, you
must enter the ATOM DOS, by typing

   *DOS

Each time BREAK is pressed, this statement must be re-entered, because on a
BREAK the COS is restored. On the ATOM emulator, it is also possible to
enter the COS again by typing:

   *COS

See chapter 5.1 for a list of DOS commands.

As stated above, a disk can be write protected. This is done by setting the
"ReadOnly" attribute of the disk image. If a disk is write protected, this
is shown in the disk screen of the desktop by a "#" behind the disk name.
The write protect attribute only applies to the corresponding drive (and not
to its "backside").
Another advantage that the emulator has with respect to an original ATOM is
that the emulator doesn't have the limitations of the physical layout of the
disk drives. In other words, it is possible to insert a disk in drive 0 and
to insert another disk (than the backside of that disk) in drive 2.
Whenever disk transfer takes place, an icon of the two drives is shown on
the left hand side in the lower border, with the LED of the active drive on.

4.2 TAPE

The Tape screen enables you to select the tape images (.TAP files) from
which you can load ATOM files. The screen has two separate areas; the one
on the left hand side shows the directory with all the tape images, the
area on the right hand side shows the contents of the selected tape image.

A tape image consists of a number of ATOM files (.ATM files; see chapter 6
for a description) all appended to each other. One tape image can hold up
to a maximum of 500 ATOM files.

If the cursor is in the left hand area, where the tape images are shown, the
following actions can be taken:

 -Press the [Cursor Up] or [Page Up] key to move the cursor up.

 -Press the [Cursor Down] or [Page Down] key to move the cursor down.

 -Press the [N] key to create a new tape image. You must enter a file name.
  If there's no file with that name already, a new file will be created and
  its length will be set to 0.

 -Press [O], [Enter] or the [Cursor Right] key to move the cursor to the
  right hand side of the screen, in which the ATOM files are shown.

If the cursor is shown in the right hand area, the selected tape image can
be used and/or manipulated.The contents of the tape image are shown line by
line. Each line represents one ATOM file, from which the name is displayed
followed by three hexadecimal numbers: The first one is the program's start
address, the second number is the program's execution address and the last
number is the program's size in bytes.
The following actions can be taken:

 -Press the [Cursor Up] or [Page Up] key to move the cursor up.

 -Press the [Cursor Down] or [Page Down] key to move the cursor down.

 -Press [S] or [Enter] to set the tape file pointer to the cursor position.

 -Press [L] to load the file the cursor is pointing to and return to the
  emulator. Now there are three possibilities:
  ù If the program's start address is 2900h and its execution address is
    C2B2h, a BASIC "LOAD" command will be issued. This means that the file
    is loaded into the ATOM's text area at 2900h. Then the text area is
    scanned through to set the value of TOP and the free space pointer.
    Remember, if the file is not a valid BASIC program, the prompt may not
    appear.
  ù If the program's start address is not 2900h, but the execution address
    is C2B2h, the COS command "*LOAD" will be issued. The value of TOP will
    not be set.
  ù In any other case the COS command "*RUN" will be issued. This will load
    the file at its start address and then execution is transferred to the
    execution address specified in the file. The value of TOP is not set.
  Remember that all commands that are preceeded by an asterisk (*) are COS
  commands and not BASIC commands, which in short means that the value op
  TOP will not be set after the file has been loaded. Statements like DIM
  will generate "Error 216", unless the END or OLD statement are entered
  prior to RUNning the program.
  If you would like to open a file using another command than the desktop
  generates, or if you would like to load it at another address, it must
  be typed in manually from the ATOM's BASIC prompt. If no file name is
  specified (or "" with the BASIC "LOAD" command), the file at the current
  cursor position will be loaded. The emulator also supports the "*" wild-
  card at the end of the file name.
  If you try to load a file that is not in the current tape image or if an
  MS-DOS load error occurs, "ERROR 6" (the infamous checksum error) will be
  generated.
  It is not possible to load files from the desktop when in debug mode. This
  must also be done by typing it from the ATOM basic prompt.

 -Press [R] to rename the current ATOM file.

 -Press [I] to import an ATOM file. In the right hand area all the importable
  files in the current directory will be shown. You can select one by
  pressing [Enter] and it will then be inserted in the tape image at the
  current cursor position.

 -Press [E] to export the current file. An MS-DOS name will generated by the
  emulator. The file cannot be exported if there already is a file with the
  same name.
 -Press [D] to delete the current file. You will be prompted for confir-
  mation.

 -Press [F] to freeze the current state of the emulator.

 -Press [T] or the [Cursor Left] key to move the cursor back to left hand
  side of the screen, in which the tape images are shown.

4.3 OPTIONS

The Options screen allows you to change the emulator settings and to save
them to the .INI-file. The changeable settings are:

 -CPU speed  : The emulator can run at two speeds, namely
               ù Original : The emulator will try to be as close as possible
                            to the original 65C02 operating speed of 1 MHz.
               ù Maximum  : The emulator will run at maximum speed.
               You can also press [F5] during emulation to toggle between
               these two CPU speed modes. On BREAK the CPU speed is reset to
               original.
 -ASM layout
 -Colors
 -Sound Outp
 -Illeg Opc
 -CPU type

See chapter 2 for more information.

Go to "Save options" and press [Enter] to save the preferences to the .INI
file. The previous .INI-file will be overwritten.

4.4 MONITOR

The built-in monitor lets you watch the programs when running. In the
monitor screen the following things are shown:
 -65C02 registers (top right)
 -Assembly code (top left)
 -Memory dump (bottom)
 -Active breakpoints (middle right)

Move around with cursor keys, move faster with Page Up, Page Down keys.
The actions available are:

 -Trace  : Executes one instruction and moves the assembly code display.
           Screen updates are not turned off, so sometimes you might see
           a pixel or two appearing between the monitor-information.

 -Step   : Steps over the instruction, skipping the assembly code display
           of subroutines (JSR). In case of a subroutine, it is executed
           in debug mode. You can interrupt debug mode by pressing [F1],
           [F9], [F10] or [F11].

 -Here   : Runs emulation in debug mode until CPU reaches the instruction at
           the position of the codedisplay or the [F1], [F9], [F10] or [F11]
           key is pressed.

 -BrkPnt : A new window is shown. Up to four breakpoints can be set at one
           time. Press the [A] key to add a breakpoint (the position of the
           codedisplay). Press the keys [1] to [4] to remove existing
           breakpoints. All active breakpoints are shown on the right hand
           side of the monitor-screen, and they remain active until they
           are removed as described here.

 -Goto   : Prompts for a new address and jumps to it.

 -Where  : Moves the assembly code display to the position of the Program
           Counter (PC), where the emulation was interrupted.

 -Mode   : Switches focus between code and dump.

The dump-values of various I/O-ports sometimes do not reflect their actual
value.

5. ATOM MEMORY

5.1 ROM

The emulated Acorn ATOM has 20 kB of Read Only Memory:
 -Assembler and Casette Operating System (COS) at F000h (4 kB)
 -Disk Operation System (DOS) at E000h (4 kB)
 -Extension ROM (Floating Point) at D000h (4 kB)
 -Basic interpreter at C000h (4 kB)
 -Up to sixteen (EP)ROM boxes at A000h (4 kB per box)

All the basic ATOM functions are supported, as well as floating point
operations. The casette load & save routines have been replaced by fast
ROM-trapped routines. However, the ATOM ROM has not been changed.

The casette *CAT command has been ROM-trapped. It shows the index of a
.TAP file on the ATOM screen. Examples:

   *CAT

displays all the files in the current tape image. Note, that on the first
line the name of the tape image is displayed. And

   *CAT "P*" or
   *CAT P*   or
   *CAT P

displays all files in the current tape image, starting with the letter P.

The FIN, FOUT, GET, BGET and FGET functions and the SGET, PUT, BPUT, FPUT
and SPUT statements for COS have been implemented as well, although their
operation is a little bit different from a real ATOM:

 -A file can be opened for input, using the FIN function. Unlike the real
  ATOM COS, a filename can be specified. The * wilcard is allowed. It is
  even possible to use a variable (e.g. F=FIN S or F=FIN $S)!
  If no filename is given, the file that the cursor is pointing to will be
  assigned. The file will be completely loaded into a buffer. On every
  subsequent GET, BGET, FGET or SGET data will be transmitted from that
  buffer to the emulator. If no file has been selected using FIN, or if past
  the end of the file, BGET will return ASCII code 13 (0Dh); GET and FGET
  will return four resp. five codes 13 (0Dh) and SGET will return an empty
  string.

 -A file can be created, using the FOUT function. Unlike the real ATOM COS, a
  filename can be specified. It is even possible to use a variable (e.g.
  F=FOUT S or F=FOUT $S)!
  If no filename is given, it will be called FILE. The file will be created
  at the end of the current .TAP image. Subsequent PUT, BPUT, FPUT or SPUT
  statements write data into a buffer. Each time the buffer is full, the
  BREAK key (F12) is pressed, the desktop tape screen is entered or the
  emulator is exited, the contents of the buffer will be appended to the
  .TAP image. If for whatever reason the buffer cannot be written to the
  .TAP image, a short sound will be produced, meaning that the data in the
  buffer is lost.
  Since the SHUT statement is ignored in COS a file remains open until a
  buffer-error occurs, the BREAK key (F12) is pressed or the next output file
  is created. Every time the buffer is appended, however, the name of the
  last file in the image is compared to the name used when creating the file.
  If they do not match, data will be lost. The name of the tape image is
  checked as well. It is therefore advised not to change tape images while
  PUTting data to tape.

 -In DOS, the handling of random files is done exactly as on a real ATOM.
  Please see later on in this chapter for information on the DOS-commands.

Up to sixteen (EP)ROM boxes at A000h can be used at the same time (See also
chapter 2). If none are available, the AXR1 will be installed automatically.
See also chapter 5.3

The AXR1 is an EPROM developed by Jos Horsmeier and Huibert Lincklaen Arriens
from Stichting Electronica Workshop (ECD/SEW), Delft in 1981 and provides the
ATOM with nineteen extra commands. Because it is not a standard Acorn ROM,
the extra commands are briefly described below:

 Command  Abbr. Description
 -------  ----- -----------------------------------------------------------
 DATA     DA.   A sequential one line file marker
                Syntax: [<ARGUMENT0> ... <ARGUMENTn>]
 RESTORE  RES.  Resets the file pointer to a specified DATA line
                Syntax: [<LINENUMBER>|<EXPRESSION>|<LABEL>]
 READ     REA.  Get records from a DATA line
                Syntax: <VARIABLE0>[,<VARIABLE1> ... <VARIABLEn>]
 FIND     -     Locates specified strings in a BASIC program
                Syntax: <LITTERAL STRING>|<STRING VARIABLE>
 RENUM    REN.  Renumbers a BASIC program and adjusts GOTO's etc.
                Syntax: [<START LINE>,<INCREMENT>]
 FCOS     FC.   Fast 1200 bps COS with visible tape transfer indication
 SCOS     SC.   Same as FCOS, but with 300 bps
 XDUMP    X.    Gives ASCII/hexadecimal memory dumps
                Syntax: <START ADDRESS>[,<END ADDRESS>]
 HDUMP    H.    Gives hexadecimal memory dumps
                Syntax: <START ADDRESS>[,<END ADDRESS>]
 DISAS    DI.   A fast 6502 machine code disassembler
                Syntax: <START ADDRESS>[,<END ADDRESS>]
 COPY     COP.  Copies memory blocks to a specified destination
                Syntax: <START ADDRESS>,<END ADDRESS>,<DESTINATION ADDRESS>
 RELOC    REL.  Relocates 6502 machine code to a specified destination
                Syntax: <START ADDRESS>,<END ADDRESS>,<DESTINATION ADDRESS>
 STEP     STE.  A versatile 6502 machine code debugger
                Syntax: <START ADDRESS>[,<DISPLAY ADDRESS>]
 PLAY     PL.   Provides a versatile method of sound output
                Syntax: <NOTE0>[,<NOTE1> ... <NOTEn>]
 KEY      K.    Performs a single keyboard scan
                Syntax: <VARIABLE>
 ON ERR   O.    Redefines error handling
                Syntax: <BASIC STATEMENT>
 SHAPE    SHA.  Draws anything you want on the screen in any mode
 GRMOD    GR.   Allows HIRES graphics to be mixed with normal characters
 TXMOD    T.    Disables GRMOD and returns control to the 6847

FCOS and SCOS should not be used in the emulator, because the tape load and
save routines are ROM-trapped. Most of the AXR1 commands cannot be traced
with the STEP command because STEP and the traced AXR1 commands may both
use the same zero page locations. From within the built-in monitor
(see chapter 4.4), however, everything can be stepped through.
All the AXR1 commands are shown in the AXR1 demo-tape, which can be loaded
and run in the emulator.

From emulator version 1.31 onwards, the ATOM DOS routines are supported also.
Since most people did not have a DOS on their real ATOM, a description of the
available DOS commands is listed below:

Direct DOS commands are those entered by the user, and are concerned with the
transfer of program and data files as a whole. Each is preceeded by '*',
which enters the DOS command line interpreter, and it can be abbreviated by
entering enough characters to distinguish the command from others, followed
by '.'. Filenames of up to seven characters are allowed. Where a name or
other string parameter contains no spaces or " quotes, it may be entered
directly. Otherwise it must be contained by " quotes, with every " in the
name typed as "".

DOS commands:

  *DOS  (*D.)
    Enters the Disk Operation System. The COS is re-entered on BREAK. Note:
    In the ATOM emulator the COS can also be re-entered by typing *COS.

  *DRIVE <drive number>  (*DR.)
    Selects drive number without reading the catalogue.

  *CAT [drive number] (*.)
    Displays the catalogue. The first line shows the title of the disk and
    the current qualifier. The filenames are displayed arranged by qualifier,
    with the '#' indicating that the file is locked.
    The catalogue is read off disk unless the disk is in the 'ready'
    condition (still spinning), in which case it is transferred from the
    catalogue buffer (at 2000h).

  *DIR [drive number] (*D.)
    Reads the catalogue from disk to the buffer, but does not display it.
    This command is often used to wait for completion of a previous
    operation, since the prompt may re-appear while a transfer continues
    under interrupt.

  *TITLE <title>  (*T.)
    Sets the title of the disk to the first 13 characters of <title>.

  *SETx
    Sets the qualifier for all subsequent operations on files to x.
    Operations that use the existing files will only search among those
    created under the qualifier currently set. The default qualifier is
    space. When returning to the default qualifier, be sure to enter space
    after the set command.

  *USEx
    Temporarily sets the qualifier to x. The system returns to the previous
    qualifier after the next successful operation. Two successive USE
    commands are equivalent to a SET.

  *LOCK <name>
    Locks the named file. Locked files cannot be deleted or updated.

  *UNLOCK <name>  (*U.)
    Unlocks the named file.

  *INFO <name>  (*I.)
    Displays information about the named file. The format is:

      qualifier : lockstate filename loadaddr execaddr length startsector

    For example:

      s: #BASIC    C000 C2B2 01000 002

    The '#' indicates that the file is locked.

  *MON  (*M.)
    Turns on messages. Subsequent file operations print out the file's
    information in the format of *INFO.

  *NOMON  (*N.)
    Turns off messages.

  *SAVE <name> aaaa bbbb cccc  (*S.)
    Creates a file. The contents of memory from aaaa to bbbb-1 are saved as
    the named file. If a file with the same name already exists under the
    current qualifier, it is deleted. The address cccc is an optional
    execution address and it defaults to aaaa is not supplied.

  *LOAD <name> aaaa  (*L.)
    Loads the named file. The file is loaded into memory starting at aaaa,
    or at the file's start address if this is missing.

  *DELETE <name> aaaa  (*DE.)
    Deletes the named file.

  *GO aaaa
    Executes the machine-code subroutine at aaaa.

  *RUN <name> <string>  (*R.)
    Load and run the named file, using the start and execution address.
    <string> is transferred to memory starting at 0140h with a terminating
    CR, where it can be accessed by the user's program.

  *EXEC <name>  (*E.)
    Executes the named text file as if it had been entered at the keyboard.

  *SPOOL <name>
    Outputs all data from keyboard first to the named file, and then to the
    screen.

DOS responses and error messages:

  Command?
    The command is not recognised.

  Syntax?
    The paramters are illegal or incorrectly presented.

  Name?
    The filename is longer than seven characters.

  File?
    The file is not found.

  Disc prot
    The disk is write-protected.

  File prot
    The file has been locked.

  Disc full
    There is insufficient room on the disk to create the new file.

  Full
    There are already 31 files in the catalogue.


  Disk error 08 (Clock error)
    During a disk read operation a clock bit was missing.

  Disk error 0A (Late DMA)
    During a disk transfer the processor did not respond fast enough.
    Probably due to a faulty disk controller card.

  Disk error 0C (ID filed CRC error)
    The cyclic redundancy check derived from the data read back differed
    from that stored on the disk.

  Disk error 0E (Data CRC error)
    The cyclic redundancy check from the data read back differed from that
    stored on the disk during a disk read.

  Disk error 10 (Drive not ready)
    During a transfer the disk stopped rotating. Often due to a badly
    inserted disk.

  Disk error 14 (Track 0 not found)
    The controller failed to find track 0. Often due to an unformatted disk.

  Disk error 18 (Sector not found)
    The controller failed to find the required sector. Often due to a
    corrupted or unformatted disk.

DOS uses the zero page addresses 9Ah-FDh, except A4h, CEh-D4h and D7h-E8h.

5.2 RAM

The emulated Acorn ATOM has 40 kB of Random Access Memory:
 -0000h: Zero Block RAM (1 kB)
 -0400h: Expansion RAM (7 kB)
 -2000h: DOS Catalogue Buffer (0.5 kB)
 -2200h: DOS Sequential File Buffers (1.5 kB)
 -2800h: Floating Point Variable Space (0.25 kB)
 -2900h: Text RAM (21.75 kB)
 -8000h: Graphics RAM (6 kB)
 -9800h: Expansion RAM (2 kB)

5.3 I/O-DEVICES

The 4 kB block at B000h is reserved for I/O-devices. The following devices
are implemented in the emulator:

-8255 Programmable Peripheral Interface Adapter (PPIA)

 ù Port A at B000h: Output bits:     Function:
                       7 - 4       Graphics mode
                       3 - 0       Keyboard row

 ù Port B at B001h: Input bits:      Function:
                         7         SHIFT keys (low when pressed)
                         6         CTRL key (low when pressed)
                       5 - 0       Keyboard column

 ù Port C at B002h: Input bits:      Function:
                         7         60 Hz sync signal (low during flyback)
                         6         REPT key (low when pressed)
                         5         Casette input (not implemented)
                         4         2.4 kHz input (not implemented)

                    Output bits:     Function:
                         3         Intensity
                         2         Loudspeaker
                         1         Enable 2.4 kHz to casette output (n.i.)
                         0         Tape output (not implemented)

 ù Port D at B003h: Input bits:      Function:
                         7         SHIFT keys (low when pressed)
                         6         CTRL and REPT keys (low when pressed)
                         5         Casette input (not implemented)
                         4         2.4 kHz input (not implemented)

                    Output bits:     Function:
                       3 - 1       Function select for bit 0:
                                     000 - Tape output (not implemented)
                                     001 - Enable 2.4 kHz to casette? (n.i.)
                                     010 - Loudspeaker
                                     011 - Intensity
                         0         Communication bit (see bits 3-1)

 Note:
 ù Port C, bit 3 actually selects between the two possible sets of four
   colors. However, I have chosen to use only one colorset, which can be
   altered freely as described in chapter 4.3, and to use Port C, bit 3
   as an intensity selector for the "ForeGr" and "Color0" colors, because
   that's how I've always seen it on my real ATOM with its green monitor!
   If this bit is set (1), the amounts of red, green and blue of the
   "ForeGr" and "Color0" colors are multiplied by 1.5.
 ù Port D is NOT documented by Acorn. However, it is used in their ROMcode
   to output the beep to the loudspeaker. Up to version 1.2 of the emulator
   this "beep" routine was ROM-trapped and all other writes to this port
   had no effect (e.g. UtilityKit by A&F).
   Though implemented now, it is recommended to use the documented ports
   only, i.e. ports A, B and C.
   On a real ATOM, writing 1 into bit 7 (80h) results in crashing the
   computer. In the emulator, writing to bits 7-4 has no effect.

-6522 Versatile Interface Adapter (VIA)

     Register:                 Address:   Name:
 ù Data Register B              B800h       DB (partially implemented)
 ù Data Register A              B801h       DA (implemented for printer)
 ù Data Direction Register B    B802h     DDRB (partially implemented)
 ù Data Direction Register A    B803h     DDRA (for reading DA only)
 ù Timer 1 low counter, latch   B804h     T1CL
 ù Timer 1 high counter         B805h     T1CH
 ù Timer 1 low latch            B806h     T1LL
 ù Timer 1 high latch           B807h     T1LH
 ù Timer 2 low counter, latch   B808h     T2CL
 ù Timer 2 high counter         B809h     T2CH
 ù Shift Register               B80Ah       SR (not implemented)
 ù Auxiliary Control Register   B80Bh      ACR (partially implemented)
 ù Peripheral Control Register  B80Ch      PCR (lower nibble, partially)
 ù Interrupt Flag Register      B80Dh      IFR (partially implemented)
 ù Interrupt Enable Register    B80Eh      IER (partially implemented)
 ù Data Register A              B80Fh       DA (reads/writes to B801h)

 Notes:
 ù DB and DDRB partially implemented means that only the polarity signal
   on PB7, generated by Timer 1, is implemented.
 ù Timer 2 pulse mode not implemented. Timer 2 only runs in one shot mode
   and stands still in pulse mode.
 ù DA is a full 8-bit output register to the printer, independent of the
   value of DDRA. On a read, input bit(s) used as "printer busy" signal.
 ù ACR only bits 7 - 5 implemented.
 ù PCR only bits 3 - 0 implemented (and for printer interface only).
 ù IFR only bits 7 - 5 implemented.
 ù IER only bits 7 - 5 implemented.
 In short: The emulator fully supports both independent 16-bit timers,
           interrupts generated by these timers and an 8-bit printer
           interface.

-8271 Floppy Disk Controller (FDC)

 An 8271 FDC has been installed at memory address BA00h. On a real ATOM, the
 FDC was positioned at 0A00h. Why Acorn ever chose this completely unlogical
 address, will probably remain a secret forever. Of course, on a real ATOM
 it could not be placed at BA00h, because the VIA took 1 kB (03F0h pseudo
 addresses), but ANY address somewhere in the B-block would have been much
 better than 0A00h! The DOS ROM has been adjusted for the FDC's new address.

 The FDC consists of a number of communication ports:

   Address    Write                 Read

   BA00h      Command register      Status register
   BA01h      Parameter register    Result register
   BA02h      Reset register        -
   BA03h      -                     -
   BA04h      Data register         Data register

 The emulator uses disk images (.DSK files), that contain one side of a disk
 of standard disk filing system (DFS), namely 40 tracks of 10 sectors each
 with 256 bytes per sector, in logical order.
 Most of the possible 8271 commands are supported. All ATOM DOS commands are
 supported. Further, it is possible to format disks as well. Please refer to
 chapter 5.1 for information on the DOS-commands.

-BoxSwitch for (EP)ROM toolboxes at A000h

 Bits 0-3 of this port at memory address BFFFh select which of maximum
 sixteen boxes is active in the memory range A000h-AFFFh. By POKEing a value
 into this port, the user can select a box manually. During emulation this
 value can be altered by the emulator as well. If an unknown command is
 encoutered, the next box will be scanned through and so on until the first
 box is reached again or a command has been recognised. After a command has
 been found in a certain box, that box remains active. This way, if a program
 has been written using commands of a certain box, the emulator only needs to
 select the box once; it then remains active and no time is lost for swapping
 memory. See chapter 9 for information what could go wrong.
 The zero page addresses 90h-99h are kept seperately per box. When another
 box is selected, its "own" zp90h-99h are restored.

-Printer

 It is possible to output data from the emulator directly to the printer,
 using the ATOMs own ROM routine. But the emulator is even a bit better than
 a real ATOM: The real ATOM only supports a 7-bit interface, the emulator
 supports an 8-bit interface! See also chapter 5.3 for a description of the
 VIA registers.

 The original ATOM uses Data Registers A (DA) of the 6522 VIA to communicate
 with the printer. In this 8-bit port, bit 7 is used as a status line (input),
 while bits 6-0 act as output to the printer (The value 7Fh is written to the
 Data Direction Register A (DDRA) at B803h). The emulator does the following:
 When reading DA, the input bits, as selected in DDRA, show whether or not the
 printer is out of paper. On write, all 8 bits of DA are sent to the printer.
 In other words, writing to this register is independent of the value of DDRA.

 Further, the emulator works according to the routine in the ATOMs ROM; When
 on the Peripheral Control Register (PCR) at B80Ch low output is selected
 (i.e. bits 3-0 have value 1100b), the character stored in DA is sent to the
 printer. This happens once for every write to PCR.

 For more information: The ATOM printer routine is located at FEFBh. Note
 that CTRL-B (02h) switches on, and CTRL-C (03h) switches off output to the
 printer. Also see chapter 2 for the IgnoreZpFEh parameter in the .INI file.

 If you have the COMBOX and the P-CHARME installed, just type PLIST to print
 the listing of your BASIC program.

-Mouse

 On a real ATOM is was possible to connect a hardware mouse. The protocol and
 I/O addresses for it have been defined by Kees van Oss, and I've taken the
 opportunity to use the same I/O addresses for compatibility reasons.
 The mouse interface consists of four I/O ports. They are:

   Address  Type  Description
    BFE0h    RW     Mouse x coordinate
                       00h - Most left coordinate
                       F8h - Most right coordinate
    BFE1h    RW     Mouse y coordinate
                       FFh - Top line
                       47h - Bottom line
    BFE2h    R      Mouse buttons
                       bit 0 = 0: Left button pressed
                       bit 1 = 0: Right button pressed
                       bit 2 = 0: Middle button pressed (if available)
    BFE2h    W      Mouse properties
                       bit  7   : Mouse shown/hidden (0=on, 1=off)
                       bits 4-0 : Mouse cursor number (00h-1Fh)

 Note that the last two ports have the same logical address. The mouse cursor
 is maximum 8x8 pixels (as in "clear 4" pixels) in size. It has this size in
 all graphic modes as well as in text mode. Its color is white.

 The mouse is turned on by POKEing a value between 00h (0) and 1Fh (31) into
 the mouse properties port at BFE2h. Thus, there are 32 different predefined
 cursors. They cannot be altered.
 The mouse is turned of by POKEing a value larger than or equal to 80h (128)
 into the mouse properties port at BFE2h.

6. FILE TRANSFER

6.1 The AtomTape utility

The ATOMTAPE.EXE utility enables you to transfer files from an original
Acorn ATOM or from tape to the PC. However, a soundcard is necessary,
because the ATOMTAPE.EXE utility analyzes VOC-files.
You must connect your ATOM or tape recorder to the "Line In" connector
on your soundcard, using line 2 as ground and line 1 as output signal.
(Line 3 is the input signal to the ATOM from the  recorder).
See adjacent diagram.
Start a VOC/WAV maker on your PC and record from the "Line In" connector. The VOC file must be 8-bits, mono and recorded at 22050 Hz. The VOC-file may consist of several blocks, however, only blocktypes 0, 1 and 8 are supported. Blocktype 3-7 are ignored. Press "Play" on the tape-recorder or save a file on your original ATOM at either 300 or 1200 bps (The latter according to the AXR1 1200 bps protocol).
The program can only evaluate named files; which are files, containing a
control block / header and a data block of 257 bytes (the last being a
checksum byte), the next control block, the next data block, etc.

About the tape speeds:

Every byte on tape is surrounded by a startbit (0) and a stopbit (1).
In between there are the 8 bits of the databyte. In 300 bps mode every
cleared bit (0) consists of four 1.2 kHz waves and every set bit (1)
consists of eight 2.4 kHz waves. In 1200 bps mode every cleared bit (0)
consists of one 1.2 kHz wave and every set bit (1) consists of two 2.4 kHz
waves. The stopbit (1) always has one extra 2.4 kHz wave.

After the VOC file has been recorded, start the ATOMTAPE.EXE utility.
Enter the VOC filename and whether it has been recorded at 300 bps or
1200 bps. The utility then checks whether the VOC file is of the right
format (8-bits, mono, 22050 Hz) and starts analyzing the data. If all goes
well the subsequent control blocks (headers) of the file are shown and
the data blocks are loaded.
If no errors occur, the file will be saved to the same name as the VOC
file, but with the .ATM extension.


The format for the .ATM files is as follows:

Offset Size     Description
------ -------- -----------------------------------------------------------
0000h  16 BYTEs ATOM filename (if less than 16 BYTEs, rest is 00h bytes)
0010h  WORD     Start address for load
0012h  WORD     Execution address
0014h  WORD     Size of data in BYTEs
0016h  Size     Data

6.2 The AtomCom utility

Please refer to the file "AtomCom.Doc" for information.

7. COMPATIBILITY

CPU

 -Complete 65C02 instruction set,
 -Seven extra 65802 instructions,
 -RES, IRQ and NMI serviced,
 -80x87 co-processor support for fast floating point calculations.

 The 65C02 has a number of advantages over the 6502:
 ùThere are no illegal opcodes. Unused opcodes are handled as NOP's with
  either no, one or two operands.
 ùThe C, V and N flags are valid in decimal mode (As far as this is concerned
  previous versions of the emulator already featured this 65C02 aspect).
 ùThe JMP (addr) instruction no longer wraps around a page (This 6502 bug was
  never implemented in previous versions of the emulator).
 ùThe decimal mode flag is cleared whenever a RES, IRQ or NMI is serviced.

 The 65C02 offers 27 new instructions and two new addressing modes. The
 instructions are:
   BRA - Branch always,
   PHX - Push x-register onto stack,
   PHY - Push y-register onto stack,
   PLX - Pull x-register from stack,
   PLY - Pull y-register from stack,
   STZ - Store zero to memory,
   TRB - Test and reset memory bits against accumulator,
   TSB - Test and set memory bits against accumulator.
 The two new addressing modes are:
   Indirect, e.g. LDA (55h)
   Absolute Indexed Indirect, e.g. JMP (1234h,x)

 Furthermore, seven 65802 instructions have been added:
   COP          - Co-processor enable
   JSR (addr,x) - Jump to subroutine, absolute indexed indirect,
   TAS implied  - Transfer accumulator to stack pointer,
   TSA implied  - Transfer stack pointer to accumulator,
   TXY implied  - Transfer x-register to y-register,
   TYX implied  - Transfer y-register to x-register,
   SWA implied  - Swap high and low order bytes of accumulator.

 Because of the last instruction, one extra register has become available,
 which can be exchanged with the accumulator using the SWA instruction.
 Perhaps in later versions, more 65802 features, including 16 bit registers,
 will be implemented.

 The COP instruction (02h) is a little bit different from real 65802 CPUs.
 In the emulator it is an implied instruction. It does not cause an
 interrupt, but links with an 80x87 co-processor routine. This routine
 contains several functions (selected through the accumulator). Parameters
 can be passed through to and from the co-processor from any offset inside
 the ATOM memory, held by the X- and Y-registers (X=lo-byte offset,
 Y=hi-byte offset).

 Further documentation is not yet made available, bacause implementation
 and standardisation of these functions are still in progress.

VIDEO

 -All graphic modes, colors user definable.

SOUND

 -Supports sound through PC speaker and SoundBlaster or compatible.

I/O PORTS

 -8255 PPIA keyboard/graphics ports,
 -6522 VIA timers/timer interrupts, 8-bit printer interface,
 -8271 FDC floppy disk controller,
 -Hardware mouse I/O ports,
 -BoxSwitch, automatically and manually,
 -Read flip-flop (55h/AAh) for emulator detection at memory address BF7Fh.

COS

 -ROM-trapped LOAD and SAVE routines,
 -ROM-trapped FIN, FOUT, GET and PUT routines,
 -*CAT ROM-trapped,
 -Tape image files with directory,
 -AtomTape.Exe utility reads original tapes from .VOC-files,
 -AtomCom.Exe utility exchanges data between PC and ATOM.

DOS

 -Disk image files,
 -On screen disk LEDs.


DEVICES

 -Output to printer,
 -Hardware mouse support, including 32 predefined mousecursors.

8. VERSION HISTORY

Upgrade v1.0 --> v1.1:

On first sight nothing is new from version 1.0. However, emulator v1.1 runs
in VGA mode 12h in stead of 13h, because on some graphic adapters a stable
screen could not be achieved. I hope this solves the problem.

Upgrade v1.1 --> v1.2:

Again only some minor changes have been made:
 -Data can be loaded in memory range A000h-AFFFh. Other ROM areas cannot be
  overwritten anymore.
 -A bugfix: The AND absolute command now also does I/O operations.
 -Another bugfix: Sometimes files misteriously disappeared and reappeared or
  could not be imported. Simply by resetting the internal error flag (used
  for checking I/O operations by Turbo Pascal) prior to opening files, this
  problem now seems to have disappeared.
 -Yet another bugfix: Loading of the extension ROM, specified in the .INI
  file didn't work. It should be OK now.
 -Hotkeys changed.

Upgrade v1.2 --> v1.21:

 -Partial implementation of undocumented PPIA port D at B003h.
 -Optional disassembly of illegal opcodes in desktop monitor.

Upgrade v1.21 --> v1.22:

 -Error in v1.21 fixed: Memory 0000h-9FFFh RAM and C000h-FFFFh protected
  against overwriting by loading.
 -On some computers the monitor would go into Stand-by mode as soon as the
  emulator was started. I hope to have that problem fixed now.

Upgrade v1.22 --> v1.30:

 -*CAT command ROM-trapped.
 -Debugging options expanded. Up to four breakpoints can be set at a time.
  Special keys (F4, F5, F6, F9, F10, F11, F12, Shift+F12, Alt+F12, Ctrl+F12)
  can be used during debug mode also.
 -Parallel memory boxes at A000h. Up to 8 EPROMs can be used at the same
  time. Automatic smart-switching included. Manual switching through byte at
  BFFFh. On-screen box information by pressing [F6].
 -The FIN, FOUT, GET, BGET and FGET functions and the SGET, PUT, BPUT, FPUT
  and SPUT statements have been implemented.
 -MS-DOS shell available (temporarily go to MS-DOS).
 -Output to printer implemented.

Upgrade v1.30 --> v1.31:

 -Screen capture to .BMP file.
 -Mouse support implemented.
 -Floppy Disk Controller and DOS implemented.
 -Disk screen in emulator desktop added.
 -Maximum number of parallel toolboxes at A000h expanded to sixteen.

Upgrade v1.31 --> v1.32:

 -Sound output through PC-speaker improved.
 -65C02 emulation in stead of 6502.
 -Seven extra 65802 instructions.
 -Boot from disk-image in drive 0, by pressing [Alt] + [F12] simultaneously.
 -Alternative Floating Point ROM with 80x87 co-processor support.

9. PROBLEM SOLVING

-Every time the emulator is executed, it will determine the speed of your
 CPU. If this is not done correctly, you must set the value of "SpeedIndex"
 in the .INI-file manually. It should be about the value of the CPU speed
 of your PC (in MHz) for 486/Pentium machines.
 Examples: On an AMD 486 DX-40 MHz, it should be approx. 39,
           On an Intel 486 DX2-66 MHz, it should be approx. 65,
           On a Pentium 120 MHz, it should be approx. 123.
           On a Pentium 233 MHz, it should be approx. 236.
 Note: The values mentioned above, apply to the emulator run under an MS-DOS
 environment. If run under Windows, the emulator runs a little bit slower
 (Automatic speed detection on a P120 results in a value of 123 if run under
 MS-DOS, and it results in 121 if run under Win95).

-If you find that sometimes a few keys don't work (Shift, Alt, Ctrl etc.),
 remember that you can toggle between the standard and the alternate
 keyboard during emulation by pressing the [F4] key. You may have switched
 to the alternate keyboard especially for a game, and forgotten to switch
 back to the standard keyboard. On BREAK (F12) the standard keyboard is
 selected automatically.

-If you run the emulator under Windows 95, it could sometimes happen that
 you accidently press the Windows-key. When you return to the emulator the
 screen is blanked. Nothing bad has happened, it just needs rebuilding,
 which can be achieved by entering the emulator desktop and then resuming
 emulation by pressing [Esc].

-It could happen that the ATOM crashes because of incompatibility of (EP)ROM
 boxes. Suppose you'd enter the following commands:

   GRMOD 
   VAR 

 The first command is an AXR1 command and changes the vectors at 0208h and
 020Ah. The second command is a P-CHARME command. It outputs data to the
 screen using these vectors. But since P-CHARME has been selected, the
 vectors at 0208h and 020Ah would never reach the AXR1. However, the emulator
 now automatically selects the AXR1, executes the routine, and returns to the
 P-CHARME. This can be done, because the emulator builds an internal table
 with destination-boxes of the vectors at 0200h-021Ah and 03FEh. There is,
 however, a maximum: Up to 32 of these "bank-swapped" calls can be made at
 the same time. Exceeding this number results in ERROR 33 (especially defined
 for this purpose).

 Also note that zero page addresses 90h-9Fh are kept separately per box,
 because most boxes only use these zero page addresses.
 Interferance of other (zero page) addresses, however, might cause unforeseen
 effects. In such a case, clear the BoxSwitch parameter in the ATOM.INI file.

-Suppose the following: A program starts with the WE-ROM command KEY A,32.
 If for example the AXR1 is currently active, an error is caused by the AXR1,
 because it also knows the command KEY, but with only one argument. In other
 words, the WE-ROM won't be reached in this case.
 There are several solutions to this problem:
 ù You can select the correct box manually prior to RUNning the program by
   POKEing into BFFFh.
 ù Put the box in a lower slot than the other (This doesn't always help).
 ù Enter a command at the start of the program, which is unique to the
   required (EP)ROM. In such a case, the correct box will be selected
   automatically.

-If you load a frozen file and it immediately crashes, the cause might be
 that the order of the boxes has been changed; in other words, at the time
 that the file was frozen, there was another EPROM in the box corresponding
 number. The solution is to restore the correct box in the "ExtROMFile" or
 run emulation in the non-switching mode and selecting the right box.

-If you attempt to temporarily go to MS-DOS without success, the cause is
 probably that there's not enough conventional memory available. The emulator
 runs completely inside the conventional memory area, leaving only a small
 area available to other programs.
 Note that the selected disk images remain opened while in temporary MS-DOS
 mode. They are accessible for other applications, but only for read
 operations.

-Although all the COS routines have been ROM-trapped, it can still happen
 that the PLAY TAPE (or RECORD TAPE or REWIND TAPE) message is displayed.
 Namely, a COS routine is ONLY ROM-trapped if the corresponding vector (at
 0200h-021Ch) points to the same position it points to after a BREAK.
 If pointing to another memory address, the vector is considered to be
 pointing to a DOS routine, which is handled exactly as on an real ATOM.

10. REFERENCES

The following sources have been used during the construction of the
emulator:

-Johnson-Davies, David: "Atomic theory and practice", second ed. 1980,
 Acorn Computers Ltd.

-"Atom Technical Manual", 2nd issue, october 1980, Acorn Computers Ltd.

-Greenley, Larry et al.: "Commodore 128 Programmer's Reference Guide",
 february 1986, Bantam Books.

-Lincklaen Arriens, H.J. and Horsmeier, J.A.: "Atom Extension ROM (AXR1)
 Instructions Manual", second edition 1983, ECD/SEW Stichting Elektronica
 Workshop.

-Eyes, David and Lichty, Ron: "Programing the 65816, including the 6502,
 65C02 and 65802", 1986, Brady Communications Company Inc.

-Kontros, Frank: "R6522 Versatile Interface Adapter", text document
 downloaded from "http://www.funet.fi/".

-Brown, Ralf: "Interrupt List Release 54", "file PORTS.LST", june 1997.

-Reinders, Henk: "Atom-Ware, deel2: De floppy disk controller en de DOS ROM",
 1985, Federatie Acorn Computer Clubs Nederland/Belgie.

-"Atom Disc Pack", Acorn Computers Ltd.