RESIDENT EXPERT Our series on artificial intelligence considers the 1307 development of expert systems programs that incorporate highly specialised areas of

knowledge

COMEBACK BID Weighing in with a stylish design, large memory and seductive 1309 price, the Atari 130XE looks like it could have the makings of a champ

EXTENDED VIEW We take a look at how CP/M labels and manipulates its files _ 1304

ICON TACT Beyond Software’s Shadowfire uses Mac-like icons as part of a 1370

poems fast-action game : 1) The Atari 130XE possesses one more chip than its = _____ predecessors. What is its name and function?

2) What is the general effect of a CALL command in

780 Assembly language?

3) Whatis a ‘wildcard’?

COMPUTER SCIENCE

SEARCHING LOOKS A sisctanins ne PROLOG’S unique tree-like search procedure

~ FROM PET TO PLOTTER A weekly glossary of computing terms 1308

THE NEW WORLD I The first in a three- part complete listing of our New World 137 4 | simulation game. This week we provide flavours for the Spectrum

BM PC COURTESY OF CUP ERE 114 CHARING CROSS ROAD, LONDON WC2

CHANNELS OF THOUGHT We investigate how the Spectrum sends data to 137 A the screen and ZX printer via channels

DIGITAL DOODLES Our digital tracer project concludes by adding some 1306 refinements to the control program we gave

last week

REFERENCE CARD Another section of - INSIDE

the Commodore 64’s memory map | us

COVER PHOTOGRAPHY BY MARCUS WILSON SMITH

RESIDENT EXPERT

This instalment of our series on artificial intelligence focuses on expert systems highly structured programs capable of fulfillimg much of the diagnostic and

advisory role of professional human practitioners in specialised areas of knowledge. We _ isolate the _ essential ingredients of the true expert system.

A human expert a hospital consultant, a geologist, or a chemical analyst, for example is usually someone we respect. Experts spend a long time studying and practising their skills to enable them to do their jobs well. The trouble with human experts, however, is that they are scarce, they are not always reliable, they want payment, and in the, long run they die, taking much of their expertise with them. Many people are therefore keen on the idea of encoding expertise in computer programs, to get the benefits of being able to draw on a large body of knowledge without the drawbacks associated with the human experts.

The concept of the ‘expert system’ arose in the 1970s, when artificial intelligence (AI) researchers abandoned, or postponed, the quest for generally intelligent machines and turned instead to the solution of narrowly focused real-world problems. Thus the expert system is one of the first examples of applied AI, and expert systems techniques have spread out far beyond the confines of the research laboratories in which they were devised. Indeed, expert systems have to an extent brought AI into practical everyday use. Systems already exist that out-perform skilled humans at medical diagnosis, mass-spectrogram interpretation, classifying crop disease and much else besides. It is worth asking, therefore, how they work.

WHAT IS AN EXPERT SYSTEM?

Typically an expert system is based on an extensive body of knowledge about a specific problem area. In general, this knowledge will be organised as a collection of rules that allow the system to draw conclusions from given data or premises, thereby enabling it to offer intelligent advice or take intelligent decisions. This knowledge-based approach to systems design represents an evolutionary change within computer science, with revolutionary consequences. It replaces the traditional formula of ‘Data + Algorithm = Program’ with a new architecture centred around a ‘knowledge base’ and an ‘inference engine’, so that ‘Knowledge + Inference = Expert System’. This formula is obviously similar, but different enough in approach to have profound implications.

MARCUS WILSON-SMITH

What is an expert system? The following checklist of typical features should prove helpful.

@An expert system is limited to a relatively narrow domain of expertise. @It should be able to reason with uncertain data and unreliable rules.

et must be able to explain its train of reasoning in ©

a comprehensive way. @F acts and inference mechanism are ‘detachable’:

knowledge is not ‘hard-coded’ into the deductive

procedures.

elt is designed to grow incrementally.

@It is typically rule-based.

@It delivers advice as its output not tables of figures or graphs.

The key word is knowledge. Clearly the objective of an intelligent problem-solving system is to cut out blind or random search. To do so a computer system has to exploit the same advantage that the human expert has over the novice that is, expertise, or organised knowledge: knowledge about facts, about rules of inference and about solution strategies. There are four essential components of a fully fledged expert system:

1. The knowledge base

2. The inference engine

3. The knowledge-acquisition module 4. The explanatory interface

Seeking Professional Advice Systems that can acquire knowledge from experts and use that knowledge to proffer advice or diagnoses are becoming increasingly popular in many disciplines —.from medicine to farming and architecture. Expert systems, designed to operate within a narrow subject area, provide professionals with an on-line consultancy service to assist them in their work

THE HOME COMPUTER ADVANCED COURSE 1301

HSOLNIOVW JHL NO TIANNINSW NVI

System Synopsis

_ Anexpert system comprises

several modules that allow knowledge to pass from the expert to the end user. Knowledge must first be acquired from the expert(s) and incorporated into a knowledge - base. In order to make predictions, give advice or provide a diagnosis, the system must then be able to draw inferences from the knowledge base. Finally, the explanatory

_ interface allows the user to

communicate with the system in order to consult it

All four modules are critical. A knowledge-based system may lack one or other of them, but a truly expert system should not. We will consider each of these four modules in turn and explain how they work together.

THE KNOWLEDGE BASE

The two fundamental components of an expert system are the knowledge base and the inference engine. The knowledge base stores information about the subject domain; however, information in a knowledge base is not the passive set of records and items that you would find in a conventional database. Instead it contains symbolic representations of experts’ rules of judgment and experience in a form that enables the inference engine to perform logical deductions from it.

Most of the items in a knowledge base are non- mathematical. The two chief difficulties in developing a knowledge base are knowledge representation and knowledge acquisition. ‘The former problem concerns the decision on how to encode knowledge so that the computer can use it. In general the following elements must be represented: domain terms (the jargon used by experts in the field); structural relationships (the interconnections of component entities); and

1302 THE HOME COMPUTER ADVANCED COURSE

causal relationships (the cause-effect relations between components).

The task of the knowledge engineer is to select appropriate means of storing such information symbolically. Four main methods have evolved:

@®Rules in IF...THEN format. The condition specifies some pattern and the conclusion may be an action or assertion. |

@ Semantic nets. These represent relations among objects in the domain (e.g. the whale is amammal) by links between nodes.

®Frames. These are generalised record structures which may have default values and may have actions coded as the values of certain fields or slots.

® Horn clauses. This is a form of predicate logic on which PROLOG is based and with which the PROLOG system can perform inferences (see page 1272).

Early expert systems used the rule-based formalism almost exclusively. A sample rule from the Mycin system for diagnosing blood infections is typical of the IF. . .THEN structure: IF: 1. The infection requiring therapy is meningitis, and 2. The type of infection is fungal, and 3. Organisms were not seen on the stain of the culture, and 4. The patient is not a compromised host, and 5. The patient has been in a region where coccidiomycoses are endemic, and 6. The race of the patient is black or Asian or Indian, and 7. The cryptococcal antigen in the csf was not positive THEN There is suggestive evidence that cryptococcus is not one of the organisms which might be causing the infection.

From this example we can see that an expert system uses the technical jargon of the area in which it is designed to operate in this case medicine. The IF. . .THEN construct used by Mycin is essentially a series of statements that can be determined as true or false. Thus, the statements can be linked by Boolean operators, such as AND, to assist computer manipulation. In order to elicit the information required to make a diagnosis, Mycin must enter into a dialogue with the system user. Obviously, in this system at least, the user must have a certain level of knowledge in the subject area, so that the expert system’s queries can be understood and answered.

THE INFERENCE ENGINE

The inference mechanisms consist of search and reasoning methods that enable the system to find solutions and, if necessary, provide justifications for its answers. There are two overall reasoning strategies forward chaining and backward chaining. !

Forward chaining involves working forwards from the evidence (or symptoms) to the conclusions (or diagnoses). In a rule-based system

it simply involves matching the IF conditions to the facts, possibly in a predetermined order. Forward chaining is easy to computerise and is suitable in cases where all the data is to be gathered anyway. Examples of such cases are where the data is generated automatically by an instrument and where a form has to be filled in.

_ Backward chaining works from hypothesis to evidence. The system chooses a hypothesis and looks for data to support or refute it. It can be programmed in a recursive manner and in consultation-style systems typically leads to a more natural kind of dialogue. The problem of which hypothesis to pick in any given situation is not yet fully solved and so in practice most systems use a mixture of forward and backward chaining.

THE ACQUISITION MODULE

Experts are notoriously bad at saying how they reach their conclusions, not necessarily because they wish to preserve trade secrets but because many of their thought processes lie buried beneath the level of consciousness, at the intuitive level. So knowledge acquisition has come to be regarded as the main bottleneck in expert systems development. Experts tend to be good at criticism, however. They can look at an example case and say what decision should have been taken and, if required, criticise a computer’s suggested solution. A good deal of attention has therefore been devoted recently to developing software tools that allow an expert system to induce its own knowledge from _ pre-classified examples. Effectively, this power assists the knowledge acquisition process. Overcoming at the same time many of the difficulties of extracting knowledge from human experts and the laborious task of coding it for the computer. Even if the system cannot do the whole job from a database of instances to a set of decision rules on its own, it may be useful if it can refine its own knowledge base during a period of ‘apprenticeship’ or during use, learning from its mistakes. We will take a closer look at some machine learning systems in forthcoming instalments.

THE EXPLANATORY INTERFACE

One of the good things about Mycin, Prospector and many classic expert systems was that they could justify their conclusions on _ request. Obviously when the responsibility for life-and- death or even profit-and-loss decisions is being handed over to the computer it is essential for the system to explain its reasoning. Here is an example of how Mycin replies to a WHY? question posed by its user (who is a physician, not a patient, and will not accept diagnoses on trust without explanation). The dialogue starts by Mycin requesting data.

Is meningitis a hospital-acquired infection?

WHY?

[2.0] This will aid in determining the organisms (other than those seen on cultures or smears) which might

t&

8

Bi L _

be causing the infection. It has already been determined that:

