A review of the Camputers Lynx Computer.
Published in COMPUTING TODAY JUNE 1983.



Review: Camputers Lynx



Don Thomasson

MISSING LYNX
A new machine in a variety of ways that has been eagerly awaited, but does the Lynx really come up to scratch?


Lynx and manual
If a new product follows current fashion, it must show some advantage in price or performance if it is to compete successfully with other devices. High powered publicity has been used as an alternative with some success, but that is liable to yield to hard facts in the long run.

It is therefore tempting to try an alternative approach, by-passing the competition by striking out into new territory and relying on novelty and innovation to attract the attention of potential purchasers. The danger here is that there may be very good reasons why no one else has gone in that direction. There may be hidden penalties that outweigh the advantages.

The Lynx has taken the innovative path in several respects, and has thereby gained ascendancy, but only at the cost of imposing some limitations. In assessing the overall value of the machine it is necessary to balance the gains against the losses, and the verdict will depend to some extent on the way the machine is to be used.


FIRST IMPRESSIONS

When it emerges from the box, the chunky hard plastic case of the Lynx looks workmanlike, and the separate power supply in a metal case has a more professional air than that of a smoothly styled sealed unit which is clearly unrepairable. The sight of real keys is welcome, and a tentative play with them gives a pleasant feel, though there can be a slight clatter if fingers move fast

The power supply is fed into the main unit through a DIN connector, which caused some eyebrows to rise slightly. As more than one power supply is used, it is advisable to make sure that power is switched off before the connector is inserted or withdrawn.

Power up, and the Lynx gives a subdued 'beep' to say that it is alive. If the television set is correctly tuned a small logo in white on black will appear at the top left of the screen. Provision is made for driving a colour monitor, but this was not tested, no suitable monitor being available.

Start to key in a simple program, and you may well find that syntax is checked when the lines are entered. You may also find that lines which look correct are rejected, and it is necessary to check the manual to find out why.


THE MANUAL

The manual was put together in something of a hurry at a time when neither the firmware nor the hardware were completely finalised. It is laid out in a somewhat confusing manner, with different subjects grouped together in a slightly odd order. The first chapter tells you how to set up the system, including the cassette recorder, but the data on the cassette leads fails to match the leads actually supplied, a discouraging start.

The second chapter is headed 'The Keyboard', but after a brief summary of special key meanings there is a diversion to a short discussion of the memory.

Then comes a chapter on 'The Computer as a Calculator', which outlines the many operations that can be carried out in direct mode, and the fourth chapter is called 'Starting to Program'. Here, at last, we begin to find out what was wrong with our syntax.

The AUTO numbering facility is described and the maximum line length is given as 240 characters. After some information on PRINT and PRINT TAB, the section on variables is reached, and it emerges that variable names must be in the form of single letters, upper and lower case being treated as different variables.

This allows 52 variables, just enough for The Valley and, therefore, adequate for most purposes. String variables are more limited, only upper case letters being allowed, and strings longer than 16 characters must be pre-dimensioned, with a maximum length of 127 characters.

There are good reasons for these limitations, but the manual states only the facts, without explanation, seeming to dwell on the disadvantages without stressing the resulting advantages.


THE EDITOR

One of the good features of the Lynx is the screen editor. The last line entered can be recalled by Control Q, earlier lines being brought back by Control E followed by the line number. Thereafter, a cursor can be moved by the four arrow keys, up arrow selecting the line start and down arrow selecting line end, and insertion or deletion at the point indicated by the cursor is then straightforward. As the keyboard has an auto-repeat feature, editing is made simple.

Once again, however, there are unusual features. As the 'calculator mode' allows numbers to be input without associated commands, it is not feasible to delete a line by typing in its number alone. The function DEL has to be used, DEL xxxx deleting line xxxx, while DEL xxxx,yyyy deletes lines xxxx to yyyy inclusive. This is logical, and when the function is properly understood it is seen to be useful, but it is a departure from normal practice.

Because of this kind of difference, the Lynx needs more explanation than some new computers, and since that was not available from the manual another source of information had to be sought. This was obtained by taking the firmware apart and looking at the relevant routines, a process which revealed some interesting and illuminating facts, many of which could have been mentioned in the manual to the general benefit of all concerned.


THE DISPLAY

The display uses 32-column hardware to generate a 40-column screen format, by the simple expedient of using a 6 by 10 character matrix instead of the more usual 8 by 8 pattern. This allows the 40 columns to be covered by 240 bits, where other systems use 256 bits for 32 columns. The concept is simple, but its consequences are not, especially as three complete screen RAMs are used, one for each primary colour.

