Atlas 1 Emulator Tutorial

Atlas Emulator Deficiencies

The ABL Compiler

The ABL complier is almost fully functional with the following exceptions –

  • No support for multiple copies of library routines.
  • Conditional compliation ( ?<expression> ) is not implemented.
  • Preset variables used by the ABL compiler (P100-P129) are not implemented other than P120.
  • Re-entry to the compiler is not supported (except EXP120).
There are no plans to remedy these deficeincies.

A source copy of the ABL Library Routines has been preserved at the John Rylands Library at the Univeresity of Manchester and a copy has been used to implement the routines within the emulator.

The John Rylands Library also has a source listing of the real ABL compiler (written in ABL, of course), but although this could be used to provide an accurate copy of the compiler, the effort involved cannot, at this time, be justified.

Basic Function Codes

All the basic function codes (as published) are implemented but I am dubious about some of the more obscure floating point operations, especially the fixed point functions.


At present, out of 272 extracodes some 240 are implemented leaving 32 which have yet to be tackled.

Some 68 extracodes, primarily those which interact with the supervisor, are implemented directly by the emulator as if they were basic instructions. The majority of extracodes are implemented, however, by the authentic method of forcing an entry into a subroutine held in the fixed store. Some of these fixed store subroutines have been written afresh but most have been cribbed from a printed copy of the fixed store preserved at the John Rylands Library. A second paper copy of the fixed store held in the School of Computer Science at Manchester University has also been used as a cross check. This second copy includes copious comments and is believed to be a development version dating from before the physical fixed store became available.

A full list of extracodes, including the implementation status of each one is given at extracodeinstructiontable.htm.

Instruction Timing

The ABL Manual gives good information about the time taken by each basic instruction and the number of basic instructions taken by many of the extracodes. Many extracodes, however, by their very nature are highly variable. For example, character input and output instructions will take much longer if the requested I/O happens to span a tape block boundary. For such extracodes, a guess of the typical number of basic instructions has been made which is probably wildly inaccurate.

Since the ABL and FABL compilers are built-in to the emulator, they do not count towards any timings.

As yet, no attempt has been made to measure execution time (as distinct from processor (COMPUTING) time. This will involve aggregating tape and drum waiting and transfer times and adding them to the instruction times.


As documents (and jobs) are input to the emulator, they are initially copied to Windows .txt files held within the emulator’s section of the host filestore. Although this is anagous to Atlas 1 spooling, it is not identical, as in Atlas 1 the input documents would have been held on magnetic tape or disc in a format which was probably very similar to that documented in PREPARING A COMPLETE PROGRAM FOR ATLAS 1. This is the format employed by the emulator where input is spooled onto emulated magnetic tapes using the PRIVATE INPUT directive. A revision of this area is under consideration.

Output spooling (other than to private magnetic tapes) is not implemented and presents the difficulty that it would prevent the user from examining the output while the program is running.


No actual paging takes place within the emulator though a track of where any given virtual store page (block) would be in the real Atlas 1 is maintained (and slows the emulator down considerably). The emulator’s paging system decides which page to discard onto drum by selecting the “least recently used” page. The real Atlas 1 used a much more sophisticated algorithm.

Magnetic Tape and Discs

There is support for 1” tapes but discs, Orion tapes and ½” tapes are unsupported as yet.

Where to go next