[21] the infection which requires therapy is meningitis, and

[2.2] organisms were not seen on the stain of this pending csf culture, and

[2.3] the type of infection is bacterial, and

[2.4] neurosurgery is not one of the relevant items from the history of this patient, and

[2.5] the age of this patient is greater than 10 days. Therefore, if:

[2.6] the infection was acquired while the patient was

hospitalised,

then there is evidence that the organisms (other than those seen on cultures and smears) which might be causing the infection are e.coli (0.75), Staphylococcus-coag-pos (0.3), pseudomonas- aeruginosa (0.3), klebsiella-pneumoniae (0.5)

from [RULE 545]

This explanation facility is in effect a partial trace through the program’s reasoning process, couched in medical-jargon English. Such explanations can be produced fairly easily and cheaply in rule- based systems (by regurgitating the rules being used and their predecessors), which is a point in favour of the rule-based encoding of knowledge. Notice that the conclusions have numerical weightings attached. These are in fact not true probabilities. They are weightings that allow the system to deal with uncertainty in a consistent manner, and come up with an ordered list of likely diagnoses in the final analysis.

mand he.

© Special

ys

0: Hs

; |

_

te

. Hy

COURTESY OF ICI PLANT PROTECTION UK DIVISION

SSeS

SSeS

The Grain Brain

Wheat Counsellor is an expert system developed by ICI and available to farmers, free of charge, on Prestel. The system is designed to advise farmers on methods to combat wheat diseases, the correct chemicals to apply and an estimate of the likely losses. Although the system is designed to simulate the type of conversation that might be held over a farm gate, its knowledge has been accumulated from scientific studies of the spread of crop diseases. In order to gain the information from which it will draw its conclusions, the system leads the farmer through a series of simple questions. Its advice is then given in the form of a list of the treatments available, together with a suitability rating for each treatment:

THE HOME COMPUTER ADVANCED COURSE 1303

EXTENDED VIEW

So far in in 1 our series Dr n CP/M w we e have concentrated primarily on looking at the command structure of the operating system. We turn our attention now to the files upon which CP/M commands operate and how they can he manipulated within the system.

We have already discussed file extensions in CP/M, but - let’snowlookatthem in greater detail. As we have seen, a

_ CP/M file consists of a primary name, which can contain up to eight characters, followed by a full stop and up to three letters, constituting a file extension (although this may be omitted). You can theoretically add any extension onto the primary filename, butsome of these are reserved for specific purposes. For example, the COM extension is reserved for CP/M COMmand files. This informs CP/M that a file with this extension is to be added to the list. of transient commands that can be run under it.

Similarly, Basic programs written under CP/M qin be stored with the file extension .BAS. Many versions of pasic that run under CP/M will automatically assign this ~ extension to a sasic file, eliminating any need for you to type it in. Although the Basic program will be stored as a source (text) file, the difference between this file and an ordinary text file is that when the program is reloaded prior to being run, CP/M will tokenise the Basic program rather than list it as an ASCII sequential file. However, many machines will compile their sasic programs before running them. Files that are compiled before execution will be stored with an .INT extension. This means that they are INTermediary files consisting of object code.

Machine code programs, like Basic programs, can also have several different extensions assigned to them depending on their status. When we write a program in Assembly language, the source listing should have the extension .ASM attached. If the program does not have the correct extension, the resident assembler will not

1304 THE HOME COMPUTER ADVANCED COURSE

attempt to assemble the program am will simply generate a file error.

When we attempt to assemble the program, we must select one of two extensions. These are either .HEX or PRN. The HEX extension means that what is produced at the end of assembly will be a HEXadecimal object file. Alternatively, with PRN the assembler will also produce a printed listing of the assembly with a copy of the source listing, the object code, the addresses of each of the op- codes and the list of assignments along with a list of errors. Thus, the PRN extension provides an essential aid in debugging assembly programs.

The final group of file extensions we shall look at are those associated with text files. Many versions of CP/M have a small text editing facility (called by executing the command file ED) provided within the operating system itself, whereas others assume you will have a specialised word processing package that can be run under CP/M. However, regardless of which you may be using, the file extensions remain the same.

Apart from the reserved filename extensions that have already been mentioned, almost any three letters can be used as an extension. In fact, you do not have to add an extension at all. If a text file is SAVEd without an extension having been added, CP/M will often add its own. For example, the TEXTED utility will add the extension .TXT on the end of a file whereas WordStar will add .SSS.

BACKUP FILES

lf you look atthe directory when atextfile has been SAVEd you will notice that two files have been created: one with the file extension you have added and one with the suffix .BAK. This is a built-in safety feature of CP/M. Obviously, it is vital that important documents are not accidentally deleted or corrupted, so to prevent such disastrous occurrences CP/M will create two copies of all text files: a normal file and a backup .BAK file.

Thus, if you accidentally ERAse a file when editing, the backup version will always be available so that your previous work will not be irretrievably lost. When a file has been edited and then reSAVEd, a new version of .BAK will also be created. Itis therefore a good idea to regularly reSAVE files so that the backup copy will be kept up to date.

Despite the fact that it is not necessary to add extensions, once implemented they are a useful aid in organising your files; not only for your own benefit for displaying information about the organisation of files and headings but also for the manipulation of groups of files. One of the most useful of these manipulations involves the use of ‘wildcard’ characters, which enable ‘fuzzy matching’ of files.

Suppose, for example, that a managing director has written a number of memoranda in the month of July. Sometime later he may decide these files are out of date and no longer needed in his catalogue. To delete July's

memoranda, he could, of course, go through the catalogue and delete each of the files individually using the ERA command, but if there are a large number of files this could be a long and tedious process.

However, providing he has had the foresight to give all July’s memos the same file extension, say .JUL, this process could be performed with a single command: ERA D:*.JUL (where D is the optional drive name). Placing the asterisk before the full stop tells CP/M to ignore the primary filename and ERAse the files with the JUL extension. This asterisk can also be used on the right of the full stop. Using asterisks on either side of the full stop, the command will erase all the files on a disk, such as ERAS.

SELECTIVE FILE DELETION

Let’s assume that the managing director keeps all July's files with the suffix JUL. We shall now complicate matters by also assuming that there are a number of important documents that he does not want to delete. In this case it is out of the question to use the * prefix, since this would erase July’s important files along with the redundant memos. However, our managing director has distinguished his memoranda from other files by naming them MEM1.JUL, MEM2.JUL and so on. However, it is still possible to delete all the memoranda with a single command without accidentally deleting other files, in which case executing the command ERA D:MEM?.JUL would be appropriate. Here, the operating system is being told to delete all files beginning with MEM and ending with the suffix .JUL. The ? in the fourth position signifies to CP/M that the fourth character is not significant and may be ignored.

This process can be adapted for any of the 11 possible positions in afile name. Itis particularly useful should our managing director wish to delete memos for both JUNe and JULY, since both sets could be replaced by the format MEM?.JU?. Combinations of * and ? can appear ina file name so that ERA D:???7Q???.* would erase all files with a Q in the fifth position of the prefix.

Use of the wildcard characters * and ? is not confined to the ERAse command but can also be used with, among others, the PIP, STAT and REN commands. Hence, in order to transfer a number of files from one disk to another, a typical command would be PIP B:=A*.”. This command will find all the files on drive A that match the format (which in this case would be all of them) and copy them onto the disk in drive B. In this way we can use wildcards to copy the entire contents of one disk to another.

Thus far in the series we have looked at commands that are used to control CP/M. However, the operating system also makes extensive use of control characters to perform many of its operations. Perhaps the most useful and common control character is the CTRL-C combination. Pressing these characters will produce a ‘warm boot’ to the system and reload CP/M into the computer. This is important, not just when reloading CP/ M after a system crash, but also when inserting a new disk into one of the drives.

Remember that CP/M keeps a copy of a disk’s ‘log’ in the computer's memory. When we exchange disks in a drive the operating system must be informed of the change, otherwise it may generate errors. When wewarm

boot CP/M, it will re-log the contents of each disk drive, which will enable us to continue. CTRL-C can also be used to halt the execution of many progams, since CP/M will automatically interrupt the system while it resets itself.

Many of the other control characters are concerned with editing text and have been adopted by a number of word processors that run under CP/M. For example, CTRL-H will delete the last character, whereas CTRL-U and CTRL-X will delete an entire line. If a printer is connected, text can be sent to it by typing CTRL-P. Pressing CTRL-P a second time halts this operation.

Other control characters are used in CP/M, many of which have been rendered obsolete by advances in hardware and software. There are several reasons why these characters have been retained even though their functions appear to have been duplicated by other keys; for example, most home computers now have a Delete key fitted. Part of the explanation is historical. Many early microcomputers did not have a Delete key or cursor keys, so that screen editing facilities had to be incorporated within the operating system.

Another reason for retaining the system is that of compatibility. While the CTRL and alphabetic characters have retained their ASCII equivalents over the years, the newer keys may not have, and so the control characters have remained to retain compatibility. Finally, a user who has spent several years with CP/M will have grown accustomed to using these keys. Altering the system now would mean that he would haveto relearn control from the beginning.

Having finished our brief overview of the commands and files as implemented on CP/M, we can now carry out most of the everyday functions used within the operating system. In the next instalment, we'll delve deeper into CP/M to see how it is constructed and how the program interacts with the computer and its peripherals.

LIZ DIXON ON THE MACINTOSH

Walk On The Wild Side . The use of ‘wildcard’ characters is an important feature of CP/M. By entering ‘wildcards’ at different positions, the computer will effectively ignore any characters in that position when searching the directory. This means that by careful allocation of filenames the user can manipulate whole lists of files which are classified under different headings

THE HOME COMPUTER ADVANCED COURSE 1305

We complete our digital tracer project b giving the second half of the tracer program for the BBC Micro. Adding this to the listing given in the previous instalment provides the user with an alternative method of enabling the tracer to produce points, lines, circles and filled triangles.