Because the six-bit character patterns have to be packed into eight-bit screen RAM locations, a special masking procedure has to be used when setting up fresh data. The existing contents of a location are read, bits to be replaced are masked out, and the new data is ORed in. This allows superimposition of one character on another, to add accents or underline, for example, but it means that all screen accesses, which in any case involve a change of store bank, are much more complex than usual.

Where a six-bit pattern overlaps the boundary between two eight-bit locations, two screen accesses are necessary. Overall, an average of 45 accesses are needed to set up a character, where the more common system requires only eight or nine.

This accounts for the impression that listings in black and white were rather leisurely.


Then it was found that the table of reserved words contained a command 'TEXT', which was not mentioned in the manual. The response was found to be a green on black screen which ran significantly faster than black and white. The command had disabled the red and blue screens, reducing the number of accesses per character to 15.

This ability to disable one or more screen RAMs is also accessible by the PROTECT command, which allows the contents of the protected RAM to remain unchanged during subsequent screen accesses. A background format in blue, for example, can be kept intact while text is written over it in red, green or yellow. Every dot position on the screen can be coloured independently from the range of eight colours from white to black.

The working area of the screen can be altered by the 'WINDOW' command, which sets up new maximum and minimum values for the line and column pointers. These pointers are very precise.

The column can be set to 128 values, positioning characters at two-dot horizontal intervals, the line can be set to 256 different values. This means that superscripts and subscripts can be displayed in exactly the right position, and that very exact displays can be set up with a little patience.


There is even an alternative green screen RAM which can be used by machine code routines, but the protocol for accessing this is not stated.

These facilities match, and perhaps exceed, what might be expected from an add-on board with its own processor.

The use of the main processor, plus a specialised display chip, means that action is necessarily slower. One of the worst penalties is that the screen does not scroll, wrapping around vertically instead, but this is usually relevant only to listings and dumps.

Plans are in hand to double the screen RAM size and allow the production of an 80-column display, but this is in the future. It might be wiser to aim at a 32/64 column format, which would be faster and use less of the valuable ROM space.


THE KEYBOARD

Fifty seven keys are laid out round a QWERTY core, and though pleasant to use they produce some odd quirks, such as a Break key that appears to do nothing in particular, the Escape key being used for breaking into programs.

The Shift Lock key does not lock, but each time it is pressed he action of the Shift key on codes above 40 Hex is reversed. As the two keys are side by side, it is only too easy to press shift lock inadvertently, causing momentary confusion, but that is nit-picking.

The action of the Control key is not quite as might be expected. For example, code 03 Hex is generated by Control C and Control 1, but is used only to switch in and out of Graphics Mode, in which the eighth bit of the generated code is set to 1. Some ASCII codes, those just below 5F Hex and 7F Hex, are not generated at all. Keys engraved with square brackets, for instance generate the codes for round brackets.


There is no Reset key, and as it is unwise to pull out the power supply connector with power on there may be a need to keep a mains switch within reach. The initialisation procedure does not distinguish between warm and cold start, so provision of a reset facility would have limited value.

Delete generates code 08 Hex, usually identified as backspace, but understood as erase by the Editor. (Not you, Henry, sit down.) the four arrow keys act only on the Editor, cursor movements otherwise being controlled by VDU functions.

Despite the slightly individualistic approach in some areas, the keyboard is difficult to fault for convenience of use. While overt multiple meanings for the keys have been avoided, it is possible to input commands in abbreviated form, C. sufficing for CLS (clear screen) and LI. for list. Enough letters must be used to avoid ambiguity, and a full stop must be added. (This produces an oddity, as 5*.2 is interpreted as 5**2, so the zero before the decimal point is necessary.)

There are also a number of commands that can be entered by pressing Escape and an alphabetic key simultaneously. Hence many of the advantages of single key entry are available, but there is no compulsion to use them.
Rear panel of Lynx


THE MEMORY MAP

The memory is nominally arranged in three 64K banks, though not all these are fully implemented in the standard model.

The main bank contains 16K of ROM from 0000 to 3FFF Hex, and there is room for a further 8K of ROM at 4000 — 5FFF Hex. RAM runs up from 6000 to 9FFF Hex, and can be doubled in size, to 32K, by using higher density memory chips. What happens to the last 8K is not clear.

The screen bank contains 8K for each primary colour, plus another 8K for the 'alternative green' area. It is accessed by outputs to port FF7F Hex and port 80, which control the enable lines. The ROM can be selected and active while the screen bank is in use, but there is no provision for passing data from bank to bank except via processor registers.

