Chris Sadler and Roger Oliver take a close look at an elegantly styled 16-bit micro from Europe’s largest office equipment supplier.
One of the real advances that microcomputers have made over larger computers is their level of standardisation. Whereas big machines always have their in-house designed processors and software, microcomputers tend to be based around very few microprocessors and software products. Because of this, the appearance of so many packages that run in these environments means that new machines based on different processors have very little chance of catching up. Olivetti chose the Z8001 on which to base its M20 microcomputer. As it isn’t a minicomputer in a micro box (like the Onyx), Olivetti decided to write its own operating system, although, as a concession to the rest of the micro world, it offers the mandatory Microsoft Basic. On an unusual machine the question must be whether it has sufficient features over a more standard system to make it worth having.
The Olivetti M20 comes packaged in two detachable units, the main box and the monitor box. The main box houses the main board, a power supply and fan, the keyboard, and (on the review machine) a couple of disk drives. The monitor stands on a circular plinth, with respect to which the screen can be tilted. A shallow oval tray on top of the main box will accept the base of the plinth so that the monitor can be conveniently positioned in relation to the keyboard. The monitor draws its power from the main box – a single power cable drives the whole machine.
The keyboard has a numeric pad in addition to the qwerty layout. All 72 keys are grey (as is the plastic casing) except for a yellow one and a blue one on the left-hand side. The manual suggests that the blue and yellow keys are respectively control and command keys, although on the review machine both were labelled ‘SHIFT’, which makes it much harder to remember which is which.
There is a reset key above the coloured ones, and two mysterious keys labelled ‘S1’ and ‘S2’above the Return key… more about these in the software section. All keys auto-repeat when held down for more than a short time. The keyboard is ‘sculpted’ and the keys make a positive click sound. Ten different character sets are available, as follows: USA ASCII, Italian, French, British, German, Spanish, Portuguese, Norwegian/Danish, Swedish/Finnish and the USA ASCII + Basic. The review machine was the last of these, with a Basic keyword etched on the front edge of each alphabetic character key.
Above the keyboard are two horizontal slots (unmarked) for the disks. Unusually, the rightmost drive is nominated drive zero. The disks are 5¼ in soft-sectored double-density double-sided, 35 tracks/side, 320 kbytes unformatted. This drops to 286 kbytes formatted, which doesn’t compare particularly well with other DDDS disks.
The main PC board has three edge connectors which extrude from the rear of the cabinet. One of these is for the monitor; the others are a parallel (Centronics) and serial (RS232C) interface for the different printers. Two screws at the back secure the top and, once this is lifted, off, everything else seems to slide apart very neatly. The keyboard mounting and disk drive mounting lift away to reveal the main board.
The processor chip is at the front of the board. It is a Z8001, Zilog’s 16-bit, capable of addressing more than 64k. Along with a 16-bit data bus, this should offer a speed advantage over 8-bit systems in arithmetic operations and memory access, although with a 4 MHz clock it would not be expected to outperform a Z80A in, say, character manipulation.
To the left is the ROM area – on the review machine there were two chips in place, sockets for another two and space on the board for another four, giving 8k for ROM. Further back on the board are other devices like disk controller, etc. On the right-hand side there is 128k of RAM (the standard configuration), beyond which the board becomes a motherboard to three small expansion sockets and two larger ones. Each of the smaller sockets can accept an additional board with 32k of memory, so the maximum memory is 224k if the monochrome monitor is used. The colour monitor, however, uses one slot and so gives a maximum memory of 192k. The review machine had a black and white monitor and a single memory expansion card (i.e., 160k).
The two larger sockets (50 connectors per side – the pinouts undocumented) are for an IEEE-488 interface socket and a pair of RS232 (or 20 mA loop) ports, and pop-out panels exist at the rear of the cabinet to allow for the necessary cabling. The board gives the appearance of a clean, uncluttered (and not particularly densely populated) design, although the review machine had a few ‘fixes’ snaking between the chips. On the extreme right at the back is a recessed, spring-loaded switch, allowing the system to be rebooted by sticking something sharp into the recess. The review machine showed evidence that people just don’t carry sharp things around with them anymore as the area surrounding the reboot hole looked scratched and scribbled-on.
Olivetti offers a choice of four printers – a thermal one (which we had), a fast (140 cps) or slow (100 cps) matrix printer, or a daisywheel. The thermal printer and the slow matrix printer are capable of screen-dump graphics.
The screen can be configured for 16 lines of 64 characters or 25 lines of 80 characters (rather crammed together) with a corresponding alteration of character size. Likewise, graphics can be resolved to 512 x 256 pixels or 480 x 256 pixels. The colour monitor provides black, red, green, yellow, blue, magenta, cyan and white, while the black and white monitor supports reverse video. With its non-glare glare surface, the screen gives a crisp, steady image and the system runs very quietly. On power-up the system performs seven seconds’ worth of diagnostic tests, sizing up the memory, testing which drives are on-line, etc. If, during the self-test, one of the keys B, D or L is pressed, the following events occur:
B: boots the Basic subsystem directly;
D: loops through the disk-testing portion of the diagnostic until some other key is pressed;
L: loops through the entire diagnostic until some other key is pressed.
When we tried the disk test, we discovered that drive 0 would not work and, although the disk test was run repeatedly thereafter, it never signalled this fact. On taking the system apart, we discovered that the drive had slipped its belt, and it worked perfectly once that was repaired.
|All timings in seconds. For an explanation and listing of the Benchmark tests, see PCW Vol 4 No 11, November 1981|
Software consists of the operating system PCOS (Professional Computer Operating System) and a large Microsoft Basic subsystem.
The first thing one can say about PCOS is that, by microcomputer standards, it is big. On the review machine it left only 58k of user memory out or an original 160k. PCOS is composed of three parts: a nucleus, which contains system primitives, memory and device control code, etc; a set of memory resident utilities (i.e., commands); and a set of disk resident (transient) utilities. Memory is configured according to the Z8001 segmentation scheme as follows:
- 0 – PCOS kernel
- 1 – Basic interpreter and PCOS utilities
- 2 – PCOS variables, Basic stack and tables, user memory
- 3 – Screen bitmap (and colour bitmap)
- 4 – Diagnostics and Bootstrap
In PCOS, ‘system’ programming consists of:
- controlling which of the utilities will be transient or resident;
- manipulating files and volumes;
- ‘programming’ the keyboard;
- setting certain operating parameters;
- constructing a turnkey boot-up program.
The system disk is distributed with certain utilities compulsorily resident (marked as such in the table of PCOS commands which follows this section). Transient utilities are those which are loaded from disk when invoked and overwritten when they complete. Any utility which is going to be used more than once or twice in a session can be ‘locked’ into memory by means of the PLOAD command. It is possible to generate a new version of the operating system by PLOADing a set of utilities into the resident area and then PSAVEing the whole memory image onto a new system disk.
Volumes and the files which are stored on them can be manipulated by means of a series of commands which begin with ‘V’ and ‘F’ respectively Thus, FCOPY transfers a single named file while VCOPY would back up a whole disk. Strangely there is apparently no command for deleting files! The Basic manual suggests using the Basic command KILL, which involves invoking the Basic interpreter, issuing the KILL command and then exiting from Basic all just to delete a file! However, we discovered a utility (undocumented) on the system disk named FKILL.CMD which sounded like what we were looking for – anyway, it worked.
Security works on two levels – disk and file. As usual, a disk may be hardware write-protected (by physically blocking a ‘write-permit’ hole on the disk); it may also be password-protected against any unauthorised access. Files may also be software write-protected and password-protected. Basic programs may be SAVEd so that they can be executed but not LISTed or RUN.
Any key which generates a printable character can be reprogrammed, by means of the PKEY command, to produce any other character, or a string of characters. In particular, the substitution string can be a Basic or PCOS command, or a sequence of commands, separated by the ASCII codes for CR and LF. A series of PKEY commands can be saved on disk and downloaded at the start of each session, thus customising the keyboard – the Basic keywords printed on the keycaps are enabled in this way through a file on the system disk named SCIENTIFIC.BAS. (The key COMMAND is depressed in conjunction with the desired keyword key to obtain the Basic keyword.) A whole sequence of commands initiated by a single keystroke is as close as PCOS allows to the sort of command file processing obtainable in other operating systems (e.g., SUBMIT in CP/M).
Three commands exist for configuring the environment for a particular session. SSYS takes five parameters which set the time and date, the number of (256 byte) blocks by which files are to be extended, the screen format (e.g., 25 lines by 80 characters, etc) and a disk read/write verification switch. SBASIC allows the user to define the amount of open files and windows permissible and the size of the I/O buffers. Clearly, the more open files and windows allowed for and the larger the record buffer, the less memory there is for the user’s code. As a rule of thumb, each window needs 90 bytes and each file needs 600 bytes in addition to its record buffer. By comparison each memory-resident utility takes about 1800 bytes. The command SFORM sets up the printer. One of the parameters is the type of printer (e.g., ‘pr2400’ for the thermal type) so it may not be too straightforward to interface a printer not supplied by Olivetti to the M20. One parameter is an optional string which, if supplied, will be printed as a title at the top of each page of printout.
Access to the printer is gained by appending ‘+PRT’ onto the end of every command. Output is directed to the printer only as long as that command is operative – in the case of BASIC (the command which invokes the Basic subsystem) all screen I/O within the subsystem will be copied to the printer. The manual mentions ‘+CIN’ (for Communications INput), which directs input from the serial port to the system (in place of keyboard input). ‘+CONS’ resets both of the above, returning both input and output to the console.
On boot-up, once the memory-resident portion of PCOS is in place, the system searches for a file called INIT.BAS first on drive 0 and then on drive 1. If it finds one it will begin executing the program, which can contain PKEY commands and S-type environment commands as well as an ordinary Basic program. Thus the system can be made completely turnkey and the whole machine customised every time it is switched on.
Other commands include SPRINT, which dumps a given window from the screen to the printer with an optional title or time/date entry, and LABEL, which enables one to write a title, vertically or horizontally, at a given point on the screen and up to 16 times the normal character size. A number of user aids discussed in the manual were not present on the review system. These included HELP, COMMANDS and ERRORS, which provide lists of commands and error numbers, together with facilities to obtain a description of individual commands and error numbers – but how satisfactorily they work we cannot tell.
Three facilities which are available within Basic require access to utilities within the operating system, and these should be resident if Basic is to make calls to them. They are the IEEE-488 extension package; MI, a utility which enables a Basic program to pass a Z8001 machine code instruction directly to the processor; and LTERM. The two keys S1 and S2 mentioned in ‘Hardware’ are actually the equivalent of the Return key, except that the utility LTERM keeps track of which of the three ‘return’ keys was actually depressed. This enables a programmer to provide users with a variety of input keys – useful for setting up menus, Y/N
answers and so on.
PCOS seems to be an irritating operating system to use – it doesn’t react in a very consistent manner. Sometimes it is necessary to specify the disk from which one wishes to work, and at other times not. System reset is sometimes achieved with RESET+ CNTRL and sometimes with RESET+ SHIFT (the RESET key should be depressed fractionally after the other one). The PCOS file security system lays traps for the unwary. You need only mistype one key when resetting a disk password and fail to realise it and you are in trouble, as there’s no way of breaking a forgotten password.
Even worse, since once the password has been correctly supplied access is granted, even if the password is changed, you will receive no indication for the rest of the session. Thus, at the end of the session you might (as you should) take a back-up copy onto (assuming a rolling sequence of disks) a previous copy! Incidentally, if the colon is left off the volume specifier when the VLIST command is used, PCOS announces that the disk is empty – this may give you a heart attack (where are my files?) or, even worse, persuade you that the disk in question is nice and empty and suitable for back-up!
Other criticisms are that there seems to be no way for users to create their own utilities for insertion into the system and that there is no opposite to the PLOAD command whereby resident commands can be made transient. Neither is there any way of finding out which commands are resident in any given PSAVEd system. Finally, although none of the ‘help’ files were supplied with the review system, some intriguing undocumented commands were found (FFREE, FKILL, FMOVE, FNEW, PRUN, RKILL, SCOMM, SDEVICE, VALPHA, VMOVE, VQUICK). Table 1 shows the documented commands.
The high level language provided with the M20 is Microsoft Basic Version 5.2, with special extensions covering the graphics capabilities and the IEEE-488 interface. All the basic commands, statements and functions are listed in Table 2.
The SAVE command has some interesting features. Unless an ‘,A’ is appended to the command, the program is stored in packed binary format to save space. If ‘,P’ is appended instead, the file is saved in ‘protected’ form, which allows it to be run but not listed or altered in the future. TRON and TROFF set the trace flag; if it is on, line numbers are displayed as the program executes. There are the usual control structures: FOR…NEXT, IF…THEN…ELSE, WHILE…WEND and GOSUB.
Arithmetic may be performed in 2-byte integers, 4-byte single precision and in 8-byte double precision. Functions for conversion between these are provided. Using DEFINT, DEFSNG, DEFDBL and DEFSTR, implicit variable typing by initial letter of variable name is possible. For example, the statement
10 DEFSTR S, U-W
will cause all variables beginning with the letters S, U, V and W to be of type STRING. Implicit typing may be overwritten by adding a character at the end of the name: i.e., % for integers, ! for single precision, £ for double precision and $ for strings.
Data files may be either sequential or random. The former are set for input (i.e., read), output (write) or append when they are opened; they are processed with the INPUT#, LINE INPUT# (i.e., ignore delimiters), PRINT# and PRINT# USING statements. Random files are handled completely differently; the file is declared to be random when it is opened, and the maximum record length is also declared. Unfortunately, it is not possible to set the file to be read-only or write-only if it is a random access file. Communication between program and file is conducted via a buffer. GET# transfers a record from file to buffer and PUT# vice versa. To extract data from the buffer, the FIELD statement assigns specific buffer locations to field names. The field names must not appear on the LHS of an assignment if they are to be used later to address the buffer; hence the LSET/RSET statements are required to place data in the buffer. Since only string data can be placed in the buffer, the functions CVI, CVS, CVD and MKI$, MKD$, MKS$ are needed for interconversions.
The most interesting features of the Basic’s graphics facilities is that the screen can be divided into a maximum of 16 independent windows. (Strictly speaking, they are not real graphics windows since they cannot overlap non-destructively.) The WINDOW function subdivides the current window (either horizontally or vertically) and returns the new window number. The WINDOW% (expression) statement causes the user to ‘move’ to the window given by the expression. The usual DRAW and CIRCLE statements are available; the former is very complex since it also has to double for the MOVE command (i.e., changing position without drawing a line). When drawing a line one can AND, OR, XOR and complement with the existing screen contents. The COLOR statement allows one to select four out of eight colours for use at any given time and to set foreground and background colours for each of the windows.
A nice feature of the graphics is that it is possible to store part of the screen display (text and graphics), pixel by pixel into an array, and to recreate the image at a later date. The PAINT statement allows any enclosed space to be filled in.
The IEEE-488 interface Is apparently accessible to the user via a set of Basic keywords, but these are not documented in the Basic manual. There is an IEEE-488 Parallel Interface Reference Guide which comes with the actual interface, so perhaps they are described there. By means of these keywords it is possible to read or write data from compatible devices: assign talker/listener status to other devices; receive and respond to service requests from other devices; and act as a controller for other devices.
Generally speaking, the syntax of the Basic is rather complex (see Figure 1). There are examples of one keyword being made to perform too many functions. For example, WINDOW can be used as a function which takes on the number of a new window (which is created as a ‘side effect’) and which has a special case when it takes on the number of the current window (and no new window is created); WINDOW can also be a command causing another window to become the current window.
Fairly sophisticated program segmentation facilities are provided. It is possible to CHAIN programs together so that one ‘calls’ another. Communication between programs is via data files or COMMON variables. The latter seem to be like the Fortran facility in that a block of memory is set aside for access by various routines. According to the Basic manual, variables in COMMON statements in different programs are matched by position and type, and not by name. Thus, if one has
10 COMMON A$,N
in one program, and
10 COMMON B$, X
in another, and they were CHAlNed, then A$ and B$ would access the same location, as would N and X. Unfortunately, this feature did not appear to work perfectly on our machine. One can also MERGE programs with the current program, allowing subroutines and blocks of code to overlay one another as
they are needed.
The product literature explicitly directs the Olivetti M20 at the commercial and scientific user. This is backed by an apparently sound maintenance and guarantee policy and a list of software products. For the scientific user there is the option of the IEEE-488 interface, which grants access to a range of laboratory equipment, and a set of Basic graphics calls to assist with the display of information. In addition, the Basic BM8 ran exceptionally quickly so that the system, with the propriety Olinum (scientific subroutine library) and Olistat (statistical subroutine library), is probably a reasonable number-cruncher. On the engineering side, there are a few design and numerical control packages.
On the business side, there are Olispec, which provides the usual accounting suite; Oliword for word processing; Olientry for data preparation; and sales and production management packages and specialised packages for solicitors, independent schools, quantity surveyors, builders and electricians. Finally, there is Multiplan, the Microsoft forecasting and modelling package. Utilities include ISAM, Olisort and Olidoc – for ‘documenting’ a Basic program – together with Oliterm (a terminal emulator) and Olicom (a remote batch entry package).
There is also Olimaster, which purports to be an author language for ‘development of interactive instruction’ but we felt that the system was not really flexible enough to find widespread educational use. The system is not suitable for the hobbyist.
We have mentioned this software under ‘Potential’ rather than ‘Software’ because it was not available to us for review. Of the 10 or so independent software suppliers listed by Olivetti, we managed to contact about half; most of these said that work on the packages was near to completion, and most seemed to be established companies that had worked with Olivetti’s minicomputer and accounting machine operations.
Most of the hardware expansion features have been mentioned in the ‘Hardware’ section. In summary, a fully expanded system would offer twin floppy disks, 244 kbytes (with black and white monitor) or 192 kbytes (colour monitor) of main memory, an IEEE-488 parallel interface and a pair of RS232 or 20 mA current loop serial ports. A recent advertisement for the system in the computer press mentioned a hard disk but we could find no evidence for this, either in the documentation or on the board.
On the software side, the price list mentions an assembler (and, indeed, with CALL and EXEC the Basic interpreter is configured to interface with assembler routines) and again the advertisements spoke of Pascal, but we found no mention in the product literature. Presumably, Olivetti feels that offering access to IEEE-488 based peripherals will take its potential market as far as it wants to go.
The manuals are masterpieces of slow, careful explanation and are probably ideal for an extended tutorial on fundamental microcomputer operations, with long sections on the use and abuse of floppy disks and a lot of trouble taken with the initial ‘getting started’ phase. Troubleshooting is dealt with in the same style, using large flowcharts which end up in boxes with messages like ‘contact Olivetti dealer/distributor’. PCOS commands and Basic keywords are dealt with exhaustively, with explanations of each of the field values and syntax diagrams (although not very many examples).
However, manuals have a dual function to perform. They have to get the user started on the system and then have to serve as reference material for filling in all the details, and the Olivetti manuals fall down somewhat here. Instead of an index, there is an exhaustive table of contents (five pages long in the PCOS manual). This references everything one could want to look up – but in page order rather than alphabetically, so it’s quite hard to use. As we had only the PCOS and Basic manuals, hardware information was rather hard to come by and information about (say) the IEEE-488 interface was virtually non-existent. Although there are ‘pocket’ reference manuals for PCOS, Basic and the interface (not supplied), there seems to be no hardware manual at all.
The manuals are very glossy and one gets the impression that considerable care has been taken in their production and translation into English. In the two volumes, only one sentence appeared to have wriggled through the translator’s comprehension.
Olivetti has decided that its micro is going to be competitively priced with the current 8-bit systems. The review machine’s configuration (standard system with 160k RAM, dual minifloppy disk drives and a monochrome display) costs £2395. To this must be added the printer (£738), the manuals (£50) and PCOS (£30). As there was no price for Basic, it must be included in the standard price.
Olivetti sells three configurations (all of which carry a one-year guarantee). The basic configuration comes with one disk only and 128k of RAM and sells for £1895. The review machine was the middle configuration, whereas the upmarket version comes with a colour display and costs £3262.
Upgrades and peripherals are not particularly inexpensive and as there are no technical specs for the hardware it is unlikely that second sources will appear. The dot matrix printers cost £550 for 100 cps and £1475 for 140 cps. A 32k memory upgrade costs £139, the IEEE interface £227 and the serial ports £225. Most of the Olivetti applications cost between £150 and £300, while the third-party software seems to be priced from £300 to £1000.
The Olivetti M20 represents a brave attempt by a large firm to make its way independently in the microcomputer market. (By way of comparison, Texas Instruments and Hewlett Packard tried it; IBM and DEC did not.) This independence reflects itself by the decision to base the hardware on an unpopular processor; this cuts Olivetti off from the mainstream of microcomputer software development, both at operating system and application levels. Olivetti seems to be fully aware of this step as it is making efforts to provide the requisite software, both in-house and by recruiting external software houses.
The system could appeal to scientific/commercial users who derive confidence from dealing with a big firm which offers some sensitivity in meeting software needs and which is willing to provide extensive and sound maintenance and support.
|CPU:||Z8001, 4 Mhz|
|Video:||16 x64 or 25 x 80 character display, 512 x 256 or 480 x 256 pixel graphics, black and white or colour|
|RAM:||128k as standard + up to three 32k boards|
|ROM:||2k standard, expandable up to 8k|
|Comms:||Centronics parallel and RS232 serial, standard; IEEE-488 and two ports RS232 or 20 mA loop|
|Keyboard:||72 keys, programmable|
|Bus:||Olivetti’s own – 16 data lines|
|Disks:||One or two, 360k (unformatted) 5¼in floppies|
|Printers:||Thermal, matrix or daisy wheel|
|BASIC||Invoke Basic interpreter||Resident|
|COMMANDS||List all commands|
|[COMMAND]?||Display an explanation of the specified command|
|ERRORS||List all error codes|
|E n||Display an explanation of error code number n|
|FCOPY||Copy named file|
|FDEPASS||Unset a file password|
|FLIST||List a named file||Resident|
|FNEW||Create a named file|
|FPASS||Set a file password|
|FUNPROT||Remove write-protection from a file|
|FWPROT||Write-protect a file|
|HELP||Display Help routines|
|IEEE-488||Invoke the IEEE-488 Basic control package|
|LABEL||Invoke the labelling package|
|LTERM||Return number of Return key last pressed||Resident|
|MI||Invoke machine instruction routine|
|PKEY||Program given key|
|PLOAD||Load and lock utility into memory||Resident|
|PSAVE||Save current system on disk for subsequent reboot||Resident|
|SBASIC||Set Basic environment||Resident|
|SFORM||Set printer environment|
|SSYS||Set system environment||Resident|
|VDEPASS||Unset a volume password|
|VFORMAT||Format a disk|
|VLIST||List a volume directory||Resident|
|VNEW||Create a volume on a disk|
|VPASS||Set a volume password|
|VRENAME||Rename a volume|
|Table 2 – Basic reserved words|
|DEF FN||DEF USR||DEFINT|
|LINE INPUT||LINE INPUT#||LET|
|ON ERROR GOTO||ON GOSUB||ON GOTO|
|PRINT#||PRINT USING||PRINT# USING|
First published in Personal Computer World magazine (September 1982)