The second part of the tracer program controls the use of the tracer in an ‘elastic mode’. Rather than simply fulfilling a freehand drawing function, the tracer can be used, when elastic mode is selected, to specify the start and end points of a line, the centre and radius of a circle, or the three corners of a filled triangle. Selection of each of these functions, together with a point-plotting fuction, is made by pressing the appropriate keys from the menu displayed at the top of the screen. Save, Load and Clear screen functions, similar to those for the freehand mode outlined in the previous - instalment, can also be selected from this menu. The new section of program given here, therefore, allows complex patterns to be created simply on the screen, using the tracer and a few simple key- presses. These patterns can be saved to disk or tape to be reloaded later.

THE FOUR PROCEDURES

@ PROCpoint

Calling PROCdraw (a procedure given in the first half of the program) with togflag set to one provides us with a simple way of moving the cursor around the screen without drawing lines. Setting togflag to one ensures that pen-up mode is selected before the procedure is called. This call is placed within a loop that also looks for a keypress that might terminate the loop or be used to change the foreground colour. In addition, if the tracer button is pressed then a point is plotted in the current foreground colour at the current cursor position. In order to stop double presses, the procedure cannot continue after a button press has been detected until the button is released.

@ PROCline

The first action of the procedure is to store the current cursor co-ordinates, as these will be used to locate the fixed end of the elastic line. The cursor is then erased and a line drawn to a point corresponding to a new cursor position. This is drawn in Exclusive-OR plotting mode, using GCOL3. Redrawing this line again later will erase it and restore any background ‘data to its original condition. Placing these two drawing actions within a loop allows the user to try out various line

1306 THE HOME COMPUTER ADVANCED COURSE

q :

} / :

positions, as though the line were an elastic band attached at one end to a fixed point and at the other to the tracer’s screen cursor. When satisfied with a line’s position the user can ‘fix’ the line by pressing the tracer button or M on the keyboard. In this case the procedure omits to draw the line a second time, leaving it unerased, before returning to the main menu.

@ PROCTill

The fill procedure takes advantage of the BBC’s triangle-filling feature, accessed by using a PLOT 85,x,y command. This command takes the last two points visited and the point specified in the command as the three corners of a triangle and fills the shape with a solid block of colour. The procedure uses a similar method to that used in PROCpoint to allow the user to plot the three corners of the triangle to be filled, using the tracer button. The last two lines of the procedure revisit the three points in order to fill the triangle shape.

@ PROCcircle

The final facility offered by the program allows the user to specify the radius of a circle using the same elastic band method as that used in PROCline. In fact, PROCline is called from within the circle- drawing procedure for exactly this purpose. Once the radius is selected control returns to PROCcircle, which must first erase the line left by PROCline and erase the cursor before drawing the circle. The circle’s centre will be held in x1 and x2, the cursor co-ordinates on entry to the procedure, and PROCline provides the co-ordinates of a point on the circumference, (x2,y2). Using these two points, the circle’s radius can be calculated and a standard circle-drawing algorithm used to create the circle.

Digital Tracer Program Part 2

2350 2360 Zar 2380 press 2370 2400 ‘2410 2430 2440 2450 2440 2470 2480 2490 2500

The following listing forms the second part of the digital tracer program for the BBC Micro. It should be added to the first part of the listing given on page 1288

DEF PROCelastic

PROCelastic_inform

REPEAT

anst=INKEYSC1):1F ans#<¢>"" THEN PROCelastic_

togflag=1:PROCdr aw

UNTIL exitflag=1

ENDPROC

DEF PROCelastic_inform PROCcalc_xy:0)ldx=x:oldy=y:PROCcursor(oldx,aldy? PROCreinform

GCOL 0,1:MOVE 0,920:DRAW 1280,%20

ENDPROC

DEF PROCreinform

PRINT TABC1,1);SPCC79)

PRINT TABC1,1293;"S=Save L=Load M=Menu C=Clear

R=Circle"

2510

PRINT" D=Draw Line

P=Point F=Fili" ENDPROC DEF PROCelastic_press

IF ans#="C" THEN CLS:PROCelastic_inform:ENDP

IF ans$="M" THEN exitflag=1 PROCcolour_change IF ans#="R" THEN PROCcircle_title:PROCcircle

:PROCelastic_inform:ENDPROC L.2570 ,2600

2570 2600

IF ans#="BD" THEN PROCline_title:PROC1ine IF ans$="P" THEN PROCpoint_title:PROCpoint

Celastic_inform:ENDPROC

2620

IF ans#="S" THEN PROCsave_screen:PROCelastic

_inform:ENDPROC

2630

IF ans#="L" THEN PROCload screen:PROCelastic

_inform:ENDPROC

2640 2660 2670 2680 2670 2710 2720 2730 2740 2750 2760

ENDPROC

DEF PROCpoint_title

PRINT TABC1,19 SPCC79)

PRINT TAB(15,1)>3;"Point Mode" ENDPROC

DEF PROCpoint

REPEAT

togf 1] ag=1 :PROCdr aw ans#=INKEYS( 1)

PROCcol our_change

IF CADVALCOXAND 3)9<>0 THEN PLOT 69,x,y»:REPEA

T UNTIL CADVALCO2 AND 3)9=0

2770 2780 27970 2800 2810 2820 2830 2850 2860 2880 2890 2700 2710 2920 2930

UNTIL ans#="M"

PROCreinform

ENDPROC

DEF PROCline_title

PRINT TABC(1,1>9 SPCC79)

PRINT TAB(15,1>;"Line Mode"

ENDPROC

DEF PROCline

x1=x:yl=y:REPEAT PROCcalc_xy:PROCcursor(ol dx ,oldy) x2=xiy2=y:GCOL 3,colour:MOVE x1,yx1:DRAW x2,y2 anst=INKEY#¢ 1)

IF CADVALCOXAND 3) THEN ans#="M" PROCcursor( x,y) :01 dx=x:o0ldy=y

IF ans#<>"M"THEN GCOL 3,colour :MOVEx1,y»1:DRA

W x2,y¥2

2940 2950 2960 2970 2990 3000 3010 3020 3040 3050 3060 3070 3075 3080 3090 3110

PROCcolour_change

UNTIL ans#="M"

PROCreinform

ENDPROC

DEF PROCfil1]_ title

PRINT TABC1,1> SPCC?9)

PRINT TABC15,1)3"Fill Mode" ENDPROC

DEF PROCfi11

FOR I=1 TO 3

REPEAT

togf 1] ag=1:PROCdr aw: ans¢$=INKEYS$( 1) IF ans$<>""THEN PROCcol our_change UNTIL CADVALCODAND 3)<>0

PLOT 69,x,y:x¢I=xiry(C Il =y

REPEAT UNTIL CADVAL(COQ2AND32=0:REM AWAIT BUTT

ON OFF

3120 3135 3140 3150 3160 3180 3190 3200 3210 3230 3240 3250

NEXT I

PROCcursor¢(x,y):REM cursor off

FOR’ T=1 T@G=2:PLOT 694x011) ,rt( 1) tNEAT 1 PLOT “83,x >

ENDPROC

DEF PROCcircle_title

PRINT TABC1,1) SPCC ?9)

PRINT TABC15,193;"CIRCLE MODE"

ENDPROC

DEF PROCcircle

PROCI1ine

GCOL 3,colour:MOVE x1,y¥i:DRAW x2,»2:REM RUBO

UT LINE

3260 3270 3370 3380 3390 3400 3410 3420 3430 3435 3440

GCOL O0,colour:REM BACK TO NORMAL PLOT MODE PROCcursor(x2,¥2) radius=SQR¢(x2-x1)*2+Cy2-y1)*2) MOVE xltradius,y1

FOR angle=0 TO 2*PI STEP Q.1 rx=xl+tradius*COS¢angle) ry=yltradius*SINCangle)

DRAW rx ,ry

NEXT angle

DRAW xitradius,yl

ENDPROC

THE HOME COMPUTER ADVANCED COURSE 1307

The Plot Thickens There are two kinds of printer plotters drum and flat bed. Although drum plotters are more common, the more expensive flat bed plotters, like the one shown here, are better for precision work. This is because the paper is held steady and the pen can be accurately

~ positioned. Drum plotters are less accurate because the paper can slip on the carriage

PET

The Commodore PET, or Personal Electronic Transactor, represents one of the milestones in the development of the microcomputer. Its appearance in 1977 can be considered as one of the major events that directed computing beyond the realm of data processing departments and electronics enthusiasts towards the ‘dream’ of a computer in every home.

The precedent established by the PET was that it was not only fully assembled with its own casing, but it also had a built-in cassette deck and monitor, as well as BASIC resident in ROM. You had only to plug in the machine and power it up in order to use it. Previously, microcomputers were available only as a kit or with minimal assembly at best.

PICTURE PROCESSING

Also known as ‘image processing’, picture processingis the digital analysis of signals supplied from a television camera or similar device which, after processing, can be displayed either on a television or video monitor or as a printout. The amount of detail displayed is a function of the definition (resolution) of the image, of which each point is referred to as a pixel. So, the greater the number of pixels there are within the picture, the higher the definition is said to be.

The image received from the camera is held as a two-dimensional array within the computer. The

individual pixels can be stored within the array ina

number of different ways depending on the program used. At the simplest level, however, the information stored can merely state whether that pixel is on or off (whether or not light is falling on the corresponding point of the camera image). However, other information can be stored and manipulated within the computer, and this may

1308 THE HOME COMPUTER ADVANCED COURSE

specify colour or shades on the ‘grey scale’ (the relative contrast of the pixel compared with others in a monochrome image).

Picture processing is finding an increasing number of applications in the television and satellite communications fields. These range from the stunning effects now being produced in films and videos to improving the definition of the sometimes hazy pictures received from space probes. Picture processing is also being applied in the field of artificial intelligence where it is used with the emerging techniques of pattern recognition. In this area the emphasis is not merely on programming a computer to produce a required display, but rather enabling it to interpret an image and attempt to understand its ‘meaning’.

PLASMA DISPLAY

The method of plasma display, which 1s increasingly being used in computers, is characterised by an orange or red light emanating from characters similar in design to those used on LCD displays. A plasma display is constructed by trapping a gas between two materials, one of which must be transparent (to enable you to see the display). At various points around the display, electrical lines are connected to form a matrix, so that when a current is applied to them, the gas will become charged and emit light. In this way, various combinations of currents through the lines can produce characters or designs.