Provision of CP/M would presumably entail adding the third bank, but it is not yet clear how this would be linked in with the first two banks.

There is no question of trading screen resolution for working RAM. The present machine has 16K of available RAM, of which the BASIC interpreter claims 2380 locations for dedicated workspace, including variable storage and the pointers for array and strings. The statement that the Lynx is a '48K machine' is thus quite true, but perhaps may be misunderstood. The possibility of making full use of the stated 192K capacity must also be questioned, in view of the difficulty of communication between banks, which takes 25µS per byte.


However, until the third ROM has been programmed, there are a number of open questions in this area. From the existing ROMs, it can be seen that the extension will contain a DISC routine, but there are no other hard links to it.

Lynx keyboard


THE MONITOR

Most recent machines seem to have been designed on the assumption that no one in his right mind would want to work in machine code, but the Lynx, once again, takes a different view. The Monitor is so complex that it really needs a special manual to itself, and its capabilities can only be touched on here.

When the Monitor is entered, all the registers, including the alternate set, are copied into an area of RAM. The contents of the current registers are displayed. It is then possible to set up a breakpoint and run a machine code program, which will re-enter the Monitor when the breakpoint is reached.

Setting up the program in the first place can use either the 'Type into Store' function or 'Modify', which displays the current contents. Simple and intelligent copy routines for areas other than the BASIC program. [sic]

One advertised facility, Single Step, has not been implemented, due to a hardware problem. It was intended to use the non-maskable interrupt, but that came up too soon, and incorporation of a delay was not considered feasible.

There are other functions in the Monitor, but these brief notes should give an impression of the facilities. The only thing missing is a resident assembler.


THE BASIC

The BASIC interpreter is, taken as a whole, quite novel, though some of its features have been seen elsewhere. It is fast, the first seven Benchmarks being second only to the BBC Micro in order of merit, though the eighth rather spoils the picture, being distinctly slow. The figures given were taken over 10,000 iterations, instead of the usual 1000, as it was found that this gave consistent results, minimising human reaction time. However, the results were then scaled to match up with the usual form.

The slowness of the eighth Benchmark, which involves the more complex functions like LOG and SIN, may be due to the floating point format used, which is binary-coded decimal, like the Atari version. This is very convenient for input and output, but perhaps less so for complex calculations. It provides a resolution of eight decimal places.

When a new line is entered, it is radically altered by the 'creator'. Commands and functions are tokenised, and extra delimiters are added to mark the limits of expressions. Variables are converted to indices which access the variable store locations as displacement pointers, and the expressions are arranged in Reverse Polish form. This makes interpretation simple and fast.


One resulting problem is that a 'recreator' is necessary when a line is to be displayed or listed, and this swallows up a lot of ROM space. The main reason for limiting arrays to single dimensions is concern over the need to provide a suitable recreator routine, but that may be overcome.

The system allows some very friendly features. A mistake like 'PR INT' for 'PRINT' does not cause a Syntax Error, and the subsequent listing shows the command correctly. The command 'LET' is assumed if no command is given.

Other features are less acceptable. Only one statement is normally allowed in a line, though DIM and LET can be followed by several dimensioning or assignment statements separated by commas. There are special tricks needed to obtain full string comparison facilities. On the other hand facilities like TRACE and SPEED allow for easy debugging of BASIC, by allowing programs to be run at slow speed with a listing of the numbers of the lines executed.

The range of commands and functions is much larger than in some recent versions of BASIC, and this means that it may take longer to become familiar with the possibilities. For example, a special stack is used for loop return links, and jumping out of a FOR loop can soon fill this stack, but there is no need for this rather doubtful practice when the other loop functions WHILE...WEND and REPEAT...UNTIL are available. The need here is a fully adequate set of documentation which guides the user through the unfamiliar paths involved.


SOUND AND GRAPHICS

A small internal loudspeaker is provided, in association with a D/A converter that also comes into use with SAVE and LOAD, when it generates sine waves from a table in ROM. The D/A can be driven in two ways for sound generation. First, there is a BEEP command specifying 'wavelength', number of cycles, and loudness, the last varying from quiet to inaudible.

Secondly, the SOUND command allows bytes to be read from an area of memory at a specified rate, so that a complete waveform can be specified.

The sound system is rather weak, and though the signal can be brought out at the cassette port by a little trickery that is not an advertised feature.

In addition to definable graphics, the Lynx provides DOT, MOVE and DRAW facilities, either on an absolute or relative position basis. In combination with the lavish screen facilities, this opens up many possibilities, providing that speed is not essential.


