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 3° 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) 2° (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" "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
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 E¢ 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