For the most part, plasma displays are made to produce single characters, although it is possible to build larger displays. However, the costs of these tend to be too high, especially since their functions can be performed just as well by devices incorporating cathode ray tube technology.

PLOTTER

A plotter is an output device that receives digital signals from a computer and translates them into graphical form, usually onto a piece of paper with a pen. The movements of the plotter can be directed along either the x and y axes, or else vertically, to raise and lower the pen. Of the two basic kinds of plotter, the first is known as a ‘flat bed plotter’, onto which a single piece of paper is laid. The pen is mounted on a bar that moves along one axis, while the pen itself moves along the bar, thus able to plot on any given point within the limits of the hardware.

The most usual type of flat bed plotter consists of a board to hold the paper and moveable arms to position the pen, but a recent imnovation beginning to gain popularity is the robot, or turtle plotter. With these, the pen mounting travels freely over the paper on a motorised device. This is controlled by the computer, usually via a ribbon cable. Perhaps more familiar to home computer users, a drum plotter feeds a continuous roll of paper onto a drum, much like a typewriter. The pen mounting moves across the paper, along the x axis, while vertical movement, along the y axis, is achieved by the drum rolling the paper through.

Sf A

———4y-

With its new 130XE micro Atari makes virtue of compatibility both with its XL

predecessors and the familiarity of its graphics, sound and other features. What places it in a challenging position in the market, however, is its seductive styling and RAM capacity of a full 128 Kbytes,

available at a very competitive price.

Despite the fact that Atari was one of the early pacesetters in the home computer market, the early 1980s were not good years for the corporation. In 1984, after suffering heavy losses, it was taken over by the former head of Commodore, Jack ‘Tramiel, who set about reversing the fortunes of the ailing computer giant. His policy of marketing computer technology at the lowest possible price was soon evident in the shops when the prices of the 600XL and 800XL micros were dramatically reduced in time for the Christmas market.

In itself, this move was not enough to reverse the trend. Atari was faced with a problem common to many computer manufacturers: low sales leading to lack of software support, which stifles sales even more meaning that funds are lacking for further investment in new machines.

It is wronic that Jack Tramiel was the person

most responsible for placing Atari in this position. His aggressive marketing of the Commodore 64 led to Atari being almost wiped out by its rival. By the beginning of 1985, the situation was changing dramatically. Commodore was faced with falling sales and the failure of its Plus-4 to make a major impact on the market, while Atari announced a host of new products. The first of the new machines is the Atari 130XE, a computer based around the 6502C processor.

The 130XE is essentially the same machine as the basic Atari eight-bit computer, which has been around in one form or another since the beginning of the 1980s. The main difference between this machine and earlier Atari computers is the sleek new styling and the massive amount of on-board memory: the Atari 130XE boasts a full 128 Kbytes of RAM.

The casing of the computer looks very different from that of its predecessors. The light grey plastic outer shell has the elegant design the public has come to expect of a modern computer, with rounded lines and wide, sculpted keys that allow for ease of typing. The keys have a slightly better travel than that offered by previous models, with the added advantage of not rattling as you type.

In common with the other 6502-based Atari micros, the 130XE has five pre-programmed function keys. However, unlike the previous

CHRIS STEVENS

Getting Back Into Shape

The Atari 130XE is the first product to be launched under the company’s current president, Jack Tramiel. With 128 Kbytes of RAM on board, at a price that compares favourably with many computers with only half the memory, Atari hopes that this will be the machine that will revive the company’s fortunes

THE HOME COMPUTER ADVANCED COURSE 1309

models, these have been placed above the main keyboard rather than on the right-hand side. They are now moulded in the same grey plastic as the rest of the casing and are designed in the stylish form of parallelograms rather than squares. ‘These are a great improvement on those of the XL series, which were metal and had a distinctly unsure and wobbly feel.

INTERFACE CONNECTIONS

The interfaces fitted on the rear and right-hand side of the new Atari also hold few surprises. On the side are the expected nine-pin D-type joystick ports first used by Atari and since adopted by almost everyone else. At the back of the machine is the 13-pin serial control port that 1s used by Atari to fit and daisychain Atari peripherals such as cassette decks, disk drives and printers. To the right, set into the casing, are the cartridge and expansion interfaces. The cartridge port enables the machine to run the large quantity of highly rated Atarisoft games cartridges, such as Pacman and Galaxians, that have been one of the strengths of the company over the years.

The expansion port, however, is something of a departure from the previous standard. Earlier Atari computers had a 50-way edge connector as an expansion bus. The new machine has a much smaller 14-way bus fitted as a cartridge connector. The remaining interfaces on the 130XE are the composite monitor socket, an RF jack plug for television sets and the standard Atari power- supply socket.

To keep costs down the 130XE has no on- board modulator to allow it to work effectively with British standard televisions, but has the US standard instead. Thus, to allow UK sets to be used, the aerial lead from the computer to the television runs via a small box that modifies the signal into one that will correctly process the television display.

Styling and compatibility are all very well, of course, but Atari applied these to the XL series without conspicuous success. What makes the 130XE different from earlier machines and what is its obvious selling point is the availability of a large memory capacity at such a low price. An eight-bit microprocessor can, of course, address only 64

Kbytes of RAM at a time. To address twice that amount the computer has to make use of the process known as ‘bank switching’. Using this technique, the computer can look at a ‘window’ of 64 Kbytes among the total 128 Kbytes. While the technique is not perfect, and although the extra instructions necessary to switch from one bank of RAM to another result in somewhat slower retrieval speeds, it does allow an eight-bit micro to address more memory than would otherwise be possible.

Actually, the bank switching technique is more common than you might think. Both the Oric Atmos and the Commodore 64 have more than the normal complement of 64 Kbytes on board, and both use bank switching as a means of making

1310 THE HOME COMPUTER ADVANCED COURSE

Expansion Port

The single departure of the 130XE from previous Atari peripheral ports is the expansion slot

RF Socket

The 130XE RF control is configured to the US standard. Therefore, the aerial lead is

fitted with an additional box which contains the logic to

conform to the UK standard

RAM Chips

The 128 Kbytes of RAM are stored in these two banks of 8- Kbyte chips

Memory Control Chip Memory management and bank switching routines are contained in this new chip, which has been christened ‘Freddy’

Graphics Chips

The ANTIC and GTIA chips control the computer's screen graphics

CPU

Like all previous Atari machines, the 130XE is based around the 6502 processor

Cartridge Port

The cartridge port enables the. computer to take advantage of the wide range of Atari software

Peripheral Port

interface

Joystick Ports

PIA Chip input/output control is managed by a 6520 chip

Sound Chip The ‘POKEY’ chip is

sound capabilities of the 130XE

Atari peripherals, such as disk drives and printers, can be daisy chained together with the computer via this serial

The computer is fitted with a pair of joystick ports which, naturally, are Atari standard

responsible for the four octave

full use of the available memory.

What is unusual is the price of the 130XE. Although more expensive than the Sinclair Spectrum and Acorn Electron, the 130XE is considerably cheaper than the list prices of the BBC Micro and the Commodore 64. In order to provide a 128 Kbyte computer at that price and produce a profit, Atari needs to have cut production costs considerably. To an extent, the nature of the machine itself will have kept the price low: the 130XE is essentially a revamped machine, which means that development costs have been kept to a minimum. The main economies have taken place inside the machine.

CUTTING COSTS

The memory area comprises 16 eight-Kbyte RAM chips. The production cost of these chips, which are no longer considered the product of ‘leading edge technology’, has fallen dramatically in the past few years and this is reflected in the price. Another way of reducing costs is to keep the number of components on the board to a minimum. Although many of the chips on the earlier XL series have found their way into the 130XE in order to maintain compatibility, the printed circuit board is exceptionally well laid out, looking considerably less cluttered than many

machines with only half the memory capacity. -

Finally, Atari has invested heavily in automated assembly plants, of which the 130XE is the first product. All the components on the board are soldered on by machine.

As none of the sound, graphics and Basic ROM chips have been altered in essentials, the computer is, for the user, exactly the same as the earlier models, with the high-performance sound and graphics with which Atari has become associated. One major change of benefit to the user is the manual. The handbooks that came with earlier models tended to be oversimplified to the point where they appeared to be aimed at children. The BAsic tutorial is much improved and the company has given some technical specifications in the appendix. However, for a fuli explanation of the dialect, one still needs to purchase the Atari BASIC Reference Manual.

Although the Atari range of micros was sorely

in need of upgrading, the arrival of the 130XE is

something of a puzzle. The extra 64 Kbytes of RAM provide a lot more memory for the programmer and yet there are no programs available as yet to take advantage of it, even allowing for compatibility with the Atari software already on the market. Normally, one would expect the launch of such a machine to be a preliminary manoeuvre before a serious thrust at the small business market. However, the new Atari management has consistently denied any such intention. Perhaps the real reason for the launch of the 130XE is that Atari intended to pre- empt the launch of the Commodore 128, a Commodore 64 compatible machine that also has extra memory but is priced much higher.

ATARI 130XE

£169.95 inc VAT 350 x 233 x 63mm

6502C running at 1.79 MHz

128 Kbytes of RAM, 24 Kbytes of ROM

40 x 24 text display, 320 x 192 pixels (high-resolution) with 256 colours available

Cartridge port, TV jack, composite

_ monitor socket, two joystick ports,

serial input/output port, expansion interface

Atari BASIC, LOGO, FORTH, PILOT

62 keys, including five pre- programmed function keys

The manual gives a full explanation of Atari BASIC, although the tone is still rather oversimplified. Explanation is given in the appendix of the interface configurations and how to ‘bank’ the other 64 Kbytes of RAM

“The 130XE has the advantage of

being able to trade on Atari’s traditional strengths, yet possesses an additional 64 Kbytes of RAM that can be used as a ‘silicon disk’ for fast storage and retrieval

- The computer does not solve