SHORTAGES

The four examples of the Lynx which have been examined, two supplied as review models and two in private hands, do not meet the published specification in full. The printer driver needed to implement LLIST, LPRINT, and LINK does not exist. A rather glaring bug in 'multiply' has now been cleared, but ARCSIN and ARCCOS still give each other's values for unity, and there are other more subtle bugs still to be removed.

The CP/M compatibility which is claimed has yet to be demonstrated, and there may be difficulty in linking CP/M with the BASIC system, due to the limitations on inter-bank transfers. Some revision to the keyboard coding would be necessary to meet CP/M standard requirements.

The standard of quality control needs to be improved. One machine was delivered with a short-circuited video lead, and another with random failures at least partly due to short circuits in wiring modifications. There are so many such modifications that one cynic insists on calling the machine 'The Links', but some changes are inevitable in the early stages.


The problem is compounded by the fact that the available ROM space is very nearly full, and more space must be found before the missing items can be written in.

It must therefore be suggested that the Lynx is not yet completely market-ready. For many purposes, it will do a useful job, but it will not do all that is claimed for it.

It could be seen as a flawed jewel, for it has a number of virtues, but even the curate's egg was 'good in places'. If the less satisfactory aspects can be put to rights, it could prove to be a very popular machine. That, however, could entail some sacrifices.


BENCHMARK*BM1*BM2*BM3*BM4*BM5*BM6BM7BM8Average
TIME0.943.511.88.39.415.721.686.319.7

Table 1. Benchmark test results for the Lynx. All benchmarks were timed by use of beep. In cases marked *, 10,000 iterations were used to minimise human response delay, and the results divided by 10.


FACTSHEETLynx
CPUZ-80A
ROM16K
RAM48K
LanguageCamputers BASIC
KeyboardQWERTY
DisplayText: 24 lines of 40 characters;
Graphics: 248 by 256; Eight colours
Cassette1200 baud
I/OSerial port; expansion bus
SoundSingle channel
CostsLynx   £225
SupplierCamputers Limited,
33A Bridge Street
Cambridge CB2 1UW

ALPHA and GRAPHIC return the current pointers to the normal and graphic character pattern areas, which can be changed by poking into RAM.
CALL accesses a machine code subroutine. One form is CALL LCTN xxxx, where xxxx specifies the number of a line using the CODE command.
CCHAR sets up two ASCII codes determining the alternating cursor characters.
CFR determines the cursor flash rate.
CODE indicates that the rest of the line contains machine code in explicit hexadecimal form.
DEG is a multiplier converting from radians to degrees.
DIV is divide with integer result.
ERROR generates a specified error code.
EXT 'allows for extensions of BASIC', but is not yet implemented.
FACT calculates factorials.
FALSE returns zero.
FRAC returns the fractional part of the argument.
GETN and GET$ return the ASCII code and character, respectively, of a key depressed, waiting if no key is active. The companion functions KEYN and KEY$ are the same, except that they do not wait for a key to be pressed.
INK and PAPER as commands set colours. As functions, they determine what the colours are. This allows contrasting pairs to be set automatically.
LINK couples the display and printer outputs. (Not implemented)
MEM checks free RAM space,
HIMEM checks top of memory.
HL reads the contents of the processor HL register at the return from a CALL.
MOD gives the remainder of an integer division, e.g. 15 MOD 4 returns 3.
MON calls the Monitor.
MOVE sets a start point for graphics DRAW.
RESERVE brings the effective top of memory down to a given location.
TAPE sets tape baud rate (600-2100).
USER0 — USER4 access link points in RAM.
WINDOW sets active screen area.
Some unusual commands and functions in the Lynx BASIC.

Rear panel of Lynx main circuit board

CONCLUSION

For all its faults, the Lynx has inspired a certain amount of affection. Davis Jansons (not David, as one review called him) has shown tremendous ingenuity in the way he has tried to come to terms with difficult requirements, his program having some pleasant twists, but the problems facing him were very difficult indeed. Thanks are due to him and to his wife, Sue, for much enlightening information that has helped show the why and wherefore of the machine.

Hopefully, Sue will forgive criticism of the manual, which she wrote under conditions of extreme pressure.

The Lynx is already behind schedule, but a little more delay used to polish the edges would be better than trying to sell it as it stands. Perhaps before long there will be a chance to review an updated model without the need for any reservations at all.





2008 Comments



Chronological listing
Back to chronological list

Home Page
Home Page