Atari's basic problem of lacking a large third-party software base. The fact that the 130XE is essentially a revamped version of a machine that has been around for some years may mean that it will not generate the interest in customers that the company needs

THE HOME COMPUTER ADVANCED COURSE 1311

~ SEARCHING

LOOKS

The flow of program control in PROLOG does not follow the familiar sequential pattern used in languages such as BASIC and PASCAL. We discuss PROLOG’S tree- like search procedure, highlighting the general steps between defining a program’s objective and achieving it.

- While languages like Basic and PASCAL have sequential flows of control, with control passing from statement to statement in strict top-to-bottom order (unless a loop or a GOTO interrupts it),

| the flow of control in proLoG takes the form of a depth-first search through the program clauses.

To understand this more fully, think of the program as a tree, with the goal (proposition) to be proved at the root and all the sub-goals as choice-points where the lower branches divide. There are many ways to search a tree like this but the method used by PROLOG is to take the leftmost branch and follow it down as deeply as possible. As it tries each branch, it marks its trail, and when it reaches the bottom and can go no further, it backs up to the nearest choice-point, taking the leftmost branch that it has not already taken, and carries on down from there. In this way, the system will eventually explore every path through the tree and thus will have tried every possible way of proving the topmost goal.

An exhaustive depth-first search is guaranteed to cover all paths, but could be a lengthy business. In fact, PROLOG manages to save itself some work. A PROLOG Clause Is, aS We Saw in Our

queue(X)

previous instalment, a rule which says that the head goal is true if all of the subgoals are true:

goal:— subgoal1,subgoal2,subgoal3. .. etc.

and so on. This is probably more easily understood if we write it as:

IF subgoal! is true AND subgoal2 is true AND subgoals is true AND etc.

THEN goal is true.

Because the subgoals are ANDed together, the whole clause will fail if any one of them cannot be proved. So PROLOG works through the subgoals from left to right and, if it fails to prove one, will stop at that point and not bother with the rest.

Backtracking can make programs behave in a way that makes the order in which the code is written almost irrelevant. However, the advantage is that the flow of control, instead of being a major concern as it is in BASIC, has only a minor importance, leaving you to concentrate on the logical structure of your problem.

The emphasis that PROLOG places on a ‘declarative’ statement of the problem does not mean that you cannot see your programs as behaving procedurally. The pRoLoc clause:

martian(X):— no. of limbs(X.7), no. of heads(X.2), can program in(X,cobol).

can be read declaratively as: ‘X is a martian if X has seven limbs, two heads and can program in CoBoL’. Its procedural reading would be: “To prove that X is a martian, first prove

1312 THE HOME COMPUTER ADVANCED COURSE

Question Time

This flow-diagram shows PROLOG in action, answering a simple query posed by the user. Note that the variable X is given two different values during

program execution, yet each

value is retained. This is

possible because PROLOG e treats variables as local to each

separate invocation of a clause

that it has seven limbs, then prove it has two heads, then prove it can program in COBOL’.

LISTS AND RECURSION

PROLOG 1s not as strongly ‘typed’ as most other languages. Nor is it fussy about the data types of arguments within its terms. So the term pred(Argument) could be used at different times with the variable Argument set to an integer, an ‘atom’ (such as marty, venusian, d24, and so on), or a list. However, PROLOG treats its data types in different ways, allowing, for instance, numbers to be arithmetically manipulated.

Anyone familiar with LoGo or LIsP will have come across the list data type before and the special ways that are used for manipulating lists. A PROLOG list is written enclosed in square brackets with the list elements separated by commas. So [apple, pear, banana] is a list of fruits, [a,f,e,g,1,X] 1s a list of letters and so on.

To get inside lists, PROLOG lets us take them apart one element at a time by removing the first element. The notation [Head | Tail] describes a list with the element Head and the rest of the list in the list Tail. Applying ‘I’ to our list of fruits will give us [apple | [pear,banana]]. As you can see, lists can have other lists as members. As a special case, if we take the list [280] with one element and break it up with |, we get [z80 | []]. The list in the tail is [], which represents the empty list.

PRo.oG allows recursion, which, in fact, is the normal style for a PROLOG program. A recursive definition is one that defines something in terms of

Lila

itself. In PROLOG, we might write:

queue([person)]). queue([person | X]):— queue(X).

When we have two or more clauses, as we have here, which have the same head, they are known as a procedure. The queue procedure has a clause defining a queue as a list having one element, person. It then has a second clause informing us that a queue could also be a list with the element person at the head and with a list called X as its tail. We then see from the right-hand side of this clause that X must itself be a queue.

If we give PROLOG a goal such as:

queue([person, person, person)]).

asking it to say whether the list

[person, person, person] is a queue, it first looks for a clause in its database to match our goal. The first one it will find is queue([person]). This does not match because the lists are not identical, so it will scan down to the next clause: queue([person | X]):— queue(X). This does not match either and it fills in the values of the variables like this:

queue([person | [person,person]]):— queue([person,person)).

To show that the head goal is true, it must show that the subgoal is true. So PROLOG takes queue([person,person]) as its goal and begins scanning down the clauses from the top to find a match. Again, queue([person]) does not match, but the second clause does, giving:

queue([person | [person]]):— queue([person]).

An important point to note here is that the variable X, which on the first run through was set to [person,person], has now been set to [person]. Yet the first value of X has been retained.

This is possible because variables are local to each separate invocation of a clause; thus every call to queue([person |

X]) can be thought of as using a separate

and unique variable. In PROLOG, there is no such thing as a global variable. Having matched the head of this goal, to prove it we need to prove the subgoal on the right of the :— symbol, which is queue([person]). Another scan of the clause-base is begun and this time a match is made with queue([person]), which succeeds straight away and means that queue([person, person]) (our previous goal) is now shown to be true. This in turn means that queue([person,

person,person)), the original goal, is true.

KEVIN JONES The queue procedure shows us a | | number of important things about PROLOG. For instance, the ordering of the clauses can be crucial. (Try placing the two clauses in the opposite order and see what happens when you try to prove a goal.) It also illustrates how giving extra clauses is the same as giving alternative ways of proving a goal, just as if we had used a logical OR between the clauses. This means that PROLOG does not need an OR operator although most implementations provide one.

KEVIN JONES

THE HOME COMPUTER ADVANCED COURSE 1313

The final instalments of our New World simulation game project are devoted to considering the Basic flavours that will allow the game to run on the Spectrum, the BBC and the Amstrad micros. This article focuses on Spectrum flavours and includes the first section of the complete common listing.

The program was written on the Commodore 64 but uses minimal Basic where possible. Problems in converting the program to run on the Spectrum lie in two main areas: first, the Spectrum will allow only single-letter variable names to be used with arrays or FOR... NEXT loop counters. We provide a conversion table here. Second, Spectrum string handling is unusual in that LEFTS, RIGHTS and MIDS are not available, although each has a Spectrum equivalent. Spectrum owners should refer to the flavours given with each module for these conversions. In addition occurrences of PRINT CHRS(147) should be replaced by CLS and lines that wait for keypresses of the form:

<line no> GET IS:IF IS=“” THEN <line no> should be replaced by:

<line no> LET IS=INKEYS:IF IS=“” THEN GO TO <line no>

In the next instalment we will give the second section of this full program listing.

1314 THE HOME COMPUTER ADVANCED COURSE

ae

Bisa | “Sasa

BOSUBS 248 FORT=17TUS

Ch i. tin & & mS it}

TFORS La =1THENS#="BOTTLE OF MEDICINE #":GOTO?735 S$="BOTTLES OF MEDICINE*" PRINTOARS 13: :GOSUB?1h6

GOSUBP2H8

IFOAS 2)=8THEN 736

TFOAC 2)=1THENS#="GUNe" :GO0TOr45

oJ oJ J ~J

ba IFCCS T =H T HENS a S50 PRIBITELC TD s 446 PRINTCECT2 : S62 IF CECT ISLTHENPRINT" "“:GOTO46S8 S64 PRINTS" 4438 GOSUB?2H NEXT 474 GOSUBS2H4a 475 PRINT: S¢="AHO THE FOLLOWING FROWISIONS:s":G08u Bia S56 GOSUBPSAA S85 FPORTS=i 7o4 S54 ITFRAtTI=s8 THEN 714 S75 PRINTPACT) :US¢T):"S OF ": FRR PRIPITRSCT 3 *HS GOSUBS2aG 71H NEXT f1S GOSUBS2H4u fe PRINT: S#="YOU HAVE ALSO GOT:#" :GOSUBS1 44a f25 GOSUB?2a8 YSh [TFOAC 1 =a8THEN?4a

aS B4

5

&

A

3

jm

St=" GUNS"

& PRINTORS 2); :G0SUB71 68 e GOSUB?2H8

é TFOARS S)=8THEN Sse

~]

TFOR*« 33=1THENS#t="BAG OF SALT#®":GOTO?SS S$="BAGS OF SALT®=" PRINTOAt 333 :GOSUB?1 48

GOSUBS 246

TFOAR! 4)=8@THEN? 7a

1 Som

of Oo ICN inion et hee Bb i to

hein eb oi Sm Opi eo on tt

=.

e TFOR¢ 4¢=17THENS#="BALE OF CLOTH*" :GOTOFS5 764 St="BALES OF CLOTH#"

fé5 PRINTOAC 4S) ;:GOSUBS1 668

#64 GOSUBS24H

f?@ TFOAtSI=8THEN? Se

?fS ITFOAtSI=1 THENS#="KNIFE®" :G0TO?F 75

ff4 St="KNIVESS"

??S PRINTOACS) ;:GOSUB?1 Aa

fe é GOSUBS2b8

#88 ITFOAt6)=6THEN? 74

PSS LFOARC 4)=1THENS#="JEWEL®" :GOTOFSsS

@S4 S¢=" JEWELS*"

°S5 PRINTOAC 69; :GOSUBS1 ab

786 GOSUBS2H4

°F GOSUBS 244

??2 PRINT:PRINT" YOU HAVE "“sh0O:" GOLD PIECES LEFT" @?6 GOSUBS2h48

??? St="PRESS ANY KEY TO START VOYAGES"

“78 GOSUBS1 48

2? GETIS:1F Il¢=""THENF SS

SHB WT=6 :REM ZEROISE WAGE TOTAL

S61 HE="N" :REM HALF RATION INDICATOR

S862 DIMHR( 4) :HROLI=1:HR¢ 2)=1:HR¢3)=1:HRi43=

Wk 1

GOUSUB4SHBH: REM CREW STATUS REPORT

GOSUB42@6:REM PROVISIONS REPORT

BOSUBS3H8:REM OTHER GOODS REPORT

GOSUBF 208 :PRINTCHRS: 1473

FRINT: PRINT :PRINT

S43 S8="IT 15 ESTIMATED THAT THE VOYAGES" :GUSUB?1lUa S44 PRINT"WILL TARE A FURTHER" :INT¢ JL-WkK+1): "WEEKS" B45 GOSUB? 26H

846 PRINT: S#=K#:GOSUB?S1 aa

S47 GETIS:1IFI¢=""THENS4?

854 GOSUBSHBH:REM CHECK WAGE BILL

855 GOSUBSi6H: REM ISSUE RATIONS

$66 GOSUBSShb

61 REM GO TO GENERATE RANDOM EVENTS

GOSUBSS8@:REM GOTO MAJOR CONTINGENCY

IFHR* S9=.5ANDRND¢1)¢. STHENPRINTCHRE( 147) :GOSUB

J =

ee

pica

REM ALBATROSS IF SHORT OF MEAT GOSUBZ 2H

GOSUB S36: REM ENOG-OF-WEEK REPORT WIKSLIK +1: 0FWK <= JLTHENS 25

REM ARRIVAL AT NEWWORLD

GOSUB1 Gb

GOSUBIaB Ta

GOSUBIaSHE

GOSUBIGSHEe

“J 7) oS

00 oO Oh Whee eA © co on on

“oo 0 oo 0 oo CO co oo a

“Oo ~O MO ~O

END

1@8@ PRINTCHR#(147):PRINT" STAGE 1 - HIRING CREW" 141@ PRINT" ----------------------

i@i2 PRINT

1815 GOSUBSza4

SIMULATION GAME/PROGRAMMING PROJECTS

PRINT: PRIWT"CRELD TrPES GUSILGABLE:" GOSUB? 2a

FPRICT

PRINT" TYPE DESCRIPTION WAGES PER WEEK" PRIWT"---- ----------- -—----—---—----—-—-— " FRIMT " SAILOR PRINT " DOCTOR PRITIT " MECHANIC PRItHT" HALT GATOR FPRICIT" Cook GOSUB? 2H

PRIWT PRINT :PRIWT St="ENTER CRE TYPE RPEQUIRED( 1-5) #" :GOSUB?1 46 li2e Sé#="CF “F° TO FINISH HIRING*" :GOSUBS1 ab: PRINT :INFPUTIS

1125 ElSURLt lS)

1i28 [FLEFT#¢ 1,1 .="F"THENPRINT:FRINT"“EMD OF CREM HIRE." :GOSUBS2h6:G0TO1 Siu

1138 IFCT?}0ANDCT<4THENI 156

liso PRINT PRINT

1146 PRINTI#¢;:S¢=" IS NOT A CREW TYPE®" :GOSUB?1 64H 1142 GOSUBS266

1145 S#t="FPLEASE ENTER AGAIN"

1146 GOSUBY146

li4? GOTO1 S66

1156 PRINT: PRINT

11355 CN=CN+1:REM CREW HIRED SO FAR

1156 TS*CN,12=AT:REM CREM TYPE

115” TS¢CCN,2)=196:REM STARTING STRENGTH

1158 WSLIT+WG0CT3 : REM TOTAL WAGES

115% COCCTISCOCCT3+1:REM CREW TYPE COUNT

i146 St="CREL SO FAR:"

1178 FORT=i1TU5S

LiS@ PRINIS#:Clito;" “Ceca;

1185 I[FCCCT) F1ORCCeTISe8THENFRINT"S" :GOTOLIS=

L188 PRINT? &

liss S¢=" .

live NEXT

11735 FRINT: PRINT"TOTAL WEEKLY WAGE BILL ";LIT

1266 TFCH=CM-1THENPRINT :S¢="0NLy ONE MORE CREWS" :6 OSUBFIBE :GOTOL2S5

1262 TFCN=CMTHENPRINT :S¢=" UBS1 ae :G0TO1L S16

Si MS mH

“Jo. Uf ts ba bl ni

Woo LA mm Hm em me LA ee

GOLD PCS" GOLD PCS" GOLD PCS"

ms he he Cy oS on on em

Peep Oh fe fo hae

Ss et Eom

Moe @ ow

SHIP WOW FULL! I" sG0s

l27o REM

1366 GOTO1L815

Tsl6 PRINT: S#=k¢:G0SUBS1G8:PRINT: GOSUBS 24 1326 GETI¢:1TFIS=""THENI S26

17? > RETURN

2606 PRINTCHRé( 147)

2618 S¢=" STAGE 2 - PROVISIONINGs"

2615 GOSUB?I OG

2620 S¢=" ----- ee a

2025 GOSUBS1aa

2636 GOSUBS200:PRINT

264@ PRINT"YOU’VE HIRED & CREW OF ";CN;"." 2645 GOSUB?2h6 :GOSUBS 2H

2656 FORT=17T04

2055 PRINT

2666 PRINT"EACH CREW MEMBER WILL NEED " ebfO PRINT RI LEAST “:PNNC TOs" 8 lect; 2675 IFPNCTI=1THENPRINT" “::GOTO2685

2686 PRINT"S":

2065 PRINT" OF ":Pec To

e2eUSe PRINT AT ;PC Clos" GOLD PES PER ( - User Ts

2676 PRINT"FOR EACH WEEK OF THE JOURNEY."

2475 GOUSUBS246:PRINT:GOSUBS 244

2106 PRINT HOW PANY “Uti lo: "S OF “sPecT >

2114 S$="D0 YOU WANT TO BUY#" :GOSUB?1 64

2120 PRINT

2138 INPUTIS

2146 PACTISVALC I$) :GOSUBS2H4

2156 ITFPACT) (CNSS*PNCT)9-1) THEN2268

2166 IFRPACTI=@THENPRINT"IF YOU DON’T BUY ANY" :GO0TO

2176 PRINT"IF YOU ONLY BUY "sPACT) sUS¢T): 2175 IFPACTI=1THENPRINT" OF" :GO0TO21 S68

21/76 PRINTS OF"

2186 PRINTPS(T):;"," :GOSUBS206

21748 PRINT"SOMEONE MIGHT GET ":

22648 St="HUNGRY"

2216 IFT=4THENS#="THIRSTY"

2226 PRINTS®;"!":GOSUBP2ha

2236 S¢= "DO YOU WANT TO TRY AGAIN" :GOSUBS14a6 22496 INPUTPS:P#=LEFTS¢P#, 1)

2242 [FPS<2"V"ANDPS<>"N" THEN2236

22935 [FP#="N"THEN24466

2250 PACTI=8:T=T-1:G0TO2416

2266 TFPACT)*®PCCT? >MOTHEN22 76

2269 GOTO2404

22/76 Sé="VYOU DON’T HAVE ENQUGH MONEY FOR": GOSUBS1@ 4 PRINTPACT 3

PRINTUS¢7T):"S OF ";P#c1T> :GOSUBS 286

S$="PLEASE TRY AGAIN®" :GOSUBS1H4:PACT)=8:T=T- s0TO249168

MOSMO-¢ PACT) #POCCT 32

PRINT :S#="PROVISIONS SO FAR: *" :GOSUB?1 a6 BOSUBS 244

FORTT=17T04

FRINTPACTTs sUBCTT) s

IFPACTT2=1THENPRINT" OF ":;:GOTO2446

PRINTS OF |;

FRINTPS<TT 2

BOSUBS SHE

mS

fo ha fal

Newer ee aos wo 1

Wm eS im oA RY

Pah ha bo po ho Bo Ro Bo Po oh po

BHEhHREBRLREE Es

THE HOME COMPUTER ADVANCED COURSE 1315

PROGRAMMING PROJECTS / SIMULATION GAME

2466 NEXT

2496 PRINT"MONEY LEFT = "iM0;" GOLD PIECES"

2485 GOSUBS200:GOSUB? 208

2490 MEXTT

2500 GOSUIIBSZG1:PRINT:S#="END OF PROVISIONING#":G05

UBS190:GOSUB92a6

S510 PRINT: S$=K$:GOSUB?1GG:PRINT: GOSUB?2a8

2520 GETI1$:/= =." 'THENS5ea

2999 RETURN

3008 PRINTCHRS(147): REM STAGE 3

3082 GOSUBS2a8

2985 PRINT" STAGE 2 - OTHER GooDS"

301@ PRINT" 9 ------- 0 we :

3028 GOSUBS200

3425 PRINT

S030 S$=<"THERE ARE OTHER THINGS THAT Mays" :G05UBFiaa S¢="BE USEFUL ON THE VOYAGE, FOR #":G0SUB7188 S$="EXAMPLE MEDICINE AND TRADING #";:GOSUBs1ia8 GOSUB? 286

Om cm tsa Uo be on ihe Sue on ee Amo om cnt

arm Se She mS we ee ce

MUN b bh ewww oo

ds hg

CA oS oe

s) Of mr CO St LA Ge CA

Jo 0) ta og CO oo 0 Oo Oo oo to od 0 to oo mo hdl go he oo ee ee el ee eC

4008 Agia «4a28 4025 4634 44035 4a4a 4045 4455 4068

4204 4205 4206 4z14

& PRINT "MONEY

St="THE

St="OU May ALSO NEED WEAPONS. =":GOSUBSiaa GOSUB? 286 :GOSUB? 204

FORT=1TO4

PRINT

PRINT" "s;O8¢T):

S$=" COSTS*" :GOSUB?104

PRINTOCST):

PRINT" GOLD PIECE"; IFOC<T?=1THENPRINT" ":GOTO269 PRINT"S"

GOSUBSZ00

S#t="WOULD YOU LIKE TO INPUTPS:PS=LEFTS¢P$,12

BUY (Y OR Noe" :GOSUBT1E&

TFPS<>"¥"ANDPS<>"N"THENS@ 75 LFP$="N"THENS1 75

GOSUBF2a0

Sé="HOW MANY DO YOU WANT*" :GOSUBF1a8 INPUTI#

TTSVAL (183 IFOC’T)*TT >MOTHENS1 58 GOTOS1 40

S$="YOU DON’T HAVE ENOUGH MONEY *" :GOSUB91 a6 GOSUBS 286

S$#="FLEASE ENTER AGAIN *" :GOSUB?1i 46 GOSUBS 248 :G0TO31 38

MO=MO-COCeC TTT?

OACTISTT

GOSUBF 204

PRINT

LEFT = ‘M0 GOSUBS264:NExXT T GOSUBS264:PRINT :FRINT

S$="END OF STAGE 3*" :GOSUB?1 66

GOSUBS 266 :PRINT S#=kt : GOSUBF1 AG GETI¢:1TFIé=""THENS246 RETURN

REM CREL STATUS REPORT PRINTCHRE( 1442

St$=—" CAPTAINS LOG*s" :GOSU Se" #" »G05 GOSUBS 246

PRINT"AT THE START OF WEEK" sWk

STATE OF THE CRED I15:*" :GOSUBS1 44 GOSUBS2ZHa:PRINT PRINT

FORT=17TO14 IFTStT.13=HTHENSI1& PRINTCS¢(TS¢T, 1333" LFTS¢T , 2)=-79?T HENS#=" DEAD IFTS(T, 23> 757THENS#="VERY HEALTHY?) #" :GOTO46?? IFTS¢t¢T , 2) +S58THENS#="HEALTHY)#" :GOTO4a 9? TFTS(T,2)>25THENS#="SICK ! jJ#" :G0TO48e? Sé$="WVERY SIEK ') ae”

GOSUBSI A: GOSUBS Zhu

NEXT

GOSUBS Zhe: PRINT

LJILJ=8

FORT=17T0OS

WhJslild+ § Ee To ele T a3

NEXT

St="WAGE BILL FOR THE WEEK#" :GOSUB?1 ab PRINTWL;"GOLD PIECES" GOSUBS Zu

WTSWIT +liu

St="TOTAL WAGES FOR VOYAGE PRINTHWT:"GOLG PIECES" GOSUB? 2H 4 PRINT "MOWEY LEFT = "“sM0;"GOLD FIECES" PRINT :S¢=K$:G0SUBS164 GETI#:IFIS=""THEN41 Fu

RETURH

REM FROVISIONS REFPURT

PRIMTCHRE! 1473 ;

FRINT"AT THE START OF WEEK" sk: GOSUBS 2h Sé="VOU HAWE THE FOLLOLIING*" :GOSUB?1 a6

S50 FAR: 2#" :GOSUBS186

1316 THE HOME COMPUTER ADVANCED COURSE

Sé="PROVISIONS LEFT: *" :GOSUBS148 PRINT : GOSUBY 264

FORT=17T04 TFPACTI=BORPACT 3=-?779T HENS 244 PRINTPACT) :US¢TI3:"S OF "SPECT? X=PACTIA¢CCNEPNCT 2?

PRINT" CENOLIGH FOR" ;INT¢xX);" WEEKS?" GOSUB? 268

MET

PRINT :St#=K% : GOSUBT1 46 GETIS:1TFLé=""THENG295

RETURM

REM OTHER GOODS REPORT PRINTCHRé*147)

H4 PRINT"AT THE START OF WEEK" ;WkK:GOSUB?2H8

Age OSUB 4394

i hd i ho pa CA i om CA om

238 3246 a are 3278

ig eo: 4 ut

S$="YOU ALSO HAVE:#" :GOSUB?1 46 PRINT : GOSUBS 2848 IFOAC 1 3=8THEN4 332

PRIMNTOAC13::S¢="BOTTLES OF MEDICINE®" :GOSUB?144

GOSUBS 264 TFOAt 2)=8THEN4342 PRINTOA( 2)::5¢="GUNS#" :GOSUBF1 a8

GOSUB?2HH [FORA S3=8THENS+ S52 PRINTOAC3)::5¢="BAGS OF SALT#" :GOSUB?1 a4

GOSUBS 248

IFO0G* 49=6THEN434é2 PRINTOAC 4d) ;:5¢="BALES GOSUBS2a4

TFOAC S>=6THENSS72 PRINTOA¢ 5) ::S¢="KNIVES#" :GOSUB?1 46 GOSUBS ZH

TFOAS 49=6THENS386

PRINTOAC 6) ::S¢="JEWELS#" :GOSUB?146 GOSUBS 264 :PRINT

PRINT" YOU HAVE" sMO::Sé=" 146

BOSUBS ZB

PRINT :S$=K% :GOSUB?I1 a GETI#:1FIS=""THEN4SSS RETURN

REM CHECK WAGE BILL

IFT SMOTHENS&@ 16

OF CLOTH" : G0SUB? 106

GOULD PIECES LEFI*® :G

» GOTOSars

PRINTCHRE(14 7)

PRINT : PRINT s PRINT

St="THE CRED! HAVE HEARD A RUMOUR®" :GOSUB?1 48 St="THAT YOU DON’T HAVE ENOUGH®":GOSUBS16a © St="GOLD TO PAY THEM AT THE END#®" :GOSUB?1 48 S$="CF THE VOYAGE.*" :GOSUB?1 646

GOSUB?2H6 :PRINT

St="THEY ARE GETTING ANGRY !!*" :GOSUBF1 an GOSUBS 208 :PRINT

S$="LET’S HOPE YOU MANAGE TO MAKES" :GOSUB?1H4 S$="4 TRADING PROFIT! #" :GUSUB?1 66

GOSUBF 268

PRINT: S#=K$:G0SUB? 108

GETI#:1FIS=""THENSaSe

RETURN

REM ISSUE RATIONS

PRINTCHRE<( 1472

ISSUING RATIONS#" :GOSUB?1466

Si ee ee ee ee *" :GOSUB?1&6 GUSUBS2H4 :PRINT "VEER" (WK: PRINT

H$= it pl by

FORT=17T04

HRT 3=1

IFPACT?) #@THENS1 58

PRINT"NO “:Pecio;" LEPI! |!" -GUSUBy eee

S$="THE CRE) 1S GETTING WEAKER !!#" :GOSUBS166 WF=16:GOSUB?7 3468

* GOTOS2SH

REC PN(T2#CNo JL-WkK+ 12 IFRPACT? <ATHENS 268 GOTOS276 FRINT " RUNNING GOSUBR? 246 St="00 YOU WANT TO PUT THE CREW ON®" :GOSLE?1é PRINT" HALF RATIOWMS OF "PST?

INPUTIS: 1S=LEFTS¢(1%,1>?

IFI $<" "AND 2 "MN" THENS226

IFI¢="H" THENS276 HROTI=.5:Ht="¥" WF=S:GOUSUB?3H8 S#="THE CRE 15 M=PHCT) #HRtT 2 #CN IFX?PACTOTHEMH=PAtT 9

PACT I=PAtT )—x IFPACTI=8THENPALT I S-P FP PRINT RtUS¢13:'S OF sPe los! PRINT :GOSUBS 208 :MEXT

PRINT :S$=K : GO0SUB71 64 GETI#:1Flé=""THEMS293 RETURN

SHORT OF “iPS 7D

SETTING WEAKER! *" :GOSUB?1 a6

ISSUED"

oO ny

ss

Deer

pacRy

IAN McKINNELL

CHANNELS

OF THOUGHT

sara

We continue our series on the Spectrum’s operating system with a look at how the channels through which the micro sends

2 data to the screen and ZX printer are

4 handling different aspects of the displa

selected and controlled. Our discussion takes in the use of system variables in

i

Bota

On the Sinclair Spectrum the usual means of input is the keyboard and the usual outputs are either a television screen or a ZX printer. In the Spectrum system, each of these hardware items is called an input or output channel. The screen, for example, is referred to as an output channel. The actual data flowing to or from the computer, in the form of characters to the screen and information from the keyboard, is called a stream. A data stream is capable of being directed into different hardware channels, assuming that the channel hardware is capable of handling the stream in the correct fashion.

We'll be taking a closer look at streams and channels in our next instalment. In the meantime, we'll begin our examination of the Spectrum I/O system with a look at the ‘output a character’ routine, which can be found at address &0010. ‘The character sent to this routine is forwarded to the screen or printer, depending upon which channel has been previously selected. Our diagram shows

CHANNEL K Spectrum

the various channels on an unexpanded Spectrum and the stream numbers that are associated with them. Channels are named with a single letter, and streams are described by a number. In the unexpanded Spectrum only streams 0 to 3 are active. The Spectrum OS allocates streams to channels as shown in the table in the margin.

Thus, when we want to output a character to a particular device we must first tell the Spectrum OS which stream we want it to be in. To write to the screen, we would select stream 2, as this is the one associated with channel S, and to do this we use a ROM routine at address &1601 to tell the OS which. stream we want to select. The stream number is placed in the A register, before calling the routine, which then opens up the hardware channel currently associated with that stream number. For example, to open channel S for output, we execute the following instructions:

LD A,2 CALL &1601

Once a channel is open, sending a character to it is simply a matter of putting the character’s code into the A register and then executing an RST instruction to call the routine at address &0010. This is similar in some respects to the OSWRCH

call on the BBC Micro, with the exception that we call an address in the ROM directly rather than via a vector. Channel S operates over the area of the

Channel Crossings

S Upper part of display

K Used for output to lower part of display (used by BASIC for input and error messages) and input from keyboard

P Printer

Using the Spectrum, data can be transferred to and from peripherals in ‘streams’ directed via (or ‘associated with’) different channels. On power-up, channels K, S and P are associated with streams (0 and 1), 2 and 3 respectively. Thus, PRINT #2 (i.e. to stream 2 the screen) is the equivalent of the normal PRINT command. For example, PRINT #2; “This message will be printed on the screen”

CHANNELP ZX Printer

KEVIN JONES

THE HOME COMPUTER ADVANCED COURSE 1317

screen that is accessible via the normal Basic PRINT statements. However, it is also possible to access the lower two lines of the screen that are normally used by the BAsic interpreter for the output of error messages and prompts. As can be seen from the diagram, these lines form part of channel K.

To send a character to these lines, we simply open channel K using:

Ber wee CALL &1601

Similarly, the printer channel can be opened by loading the A register with 3.

As well as standard characters, we can send control characters to any channel. Clearly, the effect that these control characters have will depend upon the channel in use, but it does mean that we can do the machine code equivalents of PRINT AT, PRINT INK, PRINT PAPER and so on. The following table shows some useful control codes and their functions when passed to channel S or K. Obviously, some will have no effect if sent to the ZX Printer (via channel P).

The extra bytes requested by some control codes are the parameters that would normally follow them in a BASIC statement. For example, to execute _aPAPER 3 command, wed simply send the bytes 17 and 3 to channel S. The following segment of a program shows the machine code equivalent of PRINT AT 10,10;“A”.

SE62 18 ld a,2 CDe@116 28 call #1661 SE146 38 ld a,22 D7 46 rst #18 3E6A 36 ld a, 18 D? 56 rst #16 3E6A 78 ld a, 1@ D7 86 rst #18 3E4 1 96 ld a,65 D7 168 rst #16 Cc? 118 ret

Not too difficult, is it? One notable exception in the list of control codes is the absence of a code for CLS. To clear the screen, we must call another ROM routine at address &06DB. It is essential that channel S is open before we call it, and it’s also necessary to re-open channel S after we've used it

1318 THE HOME COMPUTER ADVANCED COURSE

SEB2 CDe116 CDDBG 4 3E82 CDO116 C9

;open channel S by ;selecting stream 2 stoken for AT

soutput a char routine sy co-ordinate

3x co-ordinate

;ASCII] code for “A’

if we want to print anything else to the screen. ‘This routine will clear the screen:

Id a,2 call #1661 ;open channel § call #@édb ;clear the screen ld a,2 call #1661 sre-open channel §S ret

A useful attribute of the ‘output a character’

routine on a standard Spectrum is that numbers passed to it that represent Basic keywords are expanded by the routine and printed in full. Thus:

LD A,249 RST &10

will assuming channel S, P or K has been selected print the keyword RANDOMISE to the screen.

Graphic commands, such as PAPER, INK and BRIGHT, issued via the ‘output a character’ routine are operative only over that sequence of output characters they are said to be temporary colour items. The PAPER n command, if issued outside of a PRINT statement, is a permanent command, and it remains operative until another PAPER command is issued.

The two system variables of interest are called ATTR-P and MASK-P. The diagram above shows how these system variables control different aspects of the display. In ATTR-P, the three bits that control PAPER and INK colour on a permanent basis are given the values shown at the top of the next column. If the bit for FLASH or BRIGHT is set to one, then that feature is operational. ATTR-P is at address 23693.

MASK-P is at address 23694 and any bit set to one in this byte will ensure that attributes on the screen at the relevant print position are not altered by the contents of ATTR-P. A further useful system variable is called PFLAG, and this is found at address 23697. This variable is also shown in the

diagram. I INK 9, INVERSE and OVER.

There are two other system variables ATTR-T and MASK-T at addresses 23695 and 23696, respectively. These are arranged in a similar way to ATTR-P and MASK-P, but control the temporary colours (those in use in PRINT statements or those set up by sending control codes through the RTS &10 routine).

Using ATTR-P and MASK-P to set up colours is quite easy; we simply manipulate the contents of the system variables, altering only those bits that we need to. This is easily done using the Z80’s AND and OR logical instructions. So, to execute a permanent PAPER 1:INK 3 command, we would set ATTR-P up to: |

PAPER 1 INK 3 using this piece of code: LD Aj LD (23693) ,A RET

Of course, as with BAsIc permanent PAPER and INK commands, the new colours will not affect what’s been printed before and the screen will not go to the new PAPER colour until a CLS command, or its equivalent, has been executed.

The graphics routines on the Spectrum are part of the BASIc interpreter program. We will now take a look at the PLOT and DRAW operations. When using these routines it is easy to bring about colour changes by altering the ATTR-P and MASK-P variables as we have already described here.

The routines themselves are easy to use. The first of these, PLOT, is called at address &22E5. Its co-ordinates are passed to it in the BC register pair, (B holding the y co-ordinate and C the x co- ordinate). Thus, to execute the PLOT 100,100 command from a machine code program wed simply execute these instructions:

LD B00 —_;y co-ordinate LD C00 _;x co-ordinate CALL &22E5 ;doit

RET

Colour changes are easily performed; the following routine plots a red dot on the screen, and then restores ATTR-P to its previous state before returning to BASIC.

3A845C FEFF 28F9 3AB85C ce

Id a, (23693) 3get ATTR-P in A reg

push af sand save on stack

and 248 sclear low 3 bits to 8

or 2 ;set bit 1 to give red ink id b, 166 sy co-ordinate

Id c,166 3x co-ordinate

call #22e5 3cal) PLOT

pop af srestore original

Id (23693) ,a sATTR-P contents

ret

1@ ; GET- 28 Key: 36

46

38

68

So far we’ve concentrated on channel S. What about channel K, which also has output facilities? We can write to the lower part of the screen if we want to, but what we put there will be overwritten when the operating system or interpreter generates a message. For input using this channel, we don’t even need to call a ROM routine! The keyboard is scanned once every 20 microseconds and some system variables are affected, depending on whether a key is being pressed or not. Two of particular use are LAST-K (at address 23560), which holds the character code of the last key pressed, and a system variable at 23556, which holds the value 255 if a Key is notbeing pressed at that point in time. The routine here can thus be used to wait until a key is pressed and then return the character code in the A register. It simply checks the contents of address 23556 until it~ doesn’t equal 255. The value in LAST-K will then be that of the key being pressed. |

CHAR routine

ld a, (23556) ;check to see if

cp 255 ;Key is being pressed | ir z,kKey sKeep checking

Id a,2356@) sqet LAST-K in Aa

ret

Before leaving the keyboard, let’s look at a couple of system variables that can be useful.

The other channel on an unexpanded Spectrum that is of use to us is channel P, which is used by the ZX Printer. This usually has stream 3 associated with it. Thus:

LD A,3 CALL = &1601

will open channel P and subsequent characters will be printed on the ZX Printer if connected. It should be clear that BAsic makes wide use of the various channels: PRINT and LIST use channel S, LPRINT and LLIST use channel P and INPUT uses channel K. We can also add our own channels to the three we've discussed here, so that we can easily access additional devices such as Microdrives, different printers and other items of hardware. We'll look at this in more detail in the next instalment.

THE HOME COMPUTER ADVANCED COURSE 1319

Players In The Drama

We show here three of the characters that the player controls in Shadowfire in

different situations. On the left,

Torik is in movement mode with the possible directions he can

You have just 100 minutes to rescue an ambassador who, with vital plans, is being held captive aboard a starship. At your disposal is a team of six individuals with various skills... A familiar scenario, perhaps, but cursor control by means of icon selection adds an exciting new dimension to Beyond Software’s Shadowfire.

GHANA

Even the most casual observer will have noticed that computer games are becoming more sophisticated. Instead of slavishly reproducing arcade-style games or being content with text-only

adventure games borrowed from the dungeons

and dragons format, designers of home computer games are developing a style of their own. These games combine many of the features of the arcade and strategy formats to produce an entertainment which lasts considerably longer than the five minutes or so of the arcade action and is more demanding than even the brain-bending puzzles provided by the adventure.

The scenario of Shadowfire is that the renegade General Zoff has captured Ambassador Kryxix, who has the plans for a new type of spaceship called Shadowfire. You, the player, are charged with rescuing the ambassador before he is forced into revealing the plans, and you have 100 minutes to accomplish your task. To assist you in the rescue, you have at your disposal six characters, each with different strengths and weaknesses.

To get aboard Zoff’s spaceship, your team must be ‘teleported’ down. The only member who can organise this is the drone Manto, so he must be sent down first to lay the teleport beam for the others to follow. However, before you dispatch them, it is advisable to arm each of the characters according to their strengths and weaknesses from the weapons available.

Shadowfire uses a unique system of moving characters, allowing them to pick up objects and to fight. Unlike other adventure-type programs that require the user to type in commands such as “Go North’ or ‘Pick up laser’, this game enables all functions to be performed by means of icons and a moving cursor somewhat like the operating system used on the Apple Macintosh. To equip the

1320 THE HOME COMPUTER ADVANCED COURSE

team leader, Zark, with hand grenades, for example, you first select the Zark icon. Once this is chosen, the screen changes to a pictorial display of his strength, stamina and other attributes. On the right-hand side of the screen are three ‘monitor’ icons representing movement, battle mode and the objects screen.

By selecting the objects screen with the cursor (which can be moved from the keyboard, joystick or light-pen), the screen changes again to display the objects that are in the same vicinity as the character as well as a number of ‘activity’ icons. By choosing the ‘pick up’ icon and then moving the cursor to the grenades icon, Zark will be equipped with grenades.

Once armed and teleported down to the spaceship, the team can begin the search for General Zoff and Ambassador Kryxix. The spaceship consists of a number of rooms and corridors, some of which contain weapons or keys to enable you to open locked doors, while others conceal enemy guards who must be destroyed before you can proceed. If you lack the appropriate key you can call upon the services of Sevrina, who can pick locks.

To make the best possible use of the 100 minutes available you should develop a strategy. Some characters are better in some situations than others and so it is advisable to have the right person in the right place at the right time.

What makes Shadowfire such an interesting game is the cursor control. The player is able to react to situations with the icon selection process much faster than he would if each command had to be typed in separately. Nevertheless, merely having fast reflexes will not allow you to complete the mission. Strategy and the ability to make quick decisions is also vital to a successful conclusion.

He Hey

iy

Be