Skip to main content

Full text of "Syntax Magazine"

See other formats


- SOLVE 12 CLUES LIKE THIS! -* 

Where it all began. Where the torch was first lit. 
Where muscles and sinews strain. Where our heros 
win acclaim. Where the symbols hold the key. 


KRAKIT” consists of 12 clues on a ready-to-run ZX81 or TS1000 
cassette tape (16k RAM). The answer to each clue is the name of a 
country, a city or town, and a number. If you are the first qualified 
entrant to solve all 12 clues and declared the winner, you receive two 
tickets to the city of the secret KRAKIT" vault location. When you arrive 
at that location, a check for a minimum amount of $20,000.00 (U.S.) will 
be presented to you. The amount of the prize money is augmented weekly 

TS1000-ZX81 


Mail to: 

INTERNATIONAL PUBLISHING & SOFTWARE INC 
P O ROT BUFFALO, N.Y. 14216 


'>€»* 


SYNTAX QUARTERLY/SPRING 1983 



















A PUBLICATION OF 

THE HARVARD GROUP 




SYNTAX QUARTERLY 

Serving The Timex-Sinclair Family of Personal Computers 


Spring 1983 


Vol. 2, No. 1 


Contents 


SQ Staff 


Publisher 

Kirtland H. Olson, P.E. 

Editor 

Ann L. Zevnik 

Assistant Editor 

Pamela Petrakos-Wilson 

Technical Consultant 

Eric K. Olson 

Editorial Assistants 

Pamela K. Vinal 
Karen Brody 

Production 

CSA Press 

Circulation 

Susan C. Shippen 
Constance Saarinen 
Timothy Parker 

Financial Manager 

Mary Russo 

Designer 

RDS Designs 

Cover Photography 

James Rue Design 


Syncwars—An Invasion 14 

The invasion of Computerburg. by Fred Nachbaur 

Geography Review—U.S. States Quiz 19 

A review of U.S. geography, by Steven Walley 

POKEing Directly to the Display File 22 

Use less memory, speed up graphics, by Dan Platt 

Simultaneous Linear Equations and 
Matrix Inversion 24 

Solve equations and invert matrices with this 
program—a delight for amateur mathematicians, 
by R.A. Woodall 

ZX/ TS Home Budget 26 

Home finances on your personal computer, 
by Michael Roberts 

Getting Your Head Straight 3 0 

Align the heads on your recorder, by John Andrews 

Make-It-Yourself Quiz Program 34 

Choose your format, tailor questions and answers, 
by Dale F. Lipinski 

Build Your Own EPROM Programmer 
and Centronics Printer Interface— 

Part II 38 


Build 2 EPROM read boards and a 2-way Centronics compatible 
parallel printer port with step-by-step instructions, 
by John Oliger 

Operation Codes of the 8080, 8085 

and Z80 Processors 46 

A complete reference to the op-code mnemonics 
of 8080, 8085 and Z80 microprocessors, 
by D Martin Flarrell 


Departments 


4 


s'BASIC 

8 

Reviews 

54 

Reviews 

57 

ws 

61 


64 


SYNTAX QUARTERLY/SPRING 1983 








This Could be Your Chance 
for Fame and Fortune 

(or at least fame) 

Would you like to see your name in programming tip, explain the func- 
print? SQ and SYNTAX newsletter tion of the machine or a command, or 
are looking for authors. If you have a describe a hardware project. If you 
program or article you d like to share present ideas on programming, it 
with other ZX/TS owners, send it helps to include short sample routines 
a * on 9- demonstrating your ideas. If your 

Our requirements are simple: all article discusses hardware, please in- 
we ask is that your program run with elude sketches, schematics, or even 
no bugs and your article present ac- photos to help readers follow along, 
curate information. For both programs and articles, 

However, here are a few more de- type your submission or print clearly' 
tails that enhance your chances of preferably double-spaced. Put your 
being published: name, address and day-time phone 

PROGRAMS: Any program for a number on the first page. If you want 
fun or useful purpose is a candidate us to return your material to you, 
for SYNTAX or SQ. We publish include a self-addressed stamped 
game, business, educational, utility envelope. 

and science/math programs. Please You can submit to either SYNTAX 
send programs on cassette, particu- newsletter or SQ magazine. Gener- 
larly if they’re long. We print ally, programs and articles in SQ tend 
programs directly from a Sinclair to be longer and more involved than 
printer to minimize errors. If you send those in SYNTAX because of space 
your program on cassette, it will ap- considerations. Which publication 
pear exactly as you entered it. A your submission ultimately appears in 
hard, or paper, copy helps us figure is up to the editors, 
out any problems that may arise. Also What’s in it for you? Aside from the 
include as much documentation as fame and glory of appearing in 
you can, including a list of variables SYNTAX or SQ, you’ll receive a 
used and their functions. Write com- check from us dependent on the 
plete instructions for using your length of the published material. We 
program so the most inexperienced pay 7 cents for each 6 characters, in¬ 
user could not mess it up. Sample eluding spaces and punctuation. This 
output also helps, especially if your payment buys us the nonexclusive 
program generates charts, graphs, or right to use your material. We can use 
numerical tables. Make your program it and so can you, so you can sell it 
as user-friendly as possible within the again to anyone you like. Programs 
limitations of available memory. Indi- receive a token $2 payment each, 
cate how much memory your pro- Not enough to retire on, but often 
gram requires. And include the Syn- enough to pay for your subscription, 
tactic Sum of the program as listed. So dig through your notes and files 
For a copy of the Syntactic Sum pro- and send off anything you think may 
gram, contact SYNTAX (address help other users use their computers 
following). better. Address submissions to: 

ARTICLES: Articles can cover vir¬ 
tually any topic related to ZX/TS Editor 

computers and their applications. SYNTAX/SQ 

Our readers run the gamut from ex- Rd 2, Box 457 

pert to novice, so we are looking for Harvard, MA 01451 

articles written at all levels of com- USA 

plexity. Your article can present a 


$ 5.95 

8%" x 11” credit-card-type-plastic 
MICRO CHARTS are fact-packed 
microprocessor summary cards ... 
that save you time and effort with 
instant access to the data you need. 



Thousands of delighted users have made 
the switch from black & white, 
incomplete, folded-up, paper summaries 
with scrambled data ... to unscrambled, 
comprehensive, ready-to-use MICRO 
CHARTS. 



Two sided colorful MICRO CHARTS are 
ideal for professionals, hobbiests, and 
students alike. Countless reorders and 
repeated praise confirm the benefit of 
these inexpensive, improved programming, 
debugging and learning aids. 

Buy one. Or the whole set. You’ll never 
switch back. We guarantee it. And you’ll 
soon see that lifetime MICRO CHARTS 
are worth much more ... than the cost of a 
couple of hamburgers! Order now. 


Syntax ZX80 Inc. (617) 456-3661, Dept. 
1» RD 2, Box 457, Harvard, MA 01451 
YES, please rush the MICRO CHARTS 
indicated below at just $5.95 each. Unless 
I am 100% pleased in 14 days, a prompt full 
refund will be made. 


Quan. 

Chart Title 

Total Quan 


Z80 CPU 



6502 (65XX) 

Sub Total 


8080A & 8085A 

$ 


8048 & RELATIVES 

Pstg & Hndg 


ALGORITHMS 

$1.00 

□ Save $5.80! Select any 5 for 
only $24.95 postpaid (10 at 

Total 

Enclosed 


$49.90 etc.). Same 100% * 

money back guarantee. 


YOUR NAME 

COMPANY 

ADDRESS ~ 

city state ziF 


SYNTAX QUARTERLY/SPRING 1983 


■> 








SHIM 


SQ-ups—Winter 82 


Getting Information into Your Computer by Jim Conrad 
On p. 6, column 2, line 10 of the first example program 
should read: 

10 LET B= 17 

In the table on p. 8, under “Example” the third entry 
should read Reserved Words (TO, RUN, TAN). 

On p. 9, column 2, line 10 should read: 

10 PRINT “first message” 

Improved Super Monzxer Game by Robert Calhoon 
Line 240 should read: 

240 PLOT 23,21 

The last word in line 1700 is correctly spelled MONZXER. 
We apologize for incorrectly spelling Mr. Calhoon’s 
name. 

Syntactic Sum with Variables by Donald J. Beck 
In the assembly listing on pp. 18-19, all appearances of 
the number 16346 should read 16396 and all ap¬ 
pearances of the number 16347 should read 16397. The 
instances occur at addresses: 

32720 (mnenonic and comment) 

32721 (comment) 

32722 (comment) 

32723 (comment) 

The code at address 32743 should be 229. 

Machine Code Programs —Where and How to Load 
Them by William Wentz 

On page 21, first paragraph under Variables Storage 
Area, the last sentence should read: For ease in placing 
the MC into the string and locating the USR address, put 
the LET statement containing the MC first in the pro¬ 
gram, so it will be the first variable in storage. 

ZX/TS Directory Program by David R. Rowland 
The variables in line 1, 2, and 3 should all be dimen¬ 
sioned to (90,31), not (1,31) to allow all 90 entries. See 
reprinted listing following. 

Keyboard Conversions by David M. Straub 
In Figure 1, p. 27, every key should have two black dots 
indicating pins. Those in the upper right corner are miss¬ 
ing one dot. 

Using Extra Keys on Big Keyboard —A Simpler Ap¬ 
proach by David Ornstein 

Please note that the anode of D3 indicated on the 
schematic is for a ZX80. On a ZX81 or TS1000, that 
diode is D6. 


Build Your Own EPROM Programmer and Centronics 
Printer Interface by John Oliger 

Except when referring to ROM installation inside the 
ZX/TS, Dn always means Dn’ (which appears at the 
edge connector) in parts I and II of this article. Dn means 
data line n. 

Program Clarification 

Parts of programs in SQ Winter 82 did not print as clearly 
as we would like. Here are portions of those listings 
reprinted for easier reading. 


A Program to Index Articles 

1© DIM 

20 DIM B$(400,24) 

30 DIM C$C400,5) 

30 PRINT RT 3,3; “5YNTRX INDEX* 1 
12© PRINT RT 9,1©;" 1 . RPPEND" 

13© PRINT RT 10,10; '*2. LIST" 

14-© PRU5E 50000 

15© POKE 154-37,255 

150 IF INKE*y$ = "l" OR INKEY$="A" 
THEN GOTO 1000 


220 INPUT K 

230 IF K <1 OR K >6 THEN GOTO 220 

22© GOTO K*5©+25© 

250 SCROLL 

250 PRINT ** «";C$(I); ,, -";B$(I) 
255 SCROLL 

27© PRINT " “UOL/ISSUE/ PRGE ";R 

; "/“i 5; C 

272 SCROLL 
275 PROSE 90 

230 IF INKEY$="P" THEN PRUSE 50 
000 

235 POKE 154-37,255 

29© RETURN 

30© FOR 1 = 1 TO 4-00 

305 LET R=INT C(CODE R$(I)-1)/I 
2 ) 

31© LET B=CQDE R$<I*-R*I2 
315 LET C=CODE R$ l 1+4-00) 

32© GO-SUB 250 
325 NEXT I 


Improved Super Monzxer 
The words in reverse video are: 

2030 HURRAY HURRAY 


14-20 PRINT "THERE IS R SPIDER IN 
YOUR ROOM AND HE IS HUNGRY" 
14-23 PRINT RT 9.10; " K 


14-24- PRINT RT 


1©,9; "i 


14-25 PRINT RT 11,9; "1 


14-27 PRINT RT I2,I7;"IL IL IL" 
14-28 PRINT RT 14-,7; "YUM YUM ERTE 
M UP" 

14-29 PRUSE 100 
14-3© FOR 1=1 TO 10 

14-4-0 IF YR=P(I) THEN GOTO 14-70 
14-5© NEXT I 
14-50 GOTO 154-0 

14-70 IF YL=5 THEN GOTO 1520 


Continued Next Page 


4 


SYNTAX QUARTERLY/SPRING 1983 





148© CLS 

1490 PRINT "T5K, T SK, YOU PELL I 

15©0 LET YR=YR+20 

X505 XP YL>=2 THEN GOTO 154-0 


303© 

304-0 

3050 

3G6G 

3070 

SET 3 * 

3030 

3000 

3100 

3110 

3120 

3130 

314-0 

315© 

3160 

3165 

3170 

350© 

3510 


3520 


3530 

■/" 

3S4-© 

354-2 

354-4- 

354-6 

3550 

3560 


LET K$=INKEY$ 

XP K$="Y" THEN GOTO 3070 

IP K$="N" THEN GOTO 313© 

GOTO 3020 

PRINT RT 10,6;“SAME TUNNEL 

PAUSE 900 
LET K$=INKEY$ 

XP K$="Y" THEN GOTO 525 

IP K$="N" THEN GOTO 300 

GOTO 3060 
CLS 

PRINT RT 10,20;"HAR HRR" 
PRINT RT 12,18;"YOU LOSE" 
LET END=1 
FAST 
GOTO 70 

PRINT RT 10,9;"T T TT TT" 

print rt 11 , 8 ; " tHHIHHHHHMHI 

r 

print rt 12 , 5 ; ■■ > >= = =BBHHHi 
Print rt TSSM 

print rt 14 -, 12 ; 

PRINT RT 0,20; *‘7 
PRINT RT 7,24;"?" 

PRINT RT 5,27;"?" 

PRINT RT 16,22;"YA GOT HE" 
RETURN 


10 REM ®_N 7?E«RND GOSUB ???»T 
GuSUB ??RND GOSUB 7 POR ; GOSUB 
§ GOSUB ??RNDEiRND GOSUB PI6,RN 
DE "RND GOSUB PIS “RND GOSUB ?T GC 
SUB PI RRND TRN 
2© LET H$ = " 

4-0 LET L =LEN H$^3 
5© LET M=L 

6© IP L <20 THEN LET M=20 
70 POKE 16507,M 

8© PRINT USR 16514-;" BYTES SAU 
EL>" 

O0 LET N=PEEK 16388+256+PEEK 1 
6380 

100 PRINT "RECORD USR RDDRESS " 

' lie POR X =3 TO L*3 STEP 3 
120 POKE N,16*CQDE H$(X-2)+CODE 
H$ (X -1) -4-76 
130 LET N=N + 1 
140 NEXT X 

150 PRINT " HRCHINE CODE LORDED 


SYNTACTIC SUH: 


£304-4- , 8K ROM 


ZX/TS Director y Program 
The words in reverse video are: 

62 EVER AGAIN 

196 MEMORY FULL 

197 CONT 

455 NONE FOUND 
457 CONT 
490 CONT 

915 the Y in DIRECTORY 


MC Programs —Where and How to Load Them 


10 REM 
20 LET 
40 LET 
5© LET 
6307-2 
6© POR 
7© POKE 
80 POKE 
15 

O0 RRND 
100 POKE 
CODE H$(I 
110 NEXT 
120 POKE 
130 POKE 
20© REM 
SYNTACTIC 


12EI.RNDLN I^TAN 

N=LEN"h$/3 

D=PEEK 16306 +256 fPEEK 1 
1=1 TO N 

16515,INT C(D + I)/2563 
lt>514 , D + 1—256 fPEEK 165 

USR 16516 

D + I, 16fCODE H$ * 1*3-2> + 
*3-1)-476 
I 

D — 1,INT C (N+2) /256) 

D-2,N +2-256 +PEEK (D-1) 

SUM: 20307, SK ROM 


10 REM 
2© LET 
40 LET 
5© LET 
6307-2 
60 POR 
70 POKE 
80 POKE 

15 

O© RRND 
100 POKE 
4-1) 

110 NEXT 
12© POKE 
130 POKE 
200 REH 
SYNTACTIC 


12El^NDLN SafcTRN 
D$=" 

N=LEN D$/3 

D=PEEK 16306+256+PEEK 1 
1=1 TO N 

16515, INT ( (D + I) /256) 
16514,D+I—256+PEEK 165 

USR 16516 

D+I,URL D$(1*4-3 TO I* 


D-l,INT C(N+2)/256) 

D-2,N +2-256 *PEEK (D-1) 

SUM: 10287, SK ROM 


1 DIM N$(00.31) 

2 DIM S$(90,31) 

3 DIM T$(90,31) 

6 REM STRRT PROGRRM WITH "GO 
TO 16"AFTER INITIAL RUN 

O LET D=0 

10 PRINT RT 0,12;"HELLO";RT 2, 
l;"ENTER CODE POR UHAT IS WANTED 

11 PRINT RT 4,0;"1. ENTER MOR 
E NAMES” 

12 PRINT "2- CHRNGE SELECTED 

NRME OR OTHER DATR" 

^13 PRINT "3. CHECK RLL ENTRIE 

14 PRINT "4. LIST RLL NAMES B 

EGINNING"," WITH R LETTER" 

^ if PRINT "5. LIST RLL NRMES I 
N STATE" 

16 PRINT "6. LIST RLL NRMES N 

OT IN STATE" / 

17 PRINT "7. LIST RLL NRMES & 
Y ZIP CODE" 

18 PRINT "8. LIST RLL CODED N 
AMES" 

IO PRINT "O. SRUE REUISED DIR 
ECTORY" 


16© INPUT U$ 

165 CLS 

170 IP U$="Y" THEN GOSUB 75© 
X^S^PRINT RT ©,©;L,,N$(L),S$(L) 

175 PRINT "RLL CORRECT? Y OR N 

* 178 INPUT U$ 

180 IP U$<>"N" THEN GOTO 184 

181 LET R=1 

182 GOSUB 330 

183 LET R=© 


Continued Next Page 


SYNTAX QUARTERLY/SPRING 1983 












134- Cl_S 

135 PRINT RT 6,0;"ANY MORE NRME 

ST V OR N." 

187 INPUT U$ 

100 CI_S 

102 XF U$<>"Y" THEN RETURN 

105 NEXT L. 


34-0 INPUT Q 

350 XF Q=1 THEN INPUT N$(L) 

355 XF 0=2 THEN INPUT S$CL, TO 

10 ) 

360 XF 0=3 THEN INPUT T$ CL , TO 

10 ) 

365 XF 0=4- THEN INPUT T$(L.23 T 

O 25) 

378 XF 0=5 THEN INPUT T$iL.27 T 

O 31) 

375 XF 0=6 THEN INPUT S$U_.2© T 

O ) 

330 IF 0=7 THEN GOSUB 750 

335 IF 0=3 THEN GOTO 35 
333 IF 0=0 THEN GOSUB 660 

330 CL5 
305 GOTO 305 

4-00 PRINT RT 4-,©; -'ENTER LETTER f 
S) OR NRME TO BE”."LOCRTED" 

4-©5 LET 0=0 
4-10 INPUT 
4-20 CLS 

4-3© FOR L = 1 TO D 

4-4-© IF U$=N$CL, TO LEN U$) THEN 
GOSUB 4-65 
4-50 NEXT L 

4-55 IF 0=0 THEN PRINT RT 7.10; " 


4-57 PRINT RT 20.8; "PRESS " 

TO REGRIN MENU- 
4-60 STOP 
4-62 RETURN 

4-65 PRINT L, ,N$(L) ,S$CL) ,T$(L) , 
'478 LET 0=0+1 

4-30 IF INT C0/4-) =0/4- THEN GOTO 
4-9© 

4-85 RETURN 

4-0© PRINT RT 20,0; -PRESS - 
-- TO RESUME LISTING" 

4-02 STOP 
4-05 RETURN 
4-07 GOTO 4-5© 

50© PRINT RT 5,©;"ENTER TUO LET 
TER STRTE CODE- 
505 LET 0=0 
51© INPUT U$ 

515 CLS 

52© FOR L = 1 TO D 

525 IF U$ =T $ CL . 23 TO 24-) THEN G 
OSUB 465 
530 NEXT L 
54-0 GOSUB 4-55 
55© RETURN 

6©0 PRINT RT 5,0;"ENTER TUO LET 
TER STRTE CODE- 
605 LET 0=0 
610 INPUT U$ 

615 CLS 

620 FOR L =1 TO D 

625 IF U$oT$(L,23 TO 24-) THEN 
GOSUB 4-65 
630 NEXT L 
64-0 GOSUB 4-55 
65© RETURN 
66© LET N$(L)=N$(D) 

665 LET S$CL)=55MD} 

67© LET T$CL)=T$CD) 

675 LET N$ CD)= " " 

660 LET 54(D)=” " 

685 LET TiCD)=" " 

60© LET D =D — I 
605 RETURN 

70S PRINT RT 5.6;"ENTER 5 NUMBE 
R ZIP” 


SINWARE provides high-quality 
machine-code programs for the 
TS1000 or ZX81. 

HOT Z 

HOT Z is the machine-programming 
editor, debugger and disassembler that 
takes the mystery out of assembly lan¬ 
guage. Over 40 cursor-driven com¬ 
mands give you an interactive system 
for entering, revising and relocating 
code. Full-screen listings with your 
labels let you understand other pro¬ 
grams and capture the power of ROM 
routines for your own programs. 

SQ said of HOT Z: ''Easily the best 
machine language debugging package 
/ have ever seen for the ZX81. . . if you 
program in machine language and 
need the best tool for the job , buy 
HOT Z." 

HOT Z is just $19.95 + $2.00 pp on 
cassette in different versions for 16K or 
32K + . Please specify. NOW ON 
EPROM (four 2716's) mapped to the 
8-16K block for the Hunter or similar 
board, HOT Z-E is $40. 

Z EXTRA 

Z EXTRA is a display creator/con¬ 
troller that makes you a master of ZX 
graphics and displays. No program¬ 
ming is required to create, save, print 
or display multiple screens of text and 
graphics. Z EXTRA features a full¬ 
screen editor, blinking cursors, re¬ 
peating keys, four write directions, 
eight plot directions, 4x4 and 8x8 char¬ 
acter sizes, and much more. 

Z EXTRA'S displays provide horizontal 
or vertical scrolls of multiple screens 
against a background screen, or timed 
page flips for simple animation. Screens 
can be transferred to BASIC strings to 
save hours of fussy progamming. 

Z EXTRA requries a ZX81 or TS1000 
with at least 16K of RAM and is espec¬ 
ially useful with 64K. Just $19.95 + 
$2.00 pp on cassette. 

SINWARE 

BOX 323, DIXON, NM 87527 


6 


SYNTAX QUARTERLY/SPRING 1983 



l 


I 

I 







BEHIND EVERY 
GOOD SINCLAIR 
IS A MEMOPAK 


If you own a Timex-Sinclair 1000 or 
ZX81 computer, you should have a 
Memopak behind it. From increased 
memory to high resolution graphics, 
Memotech has a Memopak to boost your 
system’s capabilities. Every Memopak 
peripheral comes in a black anodised 
aluminum case and is designed to fit 
together in “piggy back” fashion to enable 
you to continue to add on and still keep an 
integrated system look. 



High Resolution Graphics 


Order at no risk 

All Memotech products carry our 10 
day money back guarantee. If you’re not 
completely satisfied, return it in ten days 
and we will give you a full refund. 

And every Memotech product comes with a 
six month warranty. Should anything be 
defective with your Memopak, return it to 
us and we will repair or replace it free of 
charge. Dealer inquiries welcome. To order 
any Memotech product call our toll-free 
number 800/662-0949 or use the order 
coupon. 


CORPORATION 

7550 West Yale Avenue 
Denver, Colorado 80227 
(303) 986-1516 
TWX 910-320-2917 



1 64K RAM 

$179-95 



j 32K RAM 

109 95 



| 16K RAM 

59 95 



Centronics Parallel Printer Interface 

104.95 



1 RS232 Printer Interface 

13995 



' High Resolution Graphics 

144.95 



| Shipping and handling 

4.95 


$4.95 1 

. * All prices quoted in U.S. dollars 
. ** Colorado residents please add sales tax 
! □ Check □ MasterCard □ Visa 


Tax** 



Total 


Account No. 


F.xn 



j Name 

j Address 1 

1 City 

L 


State 

Zip 1 


Memopak 64K RAM The 64K RAM extends the 
memory of your Sinclair by 56K to a full 64K. It 
is directly addressable, user transparent, is 
neither switched nor paged and accepts such 
BASIC commands as 10 DIM A (9000). The 
Memopak 64K turns your Sinclair into a 
powerful computer suitable for business, 
recreational and educational use. No additional 
power supply is required. 

Memopak 32K RAM The 32K RAM Memopak 
offers your Sinclair a full 32K of directly 
addressable RAM. Like the 64K Memopak, it is 
neither switched nor paged and enables you to 
execute sophisticated programs and store large 
data bases. It is also fully compatible with 
Sinclair’s or Memotech’s l6K RAM to give you a 
lull 48K of RAM. 

Memopak 16K RAM The Memopak 16K RAM 
provides an economical way to increase the 
capabilities of your Sinclair. And at the same 
time, it enables you to continue to add on other 
features with its “piggy back” connectors. It is 
compatible with the Sinclair 16K or a second 
Memopak 16K or Memopak 32K tp give 32K or 
48K of RAM respectively. 

Memopak High Resolution Graphics The 
Memopak HRG contains a 2K EPROM monitor 
and is fully programmable for high resolution 
graphics. The HRG provides for up to 192 by 248 
pixel resolution. 

Memopak Printer Interface The Memopak 
Centronics Parallel or RS232 Interface 
paks enable your Sinclair to use a wide range of 
compatible printers (major manufacturers’ 
printers available through Memotech at 
significant savings). The resident software in the 
units gives the ASCII set of characters. Both 
Memopak printer interfaces provide lower case 
character capabilities. The RS232 Interface is 
also compatible with modems. 

New products coming soon Memotech will 
soon be introducing four new Sinclair 
compatible products: a high quality, direct 
connection keyboard, a digitizing tablet, a 16K 
EPROM and a disk drive. Watch for our future 
advertisements. 



















beginners* basic 


Exploring String Functions 

by James A. Conrad, Seattle, WA 


Most novice programmers don’t understand much about 
string functions. And many not-so-novice programmers 
don’t use them to their full potential. Functions seemed 
relatively unimportant when they started learning 
BASIC —something to “get to later.” Well, “later” is now. 
String functions are easy to understand. 

String functions are especially useful in writing input¬ 
checking and output-formatting routines—areas where 
many programs are weak. A few hours invested in studying 
string functions will pay dividends in user-friendly programs. 

Many programmers tend to confuse functions and 
statements. A statement is an instruction to the com¬ 
puter, telling it to do something. It contains (or is) a verb, 
such as PRINT or GOTO. Most functions calculate or 
convert. They’re like self-contained subroutines; SQR x, 
for example, computes the square root of x. 

The major BASIC functions perform arithmetic or string 
operations. String functions analyze and manipulate 
strings. (For a refresher on strings, see SQ Winter 
1982. —Ed.) They’re indispensable in input-checking and 
output-formatting routines. 

A Few Words about Functions 

Functions have two parts: a title and an argument. The title 
describes, in BASIC, what the function does, for example, 
LENgth, VALue. The argument follows the title and 
serves as the input to the function. The function uses this 
input and returns a result. A function’s argument is pro¬ 
nounced “of”—to read the function LEN A$, for exam¬ 
ple, you say, “length of A string.” 

You can do almost anything with a function that you 
can with a variable. You can print it. If it’s numeric, you 
can add or subtract it. You can even put it in the argu¬ 
ment of another function, for example, LEN A$(2 TO 5). 
(This is called nesting. When you nest functions, be sure 
you put a right parenthesis for every left one.) About the 
only thing you can’t do with most functions that you can 
do with variables is assign values to them with assignment 
statements (see SQ, Winter 1982). 

The String Functions 

First, a few definitions relating to string functions: 

String: a set of alphanumeric and/or graphic characters. 
String variable: name given to the memory cell(s) to 
which the string is assigned. Your ZX/TS gives you 26 
string variables, A$ through Z$. 

Substring: portion of a string consisting of consecutive 
characters. 

Expression: a constant (such as 12 or “BOB”), a 
variable (X, Y$), or a formula (7*Y, K$ + “DAVE”). If a 
formula is used in the argument of a function, you must 
put it in parentheses. 


Here’s a summary of string functions, what they do, 
and a program line that prints an example. The symbols I 
use in the arguments are: 

$: string being analyzed 

sub$: substring 

len: length of string or 

substring 

pos: position in string 

x: any numeric expression 

or number the com¬ 
puter can handle 
chr: character (in quotation 

marks) or character 
code 

cod: character code (0-255) 

Any of these except chr can be a constant, variable or 
formula. 

We’ll set up line 10 to make a nine-character string A$ 
to play with. Enter line 10 on your computer: 

10 LET 

Slicing 

Slicing is a process that gets substrings from strings. For 
the academically inclined, slicing is a function without a 
title—the entire slicing notation is the argument. The gen¬ 
eral form of the slicing notation is: 

string expression ( slicer) 

The slicer must be enclosed in parentheses. Its general 
form is: 

(position 1 TO position 2) 

It also has several abbreviated forms, shown following: 

Here is the full form for slicing. It returns a substring of 
string $, beginning with character number posl and 
ending with the character in pos2: 

$(posl TO pos2) 

Enter line 20 and RUN our two-line program. (Note 
that you don’t need to type in the spaces around TO. 
Your ZX/TS does that automatically when you use 
SHIFT 4 to enter TO). 

20 PRINT "CHRRRCTER5 2. 3, RND 

4- OP R$ RRE: ";R$C2 TO 40 

You’ll see 234 on your screen. 

Now some shorthand notations: 

$( TO pos2) posl omitted returns the left portion of 
string $ through pos2. 

Add line 30: 


8 


SYNTAX QUARTERLY/SPRING 1983 




BEGINNERS 1 BASIC 


3® PRINT "THE FIRST 4- CHHRflCTE 
RS OF R$ RRE : ";Rt( TO 4-J 

This prints 1234. 

$(posl TO ) pos2 omitted returns the right portion of 
string $ from posl through the final character. Add line 
40 to our example program: 

PRINT -the right side of r* 

jFROM LHflRSCTER 5 IS: ";R$(5 TO* 

Line 40 will print 56789. 

$(pos n ) or $(pos n TO pos n) gives you the character at 
pos n in string $. Try line 50: 

SO PRTNT " th e 4-TH CHRRRCTER OF 
R * IP : ; R $ C 4- J 

$() or ${ TO ) gives you the entire string $ as a substring. 
Line 60 demonstrates: 

60 PRINT "R* IS: ";R$f> 

It prints 123456789. 

LEN $ returns the number of characters in string $. Try 
line 70, remembering that LEN is a function (press 
SHIFT ENTER, then the K key): 

IN®fl* R XsT :: ?hEN E R* OF CHflRflCTERS 

You’ll get 9. 

VAL $ determines the numeric value of string $. Line 80 
shows this (VAL is a function on the J key): 

";Ufi(_ P fl* NT “ THE VRLUE OF R* IS: 

We get 123456790. Note the computer rounded our 
nine-digit number to eight significant digits. 

STR$ X converts a numeric expression X into a string. 
Try lines 90 and 100 (STR$ is a function on the Y key): 

30 LET R=333 

..f?® PRINT "THE STRING OF R IS: 

_« O t n 5 ft 

This prints 333. 

CODE $ returns the character code number of the first 
character of string $. You’ll get zero if string $ is a null, or 
empty, string or if the first character is a blank space 
(character code 0). Line 110 demonstrates (CODE is a 
function on the I key): 

II® RRINI "8$ BEGINS WITH CHRRR 
LTER CODE NUMBER: CODE R$ 

Line 110 prints 29—the character code for 1 (check your 
manual). Try just entering PRINT CODE “1”. You’ll also 
get 29. 


CHR$ cod gives you the character, in a one-character 
string, corresponding to the character code cod. Remem¬ 
ber, cod can be an expression (constant, variable or for¬ 
mula) whose value falls between 0 and 255. CHR$ is a 
function on the U key. Enter line 120: 

DE 2 f 9 P ?| NT - " CTER ™ CO 

This prints 1. 

Workhorse 

Slicing is the workhorse of string manipulation. Run this 
quick FOR-NEXT loop for a display of its operation: 

18 LJET B$='*RBCDE;" 

28 FOR X-X TO 4> 

38 PRINT TO XI 

4-8 NEXT X 

We see that as X increases, the printed string changes: 
when X is the screen shows 

1 A 

2 AB 

3 ABC 

4 ABCD 
This is the equivalent of LEFTS (B$,X) in common 
BASICs. Sinclair BASIC does not have this function. 

Now change line 30 to: 

30 PRINT B$ (X TO ) 

Remember not to type in the spaces around TO—use 

SHIFT 4. RUN our program. Now we get: 

when X is the screen shows 

1 ABODE 

2 BODE 

3 CDE 

4 DE 

This is equivalent to the MID$(B$,X) function found in 
other BASICs. 

Try another change: 

30 PRINT (X TO X+l) 

Now we see: 

when X is the screen shows 

1 AB 

2 BC 

3 CD 

4 DE 


This works like MID$(B$,X,2) in other BASICs. 
Here’s a tricky one. Change line 30 to read: 

3© PRINT B$iLEN B*-X TO } 


This produces: 
when X is 
1 
2 

3 

4 


the screen shows 
DE 
CDE 
BCDE 
ABCDE 


This is the equivalent of RIGHTS (B$,X) in common 
BASICs. 


SYNTAX QUARTERLY/SPRING 1983 


<■ 



BEGINNERS’ BASIC 


Here’s a quick program that gets the same result (input 
STEF using SHIFT E): 

10 LET B$ = , *fiBCDE'* 

20 FOR X=4- TO 1 STEP -1 
30 PRINT CX TO ) 

4-3 NEXT X 

If you can visualize how and why these last two pro¬ 
grams produce the same result, you have a good under¬ 
standing of slicing. 

Concatenation 

Concatenation (pronounced kon-kat-e-NAY-shun) is a 
fancy word that means a combination, joining, linking, or 
chaining. We can concatenate, or link, strings by using 
the concatenation operator, the plus (+) sign. When it 
works on strings, it joins them. It doesn’t perform 
arithmetic addition. 

We can concatenate strings from string variables or 
characters enclosed in quotation marks. To see how this 
works, RUN this demo program: 

13 LET F$= M DIftNft" 

20 LET L$=“JONES" 

30 LET N$=L$+", **+F$ 

4-0 PRINT N $ 

Line 30 concatenates “JONES” in variable L$, a string in 
quotation marks consisting of a comma and a space, and 
“DIANA” in variable F$. It assigns the manufactured 
string to variable N$. Line 40 prints it: JONES, DIANA 

What’s in a Name? 

Let’s assume we have a name stored in variable N$, in a 
mailing list, for example. (In an actual program, we 
would probably have a series of names stored in an 
array.) We want to separate the first and last names into 
the variables F$ (first name) and L$ (last name). 

Here’s a routine to get the first name (remember, the 
computer ignores REM statements when executing a 
program): 

10 LET N$=“flNN DOYLE" 

10© REH ROUTINE TO GET F$ 

113 FOR X = 1 TO LEN N$ 

120 IF N$(X>=" " THEN GOTO 14-0 

130 NEXT X 

14-0 LET F$=N$C TO X-i) 

150 PRINT F$ 

How does it work? Lines 110 and 130 set up a FOR- 
NEXT loop that sequentially examines each character of 
N$. Line 120 is the “do” portion of the loop. It uses the 
slicing function to test each character one at a time for a 
space (“ ”) in N$. When the space is found we have the 
first name. 

Let’s step through the loop and see what happens. On 
the first pass the index variable (counter), X, equals 1. 
The IF portion of line 120 looks at the first character, 
N$(l), which is “A.” It’s not a space, so X is set to 2 for 
the second pass. The second character, N, is tested. On 
the fourth pass X = 4 and the slicing function finds the 


space it’s looking for. Because the fourth (Xth) character 
is the space, we know that the first name is X-l characters 
long. The THEN portion executes and jumps to line 140. 
Line 140 assigns the left X-l (three) characters of N$, 
which are ANN, to variable F$. 

Now let’s find the last name. We’ll use a different 
technique: 

2@0 REH ROUTINE TO GET L$ 

210 FOR X=LEN N$ TO 1 STEP -X 
220 IF N$TX> =" “ THEN GOTO 24-0 
230 NEXT X 

24-3 LET L$ =N$ iX + X TO I« 

250 PRINT L$ 

Here we step backwards from the right side of N$, testing 
for a space. When the computer finds it, the THEN por¬ 
tion of line 220 executes and transfers program control to 
line 240. The slicer in line 240, (X-l-1 TO ), deletes the 
left X characters from N$ and returns the right side from 
character X+ 1 to the end of the string. The LET state¬ 
ment assigns the right side of N$ to variable L$. 

Dimensioning Strings 

Strings and string variables have size, or length. Regular 
string variables are the size of the alphanumeric informa¬ 
tion they contain. We can, however, set them to a fixed 
size, using a DIMension statement. 

DIM statements define the number of characters in the 
string variable and initially fill it with that number of 
spaces (DIM is also used to DIMension arrays—a subject 
beyond our scope here). The statement DIM A$(6), for 
example, creates a string of 6 spaces in variable A$. 

A$ will remain 6 characters long no matter how many 
or how few characters we try to assign it. You can 
redimension a dimensioned string to a new size. But if 
you do, the computer will reinitialize it with spaces and 
erase its previous contents. Once dimensioned, a string 
cannot be undimensioned. 

Chopping and Padding 

What earthly good is a fixed-size string variable? 

Suppose we have a field, or space, 16 characters wide 
for a name. We want to change our string so it has exactly 
16 characters. How do we do it? Let’s try it first with a 
long name, then with a short one: 

10 LET N$="KORZENIOU5KI , STRNI 
5LOU" 

1@ LET N$="DOE, JfiNE" 

Note that Stan’s name has 23 characters and Jane’s has 9. 

We’ll assign the result to variable X$. It’s easy—we’ll 
just use the DIM statement to create a predefined string 
variable of 16 characters: 

100 REM ROUTINE TO MRKE R 16-CH 
RRRCTER STRING 
110 DIM X*(15) 

120 LET X$5=N$ 


10 


SYNTAX QUARTERLY/SPRING 1983 




BEGINNERS 1 BASIC 


Now we’ll print the string from line 130, concatenating a 
period to show where the string ends. We’ll print its 
length from line 140: 

13© PRINT + "" 

14-© PRINT "LENGTH OP >;$ IS ";LE 
N X$ 

Line 110 DIMensioned X$ to 16 characters. When line 
120 assigned N$ into this 16-character X$, Stan was 
chopped down to size—the computer chopped off the 
last seven characters of his name (the fancy word is “trun¬ 
cated ). When we assigned Jane’s 9-character name to 
the dimensioned variable, the computer added seven 
spaces to it (this is called padding). 

Even if the previous contents of the dimensioned string 
were non-blank characters, as in Stan’s case, assigning a 
shorter string, like Jane’s name, erases the previous 
characters and pads the remainder of the string with 
spaces. 

Experiment 

Here’s one to try on your own. Give Jane and Stan mid¬ 
dle names. Put their first names first in N$ (for example, 
“Jane Carol Doe”). Now write a routine that puts each 
name in a 20-character field using this format: last name, 
comma, first initial, period, space, middle initial, period! 
For Jane’s name, the result should be: Doe, J. C. fol¬ 
lowed by 10 spaces. 

Removing Trailing Spaces 

When printing a string from a dimensioned string 
variable, you will often want to remove trailing spaces. 
(Have you ever received a computer-written letter that 
starts, Dear Ms. Doe , You have just won. . .”?) 
Here’s a routine to get rid of those ugly spaces (use 
SHIFT T for the not-equal sign in iine 120): 

10 DIM T$(I6) 

11 "! NPUT « T «r string- 
4-0 PRINT T* + "." 

TMn 0 cS^? OUTINE TO REHOUE TRAIL 
JLNb OrRCEo 

110 FOR X=LEN T$ TO 1 STEP -1 

111 ■’ THEN GOTO *** 

1^© LET ft$=T*M TO X) 

150 PRINT ft$ + "«“ 

160 GOTO 20 

The routine loops backward through T$ with line 120 
testing each character for a space. When it finds a non¬ 
space character (that is, the expression T$(X)< > “ ” is 
true), the program goes to line 140. Here the string ex¬ 
cluding the trailing spaces (that is, T$( TO X)) is assigned 
to A$. Lines 40 and 150 print the test string before and 
after removing the trailing spaces, concatenating a period 
on the end to show the length of the string. 

Programming Tips 

1. Function titles appear under most letter keys. Pressing 
the SHIFT and FUNCTION/ENTER keys will print a 


reverse video F (function) cursor on the message line. 
This allows you to type the function title as you would a 
statement. 

2. Parentheses around a function’s argument are op¬ 
tional unless the argument is a formula. 

3. Functions, including slicing, have the last priority (12) 
in the computer’s order of operations. You’ll have to 
define concatenated string expressions by putting paren¬ 
theses around them before slicing them. For example, you 
have to program the expression A$ + “,” + B$ as 
(A$ 4- “,” + B$) (sheer) to avoid slicing only B$. 

4. Use the single character slicer in input-checking 
routines to allow a yes/no input of either the first letter or 
the entire word. In the following example, YES goes back 
to the program start and NO stops. You can change these 
to suit your needs. 

IS© PRINT "ANSWER YES OR NO" 

130 INPUT R* 

14-0 IF R$<1)="Y" THEN GOTO 1© 

15© IF R$C1)="N" THEN STOP 

5. A string variable, once dimensioned, can’t be un¬ 
dimensioned. But it can be redimensioned—and its con¬ 
tents reset to spaces. Previously dimensioned string 
variables are practically useless as regular variables. If you 
use dimensioned string variables more than once in a 
program (for chopping and padding, for example), see if 
you can redimension and recycle one you used before. 
You have a limited supply (26) of string variables, so 
unless you recycle, it’s easy in a complex program to run 
out of them. 

6. The VAL function must be the first item in an 
arithmetic formula. If you can’t rewrite the formula to put 
VAL at the beginning, assign the VAL function to an 
arithmetic variable first. Then use the variable in the 
formula. 

VAL, if used in a PRINT AT, PLOT or UNPLOT state¬ 
ment, must be the first (row) coordinate. To use it as the 
second (column) coordinate, assign it first to a variable. 
For example, change this line: 

. t 

14-0 PRINT ftT 12 , UftL "C" 

to these lines: 

135 LET C=UftL "C" 

14.0 PRINT ftT 12..C 

7. Your manual’s appendix shows the complete Timex 
Sinclair character set. Here’s a little program that lists 
them all: 


10 REH PRINT CHARACTER SET 
20 PRINT "CODE" , "CHARA CTER S 
30 FOR X=© TO 255 
4-0 PRINT X , CHR$ X 
50 NEXT X 


Codes 67-111 and 122-127 will show as a “?’ 
character. These codes aren’t used for characters. 


SYNTAX QUARTERLY/SPRING 1983 



iUnfCgl BEGINNERS* BASIC 


TRANSLATION TABLE 
String Functions 

No “standard” BASIC language exists —only dialects. This table summarizes the main differences between most 
common microcomputer BASIC dialects and Sinclair BASIC (used in ZX81s and Timex Sinclair 1000s). The table 
refers only to statements and operations used in or related to the accompanying article. It should help you translate 
programs written in common dialects into Sinclair BASIC. The accompanying article defines the italicized symbols. 




How to Use It 



What It Does 

in Common 

Sinclair 

Example 

or Is 

BASIC 

BASIC Translation 

LEFTS 

Returns the left len 

Most dialects use. 

Not available. $( TO len) 

($,len) 

characters of string $. 



MID$ 

Returns a sub¬ 

Most dialects use. 

Not available $(pos TO pos + len) 

($, pos, len) 

string of string $, 
beginning with 
character number pos 
and having length of 
len characters. 



M1D$ 

Returns the entire sub¬ 

Most dialects use. 

Not available $(pos TO ) 

($, pos) 

string right of position 



(len omitted) 

pos. 



RIGHTS 

Returns the right len 

Most dialects use. 

Not available. $(LEN $ - len TO ) 

($, len) 

character of 
string $. 



ASC($) 

Returns ASCII* code 

Most use common 

Has own Use CODE $ 


number of the first 

code for punctua¬ 

codes, unre¬ 


character of string $. 

tion, numbers, 

lated to ASCII. 



and uppercase 

No cursor 


(* American Standard 

letters but differ 

control codes. 


Code for Information 

for graphics 



Interchange) 

characters and 
cursor control 
codes. 


DIM $(x) 

Dimensions string 

A few dialects 

Optional to No changes needed. 


variable $ to x charac¬ 

require dimen¬ 

predefine string Use to simplify chop- 


ters and fills with 

sioning of strings, 

size. ping and padding 


spaces. 

most don’t allow. 

routines. 

Redimensioning 

Redimensions string 

Most dialects don’t 

No restriction. No changes needed. 


variables (as above). 

allow. 

See Tip 5 for use. 

Parentheses 

Enclose function’s 

Most dialects 

Optional on Can usually be 


argument. 

require. 

most functions. omitted. Best to in- 

Slicers require elude (for 

(Tip 2). portability). 

12 



SYNTAX QUARTERLY/SPRING 1983 






1 

2 


t 

S 

§ 

a 


! 

2 


I 

8 

* 


8 


II 


s 


2 


8 

II 

Is 


1 

2 
a 


1 

2 


I 

§ 

* 


1 

2 


I 

8 

ft 


Get serious about ZX81 
& 15 WOO Computing 


Cassette Software 

IX FORTH 

A complete implementation of the FORTH language for 
the ZX81 and TS1000 computer. 

FORTH's most distinctive feature is its flexibility. The 
basic unit is the word — the programmer uses existing 
words to define his own which can then be used in fur¬ 
ther definitions. FORTH is a compiled language so pro¬ 
grams run very fast (typically five times faster than 
BASIC). 

ZX-FORTH is supplied on cassette and is accompanied 
by extensive documentation: 

56-page Users Manual 

8'Page Ed^r Manual Z 43 $29.95 


ZXBUO 


Machine Code Monitor and Disassembler 

ZXBUG is a powerful tool for machine language pro¬ 
gramming. It is 4K long and uses memory from 71EO 
to the top memory. ZX BUG works in hexadecimal 
(base 16), not decimal, so ail addresses are a max¬ 
imum of 4 Hex bits long. Provides a total of 28 com¬ 
mands. 

Z41 $14.95 


CA. Assembler 

This Machine Code program occupies 7K of memory 
and locates itself at the top of memory. The program is a 
full Editor/Assembler and Monitor. Labels may be used 
instead of any string. The features include Line Inser¬ 
tion/Delete, Insert Characters, Auto Repeat on all keys. 
The monitor has facilities to inspect memory, registers 
and run machine code programs 

Z40 $14.95 

TOOLKIT 9 Powerful New Functions! 

RENUMBER. This routine renumbers a program in any 
step and from any line up to 9999 
DELETE. This command deletes a group of lines in a pro¬ 
gram. 

MEMORY. Prints how much spare memory is available. 
DUMP. Displays current values of string and numerical 
values, except arrays. 

FIND. Will find any string of up to 255 characters and list 
each line containing that string. 

REPLACE. Replaces any string of up to 255 characters 
by any other string. 

SAVE. Transfers program in computer to below RAM- 
TOP. 

APPEND. Allows two programs to be joined. 

REMKILL. Removes all REM statements from a program, 
otherwise leaving it unchanged, preserving memory. 

Z42 $14.95 


z-aid i a 


Includes the following routines: 

VERIFY confirms whether a program has been recorded 
properly on tape. The program in memory is unaffected, 
and a further ‘save’’ can be made if necessary. 
Mload/Msave enables a specified block of memory to be 
saved. VPTR can be used within a BASIC program to 
eliminate many tedious POKES and PEEKS in finding the 
addresses where variable values are stored. 

CHAIN allows the second part of a BASIC program to be 
loaded and tacked onto the end of the first part. 

Z AID 1.0 is convenient to use, being loaded from tape, 
and residing at the top of 16K memory. The user ac¬ 
cesses the various routines with USR calls while 
loading, running, editing and saving BASIC programs 

normally Z98 $14.95 



Msfwy 

( - -- ~~ Z61 $19.95 

★ Allows you to LOAD and SAVE ZX81 
programs up to 6 TIMES FASTER! 

★ Easy-to-use in your own programs. 

★ User-transparent when incorporated into 
programs. 

★ Verifies proper loading. 

★ Catalogue feature lists program names and 
memory usage. 

★ LOADER occupies less than 500 bytes (V 2 K) of 
RAM. 

★ Consists of 2 separate programs — 
KEYBOARD MONITOR and FAST LOADER. 

★ Supplied on cassette with extensive 
documentation. 

KEYBOARD MONITOR is a user-friendly 
BASIC program which gives such information as 
the speed at which the tape was recorded, file 
name, file type, number of bytes in file, and 
whether a read error occured. If desired, the 
user-friendly portion of the program can be 
removed for direct access to Machine Code 
Monitor. Both parts reside at RAMTOP and are 
user transparent. Full details are given in the 
manual for fast saving of your program. 

FAST LOADER also resides above RAMTOP 
and can be used in front of any fast-saved pro¬ 
gram to enable it to be fast-loaded. This removes 
the need to load the monitor for each load. 
Reliability and compatability: Fast-Load is an 
exceptionally reliable system. In one 3 hour test, 
over 1,300,000 bytes of data were recorded and 
then read without error, using a low cost 
cassette player. Compatible with all ZX81 
systems, at your choice of two operating 
speeds: Medium Speed (4 times faster) suitable 
for use with any tape recorder that works with 
ZX81; Fast speed (6 times faster) for most higher 
quality tape recorders. 

The Complete ZX81 
and TS1000 Library! 

The Complete ZX81 Basic Course. B70 

Basic Course Cassettes (2). $29.95 

Getting Acquainted with your ZX81.C70 $8.95 

ZX81 Pocket Book.P70 $10.95 

Making the Most of Your ZX81.P71 $10.95 

Computer for Kids, ZX81 Edition.C71 $4.95 

Explorers Guide to the ZX81.T70 $12.95 

ZX81 Companion.C72. $8 % 

49 Exploding Games for the ZX81 .P72 $10 95 

Not Only 30 Programs for ZX81 : IK. B72 $9.95 

Machine Language Made Simple B73 $14 95 

Mastering Machine Code on your ZX81 .. P73 $12.95 

ZX81 Rom Disassembly: Part A. Both for 

ZX81 Rom Disassembly: Part B.$19.95 

Understanding your ZX81 ROM . B76 $14^5 

CALL OR WRITE FOR FREE CATALOG 



with metal case 


A full-sized professional keyboard for the ZX81 Features 
47 keys and a full-sized space bar. Connects to the ZX81 
with no soldering required, via a plug-in flexible connec¬ 
tor. You can purchase the keyboard only, or the optional 
metal case that holds both keyboard and ZX81. Expan¬ 
sion devices (i.e. RAM packs, etc) connect to the ZX81 
edge-connector which extends from the rear of the 
cabinet. 

A professional keyboard makes program entry easier 
and less error-prone. 


$25.00 


Keyboard K70 $79.95 

Metal case for keyboard 

andZX81 E70 $25.0( 

GL3DSTOPE 

1BKRAM 

Equivalent in performance to Times Sinclair RAM. 

G16 $149.95 

B4KRAM 

Expands the capacity of the T/S 1000 or ZX81 to its 
maximum. User transparent. G64 $149.95 

Coming soon: 32K RAM PIGGY BACK 
Can be used as a stand-along memory, or in conjunc¬ 
tion with 16K (Timex Sinclair, Gladstone, or any other) 
to give a total memory of 48K. G32 $99.95 

MEMORIES 

CRAMIC-81 16K CMOS RAM 

NEW RAM PACK STORES 16K EVEN WITH POWER 
SWITCHED OFF 

CRAMIC-81 is a 16K RAM pack using CMOS 
technology for permanent data retention. Data can be 
stored almost indefinitely and loaded almost instantly 
with virtually zero chance of erro. 

CRAMIC-81 module uses chips made in a special 
CMOS technology which require only a tiny amount of 
power to retain data when not actually in operation. A 
state-of-the-art, long life (10 years) lithium battery sup¬ 
plies this power in the standby mode. In the active 
mode, power is taken from the ZX81. Used on its own 
it behaves like an ordinary Rampack EXCEPT that it 
can be powered down and removed. Program and data 
in it is permanently stored when this is done. 

An ordinary Rampack can also be connected 
simultaneously. The two RAM units then occupy the 
same memory area but either can be selected. Two 
separate programs can actualy run alternately. 

CRAMIC-81 comes in an elegantly molded lie-flat 
case with a cabled connector. 

Cl 2 $179.95 


GLaDSTOnE-kFLECTROmCS 

Mail order to 1585 Kenmore Ave. Buffalo N.Y. 14217 Checks or money orders. No CODs. Add shippinr 


SYNTAX QUARTERLY/SPRING 1983 



















=n SOFTWARE—GAME 

r==Tl 

^ v by Fred Nachbaur, Syncware, El Monte, CA 

8K ROM/1-16K RAM 


SYNC WARS - 

An Invasion 


T his game will help you improve your speed and accu¬ 
racy with the ZX/TS keyboard while providing 
recreation. 

Computerburg is being invaded by a squad of ten 
dread Synclons, who beam in, one at a time, from the 
hyperspace deep within your computer. Your job is to 
zap them as they appear on your screen. However, being 
clever little invaders, they each bring along a Syncloid In¬ 
visibility Robot (S.I.R.) which emits a field that hides the 
Synclon from view. Both the Synclon and the S.I.R. may 
appear anywhere on your viewscreen, but never in the 
same place. 

At your disposal you have powerful lasers (the 38 keys 
on your keyboard, except SHIFT and SPACE/BREAK). 
By firing a laser corresponding to an invader’s position 
you can destroy both types of invaders. 

Press any key to start the invasion. The first Syncloid 
Invisibility Robot appears, surrounded by his field. You 
must destroy the robot to deactivate the field, thus making 
the Synclon invader visible. Next, you must zap the 
Synclon to score. If you miss the S.I.R., the field disturb¬ 
ance is enough to tingle the Synclon’s aerials, giving 
away his position. If you’re fast, and push the right laser 
in time (V3 second) you can still hit the Synclon and 
score. Also, if you’ve destroyed the robot but miss the 
Synclon, you have a brief amount of time to correct your 
error and shoot again. Your shot is even valid if you miss 
the S.I.R. entirely but happen to hit the Synclon. 

Destroying the robot slows the alien’s transporter 
enough to give you about one and a half seconds to 
shoot the invaders, but this time decreases as subsequent 
Synclons beam in. To get the tenth team, you have only 
one second to hit the S.I.R. and then the Synclon. If you 
miss, or exceed the time limit, the Synclon vanishes again 
into your computer, to cause strange crashes and other 
nasty deeds. (Not really, but buy the premise and you’ll 
enjoy the game more.) 

To enter the program into a TS1000 (with 2K RAM) 
without RAM pack, see the instructions. The program will 
not fit into IK ZX81s, but will run with an external RAM 
pack. If you are using an external RAM, see the 16K 

14 


modifications. You can simulate a 2K machine with your 
16K ZX81 using POKE 16389,72, then NEW. The rea¬ 
son you should do this is that the screen-fill routine in line 
1 speeds up considerably when memory isn’t tight, since 
the display file is already padded out with spaces. The 
POKE followed by NEW resets your RAMTOP address to 
limit available RAM to 2K. 

SYNC WARS With 2K RAM Instructions 

1. Load Syntactic Sum Loader (SYNTAX newsletter, 
Aug. 82) into your 2K machine, and RUN, followed by 
NEW. (If you missed the Aug. SYNTAX, send us a self- 
addressed stamped envelope for a copy of Syntactic Sum 
Loader.— Ed.) 

2. Type in the program as listed. 

3. Check Syntactic Sum—it should equal 51036 
(PRINT USR 18408). If it does not, check the program 
for errors. Make sure you run Syntactic Sum in the FAST 
mode. 

4. Enter LET G$ = “SYNCWARS ” in immediate 
mode (note space at end). Start recording and enter 
GOTO 600. The program will SAVE to tape and stop 
with error 2/610. Rewind tape. 

5. Reset your computer by pulling the plug or flipping 
the reset switch if you have one. This clears out the Syn¬ 
tactic Sum subroutine; there isn’t enough memory space 
to run the game if any ML routines are present beyond 
RAMTOP. 

6. LOAD “SYNCWARS ” from tape (note the space 
at the end). When loaded, computer will stop with error 
2/610. Rewind the tape. 

7. In the immediate mode (no line numbers), type in 
the variables list. Do not CLEAR or RUN once you’ve 
started entering variables. Arrays B$, C$, E$, and F$ 
store the graphic pictures of the invaders and their 
destroyed counterparts; you may easily design your own 
figures on graph paper (each picture is five print positions 
tall and three positions wide) and then enter the strings 
line by line into the appropriate arrays. 

8. Again save the program (this time with variables 
loaded) to tape, overwriting the first version. Program 
starts when saved. 


SYNTAX QUARTERLY/SPRING 1983 



1 REM Y.^*:4NOT $TflB ,#RND| TRB 

Vrndtrn 

10 PRINT RT R,T; ;G*, , , ,"BY 
F.NACHBAUR" ' 

25 POKE 164-18,0 

RY 30 PRINT OT M,0; "PRESS P TO PL. 

4-0 PAUSE U 
50 RAND 
100 LET 5=0 
110 FOR C=P TO T 
120 CLS 

130 LET D = INT (RNDiU) 

14-0 LET E = INT (D-'T) 

150 LET G= (D-T*E) *©+E 
160 LET E=E*N-P 
180 LET H=INT (RNDiU) 

185 IF H=D THEN GOTO U+U 
190 LET I=INT (H/T) 

210 LET K= (H-T*I) *© + I 
215 LET I=I*N—P 

220 PRINT USR 16514-; RT H.O;H* 
260 FOR R=P TO R 
264 PRINT RT E+fi,G;C*(A) 

268 NEXT R 
270 PAUSE U-©*C 

290 IF INKEY*="" THEN GOTO U*R 
g00 IF INKEY*=R* IH+P) THEN GOTO 

n 3 I® T I F INKEY*<>A*CD+P) THEN GOT 

320 CLS 

330 FOR R=P TO R 
335 PRINT RT E+A , G; E* (R) ; RT I+R 
D$ l R} 

340 NEXT R 
350 PRUSE U-©*C 

IP INKEY*="" THEN GOTO U*R 
Q 3 jPS^IF INKEY*<>R*(H+P) THEN GOT 

40© FOR A=P TO R 

404 PRxNT RT I+R,K:F*(R) 

408 NEXT R 

410 LET S=S+P 

42© PRINT RT M,0;D*;S 

430 PRUSE U 

440 GOTO L 

45© CLS 

460 PRINT RT T,T;"TOO SLOW " 

465 PRUSE U 
47© GOTO L 

490 PRINT RT I+P.K;"*B*“ 

494 PRUSE U 

^36 IF INKEY*=A* (H+P) THEN GOTO 
50© NEXT C 

D |S| PRINT RT T , T ; “GAME OVER",,, 
56© IF" S=T THEN PRINT 


51836, SK ROM 


~L 


570 GOTO M 
6©0 SRUE G* 

6 I© GOTO T 
SYNTACTIC SUM: 


Notes for 2K Listing 

1 Graphics on T,H,5,Y 
10 Inverse space 

30 “P,R,E,S,S,spc,P,token TO ,P,L,A,Y” 
220 Screen fill 
460 Token “SLOW” 

490 Second character is inverse 
560 Inverse video 

Variables 

(Enter in immediate mode) 

LET L = 500 
LET M=23 
LET N = 6 


LET 0 = 0 
LET P = 1 
LET Q = 3 
LET R = 5 
LETT = 10 
LET U = 38 
LET V = 90 
LET W = 40000 

LET A$ = “1234567890QWERTYUIOPASDF 
GHJKL ZXCVBNM.” Note space between L 

and Z. 

LET D$ = “SCORE = ” 


LET G$ = “SYNCWARS 
LET H$ = “ ” 

LET A$(30) =CHR$ 118 

DIM B$(5,3) 

DIM C$(5,3) 

DIM E$(5,3) 

DIM F${5,3) 

LET B$(l) =“> <” 

LET B$(2) =“E_R” 

LET B$(3)=“_F_” 

LET B$(4) = “W6Q” 

LET B$(5) =“Q7W” 

LET C$(1)=B$(1) 

LET C$(2) =B$(2) 

LET C$(3) = _ 7_” 

LET C$(4) = “Q_W” 

LET C$(5) =“E R” 

LET E$(l) = “ / ” 

LET E$(2) =“< <” 

LET E$(3) = “TE*” 

LET E$(4) =C$(4) 

LET E$(5) =C$(5) 

LET F$(l) =“GOT” 

LET F$(2) =“ * ” 

LET F$(3) =“*_!_*” 

LET F$(4)=F$(2) 

LET F$(5) =“M*E” 


Note space at end. 

Space. 

“Enter” character (replaces 
space in A$). 

Synclon array. 

Syncloid array. 

Broken Syncloid. 
Destroyed Synclon. 
Greater than spc less than. 
Graphic E, inverse spc, 
graphic R. 

Inverse spc, graphic F, 
inverse spc. 

Graphic W, graphic 6, 
graphic Q. 

Graphic Q, graphic 7, 
graphic W. 


Inverse spc, graphic 7, 
inverse spc. 

Graphic Q, inverse spc, 
graphic W. 

Graphic E, normal spc, 
graphic R. 

Spc/spc 

Less than spc less than. 
Graphic T, graphic E, 
normal *. 


Second * is inverse. 


SYNCWARS For 16K Machines 

With a 16K RAM pack, you may POKE 16389,72 and 
POKE 16388,24 then NEW to give you enough room for 
Syntactic Sum plus the program and variables. The 
PRINT USR address in this case is 18432, and you 
don’t have to dump the ML routine before loading the 
variables and starting the program going. 

If you’d prefer not to POKE RAMTOP, but wish to use 
your 16K machine, enter the program as written and add 
the following lines: 


SYNTAX QUARTERLY/SPRING 1983 


15 



1 REM SYNCWARS 


Replaces old line 
1 ML screen fill 

220 FOR A = OTO M-P 

230 PRINT “.’ 

240 NEXT A 

500 FOR A = P TO RND*SQR W Replaces old line 

500 

510 NEXT A 
520 NEXT C 

NEW SYNTACTIC SUM = 53311 


1 

REM 5YNCURR5 


1 © 

PRINT RT R , T ; ;G$, , , . 

‘BY 

F.NRCHBRUR' 1 


25 

POKE 16418.O 


30 

PRINT RT MiO;“PRESS P TO PL 

RY" 



4-0 

PRU5E U 


50 

RRND 


10 © 

LET 5=0 


110 

FOR C=P TO T 


120 

CLS 


13© 

LET D=INT (RNDfU) 


14-0 

LET E=INT CD/T) 


150 

LET G= <D-T*E) *©+E 


16© 

LET E=E*N-P 


180 

LET H = INT (RND*U) 


185 

IF H=D THEN GOTO U+U 


12 © 

LET I=INT CH/T) 


210 

LET K= CH-T*I) *0 + 1 


215 

LET I=I*N-P 


22 © 

FOR R=0 TO M-P 


23© 

PRINT ’* ............... - 

• . - - 

24-0 

NEXT R 


26© 

FOR R=P TO R 


264- 

PRINT RT E+R.. G; C$ (R> 


268 

NEXT R 


27© 

PRUSE U-G*C 


298 

IF INKEY $ = ** " THEN GOTO 

U*R 

300 

IF INKEY$ =R$ C H +P > THEN 

GOTO 

U*T 



310 

IF INKEY$<>R$(D+P) THEN 

GOT 

O L-I 

- 


320 

CLS 


338 

FOR R=P TO R 


335 

PRINT RT E+R,G;Ei(fl);RT 

I+R 

,K;CR> 


34-© 

NEXT R 


35© 

PRUSE U-Q*C 


37© 

IF INKEY $ = **"" THEN GOTO 

UiR 

375 

IF INKEY$Ofl$CH+P) THEN 

GOT 

O L-T 


4-00 

FOR R=P TO R 


4©4 

PRINT RT I+R,K;F$iH) 


4-©S 

NEXT R 


41© 

LET S=S+P 


420 

PRINT RT M j O;D$;S 


43© 

PRUSE U 


44© 

GOTO L 


45© 

CLS 


460 

PRINT RT T.T;"TOO SLOW 

•* 

465 

PRUSE U 


47© 

GOTO L 


42© 

PRINT RT I+P,K; “ *fi*" 


424 

PRUSE U 


426 

IF INKEY$=R$(H+Pi THEN 

GOTO 

U*T 



5©0 

FOR R=P TO RND*SQR U 


510 

NEXT R 


53© 

NEXT C 


55© 

PRINT RT T «T; ** GRME OUER" , ,, 

d$; Si 

H$: 


56© 

IF S=T THEN PRINT 





570 

GOTO M 


60© 

5RUE G$ 


61© 

GOTO T 


SYNTRCTIC SUM: 53311., SK ROM 


This modification randomizes the length of time be¬ 
tween successive invader pairs, making the game a little 
less predictable. The routine in lines 220-240, while tak¬ 
ing more memory than the MC screen fill (and therefore 
unusable in the 2K version), is faster and allows the next 
Syncloid to appear almost immediately, or delay for a 
while, as determined by the dummy loop in lines 
500-510. 

Running the Program 

The program starts automatically when loading from 
tape. When playing the game be careful not to press the 
SPACE/BREAK key; to do so will break operation. 
CONTinue will not work to restart the program, making it 
cheat-proof. If you hit BREAK by mistake, you can start 
the program again by entering GOTO 0 (or GOTO O or 
GOTO P). 

ZX80s 

Since the program runs in the FAST mode, it will run in 
ZX80s with 8K ROM, even without video upgrade mods. 
Minimum RAM requirement is 2K. 

IK Machines 

Finally, here’s a listing of the game which will run in IK 
ZX81s and ZX80s with 8K ROM update. As with the 2K 
version, you must load Syntactic Sum (if used) and then 
type in the program; check Syntactic Sum, and when 


Available from SYNTAX... 


For computing beginners — 

Crash Course in Microcomputers .$19.95 

Covers hardware, machine language and 
applications. Reviewed in SYNTAX, Oct. 1981. 
Add $1.50 shipping. 

ZX80 Pocket Book.$10.95 


Includes ZX81 supplement. Covers Sinclair 
BASIC, data and program listings. 

Add $1.50 postage. 

For advanced hardware/software users — 


Zilog’s Z80-Z80A CPU 

Technical Manual.$7.88 

Zilog’s Assembly Language 

Programming.$15.75 

Experiments in Artificial 

Intelligence.$8.95 

Add $1.50 postage. 


SYNTAX back issues available, $4 each. 

Call or write for our group subscription discounts. 

SYNTAX • RD 2 Box 457 • Harvard, MA 01451 
617 / 456-3661 


16 


SYNTAX QUARTERLY/SPRING 1983 











correct save the program to tape. Then reset the machine, 
load from tape, and enter the variables. Type GOTO 0 to 
start the game. Don’t forget to save the program with var¬ 
iables, overwriting the first SAVE. 

This version is more difficult, since you don’t have a 
second chance to get the invaders. Also, the display is 
considerably smaller and the invaders’ positions are not 
staggered to match the layout of the keyboard. Note that 
if the invaders appear at any of the last three positions in 
the bottom row, you must hit to score. 

Notes for IK Version 

124 20 periods. 

250 Graphics on R,E; E,R. 

320 Graphics on 5,Y; 2 inverse Graphics on T,Y. 

Variables 

LET L = 500 
LET P = 1 
LET Q=2 
LET R=4 
LET T = 10 
LET V = 90 

LET A$ = “1234567890QWERTYUIOPASDF 
GHJKL ZXCVBNM. . (LEN A$ should be 40) 

LET A$(30) =CHR$ 118 

To start, enter GOTO 0 or GOTO P. In this version, if 
you hit the SPACE/BREAK key by mistake, it’s ok to 
type CONTinue and keep going. If you type RUN by mis¬ 
take, reload the variables list and start with GOTO. You 
may prefer to run this version in SLOW mode. SQ 


li pIuse S T r ' r ;"syncupr S - 

100 LET S=P -P 
110 FOR C=P TO T 
115 CLS 

122 FOR E=Q TO T-P 
124- PRINT ".. 


126 NEXT E 

130 LET E=INT (RND*R) 

14-0 LET G = INT (RND *T> 

150 LET D=T*E+G+P 

160 LET E=E*Q 

170 LET I=INT (RNDiR) 

19© LET K=INT (RNDjT) 

200 LET H=T*I+K+P 

205 IF H=D THEN GOTO U+U 

21© LET 1=1*0 

250 PRINT AT E .GiQ; "T" ;TAB G*Q 
'270 PRUSE U 

280 IF INKEY$=R$(H) THEN GOTO L. 
-U 

200 XF INKEY$<>R$ CD) THEN GOTO 

L 

300 CL-3 

320 PRINT RT E,GfO;"</ u ;TftB G*G 

; "i V' ; RT i.. K *Q; "HI" ; tab k 
325 PAUSE U 

33© XF INKEY$Ofi$(H) THEN GOTO 

L_ 

4-1© LET S=5+P 

4-20 PRINT RT I,K^O; 'T/’UTAB 

; V'j 5 

4-05 PRUSE V/S 
5©0 NEXT C 

510 PRINT RT T,P;"YOU GOT ";S;" 
SYNCLONS” 

SYNTACTIC SUM: 29905.. 3K ROM 


IIS INTERCOMPUTCR INC 

T M 

presents 

A Full Line Of Quality 

SOFTWARE 
For Your TIMEX 1000 
Or SINCLAIR ZX81 

IC's new line of software includes action-packed, 
challenging programs which put the user in the 
pilot's seat of an air force bomber; into the 
casinos of Las Vegas; behind the controls of a 
nuclear missile launcher; alongside the President 
as his bodyguard; in a lost spaceship, far from 
earth; in command of a submarine destroyer, 
and challenge him or her to other mind and 
strategy games. 

DEALERS AND DISTRIBUTORS 
WELCOME 

WE ACCEPT CALL ORDERS 

.... .. WITH VISA OR MASTERCARD 

Write or Mail to: 

INTERCOMPUTER, INC. 

P. O. Box 90, Prudential Center 

Boston, Mass. 02199 (617) 437-1190 

»— v—— — —order form———. — — ... 


U. S. $~TTOTAL- 


10195 


10195 


10| 95 


10| 95 


10195 


10|95 


10l95 


14l50 


14|50 


14| 50 


10|95 


14|50 


59.95 


109.95 


179.95 

All Programs require 16K RAM Sub Total 1- 1 — 

•Defective tapes will be replaced, # - 

if returned within 3 days. *5% Mass. Tax 

•Please allow 2 weeks for delivery. TOTAL 

•Your order may be sent in more *Mass. Residents Only 

than one shipment. 

□ Check enclosed D Charge my credit card below 

Name ' 


1002 

Missile Launcher 

1003 | 

Jeopardy 

1004 j 

Vegas 

1005 

Demolisher 

1006 i 

Air Attack 


Guard the President 


1008 Combo PAK I _ 

1009 Combo PAK II 


I - Combo PAK III _ 

1 1011 Submarine 

1 1012 "Combo PAK IV 

! p Q01 Memopak 16 K RAM 


P002 I Memopak 32 K RAM 


Memopak 64 K RAM 


I Company 


City 

Signature 
Card Number 


□ visa □ Maste 


Expiration Date 


SYNTAX QUARTERLY/SPRING 1983 


17 































SOFTSYIMC, #/VC. 

THE WORLDS BEST PROGRAMS 
THE WORLDS BEST PROGRAMMERS 


JOIN THE FAMILY. CALL OR WRITE FOR A FREE TS1000/ZX81 CATALOG 
AND PROGRAM LISTING AND OR DETAILS ON PROGRAM DISTRIBUTION 


14 E. 34th St. NEW YORK, NEW YORK, 10016 212-685-2080 




ffpl SOFTWARE—EDUCATION 

v by Steven Walley, Sunnymead, CA 


8K ROM/16K RAM 


Geography 
Review—U.S. States 
Quiz Program 



I recently adapted an idea for a program from Tab’s 
The A to Z Book of Computer Games. The result is a 
states quiz that reviews the geography of the U.S. It is a 
good teaching tool for children and a good review for 
adults. 

The program requires the 8K ROM with 16K RAM and 
works best in the FAST mode. 

Your objective is to match a state (the program picks 
one at random) to a list of 9 regions and 1 state capitol in 
the United States. If you fail on your first try, the program 
gives you a second chance. If you fail again, you get 
another try later on in the quiz. 

The program keeps giving you states to match until 
you get all 50 right. When you answer all 50 states cor¬ 
rectly the program tells you how many guesses you took. 
The first guess is free: the computer only counts a wrong 
answer if you miss it twice. This helps not to discourage 
children from completing the quiz. If you want to refer to 
the quiz instructions at anytime, just push key I (for in¬ 
structions) and they will appear on the screen. To see 
your score at anytime, push key S. To quit, push Q. 

After ENTERing the program, hit RUN and ENTER. 
The program is SAVEd under the title “USA”. 

U.S. States Quiz uses the string slicing capabilities of 
the Sinclair 8K ROM as the method of getting information 
out about the 50 states. To speed up the program, the 
most frequently used routines are at the beginning. The 
program also makes use of the INKEY$ function instead 
of INPUT followed by ENTER. This reduces the number 
of keys you must press. 

Listing 1 describes the variables used and their func¬ 
tions. Instructions for U.S. States Quiz are contained in 
lines 8010-8090. To exit from the program, just push 
BREAK. 

Listing 1 

A How many times (0 or 1) you missed the question. 
B — How many questions you answered correctly. 

C — How many questions you answered incorrectly. 

D — The number of states you have been asked to 
match. 


E — Does the player have a name? (0 if no) 

F — Random number (1 to 50) picks which state the 
question is about. 

G Counts the states to see if all have been answered 
correctly. 

A$(F, 1 to 16)—State data. The first element of the string 
is the location (0 to 9), the second is if it has been guessed 
(1) or not (0), the remainder of the string names the state. 
B$ — Player’s name. 

C$ — Key on the keyboard that has been pushed. 

D$ — Name of the location picked. 

E$ — Name of the correct location. 


SQ 


ig usr 

20 C!_:5 

30 GOSUB 9000 

4-0 PRINT "URNT INSTRUCT JONS (V 
OR N) 

5© PRUSE 4-©0©0 

GOT5 N §l^f = , ' N " ™ EN GOTO S0 

§0 CL. 3 

3© PRINT "UHRT IS YOUR NRHE 7 " 
10Q INPUT B$ 

110 LET E = 1 

la© LET F = INT (RNDiSB) +1 
130 IF R$fF,2)<>"8 " THEN SOTO 1 

14-0 GOTO 1000 
150 PRUSE 4-0000 
160 LET C $ = INKEY $ 

IT© CLS 

IF C$ = THEN GOTO S00© 

130 IF C$="s" THEN GOTO 7000 
=i00 IF C$ = "Q" THEN GOTO 6000 
210 REM ERROR TRRP 

220 IF C$ = "©*‘ OR C$ = " 1" OR C$ =' 
OR C$="3" OR C$ = "4-'' OR C$=''5' 
0 0 5* C * = : ,6 ‘' 9 R CS = "7" OR Cl = "8" O 
R C t= 3 THEN GOTO 25© 

230 GOTO 100@ 

24-3 REM LOCRTION GUESSED 
| T p0 IF C* = "0” THEN LET D* = "REMO 

F ?S® IF C *="I" THEN LET D$-"PflCI 

n |Z 0 IF THEN LET D$="HEXI 

28© IF C$ = "3’' THEN LET D* = "GULF 

_ Continued Next Page 


SYNTAX QUARTERLY/SPRING 1983 


19 




290 IF C* = "4-" THEN LET D*="fiLRN 


124© IF R$(F,1)="6" THEN LET E$= 

TIC" 


"CRNRDR" 

30© IF C$="5" THEN LET D$="GRER 


1250 IF fl$ CF.1) ="7" THEN LET E$ = 

T LRKES ** 


"CHRRLESTON" 

31© IF C$ = ** 6 " THEN LET D$ = "CflNR 


1268 IF R$CF.. 1) ="3" THEN LET E$- 

Dh" 


"HISS. RIUER" 

320 IF C $ = " 7 ** THEN LET D$ = ,, CHRR 


127© IF R$ (F.« 1) = "9" THEN LET E$ = 

LE5TON" 


"WESTERN" 

330 IF C$="S" THEN LET D$="MIS5 


1280 GOTO 158 

. RIUER" 


199© REM RIGHT RNSUER ROUTINE 

34-6 IF C| = ''9" THEN LET D* = "UE5T 


2©0© PRINT "UQU, ";Bt 

ERN" 


2010 PRINT , ,D*; " MRTCHES 

35© IF R$(F, 1) =C$ THEN GOTO 20© 


,3 TO 16) 

© 


2020 PRINT "YOU PICKED THE RIGHT 

36© IF R<>© THEN GOTO 478 


RNSUER. " 

3*70 PRINT "SORRY « ";B$ 


2©3© PRINT . , s ,"PUSH RNY KEY (EX 

36© PRINT E>$; " IS NOT THE MRTCM 


CEPT SPACE) FOR THE NEXT STRTE." 

TO" 


2©4-© PAUSE 4.©0©0 

39© PRINT R$CF.3 TO 16) 


205© LET ft$(F.2)="l" 

4-88 PRINT , , "YOU GET ONE MORE C 


206© LET R=© 

HRNCE TO MRTCH" 


2078 LET B=B+1 

4-1© PRINT fl$(F,3 TO 16) 


2080 LET D=D+1 

4-2© PRINT "TO THE RIGHT LOCRTIO 


209© FOR G=1 TO 50 

N — " 


2100 IF fl$(G,2)="0“ THEN GOTO 12 

43© PRINT ./‘PUSH RNY KEY CEXCE 


0 

FT 5PRCE) TO TRY RGRIN." 


2110 NEXT G 

448 LET H=1 


2120 REM RLL 58 STRTES MRTCHED C 

45© PROSE 40©00 


ORRECTLY 

46© GOTO I©©© 


2138 CLS 

4-7© PRINT "SORRY ";B$ 


214-0 PRINT "UERY GOOD ";B* 

48© PRINT "YOU MISSED TWICE" 


215© PRINT "YOU HRUE MRTCHED RLL 

400 PRINT , E$ 


5© STRTES" 

500 PRINT “UPS THE RIGHT RNSUER 


2160 PRINT "CORECTLY." 

FOR" 


2170 PRINT , , ** ******THESE RRE YO 

510 PRINT R$(F,3 TO 16) 


UR SCORES*****" 

52© PRINT * j , , "PUSH RNY KEY (EX 


2180 PRINT ,,, j "STRTES RTEHPTED 

CEPT 5PRCE) FOR THE NEXT STRTE" 


TO MRTCH D — I 

53© LET C=C + 1 


2190 PRINT , , "STRTES MRTCHED COR 

540 LET D=D+1 


RECTLY ";B 

55© LET R=8 


2200 PRINT ./'STATES MRTCHED INC 

56© PRU5E 40080 


ORRECTLY ";C 

578 GOTO 128 


2210 PRINT ,,"****************** 

GO© REM INSTRUCTIONS 


**************** 

100© CLS 


2220 PRINT ,,,,"TO PLRY RGRIN PU 

1018 PRINT "HELLO ";B$ 


SH *’**." 

102© PRINT RT 0.30ID 


2230 PRINT ./‘TO END THE QUIZ PU 

103© PRINT j ,"WHICH LOCRTION WIL 


SH " "Z" " . " 

L MRTCH" 


224© PRUSE 40088 

1840 PRINT R$(F,3 TO 16) 


225© CLS 

1050 PRINT "******************** 


2260 IF INKEY$="Y" THEN RUN 

************** 


2270 IF INKEY$="Z" THEN GOTO 229 

1068 PRINT RT 6, 11; "LOCRTIONS" 


0 

107© PRINT , ,"0) REMOTE (2 


228© GOTO 2148 

STRTES MRTCH" 


229© PRINT RT I0..5; "GOODBYE **;B* 

1080 PRINT "1> PRCIFIC C3 ST 


230© STOP 

RTES MRTCH)" 


5990 REM STOPPING THE QUIZ 

109© PRINT "2) MEXICO C3 ST 


500© CLS 

RTES MRTCH)" 


6810 PRINT B$ 

1188 PRINT "3) GULF (4 ST 


6020 PRINT ./’TO STRRT RGRIN FRO 

RTES MRTCH)" 


H THE BEGINNING PUSH ""X 

111© PRINT “4) RLRNTIC (13 S 


*5 m 6 ^ it 

TRTES MRTCH) " 


6830 PRINT j j. "TO CONTINUE THE OU 

1128 PRINT "5) GRERT LRKES C7 ST 


IZ PUSH ""Y""." 

RTES MRTCH)" 


6040 PRINT ./‘TO END THE QUIZ PU 

1138 PRINT "6) CRNRDR (4 ST 


SH ""Z""." 

RTES MRTCH)" 


685© PRUSE 40000 

1140 PRINT "7) CHRRLEST ON Cl ST 


606© IF INKEY$=“X" THEN RUN 

RTE MRTCHES)" 


6878 IF INKEY $ = "Y ** THEN GOTO 108 

1150 PRINT "8) MISS. RIUER (5 ST 


© 

RTES MRTCH) " 


6880 IF INKEY $ = "Z" THEN GOTO 610 

1168 PRINT "9) WESTERN C8 ST 


8 

RTES MRTCH) " 


6098 GOTO 600© 

1178 PRINT ,,.."PUSH FOR T 


61©8 CLS 

HE INSTRUCTIONS" 


oil© PRINT RT 10.5;"GOODBYE "; B $ 

1188 IF R$(F,1)="0" THEN LET E$= 


612© PRUSE 52© 

"REMOTE" 


6138 STOP 

119© IF R$(F,1)="1" THEN LET E$= 


699© REM SCORE 

"PRCIFIC" 


7©0© CLS 

120© IF R$ ( F.« 1 ) = "2" THEN LET E$ = 


7810 PRINT 6 $;", THESE RRE YOUR 

"MEXICO" 


SCORES-" 

121© IF R|(F.1)="3" THEN LET E$= 


782© PRINT .. , . ."STRTES RTTEHPTED 

"GULF" 


TO MRTCH ** ; D-l 

1228 IF R$(F,1)="4" THEN LET E$= 


7030 PRINT .."STRTES MRTCHED COR 

"RLRNTIC" 


RECTLY "; B 

1238 IF R$(F *1) ="5" THEN LET E«f* = 
"GRERT LRKES" 


Continued Next Page 


20 


SYNTAX QUARTERLY/SPRING 1983 



orrIctly NT -:c" STOTES mrtched inc 
X® E ® “ PUSH ONY KEY (EX 

LEPT SPfiCE) TO CONTINUE.” 

70t>0 PAUSE 4-0000 
7070 GOTO 1000 
7990 REM INSTRUCTIONS 
8000 CLS 

5S 1 £=E RINT "THIS QUIZ WILL TEST 
1°, IF c YOU CRN MRTCH R STRT 

f UITH ITS LOCATION {REGION OR 
g TO I E CAPITOL) IN THE U.S. 

3020 PRINT "AFTER YOU SEE THE FI 
RST STRTE QNTHE SCREEN*j*ittftjtt 
************" 

®®3© PRINT "PUSH 0-9 TO MRTCH TH 
E ST RT E SHOWN TO ONE OF THE 

LOCATIONS SHOWN." 

8040 PRINT "PUSH ""I"" TO SEE TH 
E INSTRUCTIONSRGRIN." 

UR S SCORE^ "PUSH *"S"" TO SEE YO 
SeSglPRINT “PUSH ""Q"" TO END TH 

?®X® PRINT "THE LOCATIONS RRE LI 
5X ED IN THE priority TO BE RNSWE 
RED (EXAMPLE-IF fl STRTE BORDERS 
BOTH CRNRDR RND THE GREAT LAKES, 
GREgT LAKESWILL BE THE CORRECT 
fi f1S WER BECAUSE XT IS HIGHER 

UP ON THE LIST OF LOCATIONS. *' 
3080 PRINT "**************»***.*«. 
************" 

§S2®.. PRINT "NOU PUSH ENTER TO BE 
is XN > 

8100 PAUSE 4-0000 
8110 IF E=0 THEN GOTO S0 
8120 IF E < >0 THEN GOTO 1008 
8990REMLOAD STATESiiiiiiiiTHE 
FIRST ELEMENT OF THE STRING IS 
THE LOCATION, THE SECOND IS IF 
IT HAS NOT BEEN GUESSED (0) OR 
IE IT HAS BEEN GUESSED (1), THE 
REURINOER OF THE STRING IS THE 
NAME OF THE STATE. 

9880 DIM R$(5©,16) 

9010 LET A${1)="30ALABAMA“ 

9020 LET A*(2)="00RLASKA" 

90o0 LET A*(3)="20ARIZONA" 

904-0 LET R$ (4.) ="80ARKRNSAS" 

LET A * ( 5 ) ="10CALIFORNIA" 
9060 LET A*(6)=“90COLORADO" 

9070 LET A$ (7) ="4-0CONNECTICUT" 
9080 LET A$ (8) ="40DELAWARE" 

J-ET AJ (9) =“30FLORIDA" 

9100 LET A* ( 10) ="4-0GEORGIA" 

9110 LET A$(11)="00HAWAII" 

9120 LET A$(12)="60IDAHO" 

9130 LET A$(13) ="50ILLINOIS" 

014-3 -LET -R$-(-i4) ="50INDIANA" 

9150 LET A*(15)="S0IOUA" 

9160 LET A*(16) ="90KANSAS" 

9170 LET A*( 17)="80KENTUCKY" 

®Jg® FFT R*(18)="30LOUISIANA" 

9190 LET A* ( 19) ="4-0MAINE" 

9200 LET A$ (20) ="4-0MARYLAND" 

9210 LET A* (21) ="4-0MRSSACHU5ETTS 

9220 LET A*(22)="50MICHIGAN" 

L ET R*(23)="50MINNESOTA" 

924-0 LET A* (24) ="30MISSISSIPPI" 
iif? FIX R*(25)="80MISSOURI" 

9260 LET R*(26)="60MONTANA" 

9270 LET A*(27)="90NEBRASKA" 

9280 LET A$(28)="90NEUADA" 

9290 LET A*(29)="40NEU HAMPSHIRE 

^300 F FT R*(30)="40NEU JERSEY" 
®310 Fil R*131)="20NEW MEXICO" 

FiX fi l ! <32)="40NEU YORK" 

933 0 LET A* (33) ="40NORTH CAROLIN, 

93^0 LET A*(34)="60NORTH DAKOTA" 
9350 LET A*(35)="50OHIO" 


9360 LET A*(36)="90OKLAHOMA" 

9370 LET A*(37)="10OREGON" 

R38® LET R$(38)="50PENNSYLUANIA" 
9390 LET A*(39)="40RHODE ISLAND" 
9400 LET A$(40)="40SOUTH CAROLIN 

9410 LET A$(41)="90SOUTH DAKOTA" 
9420 LET A$(42)="80TENNESSEE" 
9430 LET A*(43)="20TEXAS" 

9440 LET R$(44)="90UTAH" 

9450 LET A*(45)="60UERMONT" 

9460 LET A*(46)="40UIRGINIA" 

947® LET A*(4?)="10WASHINGTON" 
9480 LET A*(48)="70WEST VIRGINIA 

949® LET A*(49)="50UISCONSIN" 
9500 LET A$(50)="90WYOMING" 

9510 RAND 

9520 REM HOW MANY TIMES YOU HAVE 
MISSED THE QUESTION 
9530 LET A=0 
9540 REM HOW MANY RIGHT 
9550 LET 5=0 
9560 REM HOW MANY WRONG 
9570 LET C=0 

9580 REM HOW MANY STATES HAS THE 
PLAYER BEEN ASKED TO MATCH 
9590 LET D = 1 
960© REM NO NAME YET 
9610 LET E =0 
9620 RETURN 

SYNTACTIC SUM: 20220, 8K ROM 


We will pay 

CASH 

for non-exclusive rights to 
manufacture and sell your 
Timex/Sinclair educational and 
entertainment programs. 


DALLAS DEVELOPMENT SYSTEMS 
7410 Stillwater 
Garland, Texas 75042 
(214) 238-1776 


SYNTAX QUARTERLY/SPRING 1983 


21 





SOFTWARE—UTILITY 

by Dan Platt, Edinboro, PA 


8K ROM/4K RAM 


POKEing 
Directly To The 
Display File 


I n SYNTAX newsletter (Nov. 81) a neat games pro¬ 
gram appeared called “MONXZER” (revised version 
Winter 82 issue of SQ). But the graphics are sooooo 
slooooow and take up sooooo much memory. How can 
we avoid this tremendous memory consumption and de¬ 
lay with graphics? 

First, it isn’t necessary to directly use PRINT or PLOT 
statements. You can write directly into the display file, 
the place in memory where the computer stores the infor¬ 
mation to be shown on the screen. 

Try this: 

POKE PEEK 16396 + 256*PEEK 16397 + 114,23 

An asterisk should appear near top center of your screen. 
(I will explain why later). The display file’s memory seems 
to be set up as follows: 

Enter (Code 118) 32 bytes of text 

Enter 32 bytes of text 

Enter 32 bytes of text 

Enter 32 bytes of text, etc. 

Using the enter symbol as the first byte of each line 

seems to key the video—without it the screen goes crazy. 
So you shouldn’t write (POKE) into these locations. To 
count out where to POKE a variable, add 33 for each line 
past the first ENTER (code 118) plus the number of char- 


we may use (you guessed it) machine coding! It is much 
faster, and memory economical. Consider the following 
program: 

LD HL, (16396) ;first location for D_FILE 

LD BC,81 ;first position 2nd row, 15th col. 

LD A,23 ;23 is code for symbol * 

ADD HL,BC ;HL points to 2nd row, 15th col. 

LD (HL),A ;put in * 

LD BC,33 ;displacement for 1 row. 

ADD HL,BC ;next row 

LD (HL),A ;put in next * 

ADD HL,BC ;next row 

LD (HL),A ;put in next * 

ADD HL,BC ;next row 

LD (HL),A ;put in next * 

RET ;go back to main program 

You can load this routine into a REM statement at line 
1. (See also Machine Code Programs —Where and How 
to Load Them by William Wentz, SQ, Winter 1982.) Enter 
1 REM AAAAAAA. . . (three rows are enough). Then 
POKE the following values in numerical order. For exam¬ 
ple, type POKE 16520,42 then press ENTER or NEW- 
LINE. Then type POKE 16521,12 and press ENTER and 
so on. Don’t put any line numbers before the POKEs. 


acters (columns) over to be displayed. 


CO «M6520,42 


You may find the location of the first “Enter” by look- 16521 12 

ing into the system variable D FILE (memory pair 16522 64 

16396 and 16397). Thus, we POKE the asterisk (symbol 16523 1 

23 in the character set table) into the third row 3 x 33 and tD 16524'8 
the 15th column. The two PEEKs tell the computer n 


16524,81 

16525,0 


where to look for the start of the display file. Adding ^ * 16526 62 
3*33 + 15, or 114, tells it to move to the third row, 15th ^^^16527*23 
column. So the location to POKE the asterisk symbol 16528 9 ^ 


column. So the location to POKE the asterisk symbol 16528 9 16539 2< 

given by: fJTLj A 16529|llS\ 

PEEK(16396) +256*PEEK(16397) +3*33 +15 £.O0C. 16530,1 \ 

I don’t recommend using PEEKs and POKEs for speed t, , ... 

hpn pntpr thiQ linp* 

and certainly not for memory conservation. However, 

they do demonstrate how to get into the display file. Now 10 LET A = USR 16520 


16531,33 

16532,0 

16533.9 * 

16534.119 

16535.9 

16536.119 

16537.9 

16538.119 
16539,201 




22 


SYNTAX QUARTERLY/SPRING 1983 





Four asterisks will appear very fast (even in SLOW mode) 
when you RUN this two-line program. 

I recommend learning how to use machine code for 
these kinds of problems. Check out TRS-80 Assembly 
Language Programming by William Barden for a discus¬ 
sion of various techniques (useful for any assembly or 
machine language) and Z80 Users Manual by Joseph J. 
Carr for a more detailed discussion of the instructions. 
(Look out! His codes in binary aren’t always correct! 
These are contained in the back of the TRS-80 text.) 

Lastly, we may look at the pixels and how to address 
them in machine code. Each character block on the 
screen is split up into four segments. If we label bits from 
least to most significant beginning with one: 

_ 87654321 

00000000 

We see that all zeros are blank (white), a 1 in bit one turns 
on (blackens) the upper left hand corner, the second bit 
the upper right, and the third the lower left. 




We thus see that the addressing used by the PLOT in¬ 
struction is somewhat more complicated than at first 
glance. Also, if you know what symbols go where (not 
doing mathematical graphs), you just need to store them 
in a table and use a machine-coded segment to place 
them in position. 

In closing, I’d like to indicate that 1) machine code isn’t 
complicated; 2) it is tedious; 3) it is very fast; 4) it is very 
memory efficient; and 5) some programming problems 
involving graphics display are best solved with machine 
coding. 


= 00000000 


E 

3 


= 00000001 


= 00000010 


= 00000100 


We can form graphics symbols by darkening combinations 
of pixels: 




= 00000011 


If you wondered what happened to the lower right hand 
pixel, it’s coming right up. We may form an inverse image 
by putting a 1 in bit 8: 


(Ed. note: This program requires 4K RAM or more to 


B GENERAL SYSTEMS CONSULTING 

2312 Rolling Rock Drive 
Conley, Georgia 30027 
SINCLAIR ZX81 and 
TIMEX SINCLAIR 1000 SOFTWARE 
16K minimum configuration 
Designed to help monitor your finances. 

1 . Amortizations. 9 95 

2. Bar Charts. 9 95 

3. Annuity Evaluation.. 9 95 

4. File Manager. 9.95 

5. Bank Statement Balancer. 9 95 

6 . Checkbook Simulator . 9.95 

7. Depreciation Straight Line. 9.95 

8 . Depreciation Declining Balance.. i .. 9.95 

9. Depreciation (ACRS)..... 9.95 

10. Diet Plan.\.. 9 95 

11 Home Budget . 9 95 

12 . Home Inventory. 9.95 

13. Home Payables. 9.95 

14. Home Equity Evaluation. 9.95 

15. Real Estate Investing. 9 95 

16. Savings/Investments Analysis. 9.95 

17. IRS 1040 (Long Form).. 9 95 

18. IRS 1040A (Short Form). 9.95 

19. Income Tax Projections. 9.95 

Circle selections and fill out form beiow: 

123456789 10 

11 12 13 14 15 16 17 18 19 

Number of items selected_ (5) 9.95 .. 

Postage/Handling 1.50.. 

Total: _ 

NAME___ 

ADDRESS __ 

CITY/STATE/ZIP__ 


SYNTAX QUARTERLY/SPRING 1983 


23 





























SOFTWARE—MATH 

by R.A. Woodall, Laughlintown, PA 


8K ROM/16K RAM 


Simultaneous Linear 
Equations and 
Matrix Inversion 


Solves simultaneous linear equations or inverts an N*N 
matrix by forward and backward row reduction. A delight 
for amateur mathematicians. 


G iven a simple system of linear equations, for exam¬ 
ple, if X + 2Y = 5 and X = 2, find X, your favorite 
junior high school whiz would no doubt arrive at the cor¬ 
rect answer before you could even find the tape to load 
your computer. But as the size of the problem grows to 
involve more than about three variables, the solution can 
become quite tedious and prone to error. There is also 
the chance that after much arithmetic you will find that no 
unique solution to the problem exists. So if you have say 
a 10 by 10, you can bet that your ZX/TS will beat any 
pencil pusher several times over. 

Matrix algebra is a little more complex, but the row 
reduction method is essentially the same as for simultane¬ 
ous equations and it is convenient to include both in one 
program. I’ll not even begin to explain why one would 
want to invert a matrix, but matrix inversion is rather akin 
to taking the joint reciprocal of a specific array of num¬ 
bers. If you multiply the inverted matrix by the original 
matrix, you see the operation is similar to the simple 
1/X*X = 1. 

To use this program, just type it in and RUN. It is fully 
prompted, so just enter the correct responses. The pro¬ 
gram starts by asking for the type and size of problem, 
sets appropriate dimensions and prompts the necessary 
input. I calculate that 16K RAM will handle at least a 
25 x 35 matrix or about 50 simultaneous linear equa¬ 
tions. During input the coefficient matrix is augmented as 
necessary by either the output matrix for equations, or an 
identity matrix for inversion. You can make corrections 
after entering all data. To exit, just answer N after your 
problem is solved. 

Forward row reduction proceeds by stepping across 
the columns and down each row (along the diagonal), 
selecting at each step a sub-row suitable for reducing each 


10 PRINT “THIS PROGRRM SOLVES" 
2© PRXNT "SIMULTANEOUS LINEAR” 
30 PRINT "EQUATIONS (E) OR" 

4-0 PRINT "INVERTS AN N*N MATRI 
X C 13 " 

SO PRINT 

S© PRINT "WHICH ONE, (E) OR (I 


7© INPUT 
S0 PRINT Q$ 

O© IF ©$="E" THEN LET H=1 
10© IF ©$="I" THEN LET H=2 
110 IF Mol AND M<>2 THEN GOTO 
60 

120 PRINT 

130 PRINT "GIVE SIZE? "; 

14© INPUT N 
IS© PRINT N 

1S0 IF M=1 THEN LET M=N+1 
17© IF M=2 THEN LET M=2*N 
180 DIM X(N,M) 

190 SCROLL 

2 ©@ PRINT "ENTER COEFFICIENTS" 
205 SCROLL 

218 IF M=N + 1 THEN PRINT "AND OL 
Tpirr ARRAY" 


220 SCROLL 

230 PRINT "RQU COLUMN" 

24-0 SCROLL 

250 FOR R=I TO N 

260 FOR C=1 TO N 

27© PRINT " ";R;TAB 8 ;C, 

288 INPUT X*R,C) 

200 PRINT X(R,C) 

205 SCROLL 
30© NEXT C 

310 IF MoN + 1 THEN GOTO 380 
33© PRINT " ";R;" OUT", 

350 INPUT X < R,H 3 
3S0 PRINT X(R,M) 

370 GOTO 30© 

380 LET X(R,N+R3 =1 
300 SCROLL 
4-08 NEXT R 
4-18 SCROLL 

4-20 PRINT "ANY CORRECTIONS CY3 7 


430 INPUT Q$ 

44© IF Q$<>"Y" THEN GOTO 508 
45© SCROLL 

4S© PRINT "WHICH ROW? 

47© INPUT R 
48© PRINT R 
40© SCROLL 


Continued Next Page 


24 


SYNTAX QUARTERLY/SPRING 1983 




50© PRINT “WHICH COLUMN {OUT IS 
N + l) *? 

510 INPUT C 
520 PRINT C 
530 SCROLL 

54-0 PRINT "ENTER UflLUE? " : 

550 INPUT X(R,C) 

560 PRINT X(R,C) 

5S0 GOTO 4-1© 

59© CLS 

60© REM FORWARD ELIMINRTION 
61© FOR C = 1 TO N — 1 
62© LET A=© 

630 IF X{C,C) < >© THEN GOTO "730 

64-0 FOR R=C + 1 TO N 

650 IF X(R,C)=0 THEN GOTO 720 

66© FOR 1=1 TO M 

670 LET T = —X iR,Ii 

680 LET XtR.I)=X(C,I) 

69© LET XCC.I)=T 
700 NEXT I 
710 GOTO 73© 

72© NEXT R 

730 LET R=XiC,Ci 

74-0 IF R=0 THEN GOTO 124-0 

750 FOR R=C+1 TO N 

760 LET B=X(R,C)/fl 

770 IF B=0 THEN GOTO 81© 

780 FOR I=C TO M 

III Nl^T X i R IJ =X{R ' I) -B*X(C,I) 

810 NEXT R 
82© NEXT C 

830 REM CHECK DETERMINATE 

84-0 LET D = 1 

350 FOR 1=1 TO N 

860 LET D=D*X(I,I) 

87© NEXT I 

880 IF D=0 THEN GOTO 1240 
890 REM BRCKURRD ELIMINATION 
9©0 FOR C=N TO 2 STEP -1 
910 LET A=X(C,C) 

920 FOR R=C-1 TO 1 STEP -1 
930 LET B=X(R,C)/A 
94© FOR I=C TO M 

III nIxt*!^ 1 * =XtR ' I> ~B*XtC,I> 

970 NEXT R 
980 NEXT C 

990 REM PRINT RESULTS 
100© IF M=2*N THEN GOTO 110© 

1010 PRINT "THE INPUT ARRAY IS " 

1020 PRINT 

1030 FOR 1=1 TO N 

<ltl) PRINT = "iXtI,M)/X 

1050' NEXT I 
1060 GOTO 118© 

|10® PRINT "THE INUERTED MATRIX 
111© PRINT 

1120 PRINT "ROW COLUMN- 
1130 FOR R = 1 TO N 
1135 PRINT 
1140 FOR C=1 TO N 

f15® PRINT " "JR;TAB 7JC,XCR,N+C 

* / X ( K .i R J 

1160 NEXT C 
1170 NEXT R 
118© PRINT 

1190 PRINT "DETERMINATE IS:",D 
1200 PRINT 

1205 PRINT "RUN AGAIN (YJ ?" 

121© INPUT 0$ 

1215 CLS 

122© IF Q*="Y" THEN RUN 
1230 STOP 

1S40^PRINT "SINGULAR COEFFICIENT 

1250 PRINT "NO UNIQUE SOLUTION" 
1260 GOTO 120© 

SYNTACTIC SUM: 58033, 8K ROM 


other sub-row, moving the entire row to the top of the 
sub-matrix if necessary, and performing the reduction. If 
the computer finds a row it cannot handle, the program 
recognizes the singularity of the coefficient matrix and 
stops. Completion of the forward reduction sequence 
produces an upper triangular coefficient matrix and its 
determinant is found as the product of the diagonal 
elements. 

If the determinant is not zero, the system can be 
uniquely solved and backward elimination proceeds in a 
manner similar to the forward steps. Upon completion 
the answers are found by dividing each row element of 
the augmented matrix (which has been similarly operated 
upon) by the diagonal coefficient in the same row. The 
computer then prints the answers in logical sequence, but 
larger problems will require CONTinues when the screen 
is full. Finally, the determinant is printed and you can re¬ 
run the program. 

Since, as usual, one “keypunch” error can throw the 
whole program into a cocked hat, I include a couple of 
test examples after the program listing as well as a practi¬ 
cal example of the use for simultaneous equations. Have 
fun! 

Simultaneous Equations: 

Suppose you have four programs, each containing a 
number of PAUSE statements (P), several loop (L) state¬ 
ments, several other operational program lines (O), and 
(N) characters to be printed. You time the completion of 
each program and solve for the time each element takes. 
You can then use the answers to predict how long similar 
programs will take to run. 


Prog 

* P 

L 

N 

O 

Time (sec) 

1 

15 

26 

18 

31 

6.2 

2 

28 

17 

15 

23 

5.4 

3 

19 

42 

7 

36 

2.9 

4 

11 

21 

12 

19 

4.2 


The answers 

are: X-l 

= 

.017664834 

sec. 



-2 

= 

.011355478 




-3 

= 

.32093198 



-4 = .0044190484 

Matrix Inversion: 

The following matrix is singular: 4 1 2 6 

1 2 4 1 

0 - 1-21 

0 6 12 0 

The inverse of the matrix: 1 0 1 is 0 0 1 

3 10 0 1-3 

100 10-1 

SQ 


SYNTAX QUARTERLY/SPRING 1983 


25 



j=^i SOFTWARE—HOME/BUSINESS _ 

by Michael Roberts, Des Moines, IA 8K ROM/16K RAM 


ZX/TS 

Home 

Budget 


O ne of the first applications that come to mind 
when you get a personal computer is managing 
your home finances. However, when 1 got a copy of 
Sinclair’s Home Budgeter, I was disappointed. It was fast, 
with good displays, but difficult to follow and modify. It 
seemed to do the wrong things. I wanted a program to 
keep track of my monthly expenditures in a variety of ac¬ 
counts as well as annual totals for expenditures by item 
and as a whole. This Budget version resulted. 

Type in Home Budget as listed. Before using it the first 
time, save blank copies on tape by entering RUN 9900. 
These copies are self-running from then on. 

To use Home Budget, just follow the prompts. The 
prompts should be adequate to avoid errors, but most in¬ 
put routines will check for an invalid input and reject it. If 
you do manage to stop the program for some reason, 
you can re-enter without losing your data by entering 
GOTO 1. Do not use RUN or you will lose all your data. 
To start over, enter GOTO 100. It’s good to leave your 
program line cursor at line 1, so if the listing comes up on 
the screen you see a reminder not to RUN. 

Home Budget handles up to 75 differently named ac¬ 
counts of up to 12 characters. When you first set up a 
budget, consider setting aside two or three extra accounts 
with no budget figures, in case you want to add an item 
or two to your budget later. You can call up accounts by 
any unique part of their name or their number. 

After you set up your accounts the program gives you 
a menu (see Figure 1). This menu accesses all the pro¬ 
gram’s functions. 

My version of Home Budget offers some features you 
may like whether or not you need the whole program. The 
subroutine at lines 10-38 converts the floating point 
variable M to M$, a dollar-and-cents figure as we like to 
view it. If M is negative, the routine at lines 20-26 changes 
the string to inverse characters. Printing in inverse makes 
the negative numbers stand out clearly in a list. 

Lines like 1645 and 1660 provide another nice feature 
throughout the program, right-justifying the figures for 
easier reading and neater printout. 


BUDGET NRhE . 

1 : SUMMRRY OP RL.L. RE-COUNTS 

2: DETAILS OF ONE ACCOUNT 

3: ENTER NEU INFORMATION 

4-: CHANGE R BUDGETED AMOUNT 

S: CHANGE/CORRECT THE NAME OF 
ACCOUNT 

S: SAUE THE PROGRAM 
7: EXIT THE PROGRAM 

LAST UPDATE: NEU TRPE_ 


Figure 1 

I like to run Home Budget as listed, but you can get 
faster results by running your computer in FAST mode all 
the time. To run Home Budget in FAST, delete all 
SLOW and PAUSE statements. Change lines like 1695 
to INPUT X$. 

Line 1 is the Bytes Remaining routine from SYNTAX 
newsletter, Oct. 82. I like to include it in most programs 
to see how much memory is left. 

Lines 100-345 initialize and identify variables. 

Ed. note: For ease in reading the listing, here are the texts 
of lines in inverse video: 

Line Text 

2 space asterisk space asterisk space DO NOT 
RUN space asterisk space asterisk space 
asterisk 3 spaces IT WILL KILL ALL 
YOUR DATA 8 spaces USE 2 spaces 
“GOTO 1” 2 spaces TO RESTART 4 
spaces COPYRIGHT (C) 2 spaces OCT. 7, 
1982 2 spaces BY MICHAEL ROBERTS - 
DES MOINES, IA 


26 


SYNTAX QUARTERLY/SPRING 1983 






4 


space TO BEGIN A NEW FILE 3 spaces 
ENTER 2 spaces “RUN 100” 16 spaces 
110 ENTER THE NUMBER OF BUDGET 
ITEMS 

250 ENTER THE NAME OF THIS PROGRAM 

1610 ANNUAL BUDGET 4 spaces SPENT TO 

DATE 2 spaces 

1680 “Z” = COPY 2 spaces “C” = CONTINUE 2 

spaces “M” = MENU 

1730 MONTHLY BUDGET: 

1865 OVERSPENT. 

1880 “Z” = COPY 2 spaces “C” = CONTINUE 2 

spaces “M” = MENU 

2010 DETAILS OF AN ACCOUNT 

2040 BUDGET/MONTH: 

2350 9 spaces Z = COPY 3 spaces M = MENU 8 

spaces 

2510 6 spaces NEW INFORMATION ENTRY 5 

spaces 

2520 same as 2510 

2550 (ENTER “l”OR “2”) 

2590 (USE THE 3 LETTER ABBREV.) 

2680 5 spaces ANOTHER ENTRY? (Y/N) 7 

spaces 

3010 CHANGE A BUDGET FIGURE FOR 

ACCT. 

3050 (ENTER “l”OR “2”) 

3520 PRESENT NAME: 

3560 NEW NAME: 

4025 REMEMBER TO MAKE A “SPARE 

COPY” 1 space 

4550 NOT SQ 



SYNTAX QUARTERLY/SPRING 1983 



27 



105© PRINT AT 5,2;”2: DETAILS OP 
ONE ACCOUNT “ 

1060 PRINT RT 7,2;*3: ENTER NEW 
INFQRMRTION" 

107© PRINT RT 2,2;“4: CHANGE R 6 
UDGETED AMOUNT“ 

1060 PRINT RT 11,2; "'5: CHRNGE/CO 
RRECT THE NAME OF";TAB 5;"ACCOUN 


5: CHANGE/CO 
HB 5;“RCCuUN 


1065 PRINT RT 




1 ©2© PRINT RT 15,2; *'6: 5AUE THE 
PROGRAM “ 

110© PRINT RT 17.2,‘ ”7: EXIT THE 
PROGRAM" 

1101 PRINT RT 19 . i; *' 


11©5 PRINT TAB 2;"LAST UPDATE: “ 

; 0$ 

111© PAUSE P 

1X20 LET X$=INKEY$ 

113© IP X$ = "“ OR CODE X $ < 26 OR C 
ODE X$>35 THEN GOTO 111© 

1135 CCS 

114© GOTO 5 -1-500 ^UAL X$ 

150© REM S ^SUMMARY * * 

1510 PAST 
152© DIM 5(Nl) 

1525 DIM T ( 14-) 

153© FOR 1=1 TO Nl 
1535 FOR «J = 2 TO 13 
154-© LET 5(1) =5(1) +D(I,J) 

154-5 NEXT U 

155© NEXT I 

1560 FOR 1=1 TO 13 

1565 FOR <J= 1 TO Nl 

157© LET T(I)=T(I) +D(J # I) 

1575 NEXT U 

156© IF I>1 THEN LET T ( 14 -'! =T ( 14-} 
+T (I) 

1565 NEXT I 
1590 SLOU 

1600 FOR 1=1 TO Nl STEP G 

1605 FOR U=© TO 9 _ 

1610 IF U=© THEN PRINT AT 0,©;"S 

1515 IF J + I>N^MENGOT^680 
162© PRINT N$(<J + I) 

1630 PRINT TAB 6 
1635 LET M=i2*DCI+U,1) 

164-0 GOSUB G 

164-5 PRINT TAB K15—LEN M$);M$..** 

1650 LET M=5(I+d) 

1655 GOSUB G 

1660 PRINT TAB (2S-LEN H*> ; M* 

1670 NEXT U ___ 

^660^ 

1J690 PAUS^f" " 

1695 LET X $ = INKEY$ 

17©0 IF CODE X$=118 OR X$=“H“ TH 

EN GOTO S 

1705 IF X$="2" THEN PRINT AT 21, 

0 ; " 

1710 IF X$=“Z“ THEN COPY' 

1715 IF X$=“Z“ THEN GOTO 1660 

1720 CLS 

1725 NEXT^ I ■ H I I I II ■ 

1735 LET M=T(1) 

174-0 GOSUB G 

174-5 PRINT H$ 

1750 PRINT 

1755 PRINT “SPENT IN“; TAB 12; “AM 
OUNT“;TAB 20;“““+““=BALANCE“;TAB 
0;“MONTH OF“;TAB 12;“SPENT“;TAB 
20; -"“B“ “=DEPICIT“ 


1757 PRINT 

1760 FOR^2 TO 13 
1765 LET M=T(I> 

1770 GOSUB G 

1775 PRINT TAB 2;O*(C1-2)*3+1 TO 
(1-2)#3+3);TAB 10;"$";TAB (19-L 

EN M$) ; M*; 

1760 LET H=T(1)-UAL M$ 

1765 GOSUB G 

1766 IF M > =0 THEN PRINT TAB 20; “ 

1787 IF M <0 THEN PRINT TAB 20; "E 

1790 PRINT TAB (31-LEN .MS 

1795 NEXT I 
1799 LET T=© 

1600 FOR 1=2 TO 13 
1605 LET T=T+TCIi 
1310 NEXT I 

1820 PRINT ,,“TOTAL ANNUAL BUDGE 
T: 

1825 LET M=X2*T(1> 

1330 GOSUB G 

1835 PRINT TAB (31-LEN M$);M$ 
1S4-© LET M=T 
134-5 GOSUB G 

1850 PRINT “TOTAL SPENT TO DATE: 

$“;TAB (31-LEN 
1655 LET M=12*TC1)-T 

I860 IF M > =© THEN PRINT “BALANCE 
LEFT:“, 

1865 IF M <0 THEN PRINT mfeMggl 


1670 GOSUB G 

1875 PRINT TAB 21;“$“;TAB (3I-LE 
ISsl^RINT RT =>i ______ 

1395 LET X * = INKEY& 

190© IF CODE X$=118 OR X$=“M“ TH 
EN GOTO I©©© 

1905 IF X$=“Z“ THEN PRINT AT E.© 


1910 IF X$=“Z“ THEN COPY 

1915 IF X$=“Z“ THEN GOTO I860 

1920 GOTO S 

2000 REM *^ANALYSISS* 


2020 GOSUB L 

2030 PRINT Y$_ 

204-0 print t BHaBBaKaam 

204-5 LET H=DCY%±> 

205© GOSUB G 

2055 PRINT M$ 

2056 PRINT 

2©60 PRINT “MONBAMT SPEf 
CElfiCCUM BAL“ 

2070 PRINT L$ 

2S75 LET T=DCY'.15 
2076 LET %J =© 

203© FOR 1=2 TO 13 
209© PRINT Q$C(I-2)*3+l 


BALANl 


2075 

2076 I 
2©30 
209© 
* 3 + 3 ) 
2100 
2105 
2110 
2120 


2100 LET M=DCY.I> 

2105 LET U=U+M* 

2110 GOSUB G 

2120 PRINT TAB 12-LEN H$;M$; 

2130 LET M=T-D(Y',X) 

214-0 GOSUB G 

215© IF M>=© THEN PRINT TAB 13;“ 
+ “ t 

216© IF M<© THEN PRINT TAB 13;“E 

2160 PRINT TAB 22-LEN M$;M$; 

2185 LET M =T * ( I-1) -U 

Continued Next Page 


28 


SYNTAX QUARTERLY/SPRING 1983 




2190 IF M<0 THEN PRINT TRB 23; 

a195 IF M>=© THEN PRINT TRB 23 

+"; 

2200 GOSUB G 

221© PRINT TRB 32-LEN M*;H* 
2215 NEXT I 

2219 PRINT 

2220 PRINT "RNNURL BUDGET:"."t 
2225 LET M=T*12 

2230 GQ5U5 G 

224-0 PRINT TRB 25-LEN M$:M$ 
2250 PRINT •‘SPENT TO DRTE: 

2250 LET M=U 
22?© GOSUB G 

2280 PRINT TRB 25-LEN M$;MS 
2290 PRINT "BRLRNCE;", 

2300 LET M=T*12-U 
2310 IF M>=0 THEN PRINT "+"; 
2320 IF M <0 THEN PRINT "H" . 
2330 GOSUB G 
234.0 PRINT TRB 25-LEN M 
2350 PRINT RT 21.0; 


2360 PRUSE F 
2365 LET Y*=INKEY* 

2375 IF Y* = **Z" THEN COPY 

§380 IF Y*="Z" THEN GOTO 2350 

2390 CLS 

24-00 GOTO S 

2500 REH **NEU INFO** 

2505 CLS 
2510 PRINT 


E 
X 

F X* 
2555 
ET X 
R 
R 
R 


2600 INPUT Y* 

2505 FOR 1=0 TO 11 

? 6 THEN F GOTO°*6a!* 3> +1 T ° 

2515 NEXT I 

2520 PRINT “UHRT?" 

2621 GOTO 2590 
2625 LET 1=1+2 

ft?™ “ENTER THE RHOUNT: " 

264-0 INPUT <J 

2650 IF U <0 THEN GOTO 2590 
2660 IF X =2 THEN LET J=-U 
2670 LET D (Y , I) =D (Y . I) +U 
2680 PRINT RT 21.0; *'*| 


2690 PRUSE F 

270© IF INKE>'* = "Y" THEN GOTO 25© 

2710 GOTO S 
2990 STOP 

3000 REH * *CHRNGE BUDGET FIGURE* 
3005 GOSUB L 
3010 PRINT 


?S^LP RINT * ' “ 1 « NEW MONTHLY F 

IIGURE ,TRB 14-; •* OR ** 

iNNURL^OTRL " 2 R CHRNGE IN T « E « 
13050 PRINT TRB 6; 


3060 PRUSE F 
3070 LET X$=INKEY $ 

3075 IF X$ <>"1** RND X*<>**2" THEN 
GOTO 3070 
3080 LET X=URL X* 

3090 PRINT "ENTER THE RHOUNT • " 
3100 INPUT <J 

3110 IF X = 1 THEN GOTO 3200 

3120 LET J=J/12 

3130 LET <J= INT (0*100) X 100 

si*® EET D <Y * 1} tY ■• 

3150 GOTO S 
3200 LET D (Y , 1)=U 
3205 GOTO S 

3500 REM **CHRNGE NRME * * 
3505 e PRINT s "TO CHRNGE RN RCCOUNT 

3510 GOSUB L 

3520 PRINT •• Y * 

3530 PRINT ,,"ENTER THE NEU'NRME 


354-0 INPUT Y* 

3550 LET N* CY . 4- TO > =Y* 

3560 PRINT ■ ";Ni(Y) 

3570 PRUSE 250 * 

3580 GOTO S 
4-000 REM **SRUE** 

llil SSI5T oi KTER TOMV ' 5 DnT = ■ 

|!!|«|!|^T ? T .5' 0i -pREpbh^bpc 


TO^TRRT^ RT al - 0; ’ PRESS ENTER 

4-035 PRUSE F 
4-04-0 SftUE ©$ 

4050 GOTO S 
4-500 REH **EXXT** 

4-510 PRINT “RRE YOU SURE YOU URN 
T TO QUIT THE PROGRRH WITHOUT 

4520^PRUSE f NEU IHFORMfiT ^" 
4530 IF INKEY$0"Y" THEN GOTO 10 
0 

4-550 PRINT RT 10.. 0;"IF YOU CHRNG 
E YOU R MI ND. ENTER ""GOTO 1000” 
* . DO gIS&g PRESS RUN. " 

4560 GOTO 9999 
5000 REM * *SERRCH* * 

e®rccoSnt T "" ENTER THE nrme of th 

-5020 INPUT Y* 

5021 IF Y*="” THEN GOTO 1E3 
5025 FRST 

5030 IF LEN V$>15 THEN LET Y*=Y* 
( TO 15) 

5035 LET Y=LEN Y*-l < 

504-0 FOR 1=1 TO N1 
5050 FOR J = 1 TO 15—Y 

Y$=N$(I,J TO U+Y) THEN G 
OTO 5100 
5070 NEXT U 
5080 NEXT I 

5090 PRINT "NO SUCH NRME FOUND - 
TRY RGRIN" 

5095 GOTO 502© 

5100 LET Y = I 
5110 LET Y$=Nt(I) 

5120 CLS 
5125 SLOU 
5130 RETURN 

990© SRUE "HOME BUDGET" 

9905 RUN 10© 

9999 STOP 

SYNTACTIC SUM: 55339, 8K ROM 



SYNTAX QUARTERLY/SPRING 1983 


29 













raj=a] HARDWARE INFORMATION 

r-^11 t> by John Andrews, San Jose, CA 


Getting 
Your Head 
Straight 


I f you’re not a tape recorder buff, you may not know 
the term azimuth as it applies to recorders. If you do, 
you may have some inkling as to what follows. In either 
case, you may learn something crucial to computing and 
storing programs on tape. 

In simple terms, “azimuth” is a line of direction. 
“Azimuth alignment” related to tape recorders refers to 
the line of direction of the gap in the record head pole 
pieces (or iron). Sometimes you can’t see this tiny gap 
with the naked eye, but it is always there. (In some 
modern recorders the gap is filled with ceramic or other 
material to prevent tape oxides from getting into the gap, 
causing a magnetic short and subsequent loss of volume. 
This problem can cause recording malfunction. For the 
moment, let’s stick with azimuth alignment.) Figure 1 il¬ 
lustrates a record/play head, locating the gap and 
azimuth. 


I 

I 



I 


Figure 1. 


Note that the gap runs vertically (top to bottom) on the 
head at right angles to the direction of tape travel. This is 
the crux of the matter. Just how precisely you maintain 
this 90-degree relationship determines the high frequency 


response of the recordings. With voice recording, high 
frequency response is not critical. With music, it depends 
on how important you think it is to hear the high pitch 
tones in your music. With computer data tapes, however, 
it is crucial that high frequencies do not get lost. Com¬ 
puter data on tape is all relatively high frequency. Your 
tape equipment must respond properly to the high fre¬ 
quency signals from the computer circuits or data will be 
lost and you will have problems. 

So, right about now, some of you lucky ones are say¬ 
ing “Well, that’s all very interesting but my tapes SAVE 
and LOAD fine. So why should this concern me?” Well, 
here are some reasons why. 

If you never intend to exchange tapes with other 
people, then azimuth alignment is not such a concern. As 
long as tapes are recorded and played on the same 
recorder, even with poor azimuth alignment, the head 
alignment appears good to the tape. But, put that same 
tape on a recorder with different azimuth angle and the 
high frequencies will be reduced—maybe just slightly or 
completely lost. At some point, you can’t load from the 
tape anymore. Your ability to buy or trade taped pro¬ 
grams is seriously impaired unless everybody involved 
has correct azimuth alignment on their recorders. 

Also, if you put off aligning your recorder head you will 
create a giant re-recording problem for yourself. If you 
change your azimuth down the line somewhere, you 
won’t be able to load previously recorded tapes. Obvi¬ 
ously the best time to check and realign is as soon as pos¬ 
sible so you don’t build up an extensive tape library prior 
to setting your heads straight. 

What it boils down to is this—any tape not recorded or 
played back on machines with correct (90-degree) 
azimuth alignment will probably work poorly, if at all. 

For best results, before you proceed with alignment, 
clean and demagnetize the heads. 

Now, the question is, how to align your azimuth? 
Several companies market test tapes made specifically for 
this function. The most likely place to get one is a store 
catering to audiophiles. A test cassette typically provides 
several recorded tests, including timing, wow and flutter 


30 


SYNTAX QUARTERLY/SPRING 1983 



as well as azimuth alignment. The alignment portion con¬ 
sists of several tones preceded by voice announcements 
of their frequencies. They begin with relatively low tones 
and increase with each test. For example: test one might 
be a 500-cycle tone; test two, 1000 cycles; test three, 
3000 cycles, and so on up to 10,000 or 15,000 cycles. 
Flay a test track on your recorder and listen to the tones 
after each announcement. If you can’t hear the tone after 
an announcement you have passed the limit of your 
recorder’s high frequency response. If this occurs at a 
relatively low frequency, say 2000 cycles, you have a 
problem. If you can hear 5000 cycles or above, you are 
in pretty good shape. 

Due to wide variations in recorder design, it is impos¬ 
sible to cover all possible variations here, so a general il¬ 
lustration will show you where to find pertinent items on 
recorders. You may have to adjust your thinking to relate 
the illustrations to your specific recorder’s physical layout. 
In this regard, the basic problem is gaining access to the 
adjusting screw (E). 

Figures 9 and 10 are top views of a typical recorder 
without a cassette inserted. Figure 9 shows how the 
heads retract (dashed lines) under the housing top when 


Figure 9. 


SPINDLES 


or ® 


CASSETTE WELL 




NOTCH 


r ^ 

t-J - i. » A." 


K 


REC. 

REW. 

PLAY 

F.F. 

STOP 


no keys are depressed. It also shows the access notch (or 
hole) to the head adjusting screw. Figure 10 shows how 
the heads move out into the cassette well when you press 
the play key. When heads are in this position the ad¬ 
justing screw is accessible through the notch (or hole) in 
the housing. On some recorders without the notch you 
reach the screw by inserting a tiny screw driver on a slant 
past the edge of the tape well. 

If on your recorder, you insert the cassette in a trap¬ 
door and then close the door (Figure 11), there almost 
has to be an access hole because the entire top surface 
closes to play the tape. Sometimes a metal foil label 
covers the hole. Peel up the label to gain access. 



Figure 10. 

REC./Play head 

Erase head \ A . 

^ \ Azimuth 

y 1 adjusting screw 

r""i 

1 

• 1 • •!»! J 

Depressed 

_V_ 

IBBBDBI 




If you find no access to the screw (E), you can do one 
of two things: remove the recorder housing, make the 
adjustment, then reassemble (NOT recommended for 
novices); or make a hole (this is easier, but be careful). 

To make a hole, locate the screw position exactly with 
the heads in play position (Figure 10) and mark the loca¬ 
tion. Retract the heads (Figure 9) and make a hole in the 
housing at the marked location. Use great care not to dam¬ 
age the head or mechanism in the process—do not let 
chips fall into the recorder, make them fall away from it. 

To adjust the azimuth: play the test track with the 
highest tone you can hear (test tapes come with user in¬ 
structions). As it plays, adjust the tilt of your recorder’s 
head to the point that gives the loudest volume. Then, 
play the track you couldn’t hear before. If you can hear it 
now adjust the head tilt during this track for maximum 
volume. When you achieve the loudest volume on the 
highest tone track you can hear, you have correct 
azimuth alignment. 


SYNTAX QUARTERLY/SPRING 1983 


31 








One note of caution. Don’t try to make your own test 
tape or use a copy of one. You can’t be sure of the head 
alignments involved with the copy recorders and a 
misalignment could result. Test tapes are laboratory stan¬ 
dard aligned and you must maintain this standard to 
make the concept work properly. 

Figure 2, 3, and 4 illustrate (exaggerated for clarity) 
good and bad azimuth alignment as well as typical head 
mounting scheme. These sketches show the head as if 
you were inside the cassette, looking through the tape at 
the face of the head. 






Head mounting flange A fastens to spacer post B with 
screw C. Spring D replaces spacer post B on the opposite 
side of the head. Adjusting screw E up or down against 
the spring changes the tilt of the head assembly. Thus, 
the azimuth angle changes relative to the tape edge. 

Adjusting screw E would normally not require more 
than a half turn in either direction to correct the azimuth 
alignment. Usually a very slight amount of turning will do 
the trick—about one-eighth of a turn is ample. 



In some cases spacer B and spring D may be reversed, 
or the whole setup may differ, but the principle remains 
the same. The manufacturer also sets the azimuth the 
same way you do it. (Sometimes they don’t do it as ac¬ 
curately because they don’t expect a supercritical com¬ 
puter to look at the signal.) 

Let’s look at the signal. Figures 5 through 8 represent 
scope patterns of data signals put on tape. In Figure 5 we 
see an ideal signal with a 6 volt peak-to-peak level. 
Notice the nicely squared-up data bursts with an ampli¬ 
tude 2 volts peak-to-peak greater than the 4-volt mini¬ 
mum the computer requires for reliable operation. 



Figure 6 exemplifies the same signal after it passes 
through a recorder with a slightly different azimuth align¬ 
ment from the one used for Figure 5. Note the tapered 
beginnings of the top and bottom edges of the signals. 



32 


SYNTAX QUARTERLY/SPRING 1983 




































This is known as high frequency roll-off and is caused by 
the inability of the recorder/amplifier and/or record/play 
head to reproduce the abrupt signal level change of a 
square wave signal. Notice the tapered part of the signal 
still exceeds 4 volts, so this amount of roll-off would not 
cause data loss. 

Move on to Figure 7. This illustrates a more severe 
case of azimuth misalignment. The roll-off now reduces 
portions of the signals below the 4-volt level. Now you 
lose data and experience LOADing problems. 


Figure 8 illustrates severe misalignment resulting in 
almost total loss of data bursts and leaving just some 
useless spiking signals which the computer ignores. 

Other problems also cause poor performance of cas¬ 
sette machine and tapes, such as tape oxide buildup on 
head gap, and poor oxide coating on tapes and noisy 
recorders. These problems can be overcome rather easily. 
However, if we want to build a ZX80/81 and Timex 
users program exchange capability we need to “get our 
heads straight” to make it work out. 





ov 


Nil 

m 

IB 

dill 4 V d-d 

■p 

L 



m 

m 

m 

|pp__4V p p 

1 6V p 
- -1 


Figure 8. 


"IF I HAD TO CHOOSE 
JUST ONE PROGRAM TO 
IMPRESS AN AUDIENCE, 
THEN'3D MONSTER MAZE 
WOULD BE THE ONE"* ^ 


Price Quantity 

13941 Gamestape 1:11 Programs— IK 14.95_ 

13942 Gamestape 2: 3 Games—16K 14.95 _ 

13943 Gamestape 3: Catacombs Adventure—16K 14.95_ 

13944 Gamestape 4:3D Monster Maze— 16K 14.95 _ 

13945 Gamestape 5:3D Orbiter—16K 14 95 _ 

PLUS BOOKS: 

26025 NOT ONLY 30 PROGRAMS FOR THE ZX81 14 95 _ 

25957 MACHINE LANGUAGE PROGRAMMING MADE SIMPLE 19 95 _ 

25913 UNDERSTANDING YOUR ZX81 ROM 19 95 _ 

26063 ZX81 ROM DISASSEMBLY-PART A 14 95 _ 

26103 ZX81 ROM DISASSEMBLY-PART B 14 95 _ 

25895 COMPLETE BASIC COURSE FOR TS1000/ZX81 34 50 _ 

PLUS TAPES: 

26446 SPACE TREK -16K 14 95 _ 

26359 SUPER INVASION-1 K 14 95 _ 

26318 WALL BUSTERS-1K 14 95 _ 

26472 10 EXCITING PROGRAMS-1K 14 95 _ 

26284 REVERSI—IK 14 95 _ 

26406 TOOLBOX-1 K 14 95 _ 

26490 BASIC COURSE 2 cassette pack 7 50 _ 


Total 
$_ 



3D MONSTER MAZE 

Gamestape 4 Actual screen TS1000/ZX81 
Orders to: 

MELBOURNE HOUSE 
SOFTWARE, INC. 

Dept. CS 

347 Reedwood Drive 
Nashville, TN 37217 



Signature 


Total: $__ Name 


Residents of CA, MD, TN, please add sales taxes _ ... 

S&h 2.00 Address 


Enclosed is my check or money order for $_ 

Please charge my Visa_or MasterCard 

Card sr_ expiration date_ 


Total: $_ 

Visa and M / C orders 
can be phoned in: 

615/361-3738 


City_State_Zip_ 

Dealer orders and queries: 

800/251-5900 

(ask for a Melbourne House operator) STX 


SYNTAX QUARTERLY/SPRING 1983 


33 
































8K ROM/16K RAM 



SOFTWARE—EDUCATION 

by Dale F. Lipinski, Roslyn, PA 


Make-It- 

Yourself 

Quiz Program 


T his program is a do-it-yourself quiz-writer. It lets 
you choose the quiz format and tailor the questions 
and answers to the student’s level. You can use Quiz over 
and over for different tests. 

Enter Quiz as listed. Before running the program, 
SAVE it on tape. This tape is now your master copy. 
Whenever you want to make new quizzes, just load your 
master tape. 

To use Quiz, just press RUN and ENTER (or 
NEWLINE on older machines). Have your questions and 
answers ready. You may use multiple choice, true-false, 
or direct-entry questions. To keep students from cheating 
on math problems by using the computer to calculate 
answers, the program requires the student to solve math 
problems before entry. 

Program Explanation 

Lines 10 through 300 set up the variables. Line 230 
calculates how many characters the machine can devote 
to your questions. The program will use almost all the 
available memory. If you have more than 16K RAM and 
don’t want to use it, change line 230 to: 


23© LET E=©6©0-+ *5) 


This change will limit the program to about 16K. Line 
250 displays the number of questions you requested, 
then gives you the total character count for your ques¬ 
tions. It also tells you the average number of characters 
you can use for each question. This number includes the 
question, answer, choices and any explanation you wish. 
Use this number as a guide to plan your entries and avoid 
running out of memory. 

Lines 310-760 let you input your questions, answers, 
choices and any statement you want to make to the stu¬ 
dent about the question he/she just answered incorrectly. 

Lines 770-820 display the quiz title. 

Lines 830-910 start the quiz for the student and pro¬ 
vide user-friendly greetings. 


Lines 920-1150 are devoted to the quiz. 

Lines 1160-1180 print the score. You may wish to 
comment here on how well the student did. 

Lines 1190-1240 give you the option of saving the 
quiz program on tape. It will not retain the student’s name 
or the score. If you have already saved Quiz with this 
question/answer set, press ENTER to go back to the 
beginning of the quiz. 

Quiz is a loop program. To exit you have to BREAK 
either at one of the FAUSEs or during a false SAVE 
routine (you tell it to SAVE, but recorder is not turned 
on). If you accidentally BREAK and wish to continue, just 
enter CONT. If that fails, enter GOTO 1160. You will be 
able to restart your quiz from the beginning without losing 
your questions. If you should BREAK during your ques¬ 
tion and answer input, try CONT. If that doesn’t work, 
you’ll have to start over by entering RUN. 


(Ed. Note—When you enter Quiz, follow the spacing in 
the listing exactly. It is important for a nice display. 
Lines with inverse video and graphics are: 


Line 

Graphics 

. { 

Inverse Video 

30 

32 graphic 

ENTER ANSWER with 


shift 7 

1 space on either side 

900 


ZX-81 QUIZ with 1 
space on either side 

1020 


VERY GOOD THAT 

IS CORRECT with 1 
space on either side 

1060 


I AM SORRY THAT 

IS NOT CORRECT 
with 1 space on either 
side 

1130 


ENTER with 1 space 
on either side 

1170 


CORRECT with 1 
space on either side 


34 


SYNTAX QUARTERLY/SPRING 1983 




After entering your questions and answers, you can 
BREAK to stop program execution. Start your tape 
recorder, then enter GOTO 1230. The program will save 
to tape under the name “QUIZ.” When you next load the 
tape, the program will start automatically with the quiz at 
line 830. If you BREAK now and look at the program 
listing, you’ll see the Z in QUIZ (line 1230) is in inverse 
video. This is normal in self-starting programs.) 

List of Variables Used 


DIM A$(E) 

DIM A (A,D) 
B$ 


Stores all questions, answers, choices 
and statements. 

Used to slice DIM A$(E). 

See program line 30. 

Sets up the type of test. 

Sets up the wrong answer explanation. 
Input information. 

Input information. 

Explanation of wrong answer. 

Quiz title. 

Student name. 

Used to compare correct answer to stu¬ 
dent’s answer. 

Number of questions (length of array A). 
Number of choices in multiple choice 
section. 

FOR-NEXT routine counter. 

Depth of array A. 

Length of array A$. 

FOR-NEXT routine counter. 

Used to calculate the length of strings. 
FOR-NEXT routine counter. 

Score. 

SQ 


An enhanced version of this program is available on C-20 
tape from the author for $10. D Lipinski Software , 2737 
Susquehanna Road , Roslyn, PA 19001. 

5 REM "QUIZ” 

10 LET S=0 

2© POST __________ — _ 

^^^0CLS I » 

S© PRINT “UHfiT TYPE OF QUIZ DO 
YOU UISH TOHPUE?% ,*'I = HULIPLE 

CHOICE" .‘*2 = TRUE OR FRL5E","3 

= DIRECT hN5UER‘LB$ 

50 INPUT C$ 

T0 IF CODE C$<=28 OR CODE C$>= 
32 THEN GOTO 4© 

80 CL. 3 

90 PRINT "HOU MRNY QUESTIONS D 
O YOU UISH TO RSK7~,,0$ 

100 INPUT R 
110 CLS 

ISO PRINT "DO YOU UISH TO EXPLh 


120 PRINT "DO YOU UISH TO EXPLh 
IN THE","HN5UER IF IT IS WRONG?" 
.."I = YES",,"© = NO",,B$ 

130 INPUT D$ 

14-0 IF CODE D $ < =27 OR CODE > = 
30 THEN GOTO 110 
16© IF D$ = '*©‘* THEN LET H$ = " '* 

17© CLS 
ISO LET D=4 

130 IF C$ = “2** OR C$ = **3** THEN GO 
T u c38 


280 PRINT "UHRT IS THE MflXIHUH 
NUMBER OF** , "CHOICES PER QUESTION 
7","LIMIT OF 9**,,B!fi 
210 INPUT B 

215 IF B > =10 THEN GOTO 170 
220 LET D=B+4 

23© LET E= (PEEK 16386-PEEK 1S4-1 

2+256* (PEEK 16387 —PEEK 16413J-5© 
) -1300- (D* (R + l* *5) 

24-0 CLS 

250 PRINT "YOU WILL HRUE " ; R; ** 
QUESTIONS'* , "UITH R TOTRL CHRRRCT 
ER INPUT OF",E;TRB 0; *’RN RUERflGE 
OF ** ; E/R , "CHflRflCTERS PER QUEST I 
ON";TRB 0; ** IF THIS IS OKRY ENTER 
0**,'*IF NOT ENTER 1**,,B$ 

2S0 INPUT E$ 

27© IF CODE E$<=27 OR CODE E$> = 
29 THEN GOTO 48 
23© DIM flCR+1,0) 

29© DIM R*<E* 

30© LET RC 1,13=1 
320 FOR F=1 TO R 
330 CLS 

34-0 PRINT "UHRT IS QUESTION NUM 
BER F; **'?** , B$ 

350 INPUT E$ 

355 CLS 

360 PRINT E$;TfiB 0;"INPUT © IF 

THIS IS CORRECT"."INPUT 1 IF NOT 
CORRECT** ,B$ 

370 INPUT F$ 

330 IF CODE F$<=27 OR CODE F$ > = 

29 THEN GOTO 33© 

390 LET H=LEN E$ 

4.0Q LET RiF.2)=fi(F.l} +H 

4-10 LET R$CR(F,1) tO R(F,1) +H) = 

4-2© CLS 

4-30 PRINT "UHRT IS THE RN5UER? '* 
4.4.0 IF Ci = !! 2" THEN PRINT ** I = T 

RUE* . . *0 = FRLSE*' 

4-5© PRINT B $ 

4-S© INPUT E$ 

465 CLS 

47© PRXNT E$;TRB 0;"INPUT 0 IF 

THIS IS CORRECT","INPUT 1 IF NOT 
CORRECT** ,B$ 

475 IF C$ = "2" RND E$ = **l** THEN P 

PINT RT 0,©; ** 1 = TRUE- 

477 IF C$ = ‘*2** RND E $ = **©** THEN P 

HINT RT ©,©;**© = FRLSE" 

43© INPUT 

49© IF CODE F $ < =27 OR CODE F$> = 

29 THEN GOTO 42© 

495 IF C$ = ‘‘l** THEN LET E$ = ** 

** -+E$ 

500 LET H=LEN 

51© LET RCF,3)=RCF,2)+H 

52© LET R$(fiiF,2) TO R(F.2)+H)= 

53© IF CODE D$<=28 OR CODE D$> = 

30 THEN GOTO 60© 

54-8 CLS 

t>t>© PHiNT " UHRT IS THE EXPLRNRT 
ION** , "NO EXPLRNRT ION INPUT R 5PR 
CE".B$ 

560 INPUT 

565 CLS 

57© PRINT H$;TRB 0;“INPUT © IF 

THIS IS CORRECT"."INPUT 1 IF NOT 
CORRECT".6$ 

SB© INPUT F $ 

SO© IF CODE P$ <=27 OR CODE PS> = 

22 THEN GOTO 54© 

60© LET H=LEN 

618 LET R CP , 4) =R (F . 3> +-H 

62© LET Hf CR CF .. 3i TO K (F , 3 ) +H> = 

638 IF CODE C$<=28 OR CODE C-$> = 

38 THEN GOTO 753 

b 4 S F O H l_- = 1 T G B 

558 CLS 

660 PRINT 'UHRT IS THE NUMBER ** 
;C;*' CHOICE?" , "FOR NO CHOICE INP 
UT R SPfiCE",B$ 

67S INPUT E$ 

Continued Next Page 


SYNTAX QUARTERLY/SPRING 1983 


35 






F$> = 


7 * 5 © 

769 

7*7© 

789 

THE 

799 

795 

30© 

THIS 


0-71^ q |_-r. 

680 PRINT C; " = l, ;E$;TRB 0; “INP 

UT © IF THX5 13 CORRECT",“INPUT 
I XF NOT CORRECT".B$ 

SO© INPUT F $ 

7©0 XF CODE F $ < =27 OR CODE F$ > = 
29 THEN GOTO 658 
705 LET E$-CHR$ (C+28) + " = "+E?fi 

71© LET H=LEN E$ 

72© LET R (F , 4-+C) =R CF . 3+0 +H 
730 LET R$ (R CF , 3+0 TO RCF.3+0 
+H5 =5$ 

735 XF fi$(R(F.2)+l TO RCP.3) ~1) 
=E$(2 TO ) THEN LET R$(RKF S 2> TO 
R <F .,2# ) =CHR$ CC+23) 

74-© NEXT C 

75© LET R(F+I,1)=RCF,Di 
7S0 NEXT F 
77© CLS 

730 PRINT "UHRT XS THE TITLE OF 
THE QUI2?",B$ 

79© INPUT I$ 

795 CLS 

300 PRINT I$;TRB 0; " INPUT 0 IF 
THIS 15 CORRECT","INPUT 1 XF NOT 
CORRECT".B$ 

S1© INPUT F $ 

320 IF CODE F$<=27 OR CODE F$>= 
29 THEN GOTO 770 
83© CLS 

34.0 PRINT "UHRT IS YOUR NRME PL 
ER5E?",B$ 

358 INPUT Ufc 
3S0 CLS 

87© PRINT "THRNK YOU ";U$;TRB 0 
;"GET RERDY FOR YOUR QUIZ" 

38© PRU5E 488 

S90 CLS __ 

900 print trb 10; 

;TRB 0;I$;TRB 0;"TAKEN BY ";U$ 
910 PRUSE 4.0© 

920 FOR C=1 TO R 
930 CLS 

94.0 LET E$=ft$(R(C,l) TO ft*C,2>- 

1) 

^94.5 LET K$=R$(R«C,2) TO RCC,3) - 

950 PRINT "QUESTION NUMBER ";Q. 
TRB 0; E$;TRB 0; B$ i TO 32) 

955 IF C$ = ‘T" THEN LET K$=R$(R C 
C.,2) TO R CC, 2) ) 

968 IF C$ = "i" THEN FOR 1=4. TO D 

-1 

978 IF C$="1" THEN PRINT R$CR(C 
,1) TO R CC , I + l) -1) 

980 IF C$="l" THEN NEXT I 
990 IF C$="2" THEN PRINT "1 = T 
RUE",,"0 = FRLSE" 

1008 PRINT B$ 

101© INPUT F$ 

1030 IF K$=F$ THEN PRUSE 4-00 
104-0 IF K$=F$ THEN LET 5=5 + 1 

1070 PRUSE 4.0© 

1030 CLS 

1093 PRINT "THE CORRECT RNSUER I 
5";TRB 9;R$(RiC,2) TO R(C,3)-1) 
1100 IF C*="2" RND K$="l" THEN P 
RINT RT 1,0;"I = TRUE" 

1110 XF C$="2" RND K$="0" THEN P 
RINT RT 1,0;"0 = FRLSE" 

1120 PRINT R$iRiC,3) TO RiC.4)-1 

) 

1130 PRINT "PRESS TO CON 

TINUE"<5$ 

114-3 INPUT E$ 

1150 NEXT C 
1160 CLS 

117© PRINT "QUIZ IS COMPLETE. TH 
RNK YOU",U$;TRB 8, /‘YOUR SCORE X 
S "; s; " . "out OF r pos 

SXBLE ";R;" QUESTIONS«";TRB © ; "Y 
OUR GRRD5 RUERRGE IS ",5/Ril80; " 
PER CENT" 


1130 PRUSE 4-80 

1190 PRINT RT 15,0;"DO YOU UI5H 
TO 5RUE THIS PROGRRM1 = NO",,"© 
= YES",,B$ 

120© LET S=© 

121© INPUT F$ 

122© IF CODE F$ < =27 OR CODE F$> = 
29 THEN GOTO 33© 

1238 SAVE 'QUIZ" 

124-© GOTO 83© 

SYNTRCTIC SUM: 48475, SK ROM 


NEW FROM SILICON VALLEY ! 

COMPUWIZ SOFTWARE PRESENTS: 

Quality software for your 
ZX81/TS1000 computer. All at 
LOW, LOW prices. Super 

graphics and lots of fun! 


1. 

B 1 ackjac 

o 

i 

X 

...$10, 

.95 

2. 

Mastermi 

i nd, Supermi 

nd 



and Guess. 

,..$10, 

■ 95 

3. 

Escape, 

Snake 




and The 

Trap. 

,...$8. 

• 95 

4. 

2K Game 

Pack 




(5 action games) . . . 

,...$9, 

• 95 

5- 

ZX/TS Quick Referer 

ice 



Card.... 


,...$2. 

.50 


Games 1, 2 and 3 require 16K. 

Send Check or Money Order to: 
COMPUWIZ SOFTWARE, Box 390078 
Mountain View CA, 94039 

Cal. Res. please add 6% tax. 
SASE for list of new products. 
Dealer inquiries welcomed. 


EZRA GROUP II 
EZRA GROUP II 

LOW LOW LOW LOW LOW LOW LOW LOW LOW 
PRICES! 

Biorhythms 8K ROM/lK&up.1.00 

Graphics Billboard 8/lup.1.00 

TAP WRITER TM(Handicap Aid)8/1.FREE 

Horse Race 8/lup.2.00 

SPINNER TM(like Rubik•s)8/16...2.00 

Improved SLOW PAUSE.1.00 

Linear Regression 8/lup.2.00 

CHAR. Generator Demos 8/lup. i ..2.95 

Plotting Work Sheet 8/1....3.95 

Plottinq Work Sheet SLOW/16....6.95 

TRUTH value PROGRAMMING .2.00 

CHEWTER TM(like PACMN)SLOW/16..2.95 

ISLAND SQUARES TM SLOW/2up.2.00 

Random MUSICISLOW/lup.2.00 

BASIC Keyword Demos 8/1....from .50 
ORDER,SASE,reSASE gets you GOO¬ 
DIES Catalog and Program 

EZRA GROUP II 
EZRA GROUP II 

POB 5222 San Diego,California 92105 


36 


SYNTAX QUARTERLY/SPRING 1983 



















Join the 
CLICK! 

Enter your programs Faster & Easier 

with the E-Z Keyboard ... jKjBB SI 

At last, a large 60 key “Tactile Feel” 
keyboard that plugs into the same C Ht-S 

connectors as the existing keyboard 
on yourZX81 oryourTimex-Sinclair 

Hear the CLICK and feel a SNAP for every Only 
key pressed! (Tactile Feedback). . 




sal 



E-Z Key 60 has the following features: 

- 60 Keys - Legends in 3 colors on the base 

- Molded legends on key tops 

- 8 Automatic shift keys (no shifting required) 
for edit, delite, single and double quotes,colon, 
semi-colon, function and stop. 

- 2 Shift keys - Numeric key pad - 5" space bar. 
E-Z Key 60 requires no wiring (just plug it in) 
and can be adapted to fit the XZ80 or the 
MicroAce (8 KROM). The Mounting base 
measures 10"x4". Cables and instructions are 
included. 



KtYTOP BUTTON 
HINGED PtUNSCR 
HINGE ROD 
ROD STANDOFF 
FILM SEAL 


SWITCH SPECIFICATIONS: 

Key tops measure .4" x .3'' - spaced at 
%" intervals between keys. Life = 10 
million operations, typical. Force = 3. 
oz. Travel = .040". Dome switch, button 
type with arm to give .040" travel. 


A custom made enclosure (shown above) is 
also available for your computer and E-Z Key 
60 keyboard. 

Measurements: Price: 

EC-11 11"x9"x3". $25.00 

EC-14 14”x9''x3". $30.00 


WATCH FOR THES E NEW PRODUCTS! 

JOYSTICK: Joystick kit that requires nowiring 
and will fuction like the arrow keys &£f on your 
computer. 

E-Z Key 40 Replacement flat keyboard with 
embosing around each switch and 3 color legends 
and graphics as existing keyboard (plug in 
replacement). 

Delivery 4-6 weeks. 90 day warranty. 



E-Z HEY 


SUITE 75 A, 711 SOUTHERN ARTERY 
QUINCY, MASSACHUSETTS 02169 
_(617) 773-1187 


USE THIS OR DER FORM... 

□ Check or E-Z Key 60 

Money Order EC _, 1/14 

Charge to my: 

□ Visa □ Mastercard 

Card # _ 


E-Z KEY 

Suite 75 A 

711 Southern Artery 

Quincy, MA 02169 


Total units S&H $4 per unit 
Mass, res. add 5% sales tax 


SYNTAX QUARTERLY/SPRING 1983 


37 





















HARDWARE PROJECT 

O"" 3 JL J by John Oliger, Indianapolis, IN 


8K ROM/16K RAM 


Build Your Own EPROM 
Programmer and Centronics 
Printer Interface — Part II 


This is Fart II of “Build Your Own EPROM Program¬ 
mer and Centronics Interface.” Part I (SQ, Winter 82) 
covered building the expansion board and parallel printer 
port. John Oliger’s step-by-step demonstration in Part I 
also included etching printed circuit boards, printer port 
modification for use with full 48K RAM, decoding RAM 
and testing your board. All these projects require at least 
16K RAM. 


The EPROM (2716) Programmer 

Now we are going to build an EPROM (erasable pro¬ 
grammable read only memory) programmer and an 
EPROM read board. The programmer will program only 
the 2716 or TMS2516 EPROMs and it only programs. 
You cannot verify with this board; I omitted verify cir¬ 
cuitry in the interests of simplicity and cost. An EPROM 
programmer is not a circuit you use every day. While the 
ability to verify is a nice convenience, it’s not really 
necessary. 

Before you can use the EPROM read board or the 
EPROM programmer, you must fully decode the ROM to 


keep it from conflicting with this new address space. Use 
the circuit in schematic 6 on one of the spare IC sockets 
on the expansion board. 

If you make the 0-6K reader you will no longer need 
this circuit. You should remove it to keep it from fighting 
the decoders on that board. 

After you program an EPROM, turn off the computer. 
Remove the programmer board and take the programmed 
EPROM from it. Install the EPROM in the EPROM read 
board. Then load your program back into the computer 
and write a small BASIC program to verify the EPROM. 

When you have the printer driver on EPROM with the 
original program in RAM starting at location 28672, the 
verification program (listing 5) goes something like this: 


Listing 5 

10 LET X=8192 
20 FOR N=28672 TO 28960 
30 IF PEEK XOPEEK N THEN PRIN 
T X 

40 LET X=X+1 
50 NEXT N 


Schematic 6. All 
Trace Numbers 
Refer to Expansion 
Board Trace Num¬ 
bers as Already 
Explained. 


A15 TRACE 37B 
A14 TRACE 38B 
A13 TRACE 39B 



GND 


38 


SYNTAX QUARTERLY/SPRING 1983 






Our EPROM programming program (listing 6) goes like 
this: 


Listing 6 




10 

SLOW 




20 

LET X 

= 8192 



30 

FOR N 

= 28672 

TO 28960 


40 

POKE 

X, PEEK 

N 


50 

LET X 

= X + 1 



60 

PAUSE 

4 



70 

NEXT 

N 




With my programmer, I’ve never had a “Not Verify 1 
that was the hardware’s fault. The only one I programmed 
wrong was my own error. If you see dark wide horizontal 
bars on the screen during programming, the EPROM is in 
backwards. 

The programmer has its own one-shot aboard to time 
the programming pulse, so you need no software for this. 
But be careful not to address this block of memory again 
for at least 50 ms. Hence the PAUSE 4 in line 60. Don’t 
leave this line out! 

To build the programmer, etch and plate the board just 
like the port board you already built. Use board layout 3. 
On this board you need to jumper from pin 10 of U5 to 
ground on the bottom. When installing the feedthroughs, 
be careful not to put any where C6, C5, Cl and R1 
mount (just to the left of U3). They are soldered top and 
bottom, so their leads act like the feedthrough (see 
schematic 7). 

Solder a solid red wire to the bottom of the board to 
pad marked Vpp. Solder a solid black wire to pad 12 of 


the 2716 (ground). These wires should extend about 2 
inches above the top of the board. Strip the ends and 
bend them into an O shape. You will connect the 25 volt 
supply to these when you program. 

The 25 Vdc regulated power supply necessary to pro¬ 
gram should have a tolerance of + or -1 volt. You may 
use any well filtered and regulated supply you like, or you 
can construct the circuit in schematic 8 on a small perfo¬ 
rated board. It draws very little current, so use the 
smallest and cheapest transformer you can find. 

Turn on the supply just before you run the BASIC pro¬ 
gram, and turn it off as soon as programming is complete. 
It should be off while you enter the driver program and 
while you turn the computer on and off. Without this 
voltage present, no programming can take place. Use 
alligator clips on the output wires from your supply to 
connect it to the solid wires on the board. Be careful to 
keep them from touching any other boards or parts. Also 
be careful not to attach them backwards! Use a red alli¬ 
gator clip for -1-25 and a black one for ground. 

Don’t forget to install C2 and C3 on the bottom of the 
board. All vertical ICs have pin 1 down, while horizontally 
mounted ICs (U4 and U5) have pin 1 to the left (viewing 
from component side of board). Because you probably 
won’t program EPROMs for a living, a ZIF (zero insertion 
force) socket for the EPROM is not necessary. Be sure to 
use only quality parts for R1 and Cl. I used a “mono¬ 
lithic” capacitor for Cl (5%). Use a resistor measured to 
be very close to 450K. 

EPROM Read Boards 

After you have the printer converter/driver routine in 
EPROM, you need to make the 8-16K EPROM read 



SYNTAX QUARTERLY/SPRING 1983 


39 




board. Use the same method we used for all the other 
boards in these projects, using board layout 4. The socket 
on the bottom is mapped 8192-10239. Second from the 
bottom is mapped 10240-12287. Third from the bottom 
is 12288-14335. The top one is mapped 14336-16383. 

After you build the 8-16K read board, you can burn 
the printer driver into ROM (listings 9 and 10). Then after 
you build the 0-6K board, you can use LFRINT, LLIST 
and COPY to your printer port! 

Don’t forget to install the wire jumper from pin 1 U1 to 
pin 6 U2. The tantalum bypass capacitor, C3, should be 
mounted underneath the bottom EPROM socket. This is 
because Vcc and ground come into the memory array 
from the top and are, of necessity, small. The exact value 
is not critical because it is only really used as a “storage 
tank.” Again, Vcc and ground should be built up with 
solder for low impedance. Cl is mounted just above Ul; 
C2 is mounted just left of E4. Be sure to observe polarity 


on these components (see schematic 9). If installed back¬ 
wards, they will sometimes blow up like a firecracker! 

Our final project is to construct the 0-6K EPROM read 
board. On it you will mount one to three EPROMs con¬ 
taining the monitor with a few changes. Construct the 
0-6K board just like you are building another 8-16K 
board, except make the changes listed on the schematic. 
You will not use the top socket on this board (see sche¬ 
matic 10). 

We want at least part of the monitor on EPROM so we 
can change things. The main changes we want are in the 
second 2K block (E2—2048-4095), specifically, a call to 
02E7 at 0876H. After this patch, we can use all Sinclair’s 
printer commands, LLIST, LPRINT, and COPY. At this 
point in the ROM, the HL register points at the first char¬ 
acter to print and the D register contains the number of 
lines to print (1 if printing from the printer buffer or 22 if 
printing from the display). We want to change this call to 



40 


SYNTAX QUARTERLY/SPRING 1983 





































MAPPED FROM 8192 TO 10,239 DECIMAL 
2000 TO 27FF HEX 



Ins . TMS-2516 or 
Non-Texas Ins. 2716 
EPROM Program¬ 
mer 


SYNTAX QUARTERLY/SPRING 1983 


41 





02E7 to a call to 20C8. With the call to 20C8, the com¬ 
puter goes to our ASCII convert/drive routine instead of 
entering the temporary FAST mode as originally in¬ 
tended. Here we save on the stack the registers we will 
use, convert the characters to ASCII and send them to 
the printer, get the registers back that we saved, and then 
simply jump to 02E7 for the monitor. If the ZX printer is 
attached, it will print the same thing our printer just did. If 
our printer’s own print switch is off, the computer just 
prints to the ZX printer. 

To change 0877 from E7 to C8 and 0878 from 02 to 
20, copy this part of the ROM to EPROM with the BASIC 
program in listing 7 and, of course, our EPROM 
programmer. 

The next program, listing 8, copies the first block of the 
monitor. In it, we change location 4 from FFH to FEH 
and location 5 from 7FH to FFH. With this change, the 
monitor checks all our memory on power up, rather than 
just 16K. Now if you have greater than 16K on your com¬ 
puter, you won’t have to move RAMTOP every time you 
power up. 

You change location 3 to only 254 because the monitor 
increments the initial value and stores it as RAMTOP. 
Thus it would increment 255 to 0 and store 0 as RAM- 
TOP. The system would still function, but the display file 



Listing 7. 



1 0 

SLOW 



20 

LET X=8192 



30 

FOR N=2048 TO 

2166 


40 

POKE X,PEE K N 

4 . t 


50 

LET X=X+1 

* 


60 

PAUSE 4 



70 

NEXT N 



80 

PAUSE 4 



90 

LET X=X+2 



100 

FOR N=2169 TO 

4095 


11 0 

POKE X , P E E K N 



120 

LET X=X+1 



130 

PAUSE 4 



140 

NEXT N 



150 

POKE 8311,200 



160 

PAUSE 5 



170 

POKE 8312,32 



42 


SYNTAX QUARTERLY/SPRING 1983 












Listing 8. 


10 

POKE 8192, 

PEEK 

20 

PAUSE 5 


30 

POKE 8193, 

PEEK 

40 

PAUSE 5 


50 

POKE 8194, 

PEEK 

60 

PAUSE 5 


70 

POKE 8195, 

254 

80 

PAUSE 5 


90 

POKE 8196, 

255 

100 

PAUSE 5 


11 0 

LET X=8197 


120 

FOR N=5 TO 

2047 

130 

POKE X,PEE 

K N 

140 

LET X=X+1 


150 

PAUSE 4 


160 

NEXT N 



would be collapsed. Then the more memory your pro¬ 
gram used, the longer the computer would take to print 
something on the screen. I know, because I changed 
location 3 to 255 the first time! 

You can program the third block without any changes. 
However, now that it is on EPROM, you could change it 
if the need arose. The last block can be programmed 
directly also if you want to put it on EPROM. If you do, 
you have to mount it inside the computer and slightly 
rewire the socket (see below). Because the character 
generator is in this last block of memory, you may want to 
put it on EPROM to change the characters. I changed the 
British pound sign to a “!” because I didn’t use the pound 
sign enough to justify its own key. 

If you choose to only put the second block on EPROM, 
then you must also build the little circuit to decode for this 
(see schematic 11). 


ASCII Convert and Copy Routine 

Multilength Character Lines. (POKE system flag 16507 
the number of ‘ENTERs’ to ignore. 16508 is used as a 
counter.) (Listing 9.) 


ASCII Conversion Table 


2000 

20 

81 

82 

83 

94 

95 

96 

97 

2008 

FF 

FC 

83 

22 

21 

24 

3A 

3F 

2010 

28 

29 

3E 

3C 

3D 

2B 

2D 

2A 

2018 

2F 

3B 

2C 

2E 

30 

31 

32 

33 

2020 

34 

35 

36 

37 

38 

39 

41 

42 

2028 

43 

44 

45 

46 

47 

48 

49 

4A 

2030 

4B 

4C 

4D 

4E 

4F 

50 

51 

52 

2038 

53 

54 

55 

56 

57 

58 

.59 

5A 

2040 

20 

20 

20 

20 

20 

20 

20 

20 

2048 

20 

20 

20 

20 

20 

20 

20 

20 

2050 

20 

20 

20 

20 

20 

20 

20 

20 

2058 

20 

20 

20 

20 

20 

20 

20 

20 

2060 

20 

20 

20 

20 

20 

20 

20 

20 

2068 

20 

20 

20 

20 

20 

20 

20 

20 

2070 

20 

20 

20 

20 

20 

20 

0D 

20 

2078 

20 

20 

20 

20 

20 

20 

20 

20 

2080 

FF 

FE 

FD 

FC 

EB 

EA 

E9 

E8 

2088 

FF 

83 

FC 

40 

23 

24 

7E 

25 

2090 

7B 

7D 

3E 

3C 

26 

2B 

5F 

2A 

2098 

2F 

60 

27 

2E 

30 

31 

32 

33 

20A0 

34 

35 

36 

37 

38 

39 

61 

62 

20A8 

63 

64 

65 

66 

67 

68 

69 

6A 

20B0 

6B 

6C 

6D 

6E 

6F 

70 

71 

72 

20B8 

73 

74 

75 

76 

77 

78 

79 

7A 


If you wish to put the last block (6-8K) on EPROM, cut 
the foil trace from pin 18 of the ROM socket and jumper 
pin 18 to ground (pin 12). Then cut the trace to pin 21 on 
the ROM socket and jumper pin 21 to Vcc (pin 24). The 
6-8K EPROM must be in the main computer because it 
contains the character generator. Install the programmed 
2716 into the ROM socket exactly as the original ROM 
was installed. SQ 



SYNTAX QUARTERLY/SPRING 1983 


43 




Listing 10 


Address 

Location 

Contents 

20C0 

1616 

20C2 

2A0C40 

20C5 

23 

20C6 

1811 


Calls here (20C8) from monitor 

20C8 

3AFFFF 

20CB 

CB5F 

20CD 

2807 

20CF 

E5 

20D0 

D5 

20D1 

CDD920 

20D4 

D1 

20D5 

El 

20D6 

C3E702 

20D9 

7E 

20DA 

23 

20DB 

E5 

20DC 

210020 

20DF 

85 

20E0 

6F 

20E1 

3001 

20E3 

24 

20E4 

CD460F 

20E7 

3808 

20E9 

3E0D 

20EB 

32FFFF 

20EE 

El 

20EF 

CF 

20F0 

oc 


Label 

Mnemonic 

COPY 

LD D,16 


LD HL,(DFILE) 


INC HL 


JR CONV 


PTCH 

LD A, (PORT) 
BIT 3,A 

JR Z RETP 
PUSH HL 
PUSH DE 


CALL CONV 


POP DE 

POP HL 

RETP 

JP TFAS 

CONV 

LD A,(HL) 


INC HL 


PUSH HL 


LD HL.TABL 


ADD L 

LD L,A 

JR NC BRK? 


INC H 

BRK? 

CALL 0F46 


JR C CHEK 


LD A,0D 


LD (PORT),A 


POP HL 


RST 08H 
REPORT D 


Comment 

;Set ‘D’ for 22 lines 

;Get screen memory address 

; Point at first 

character 

;Go and copy the 

; screen 


;Get printer status 
;Is print switch on? 

; Return to monitor 
; if not save registers 
;used for ZX printer 
;use, later 

;Call ASCII Conv/Drive 
; Routine 

; Restore registers 
;for ZX printer use 

;Jump to Temp Fast’ 
;for monitor 

;Get character code to 

;LPRINT 

; Point at next 

character 

;Save location for 

; later 

; table 

;Point at conversion 
; table 

;Add displacement code 
;Put this in “lo” byte 
;Jump over inc if no 
; carry 

; Increment “hi” byte 

; Check for depressed 
; break key 
; Jump over return if 
;no break 

;Put ASCII code for 
; carriage return in A 
;And send it to the 
; printer 

; Clear next address 
;from stack 
; Return w/report U D” 

; Break key pressed 


44 


SYNTAX QUARTERLY/SPRING 1983 






Listing 10 Continued 


Address 

Location 

Contents 

Label 

20F1 

1E02 

CHEK 

20F3 

3AFFFF 

RDY? 

20F6 

FE18 


20F8 

20EA 


20FA 

ID 


20FB 

20F6 


20FD 

7E 

GUT 

20FE 

FEOD 


2100 

2012 


2102 

217B40 

LDN? 

2105 

F5 


2106 

7E 


2107 

23 


2108 

BE 


2109 

2805 


210B 

FI 


210C 

34 


210D 

15 


210E 

1807 


2110 

FI 

CCNT 

2111 

3600 


2113 

15 


2114 

32FFFF 

SEND 

2117 

El 


2118 

20BF 


211A 

C9 



Mnemonic 

Comment 

LD E,02 

;Set ‘E’ to check 
; status twice 

LD A, (PORT) 

;Get printer status 

CP 18 

;Is it ready to 
; receive? 

JR NZ BRK? 

;Loop to break test if 
;not 

DEC E 

; Decrement check 

; counter 

;o.k. 

JR NZ RDY? 

;Loop ‘till 2 times 

LD A,(HL) 

;Get converted code to 
;send 

CP 0D 

;Is it an “ENTER”? 

JR NZ SEND 

;Go and send it if not 

LD HL,FLAG 

; Point at multiline 
;flag 

PUSH AF 

;Save “ENTER” on the 
; stack 

LD A,(HL) 

;Now, get the flag 

INC HL 

; Point at the counter 

CP (HL) 

; Ready to send “ENTER 
;now? 

JR Z CONT 

; Clear counter & send 
; enter if true 

POP AF 

; Clear the stack 

INC (HL) 

; Increment counter 

DEC D 

; Decrement line 
; counter 

JR 2117 

;Jump over driver, 

; this time 

POP AF 

t 

;Get “ENTER” to send 

LD (HL),00 

; Reset the counter 

DEC D 

; Decrement the line 
; counter 

LD (PORT),A 

;Send character to the 
; printer 

POP HL 

;Get next char address 
;to convert 

JR NZ CONV 

;Go do next char if not 
;done 

RET 

; Return to caller 


SYNTAX QUARTERLY/SPRING 1983 


45 



Operation Codes 
of the 8080, 8085, 
and Z80 Processors 

D Martin Harrell 
313 Hollyberry Rd 
Se verna Park MD 21146 


Manual conversion between assem¬ 
bly language mnemonics and hexa¬ 
decimal object code can be tedious — 
particularly if much code is involved. 
However, the task does not have to 
be overwhelming. A conversion table 
helps immensely and is also a good 
training aid for novice programmers. 
It presents the entire instruction set in 
compact form, revealing useful pat¬ 
terns, and also inconsistencies. 

8080 and 8085 Operation Codes 

Operation codes for the Intel 8080 
and 8085 microprocessors are shown 
in table 1. The only difference be¬ 
tween the instruction sets for this pair 
is that the 8085 has two additional in¬ 
structions: the read-interrupt-mask 
instruction (mnemonic RIM, hexa¬ 
decimal code 20), and the set-inter¬ 
rupt-mask instruction (mnemonic 
SIM, hexadecimal code 30). They 
allow the user to control interrupts 
and a serial I/O (input/ output) line, 
thus making them useful additions. 

The position of an 8080/8085 oper¬ 
ation code in the table does not give a 
reliable clue about the implied ad¬ 
dressing mode. Table 1 is generally 
organized according to the operands 
involved. Residing in the middle eight 
columns of the table (columns 4 thru 
B) for example, are the instructions 
for single-byte move, arithmetic, and 
logical operations. (Length attributes 
in this article refer to data, rather 
than instruction length, unless other¬ 


wise noted.) Regardless of the 
column, progression through the 
eight possible choices for the source 
(second) operand is always in the 
same sequence as the user moves 
down a column: registers B thru L; 
followed by memory reference; and 
finally, register A, the accumulator. 
Then, because each column has six¬ 
teen entries, the sequence repeats. If 
the arithmetic and logical instruction 
groups do not seem to conform to this 
rule, note that the first operand 
(always register A) is implied rather 
than stated explicitly. 

This same sequence is used for ad¬ 
vancing through choices for the 
destination (first) operand. In this 
case, however, progression is column 
to column from left to right, with 
each successive column containing 
two of the eight possible operands. 
The double-byte instructions also 
conform to this first-operand type of 
arrangement. Most of these appear in 
the first four columns of the table; 
however, the stack commands to 
PUSH and POP double-byte data are 
located at the far right in the top 
section. 

An apparent inconsistency appears 
in the middle of the table. Hexa¬ 
decimal code 76 is the instruction to 
halt the processor (HLT). Expected 
there instead is MOV M,M, the op 
code meaning "move the content of 
the memory location whose address is 
in the H and L register pair into that 


same memory location/' The expect¬ 
ed instruction is effectively just a slow 
equivalent of the no operation (NOP) 
located at hexadecimal 00. Hence, its 
replacement by the halt command 
improves, rather than degrades the 
power of the instruction set. Still, I 
wonder why an otherwise empty spot 
in the table was not chosen — as was 
done for the two additional 8085 
instructions. 

The right quarter of the table main¬ 
ly contains program branching and 
data exchange instructions. Excluding 
the previously mentioned stack com¬ 
mands, none of these have explicit 
operands so the previously discussed 
organization is impossible. The mis¬ 
cellaneous nature of these instruc¬ 
tions also tends to prevent predictable 
order. 

Nonetheless, the op codes in this 
area have a consistent structural 
style. Most are arranged in com¬ 
plementary order, with mutually 
exclusive conditions placed in the 
same column, separated by eight 
rows. The group of return instruc¬ 
tions is typical. The unconditional 
return from subroutine command is 
hexadecimal C9. Starting immediate¬ 
ly above it and proceeding to the 
right, four of the eight conditional 
return instructions are found. The 
other four (the complements) are 
eight rows higher. 

The order in which these condi¬ 
tions appear is uniform from group to 
group. To determine that this is so, 
compare similar elements of the call, 
jump, and return groups. The uncon¬ 
ditional jump (JMP) instruction is a 
curious exception. Its expected code is 
CB, but it actually appears eight rows 
higher in the table. Such exceptions 
are few enough not to be bothersome. 

Z80 Operation Codes 

The Z80 is an enhanced version of 
the 8080. It runs faster, has twice as 
many general purpose registers, and 
has a much larger instruction set. 
Included as a subset in this instruction 
is the entire repertoire of the 8080. 
(This compatibility exists at the 


“From Operation Codes for 8080, 8085, and Z80 Processors by D. Martin Harrell 
appearing in March 1980 issue of BYTE magazine. Copyright ©1980 Byte Publica¬ 
tions, Inc. Used with the permission of Byte Publications, Inc.” 


46 


SYNTAX QUARTERLY/SPRING 1983 


machine language level, but not the 
assembly language level; standard 
mnemonics and assembly language 
formats tor the two processors differ 
considerably.) Thus, in hexadecimal 
object form, almost any program 
written for the 8080 will produce 
identical results when executed by a 
Z80. Because of the Z80's generally 
higher speed, software timing loops 
are an exception to this upward com¬ 
patibility feature. [Editor's note: 
There is also a slight difference in the 
operation of the parity flag . . . .RSS] 

The similarities of the two instruc¬ 
tion sets can be seen by comparing 
corresponding positions of table 1 
and table 2. Table 2 is the basic con¬ 
version table for the Z80. For every 
valid 8080 instruction in table 1, its 
correspondent in table 2 produces 
logically equivalent results. The dif¬ 
ferences between the two instruction 
sets stem from the twelve positions 
unused by the 8080. These, which are 
clearly indicated in table 2, are used 
to greatly expand the Z80's capabil¬ 
ity. 

The Zilog Corp used the seven un¬ 
filled positions on the left side of table 
1 and the uppermost one on the right 
side to give the Z80 processor the 
ability to perform relative branching 
and to exchange the contents of its 
two sets of registers. However, the 
use of hexadecimal codes 20 and 30 
for two of the jump relative instruc¬ 
tions means that the Z80 is not as 
compatible with the 8085 as it is with 
the 8080. 

The real expansion of the Z80's in¬ 
struction set over that of the 8080 is 
the result of the interesting use of the 
four other empty spaces in table 1. In 
essence, the Z80 uses them as pointers 
to four additional 16 by 16 tables, 
thus increasing the number of possi¬ 
ble op codes by 1532. (The Z80 does 
not use most of these, but flexibility 
for future expansion is certainly 
there.) Had this innovative use of the 
unimplemented codes not been done, 
the Z80 would have been limited to 
256 different op codes, which is only 
twelve more than the 8080. 

There is a penalty for this flexibi¬ 
lity: all instructions in these expan¬ 
sion sets must be multibyte. The first 
byte identifies the appropriate expan¬ 
sion instruction set, after which, the 


second byte identifies the operation 
to be performed. Sometimes there is 
an additional third or fourth byte to 
provide data or addressing informa¬ 
tion. 

Shift, Rotate, and Bit 
Manipulation Instructions 

Consider these pointer instructions 
one at a time. All of the instructions 
which begin with hexadecimal CB are 
contained in table 3. All of the direct¬ 
mode instructions to shift or rotate 
(in either direction) any byte in 
memory or in any of the eight active 
registers are located here. Table 3 also 
contains the direct-mode instructions 
to set, reset, or test any bit in any of 
these bytes. All of these operations 
have a length of two bytes. Interest¬ 
ingly, there are more valid instruction 
combinations derived from the ten 
basic instructions in this table than 
there are in the entire 8080 set. 

Two features of table 3 are notable. 
The first is the absence of a 'shift left 
logical" counterpart to the SRL com¬ 
mand group. The shift left logical 
counterpart is not there because it is 
not needed; the "arithmetic shift left" 
instructions in column 2 (hexa¬ 
decimal) accomplish this function. 
The use of the same general organi¬ 
zational rules indicated earlier for the 
8080 is the more important of the 
two properties of this table. Such 
uniformity is a good aid in locating 
instructions in this table. 

Indexed Instructions 

Instructions beginning with hexa¬ 
decimal DD are in one of two indexed 
classes of instructions. These use the 
IX and IY registers respectively in 
forming a data address. Those related 
to the former are depicted in table 4 
and its associated table 5. 

The analogy between tables 2 and 4 
and between tables 3 and 5 is striking. 
The organizational patterns are iden¬ 
tical — even to the point of using the 
same expansion technique. They 
should be identical. Each of these 
indexed instructions was formed by 
replacing the (HL) operand of an 
equivalent register-indirect instruc¬ 
tion with the indexed notation 
(IX + d). Thus, every operation that 
can be performed in the register- 
indirect mode by the 8080 or Z80 can 


also be performed in the indexed 
mode by the Z80. 

The resulting positional equiva¬ 
lence between the two sets of tables is 
most helpful in determining the 
required hexadecimal code for the 
indexed instructions. An easy way to 
do this without having to refer to 
tables 4 or 5 is to first select from 
table 2 or 3 (as appropriate) the hexa¬ 
decimal code for the register-indirect 
form of the desired operation. Then 
place a DD prefix in front of this code 
if the operation was found in table 2, 
or a DDCB prefix, if found in table 3. 
Finally, place after this code group a 
displacement suffix, d. 

The Z80 also has a second index 
register, which is designated the IY 
register. Op codes which use it for 
addressing are contained in tables 6 
and 7. It takes only a quick glance to 
notice the strong similarity between 
tables 4 and 6 and between tables 5 
and 7. As might be expected, virtual¬ 
ly everything said previously about 
the IX class of op codes also refers to 
the IY class. The sole exception to this 
statement is that the IY-type instruc¬ 
tions begin with hexadecimal code 
FD, instead of DD. 

Miscellaneous Additions 

All fifty-six instructions in the last 
of the four expansion sets begin with 
hexadecimal code ED. They are listed 
in table 8. Though they are quite 
heterogeneous, they add considerably 
to the power of the Z80. Among 
these, for example, are instructions 
that enhance the 16-bit arithmetic 
capability, set interrupt modes, per¬ 
mit complementing the accumulator, 
and allow a register-indirect type of 
I/O to be performed. There are 
instructions also, which allow coun¬ 
ting or block processing to be done 
during loading, comparison, and I/O 
operations. Even if the other three 
expansion sets were omitted, the 
instructions in this set would be 
highly useful additions to the basic 
8080 complement. 

With such a hodgepodge of func¬ 
tion, it is rather surprising that any 
order at all can be made of these ED 
class instructions. Nonetheless, con¬ 
sistency with the other tables is main¬ 
tained. It is evident from the arith¬ 
metic and the leftmost I/O instruc- 


SYNTAX QUARTERLY/SPRING 1983 


47 



tions that arrangement by order of 
tirst and second operands is used 
whenever possible. Separation of 
complementary functions by eight 
rows in a column is also followed. 

There are 696 valid op codes in the 


seven Z80 tables. Without organiza¬ 
tional consistency, conversion of 
these instructions from mnemonic to 
hexadecimal form would be extreme¬ 
ly difficult and probably ridden with 
error. Fortunately, these codes are 


very well arranged, following the pat¬ 
tern established for the 8080. It takes 
a little practice to become adept at 
making these transformations, but 
with the aid of these tables it can be 
accomplished successfully. ■ 



i&mf lit mum IP '■ wm 

•«{tHi! 


thfuithmft till no 

ijiftittmftm-ttrjit 


r f[V" fi * 


48 


SYNTAX QUARTERLY/SPRING 1983 




































































































































































First Nybble 


fc 

RP 

POP PSW 

jp 

DI 

CP 

HJSH PSW 

0 RI 

3 

H 

V 

£ 

SPHL 

a 

— 

u 

CM 

— 

CPI 

— 

Eh 



X 

JPO 



X 


a 


— 



H 




H 

RK 

£ 

i 

CP0 

£ 

£ 

ANI 

Eh 

& 

w 

a 

i 

JPE 

s 

X 

CPE 


XRI 

Eh 

e 

X 

RNC 

POP D 

JNC 

_ 

Eh 

B 

o 

5 

PUSH D 

ins 

RST 16 

a 


or 

a 

CC 


SBI 

Eh 

a 



POP B 




pq 





1 


1 


1 


u 

RNZ 

JNZ 

JMP 

CNZ 

X 

CO 

£ 

ADI 

RST 0 

RZ 

RET 

JZ 


cz 

CALL 

ACI 

RST 8 


X 

o 

X 

td 

X 

-i 

£ 

X 

X 

o 

pq 

w 

X 

X 

£ 

X 

X 

P§ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

g 

X 

ft 

ft 

% 

ft 

ft 

ft 


o 

o 

o 

o 

o 

o 

o 

o 

u 

s 

§ 

u 

S 

0 

0 

0 


X 

o 

x 

w 

X 


£ 

X 

X 

o 

pq 

Cd 

X 

X 

£ 

X 

X 

< 

X 

x 

X 

< 

< 

< 

X 











% 

3 

a 

a 

a 

a 

a 



* 



3 


§ 


pq 

o 

X 

w 

X 


£ 

X 

X 

o 

pq 

w 

X 

X 

£ 

X 

Os 

pq 

pq 

pq 

pq 

PQ 

X 

X 

X 

X 

X 

X 

X 

X 

X 

X 

X 


X 

CO 

co 

X 

W 

CO 

Eo 

X 

X 

X 

X 

X 

X 

X 

X 

X 


pq 

u 

X 

w 

X 


£ 

X 

X 

o 

pq 

pq 

X 

X 

£ 

X 

00 

§ 

§ 

x 

§ 

§ 

§ 

§ 

Q 

pq 

a 

a 

a 

a 

a 

a 

a 

a 


x 

x 

X 

X 

X 

< 

X 

X 

X 

X 

X 

X 

X 

X 

X 

X 


pq 

o 

Q 

w 

X 



X 

X 

u 

pq 

pq 

X 

X 

£ 

X 


x 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

X 

X 

X 

X* 

X 

X 

X 

x" 


> 

> 

> 

> 

> 

> 

X 

> 

> 

> 

> 

> 

> 

> 

> 

> 


£ 

£ 

£ 

£ 

£ 

£ 


£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 


pq 

O 

X 

Cd 

X 

X 

£ 

X 

X 

o 

pq 

pq 

X 

X 

£ 

X 

SO 

X~ 

X 

X 

X 

X 

X* 

X 

x" 

X 

£ . 

X 

X 

x" 

X 

X 

X 


> 

> 

> 

■> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

§ 

> 


X 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 


CP 

O 

Q 

td 

X 

X 

£ 

X 

X 

O 

Q 

Cd 

X 

X 

£ 

X 


X 

X 

X* 

X 

Q 

a 

q" 

Q 

w“ 

w 

w" 

Cd" | 

Cd" 

pq 

Cd" 

Cd" 


> 


> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 


£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 


pq 

O 

Q 

Pd 

X 

X 

£ 

X 

X 

O 

Q 

Cd 

X 

X 

£ 

X 


pq 

pq 

cq 

PQ" 

PQ* 

PQ 

x" 

PQ 

o 

o 

O 

O 

o 

u 

U 

U 


> 

> 

> 

>■ 

> 

> 

> 

> 

> 

> 

>' 

> 

> 

> 

> 

>• 


£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 

£ 



X 


X 






X 


X 







CO 


CO 

£ 

£ 

£ 



X 


X 

X 

X 

X 


rq 

§ 

hH 

H 

X 

X 

X 


H 


pq 

a 

X 

X 

X 


£ 


trt 

a 

CO 

s 

5 

a 

£ 

X 


a 

X 

a 

5 

a 

> 

£ 

U 


11 

X 


X 

X 

X 

X 



X 

pq 

x 

X 

X 

X 



§ 

M 

X 

X 

X 

X 


5 


pq 

X 

X 

X 

X 




n 

a 

CO 

a 

5 

a 

£ 

a 


a 

X 

a 

5 

a 

> 

£ 




Q 

X 

Q 

Q 

Q 

pq 



pq 

Q 

X 

pq 

Cd 

Cd 




M 

a 

X 

X 

X 

M 

X 


cq 

2 

X 

X 

X 

!_) 

a 



a 

E- 

co 

5 

5 

a 

£ 

X 


a 

3 

a 

5 

a 

£ 





PQ 








X 






o 

a. 

o 

M 

a 

X 

X 

X 

tH 



X 

>j 

X 

X 

X 


o 

05 


£ 

a 

E- 

co 

5 

5 

a 

> 

£ 



a 


a 

5 

a 

> 

£ 

X 


O 

- 

CSJ 

f'N 



sO 

CS- 

00 

Os 

X 

X 

o 

pq 

Cd 

X 


apqq^N puooeg 


I 55 

-c c 
** a 




£o 
C 5 
c * 

P> ^ 

c 
o 
u 

•§ § 

i ^ 

k. k. 

® v5 


Cu 


o * 

JO 2* 
<A •f- 
PU •*- 
U ^ 

8 ° 
a. 


5 -2 

Lo C 

00 o 
o o 
00 — 

•* g 

c § 

a -2 

29 .n 
§ c 
cs 

-c 00 

*- o .c 
'o' ^ "5 

S-s j 

-§ * 

O -£> >> 
<j -q -a 

S ts 

o 7S ^ 

’■§ « « 
? V) <U 

s..* - ! 

o ^ -5 
° « 


■£ .a $ 
v rrS 10 

O ^ 00 
u) . O 

<J 0) 00 

| o S 
2 <j •£ 
^ tJ c 
c .*> 

5! -a 

< o c 

* U 0 

V £ "TS 

-3 2 C 
M 2 3 
■2 *» o 

MS v 



RET P 

POP AF 

JP P,nn 

M 

Q 

CALL P,nn 

PUSH AF 

OR n 

X 

a 

Eh 

a 

£ 

U 

X 

LD SP.HL 

JP M,nn 

M 

W 

CALL M,nn 

See Table 6 

CP n 

X 

Eh 

Cd 

RET PO 

POP HL 

JP PO.nn 

EX (SP),HL 

CALL P0,nn 

PUSH HL 

AND n 

RST 20H 

RET PE 

JP (HL) 

JP PE,nn 

s| 

td 

X 

S 

CALL PE,nn 

See Table 8 

XOR n 

RST 28H 

X 

RET NC 

POP DE 

JP NC,nn 

OUT (n),A 

CALL NC,nn 

PUSH DE 

SUB n 

RST 10 H 

RET C 

X 

X 

UJ 

JP C,nn 

IN A,(n) 

CALL C,nn 

See Table 4 

SBC A,n 

RST 18H 

o 

RET NZ 

POP BC 

JP NZ.nn 

JP nn 

CALL NZ,nn 

PUSH BC 

ADD A,n 

RST 00H 

RET Z 

RET 

JP Z ,nn 

See Table 3 

CALL Z,nn 

CALL nn 

ADC A,n 

RST 08H 

X 

OR B 

OR C 

OR D 

OR E 

X 

X 

o 

OR L 

OR (HL) 

OR A 

CP B 

CP C 

CP D 

CP E 

CP H 

CP L 

CP (HL) 

CP A 

X 

AND B 

AND C 

AND D 

AND E 

AND H 

AND L 

AND (HL) 

AND A 

XOR B 

XOR C 

XOR D 

XOR E 

XOR H 

XOR L 

XOR (HL) 

XOR A 

Os 

SUB B 

SUB C 

SUB D 

SUB E 

SUB H 

SUB L 

SUB (HL) 

SUB A 

SBC A,B 

SBC A,C 

SBC A,D 

SBC A,E 

SBC A,H 

SBC A,L 

SBC A, (HL) 

SBC A,A 

00 

ADD .4 , B 

ADD A,C 

ADD A,D 

ADD A,E 

ADD A,H 

ADD A,L 

ADD A, ( HL) 

ADD A,A 

ADC A,B 

ADC A,C 

ADC A,D 

ADC A,E 

ADC A.H 

ADC A,L 

X 

X 

X 

§ 

ADC A,A 

cs. 

LD (HL),B 

LD (HL),C 

X 

g 

9 

LD (HL),E 

LD (HL),H 

LD (HL),L 

HALT 

LD (HL),A 

LD A,B 

— 

LD A,C 

X 

X* 

9 

LD A,E 

X 

3 

LD A,L 

LD A,(HL) 

LD A,A 

SO 

LD H.B 

LD H,C 

X 

X 

3 

Cd 

X 

3 

X 

X 

3 

LD H,L 

LD H,(HL) 

LD H,A 

LD L,B 

LD L,C 

LD L,D 

LD L,E 

LD L,H 

LD L,L 

LD L,(HL) 

X 

X 

3 


X 

pq" 

9 

o 

pq 

3 

x^ 

x“ 

3 

Cd 

pq 

3 

X 

pq 

9 

LD D,L 

LD D,(HL) 

X 

pq 

3 

X 

Cd" 

3 

o 

Pd* 

9 

x_ 

Cd' 

3 

Cd 

Pd" 

3 

— 

LD E,H 

X 

Pd 

9 

g 

td" 

3 

LD E,A 


LD B,B 

o 

PQ 

3 

x_ 

PQ 

9 

LD B,E 

LD B,H 

X 

PQ 

3 

LD B,(HL) 

LD B,A 

X 

o 

3 

— 

LD C,C 

X 

u 

9 

Pd 

o" 

9 

LD C,H 

' LD C,L 

LD C,(HL) 

LD C, A 

rq 

<n 

o' 

Z 

CC 

LD SP,nn 

LD (nn),A 

INC SP 

g 

o 

0 

DEC (HL) 

c 

g 

9 

SCF 

CD 

o 

QC 

ADD HL,SP 

I 

X 

3 

DEC SP 

INC A 

X 

1 

c 

X* 

3 

CCF 

CSI 

JR NZ,e 

LD HL,nn 

LD (nn),HL 

INC HL 

INC H 

DEC H 

LD H,n 

1 

CD 

ini' 

CC 

—» 

ADD HL.HL 

LD HL,(nn) 

DEC HL 

INC L 

DEC L 

c 

X 

3 

CPL 

- 

DJNZe 

a 

9 

LD (DE),A 

INC DE 

INC D 

DEC D 

c 

pq 

3 

RLA 

JR e 

ADD HL.DE 

1 

X 

3 

DEC DE 

INC E 

DEC E 

fi 

Pd" 

3 

RRA 

o 

NOP 

§ 

a 

3 

LD (BC),A 

INC BC 

INC B 

DEC B 

LD B,n 

RLCA 

u. 

< 

llT 

X 

LU 

ADD HL,BC 

LD A,(BC) 

DEC BC 

INC C 

DEC C 

LD C,n 

1 


o 

- 

CSi 

<r\ 



SO 

Cs. 

CO 

Os 

X 

X 

u 

X 

Pd 

Cd 


a iqq^N puooag 


SYNTAX QUARTERLY/SPRING 1983 


49 


Table 2: Mnemonics of the operation codes of the Z80 microprocessor arranged for conversion to hexadecimal object code. Corre¬ 
sponding positions of table 1 and table 2 generally perform the identical function, despite differences in notation. Enhancements of 
the 8080 instruction set are indicated by shading. Mnemonics used here are those specified by Zilog. 













First Nybble 



eiqq-^N puooeg 




®iqq^N puooag 


50 


SYNTAX QUARTERLY/SPRING 1983 


Table 4: Operations of the Z80 invoked by the instruction prefix DD. These provide indexed-mode instructions equivalent to the 
indirect-mode instructions and employ the IX register. 




























































































































































































(ix+d) RL (ix+d) SLA (ix+d) BIT 0,(lX+d) BIT 2,(lX+d) BIT 4,(lX+d) BIT 6,(lX+d) RES 0,(lX+d) RES 2,(lX+d) RES 4,(lX+d) RES 6,(lX+d) SET 0,(lX+d) SET 2,(lX+d) SET 4,(lX+d) SET 6,(lX+d) 


B 




SYNTAX QUARTERLY/SPRING 


Table 6: Indexed instructions employing the IY register. Note the similarity with table 4. These operation codes begin with the FD prefix. 





CHANGE YOUR 

TIMEX/SINCLAIR 1OOO DISPLAY 


"TO FULL COLOUR GRAPHICS 

K 0 L or wonus 


LOOK AX THE FEATURES 


Plugs into ZX81/1000 (edge connector) 

Latest technology with TMS9918 VDP 
(32 sprite levels) 

Module contains it's own memory 
All text will run on the color tv 


I i 

User defined characters & graphics up to 
256x192 pixels 

Module contains extension of basic 
commands including: PAPER/INK/ 
BORDE R/BIN/SP RITE/OUT/IN P/etc 

-For- 95 


KOLORWORKS COMES WITH A LIMITED WARRANTY ON PARTS AND WORKMANSHIP 

USE YOUR KOLORWORKS IMMEDIA TEL Y WITH A GAME CASSETTE FOR $9.95 

This delightful game is designed for hours of fun using some of the color graphic capabilities of 
KOLORWORKS. The cassette also contains a short program to familiarize you with some of the 
commands and graphics. 


)□□□□□□□□□□□□□□□□□□□□□□□□ 


Enjoy Game Fun With 


GAAMWORKS 

THE SOON TO BE RELEASED GAME MODULE 
(proto type stage) WILL OFFER SOUND, ROM 
CARTRIDGES AND JOY STICK PORTS FOR 
YOUR TS1000/ZX81. 

♦ THE SOUND will be of arcade game quality 
which you can program for music, animals, trans¬ 
portation (auto, train, airplane, etc.) and ma¬ 
chine sounds. 

♦ ROM CARTRIDGES will have up to 8K of ROM 
using either 2716, 2732 or 2764 EPROMS. We 
will have pre-programed cartridges and blank 
cartridges which you can program. We will be 
offering a service to burn EPROMS from your 



cassettes. 

♦ JOY STICK PORTS will allow for the use of two "Atari''®compatible joy sticks. 

SORRY PRICE IS NOT AVAILABLE AT THIS TIME! GAAMWORKS WILL BE AVAILABLE BY MAIL ORDER 
STARTING MARCH 1st. FOR FURTHER INFORMATION , SEND $2.00 (Credited to Order). 

_At this time KOLORWORKS and GAAMWORKS is available only by mail order. 


MAIL TO: BRAINCHILD COMPUTER WORKS, INC. 

P.O. Box 506 
Pewaukee, Wl 53072 


PRICE QTY. AMOUNT 


KOLORWORKS 

$149.95 



CASSETTE 

9.95 



Shipping & Handling 

4.95 


4.95 

Wi. residents add sales tax TAX 

TOTAL 

My Qcheck Q money order is enclosed ENCLOSED 








Name 


Street 


City 


State 


Zip 


52 


Please allow six to eight weeks for processing. Thank you. 


SYNTAX QUARTERLY/SPRING 1983 



RES 4,(lY+d) RES 6,(lY+d) SET 0,(lY+d) SET 2, (IY+d) I SET 4, (iY+d) I SET 6,(lY+d) 



SYNTAX 


Table 8: The class of miscellaneous instructions invoked by the ED prefix. 

































SOFTWARE REVIEW 



Sky-High ZX/TS 

Name: Flight Simulation 
Type: Game/Education 
ROM/RAM reqd: 8K/16K 
Listable? Yes 
Printed listing? No 
Screen prompts? Yes 
Easy to load? Yes 
Display: Excellent 
From: Sinclair Research Ltd. 

3 Sinclair Plaza 
Nashua, NH 03061 
Price: $9.95 


Psion’s Flight Simulation comes on 
tape with a seven-page instruction 
leaflet that fits inside the cassette 
case. The detailed instructions pro¬ 
vide a good introduction to flying 
novices. After a short time, you’ll 
have no trouble remembering what 
keys control which aircraft functions. 
Instead, you can concentrate on fly¬ 
ing and landing safely. 

My tape consistently loads for me 
every time 1 use it. The “flip” side is 
blank. The program is listable and in¬ 
cludes a good bit of machine code. 

Flight Simulation sets up two situa¬ 
tions. You may choose just the final 
approach or “full feature.” The final 
approach situation lines you up 
nicely on the correct vector about 
five miles out, 800 feet in the air. Full 
feature sets you randomly within 25 
miles of the airport. You must pilot 
yourself to the correct vector and 
altitude for your final approach. It is 
not as easy as it sounds, especially if 
you allow the wind to be a factor. 


You get three different screen 
displays—cockpit, map or moving 
runway. 

On the cockpit display, you see 
the pilot’s view of the instruments 
and a silhouette of the horizon as 
seen from inside the aircraft. Given 
the ZX/TS graphics, it is a very effec¬ 
tive, functional display. 

For a map of the entire area 
around the airport, use the map 
display. The map extends about 20 
to 25 miles from the landing field. 
Shown on the map are the landing 
field, the six beacons you can use for 
guidance, some cliffs east of the 
landing strip, and your heading. A 
flashing dot on the map represents 
your current position. This very nice 
display is remarkably detailed. 

Display three is a moving display 
of the runway as you approach for 
landing. Yes, it does move. It also 
shows your speed and altitude. This 


display is extremely well done and 
impressive to see. 

You may crash your craft in a 
variety of ways, with a nice graphic 
explosion and subsequent crash 
report telling you what happened. 
You may tear off your wing flaps, 
land with your landing gear up, 
smack into the escarpment at too low 
an altitude, go into irreversible dives, 
and more (all of which I’ve done). 

This is the most impressive game 
program I’ve seen for the ZX/TS. It’s 
definitely not a make-do-with- 
what-I’ve-got program. Rather, it 
uses the ZX/TS capabilities well to 
turn out an excellent simulation. This 
program is a terrific bargain at $9.95. 
Thanks to Psion for making Flight 
Simulation, and to Sinclair for pro¬ 
viding it in the US. 

Michael Roberts 
Des Moines, IA 


New Calc 


Name: VU-CALC 
Type: Business/Financial 
ROM/RAM required: 8K/16K 
(ZX81 or 
TS1000 only) 

From: Sinclair Research Ltd. 

3 Sinclair Plaza 
Nashua, NH 03061 
or 

Stanhope Road 
Camberley, Surrey 
England GU15 3PS 
Written by: Psion Software 
Price: $14.95 or £7.95 


VU-CALC is a program to cal¬ 
culate and display tables of numbers 
and names. The basic table consists 
of a grid—26 rows labelled A to Z 
and 36 columns labelled 01 to 36. 
The grid size is fixed, so you must 
load and save the entire grid, 
whether you need it or not. 

Loading a VU-CALC tape with no 
data takes about two and a half min¬ 
utes. Once you enter even one num¬ 
ber, the program dimensions the 
grid. To save and load a program 
containing any amount of data takes 
six minutes. 


This grid is displayed in segments of 
nine rows and three columns (see Fig¬ 
ure 1). Fortunately, scrolling is rapid 
so you can access any grid position 
quickly. VU-CALC treats titles as data 
and scrolls them off the screen. But 
you quickly get used to this and learn 
to equate grid designations with titles. 

For each grid position you want 
the computer to calculate, you must 
provide a formula. A formula con¬ 
sists of grid designations, constants if 
necessary, and any of the arithmetic 
operators + (add), - (subtract), * 
(multiply) and / (divide). E$ch for¬ 
mula can contain a maximum of 32 
characters. Since each grid designa¬ 
tion requires three characters, you 
can add together a maximum of 
eight rows or columns, for example, 
A02 + B02 + C02 4- D02 + E02 + 
F02 + G02 -I- H02. Fortunately you 
don’t need to type this lengthy for¬ 
mula at each grid position you need 
to compute. VU-CALC can repeat a 
formula along a row or column. It 
can be repeated absolutely (exactly 
as entered) or relatively (with the grid 
designations incremented appropri¬ 
ately) . Sinclair’s instruction sheet 
states simply, “You may use up to 40 


54 


SYNTAX QUARTERLY/SPRING 1983 






^[SISOFTWARE REVIEW 



formulae” and here is where a serious 
program deficiency arises. 

I first interpreted this statement to 
mean you can only calculate 40 grid 
positions, but this proved incorrect. 
Apparently it means you can enter 
40 different formulae. A formula 
repeated 36 times along a row 
counts as only one formula. 
Although you can delete a formula 
from a given grid position, you can 
never delete a formula from the 
subroutine that checks for the 
40-formula limit. This means you will 


Magic on Tape 

Name: Programmers’ Toolkit; 

Graphics Toolkit 
Type: Utility 

ROM/RAM reqd: 8K/16K 
Written in: Machine code 
Listable? No 
Printed listing? No 
Easy to load? Yes 
From: Softsync Inc. 

14 E. 34th St. 

New York, NY 10016 
212/685-2080 

Price: $14.95 each, 2/$25 mail 
order only 

Programmers’ and Graphics 
Toolkits are two separate utility 
packages. Together they form a 
dynamite package to help you write 
professional-looking programs for 
your ZX/TS computer. 


eventually reach an unrecoverable 
error condition where you can enter 
no more formulae. You can get there 
very quickly if you use formulae to 
enter data into your table. You can¬ 
not know how many formulae you 
have entered (short of counting), so 
the error comes without warning. I 
have written to Sinclair asking how to 
recover from this error, but they have 
not yet answered. 

Numbers entered in the grid are 
aligned along the left side, not along 
the decimal point. You can enter up 


These toolkits let you store 
machine code routines in your com¬ 
puter to perform often-used tasks or 
tricks neatly and quickly. You load 
each in the usual way (one requires 
an initial POKE). They move 
themselves above RAMTOP, the 
place the computer thinks is the end 
of memory. Then you can enter or 
load other BASIC programs as if the 
machine code routines were not 
even there. The machine code pro¬ 
grams are protected against being 
overwritten by BASIC programs. But 
whenever you need a toolkit routine, 
just enter the appropriate USR call 
and it executes. 

You can use each toolkit sepa¬ 
rately or both together; they are 
compatible. Each comes with cards 
giving loading tips, directions, com¬ 
mand summaries, and examples for 
you to try out. Be careful when 


to eight numbers in each grid posi¬ 
tion. Calculation attempted on a grid 
containing an alphabetic character or 
an empty grid position produces a 
C/5110 error. Load empty grid posi¬ 
tions with zeros if you wish tp include 
them in calculations. 

Instructions supplied by Sinclair 
consist of seven sheets sized to fit in 
the tape box. Rather than teach you 
how to use the program, they give 
you just enough information to let 
you experiment and teach yourself. 

VU-CALC is written in machine 
code and runs adequately fast except 
when you enter formulae or data. 
You must pause between each key¬ 
stroke when entering data to keep it 
from getting lost. Possibly this delay 
is not noticeable with the standard 
ZX/TS keyboard, but anyone with a 
typewriter-style keyboard will cer¬ 
tainly notice it. A numeric keypad 
would be useless for entering data 
due to the program’s slow response. 

Although VU-CALC has several 
shortcomings, it is a very useful tool 
for anyone who has to work with 
tables of numbers. If Sinclair or Psion 
can resolve the “over 40 formulae” 
error condition, I will give VU-CALC 
a high recommendation. 

D.V. Carville 
APO New York 


following the directions. I found 
three errors in the instructions for the 
first graphics routine. They are sim¬ 
ple to find and fix; two are left-out 
greater than and less than signs, the 
third is an extra character/ in a line 
number (105 should be 15). 

One particularly good feature is 
the Graphics Toolkit’s error mes¬ 
sages. If you make a mistake using a 
routine you aren’t likely to crash the 
machine. Instead you get a report 
code akin to the computer’s own, 
telling you the error and the line 
number it occurred in. Toolkit error 
codes use letters G to S, so they 
don’t coincide with the computer’s 
own error codes. 

Programmers’ Toolkit offers these 
routines: line renumbering (also re¬ 
numbers GOTOs and GOSUBs), 
search and replace, search and list, 
hypergraphics mode (alters the 


SYNTAX QUARTERLY/SPRING 1983 


55 




^ g SOFTWARE REVIEW 


starting address of the character set), 
screen fill, reverse video, wait (pro¬ 
grams holds until the computer re¬ 
ceives input from the tape recorder) 
and bytes free. 

Graphics Toolkit offers 23 routines 
in all: draw/undraw (define your own 
shapes),.foreground on/off, border/ 
unborder, screen fill, reverse video, 
up/down/left/right (alter next 
PRINT position), editprint (changes 
current PRINT position to screen line 
23), upscroll, downscroll, rightscroll, 
leftscroll, onscreen/offscreen (turns 
screen display on and off), back¬ 
ground on/off, search and replace, 
and square (draws a square or rec¬ 
tangle to specified coordinates). 

Each program requires a 16K 
RAM pack because of the RAMTOP 
adjustment. Using the two toolkits 
together, you still have about 13.5K 
of memory available. 

With the USR calls to the machine 
code routines, you effectively add 32 
commands to the Timex Sinclair 
BASIC command set. Although the 
instruction cards are concise, they 
offer no one-location summary of all 
the USR commands. 

These two tapes can give you the 
memory conservation and quickness 
of machine code routines without the 
aggravation of learning to program 
yourself or the drudgery of POKEing 
in someone else’s machine code. I 
really enjoyed the “magic” I could 
call up with a few keystrokes. 


SINCLAIR/ c ^ k T,ME t,m z ex 8 %1o 

I/O Board with our Real Time Clock/calendar 

Time _ Month _ Date _ Year _ Day ot Week 

23:59:59 12 31 99 7 

Features 

• 8 Outputs capable of driving relays 

• 8 TTL inputs 

• Feed through Sinclair Bus connector to 
allow normal expansion 

• Battery back-up for clock 

• Expandable Ports 

• All software included 

• 90 day warranty 
Future Products 

• Touch Tone'“ encoder/decoder 

• Speech and Sound synthesizer 


MODEL 

DESCRIPTION 

PRICE 

Built & 
Tested 

Bare PCB 
& Manual 

310 

315 

MASTER I/O WITH CLOCK 

$59.95 

$24.95 

MODEL 310 ACCESSORY BOARDS 

320 

330 

340 

325 

A to D and D to A converter 

Wireless control system (BSR’“) 

Solid State AC Relay 

$47.95 

$19.95 

$69.95 

$19.95 

SPE 

CIALIZED PARTS FOR MODEL 315 

316 

317 

Sinclair edge connector, 46 pin w/key $12.95 
Clock 1C and crystal (tested) $ 4.95 


California residents add 6% Shipping and handling $ 3.95 


Send self addressed 

stamped envelope VVB 

for catalog. P.O. Box 3295 

Escondido. CA.92025-0580 

VISA/MASTERCARD (619) 741-5132 (24 Hr Order Line) 


Go FORTH 

Name: ZXFORTH 
Type: Language 
ROM/RAM required: 8K/16K 
Written in: Machine Code 
Listable? No 

Easy to load? Moderately 
Printed listing? No 
Documentation: Poor 
By: International Publishing & 
Software Inc. 

From: Gladstone Electronics 
1585 Kenmore Ave. 

Buffalo, NY 14217 
716/874-5510 
or 1736 Avenue Road 
Toronto, Ontario 
Canada M5M 3Y7 
416/787-1448 
Price: $29.95 

ZXFORTH ads boast the “simpli¬ 
city of BASIC with the speed of 
machine code.” Although I can see 
some uses for ZXFORTH, simplicity 
is not among its virtues. 

This operating system/language 
comes on cassette with a 56-page 
manual and a 5-page editor manual. 
Instructions for loading both ZX¬ 
FORTH and the EDITOR appear on 
the inside front cover of the FORTH 
manual. This is about the only 
tutorial material presented in either 
book. They are reference manuals, 
and as such will probably prove too 
obscure for those with no knowledge 
of FORTH. 


VOTEM Lets Your 
Computer See/$|fe\ 
The World W ; 

Analog Interface/Tape Signal Conditioner 

(Tor the Timex/Sinclair Computer) 

VOTEM is a complete package consisting of hard¬ 
ware and software that enables your computer to 
measure, display and record "real world'' analog sig¬ 
nals. Your computer can monitor any physical phen¬ 
omenon (pressure, light, temperature, etc.) repre¬ 
sented by a DC voltage. A probe is provided for air and 
liquid temperature measurements. 

Your computer becomes a "smart' digital voltmeter 
and thermometer with storage capability. Use VOTEM 
in a home energy conservation project to save money 
and possibly qualify for an energy tax credit. 

VOTEM also cleans up the tape signal for reliable 
LOADS. With VOTEM you can LOAD tapes with a 
lower volume setting on your tape recorder. 

VOTEM requires no mods, does not use the com¬ 
puter's rear expansion connector and works with 1 K 
RAM (or more). 

VOTEM is low priced at only $59.95 (assembled 
and tested). For an even better bargain the VOTEM kit 
is only $39.95. (Requires soldering and appx 2 hrs.) 
VOTEM comes with a detailed 35-page manual. The 
manual may be purchased separately for $5 pp and 
applied to first purchase of a VOTE M unit. If you are not 
satisfied with VOTEM return within 1 5 days for full 
refund. (Does not apply to kits). Send check or money 
order plus $3 for shipping and handling. 

Down East Computers 

P.O. Box 3096/Greenville, N.C. 27834 


Experienced FORTH users may 
have no trouble adjusting to ZX¬ 
FORTH, but most likely will consider 
the implementation insufficient. The 
editor uses line-by-line (not screen- 
oriented) techniques; the badly 
organized manual is written for the 
wrong computer in parts (containing 
many references to ASCII characters 
not appearing on ZX/TS) and gives 
examples that do not work. 

I always find it difficult to work with 
any language stored in RAM on a 
typically ROM-based system, 
because every time the computer 
crashes I must reload the entire 
language in addition to my pro¬ 
grams. This shouldn’t pose a prob¬ 
lem for a nice solid interpreter (how 
often does BASIC crash?), but ZX¬ 
FORTH doesn’t fit the bill. 

To anyone unfamiliar with 
FORTH, this package bewilders. 
Suddenly you must understand com¬ 
plicated stack operations, strange ter¬ 
minology and, worst yet, many 
technical inaccuracies. On the other 
hand, if you already know FORTH 
or really want to learn it on your 
ZX/TS, ZXFORTH will probably 
work for you. The power is there if 
you can figure out how to use it. 

ZXFORTH works. Because of the 
interpretation techniques, it is flexible 
and fast. But if you expect to learn 
FORTH, look elsewhere for your 
text. These manuals will not lead you 
by the hand. 

for 

TIMEX/SINCLAIR 


computers 

LOSTIN SPACE (uses SLOW). 11.95 

UNIVERSAL INVENTORY FILE .16.95 

UNIVERSAL MAILING LIST .10.95 

UNIVERSAL COIN COLLECTION .10.95 

UNIVERSAL STAMP COLLECTION .10.95 

UNIVERSAL COMIC BOOK COLL .10.95 


UNIVERSAL BASEBALL CARD COLL . . . 10.95 
UNIVERSAL RECORD ALBUM COLL . . . 10.95 

Each program on cassette + 
manual. (8K ROM, 16K RAM) 
Please add $1.50 for shipping and 
handling. N.J. residents add 5% 
tax. 

M.C. HOFFMAN CO. 

P.O. BOX 117 
OAKLAND, N.J. 07436 


56 


SYNTAX QUARTERLY/SPRING 1983 











HARDWARE REVIEW 


The Parallel Connection 



Product: Memotech Parallel Inter¬ 
face and Seikosha GP100A 
Printer 

From: Memotech Corp. 

7550 W. Yale Ave. Suite 200 
Denver, CO 80227 
303/986-1516 

Price: $408.95 for I/F, cable and 
printer, including shipping 

After my large box from Memo¬ 
tech arrived, I examined the com¬ 
ponents: a Memotech I/F, cable and 
80-column printer. 

I/F stands for interface, computer 
jargon for the connection between 
your ZX81 or Timex Sinclair 1000 
and the printer. Memotech’s interface 
is Centronics parallel-equivalent. So 
any printer that uses a parallel printer 
port (one of two common standard 
ports) will work with it. This interface 
uses decimal addresses 10500 to 
11500. With a 64K RAM pack you 
must only turn off the 8-12K area 
because the addressing is fully de¬ 
coded. As with all Memotech prod¬ 
ucts, the I/F sandwiches with other 
Memotech products (the I/F must 
plug into the computer before 
anything else). The product pack¬ 
aging is Memotech’s standard black 
anodized case. The interface is FCC- 
approved for RF noise. 

Then I unwrapped the cable. It’s 
made by 3M and has 34 pins on one 
end, 36 pins on the other. The 
36-pin end goes to the printer. 

Finally, the printer emerged. It is 
the same as Radio Shack’s Line 
Printer 7, which sells for $399. It is 
pin-feed only and prints about 30 cps 
(characters per second), giving 80 
columns in a 5x7 dot matrix. The 
printer runs a little noisy, even with 
the sound baffle on. You can get all 
the paper or ribbons you need at 
Radio Shacks anywhere. 

Once I connected everything I was 
able to print in minutes. The I/F uses 
all the keyboard’s printer com¬ 
mands—no USR calls here. All 
ASCII control codes are preceded by 
an inverse period. Or you can use 
the CFIR$ of the Sinclair code cor¬ 
responding to that character. Lower 


case characters are represented by 
inverse graphics. For example, in¬ 
verse B prints as “b”. 

I have used my printer for a month 
or so with no problems. The entire 
package costs $408.95 and offers a 
96-character ASCII character set 
with lower case, double-wide charac¬ 
ters, and dot-addressable graphics. 
In addition, it can print Memotech’s 
hi-res screen. You get 80-column 
printouts for LLIST and LPRINT; 
COPY gives you exact screen image. 

For the price, you can’t beat it. 


Having gained considerable prac¬ 
tice with this unit, I will now pass on 
my experience to you: 

1. Memotech’s literature does not 
go into detail about ASCII control 
codes. Check at computer stores to 
locate a good, detailed code guide. 
Be sure to check all codes against 
your printer’s guide because some 
codes differ. For example, with the 
Seikosha printer change the follow¬ 
ing: inverse period 8 —graphics 
mode; inverse period A—NEWLINE 
or ENTER; inverse period G — POS. 


10 RFH 

IS LET 8 = 16514. 

20 INPUT R 
30 POKE B R 

4-0 XF i-j-t? THEN GOTO ISO 
50 LET B=B+1 
50 GOTO 20 
100 LPRINT CHS$ 6 


Program 1 


SYNTAX QUARTERLY/SPRING 1983 


57 



BYTE-BACK modules 


64-K MEMORY $119.?? 


INSTANT INFORMATION 

WITH 

BYTE-BACK’S MD-1 

MODEM only $119 ■KIT 

WIRED AND TESTED $149.95 


Use your phone to connect your “LITTLE” computer to 
the “LARGEST” computer networks in the world, With 
BYTE-BACK’s MD-1 MODEM connected all you do is dial 
a phone number (usually local), press a few keys and watch 
the data appear on your TV screen. (Software is included) 
This MODEM can be used in either the “originate” or 
“answer” mode with selectable baud rate. 

You can have immediate access to: 

UNIVERSITY COMPUTERS.DOW JONES. 

COMPUSERVE & SOURCE 

As an extra bonus an RS-232 port is provided to 
allow you to drive all standard RS-232 peripherals & 
printers. (75 to 9600 Baud) 


BYTE-BACK’S BB-1 

CONTROL MODULE 

$ 59.00 i n stock! 

WIRED and TESTED $69 

• 8 Independent Relays 

(with LED status indicators) 

• 8 Independent TTL Inputs 

(with Schmitt trigger buffers) 

• By using a single POKE command 
you can change and latch the status 
of each of the 8 relays. 

• Your computer can read the status 
of all 8 inputs by the use of single 
Peek command. 

• A comprehensive manual is in¬ 
cluded that has complete application 

_ details. 


WIRED and TESTED $129.95 

INSTOCK! 

SAME DA Y SHIPMENT! 

WHY PAY MORE? 

BYTE-BACK’S M-64 extends the memory of your ZX81 or 
Timex-Sinclair 1000 to a full 64-K. It’s user transparent. It 
plugs directly into the back of the ZX81 and has an 
expansion port to allow you to still use a printer. No extra 
power supply is required. 


All Memories have extra tight contacts in the connector. 
This combined with a flat-bottom metal case, provide the 
shielding and stability needed to completely eliminate 
memory “crashes” common with other memory modules. 


EXPAND YOUR 16K SYSTEM 
(M-16) $59,95 

WIRED and TESTED $69.95 

If you have a Sinclair 16K 
RAM module and need more 
memory, expand it to 32K and 
beyond by using BYTE-BACK 
M-16 MEMORY MODULES. 

You can’t connect two Sin¬ 
clair 16K RAM modules together, but you can connect 
one Sinclair 16K and one or more BYTE-BACK 16K 
modules to get all the memory you need. 

THOUSANDS IN USE WITH PROVEN RELIABILITY 
IN STOCK — SAME DAY SHIPMENT 


Don’t settle for a poor quality printer. . . 

RS-232 Module $59.?!? 

WIRED AND TESTED $69.95 

Allows you to connect to all RS-232 printers & terminals. 


ALL MODULES CARRY 90-DAY WARRANTY 

Schematic & Manual included with all bd.s and urtits. 
TRY BYTE-BACK MODULES FOR 10 DAYS WITH NO OBLIGATION 


UJ h- 
. “ O CM 

O Q o> i- 
OO" ® 

X J9(M 


wSk £ 

^ z < z 

S 5 D 

O UJ i - 

w > z 08 

II O h J 

■ H o c o 

; D . § O 
a. c/> 2 i 
:U 

i O uj to 


Remember with: BYTE-BACK modules you are NOT limited to using only one module at a time! 


h- x > ^ 
O C/> JZ 

m CD UJ q. 


0- Z < gQ 


o w - 

0 CDCQ S 

UJ . UJ 

(5 — 1 to i 

^ D UJ o 

m Q o d 

w ° z iu , 

h 2 uj □ I 

> a _l ; 

CD ofi < < l 


□ M-64 Kit. $119.95 

□ M-64 Wired and Tested.$129.95 

□ M-64 Blank PC Board. $19.95 

□ BB-1. $59 

□ BB-1 Wired. $69 

□ BB-1 Blank PC Board. $19.95 


ORDER PHONE (803) 532-5812 Bill My 


□ M-16 Kit. $59.95 

□ M-16 Wired and Tested. $69.95 

□ M-16 Blank PC Board. $19.95 

□ iModem Kit.$119.95 

□ IModem Wired and Tested.$149.95 

□ IRS-232 Module Kit. $59.95 

□ RS-232 Module Wired and Tested. $69.95 

Shipping and Handling $4.95 
□ Visa □ MasterCard 


Exp. Date_Card No. _ 

Name_ 

Address_ 

City/State/Zip_:_ 

Mail To: BYTE-BACK CO.* RT. 3 BOX 147 • BRODIE RD. • LEESVILLE, S.C. 29070 

DEALER DISCOUNT AVAILABLE 


CHECKS 

■■l/OC'N] 

fC4 MosteCard 


58 


SYNTAX QUARTERLY/SPRING 1983 





















£HjfM HARDWARE review 


2. When using LPRINT and TAB 
you can only TAB 32 positions. To 
use the printer’s full width, substitute 
LPRINT “inverse period Gxx”; 
“Data” where xx is 0 to 80. This 
prints at character position xx. 

3. Instructions from Memotech do 
not directly tell you how to use the 
printer’s dot-addressable graphics 
feature. But one part shows how to 
POKE codes into a REM statement 
and print symbols for these values. 
That’s how. 

To demonstrate, key in program 
1. Line 10 contains 50 repetitions of 
the letter A (any character would 
do). Line 15 starts at the first 
memory address after the REM in 
line 10. A in line 20 is the decimal 


Product: Floppy Interface for ZX81 
(FIZ) 

From: Macronics Systems Ltd. 

26 Spiers Close 
Knowle, Solihull 
West Midlands, UK B93 9ES 
Price: $149 for card only, $35 for ex¬ 
pansion bus. Shipped airmail 
at no extra charge. 

Macronics’ is the first disk drive 
interface that appeared for testing 
with ZX81 computers. The interface 
card (5x5V2 inches) fits onto a 
motherboard so you can use a 
printer and external RAM pack. Any 
RAM pack that lets you switch off the 
8-12K region of RAM will work with 
this system. 

You can supply your own disk 
drive or get one from Macronics. 
Theirs is a standard 5V4 inch floppy 
drive. (According to Ken MacDonald 
of Macronics, their 3-inch drives 
should be available around March, 
1983. In the US, a Shugart SA400 
or equivalent can work with this 
interface —Ed.) A 21-inch cable 
couples the drive to the interface 
card. This cable is more than ample 
to move the disk unit into an easy 
working position. 


number you will enter. Line 30 puts 
each decimal number in a memory 
location. Line 40 checks for a zero 
input (0 tells the subroutine to exit 
and print). 

Now RUN the program. Enter 
each decimal number following (hit 
NEWLINE or ENTER after each): 

8 (puts printer in graphics mode) 
27 (ESCape, when followed by 
POS specifies dot-address) 

16 (POSition) 

1 (High Point) 

100 (Low Point) 

2, 255, 186, 160, 178, 191, 178, 

160, 178, 191, 178, 160, 186, 

255, 2 (graphics data—see 
manual) 

0 (tells subroutine to exit and 
print). 


Fiz-zy Floppy 

You switch on the disk drive 
before applying power to the com¬ 
puter. Here I ran into my first prob¬ 
lem—there is no way to tell that 
everything is alright. Usually, a disk 
system’s software first tests the drive 
so you hear the motor when you 
switch on the power. Not so on the 
Macronics drive. You might expect 
to see the LED on the front light 
when the power comes on. Not so. 
This LED only comes on when the 
computer uses the drive. In fact, this 
software only responds to USR calls; 
otherwise it is inactive. 

To use this system, you need 
single-sided, single-density, hard 
sectored disks. These disks are di¬ 
vided into 10 sectors. Because each 
disk contains 35 or 40 tracks, you get 
350 or 400 segments of data, but 
each file must use a whole number of 
tracks. With 35-track disks, you get 
42.5K bytes maximum storage; 
48.75K with 40-track disks. Each 
data segment is 128 bytes long. The 
whole first track is used for the direc¬ 
tory. This leaves you with no more 
than 48K on each disk and no more 
than 39 files per disk. Of course, you 
can swap disks during a program for 
greater storage capacity. 


High Point (HP) and Low Point (LP) 
combined form a 4-byte dot address 
that can range from 0 to 479 decimal 
or 01DF hex (the dot-address of the 
last character). Here is the snag. HP 
must equal either 00 hex (if the ad¬ 
dress is less than 256) or 01 hex (if 
the address is greater than or equal 
to 256). Yet if you enter 00, the 
subroutine exits and you get no print. 
The printer only checks whether bit 7 
of the HP is on or off. Instead of 00 
hex, enter 16 decimal. For 01 hex 
enter 01 decimal. LP can be any 
number between 0 and 255 decimal, 
or 00 and FF hex. 


Jeff Pack 
Auburn, WA 


Disk systems’ speed usually at¬ 
tracts people, but this one is SLOW 
compared to most. Software entirely 
controls the disk—there is no con¬ 
troller board. 

This system takes 24 seconds to 
load a 16K program from disk into 
memory. (MacDonald says it takes 
18 seconds—Ed.) Although this 
speed is 21 times the speed of 
cassette loading, it is six times slower 
than Sinclair’s forecast ZX Spectrum 
Microdrive and 60 times slower than 
normal disk drives for other 
computers. 

Despite the slow speed, Mac- 
ronic’s disk system is ideal for ZX/TS 
users. It is simple to operate and 
understand. 

Technical Details 

Files always use a whole number 
of tracks and your program must dis¬ 
cern what data is in each sector of the 
file. The disk system provides 10 
commands that you can use in pro¬ 
grams via one USR call to Macronic’s 
4K ROM on the interface board. This 
command, LET E = USR 9999, 
should be the first line of any pro¬ 
gram. All other commands are then 


SYNTAX QUARTERLY/SPRING 1983 


59 



ij^lcTH ARP WARE REVIEW 


available as USR calls to the ROM 
using letters or words instead of 
numbers. For instance, USR DIR 
calls the directory (2-second access 
time), which prints disk contents on 
the screen by file name only. DIR has 
no effect on your program except to 
clear the screen. You can COPY the 
directory listing. 

Each file name consists of six let¬ 
ters, no spaces, followed by a full 
stop (period). Then comes a three- 
letter description of the file type 
(DAT for data, BAS for BASIC, for 
example). You can invent your own 
codes if you like. 

To create data files, you must first 
give variable F$ the name of the file 
in the format just described. Then 
assign the number of sectors required 
(in multiples of 10) to variable R. The 
command LET E = USR CREATE 
will then make a new file. If a file of 
the same name exists, the system will 
not overwrite it, but return the 
variable E with an error code. You 
can only copy a file by giving it 
another name and only destroy it by 
a KILL command. 

READ and WRITE use variable 
R$, which has been dimensioned to 
be 1x128 bytes long to read and 
write sectors into and out of 
memory. You use R for the number 
of sectors required and F$ for the file 
name. R may not be a FOR-NEXT 
loop variable. 

ST AT gives the disk status. If 
F$ = “” (no file name), STAT gives 
the number of free sectors on the 
disk. If F$ contains a file name, 
STAT returns the number of sectors 
that file uses. 

DSAVE and DLOAD do the same 
as on the cassette, so you can LOAD 
files into the computer from tape and 
DSAVE them onto disk. You can 
also make programs auto-run. 

NEWD initializes a new disk, filling 
every sector with check characters 
and writing out the directory track. 

The supplied interface card has 2K 
RAM for use as work space for the 
disk at 14-16K. It also contains a 4K 
ROM using addresses 8-12K. (Ac¬ 
cording to Ken MacDonald, the FIZ 
uses 240 bytes of ZX/TS RAM in the 
variables region —Ed.) 


Conclusions 

This disk system in no way rivals 
Sinclair’s Spectrum Microdrive 
(when available). Sinclair’s Micro¬ 
drive will not work with ZX81s or 
TSIOOOs and will beat Macronics’ 
drive both in capacity (100K per 
disk, eight drives) and price (about 
£50, or $82 US). 

However, the ZX81 (and TS1000) 
is well used all over the world and the 
Spectrum has been only available in 
the UK. ZX/TS users who do not 
want to change their machine and 
software will find this a very useful, 
but expensive way to speed up data 
processing. 


Keyboard 

Product: Auto Shift Keyboard Kit for 
ZX/TS 

From: Research Applications 
Products 

4561 Paloma Lane 
Yorba Linda, CA 92686 
Price: Kit $80 

Board and Key Legends $30 

I picked up my keyboard kit at 
Research Applications, so I did not 
have to wait for mail order delivery. 
Although you can buy the PC 
(printed circuit) board and key 
legends for $30, I opted for the com¬ 
plete kit. Compared to rounding up 
the remaining components, the 
savings didn’t seem worth the hassle. 

One double-sided PC board, 73 
keys and key caps, 7 CMOS ICs and 
sockets, 27 resistors, 27 diodes and 
mylar key legends make up the kit. It 
does not come with an enclosure, 
but this was no problem —it fits easily 
into a surplus enclosure I bought 
locally for $6. 

Construction time was about four 
hours—there are 134 components 
and 73 separate key legends to 
mount. 

Keyboard connection to the com¬ 
puter is via ribbon cable which you 


There are a few things I’d like to 
see Macronics change: 

1. An at-a-glance list of commands 
would be better than leaving the 
commands spread throughout the 
manual. 

2. A POWER ON indicator would 
be useful on the disk drive. 

3. Arrangements should be made to 
have 48K RAM packs available for 
use with the system. 

4. Use DIM R$(l,128) instead of 
DIM R$(128). This would allow users 
to INPUT directly to the variable used 
by the disk and save memory. 

Stephen Adams 
London, England 


Quickness 

solder to the board at one end. You 
then strip and tin the connectors on 
the other end before inserting them 
into existing sockets on the com¬ 
puter. (The connectors are on 0.1 
inch centers and slip directly into the 
sockets.) 

For ease of use, I replaced the kit’s 
ribbon connector with a five-foot 
length, which resulted in the autoshift 
LPRINT not working. Fortunately, 
the instructions addressed this prob¬ 
lem. 1 easily solved it by adding a 
6.8K resistor in parallel with the 10K 
pull-up resistor on the computer 
KBD0 line. 

My completed keyboard is profes¬ 
sional in appearance and extremely 
easy to use. As advertised, 46 key 
functions are automatically shifted. 
The keyboard layout is logically ar¬ 
ranged with a special graphics sec¬ 
tion. The editing/game keyrow 
(located at the bottom of the key¬ 
board) is a nice touch. This feature 
gives you quick and easy program 
editing with single keystrokes and 
contains the cursor arrows used in 
many games. 

Don Parks 
Riverside, CA 


60 


SYNTAX QUARTERLY/SPRING 1983 



IMcH book review 


Pocket 

Information 

Title: The ZX81 Pocket Book 

Author: Trevor Toms 

From: Reston Publishing Co., Inc. 

599 Adamsdale Road 

N. Attleboro, MA 02760 
Price: $10.95 

For a 128-page paperback, $11 is 
a lot of money to pay. But Trevor 
Toms has done a good job here. 
There are a couple dozen programs 
and subroutines, mostly games but 
also a few handy utilities: big char¬ 
acters, a hex monitor, and a couple 
of very nice routines for formatted 
numeric output are included. All the 
programs I tried were good to 
excellent. 

There is also a good deal of text 
aimed at the moderately experienced 
user who wants to develop tech¬ 
niques for running faster programs 
and using less memory, and methods 
and algorithms for doing things that 
aren’t completely straightforward in 
Sinclair BASIC. Anyone past the 
beginner level will find some useful 
ideas in this book. For instance, 
which is better: A = B*0.15 or 
A = B * 100/15? Toms points out that 
while the first is faster, it turns out to 
be less accurate; INT (100*0.15) 
returns a value of 14! 

Minor errors mar the book. Toms 
originally wrote the book for an 
English audience, and this American 
edition lacks some necessary correc¬ 
tions. For example, the statement 
that FRAMES is updated at intervals 
of 1/50 of a second was not changed, 
though in the American ZX/TS com¬ 
puters it’s 1/60 second. In addition, 
in the section on reducing execution 
times, some benchmark programs 
are listed and it says that there is a 
table of timings at the end of the 
book. There is not. Remarkably, I 
found no bug or typo worth mention¬ 
ing in any of the programs—even the 
long and complicated . “Adventure 
Master” given in the last chapter. 

This marvelous program is, in ef¬ 
fect, an interpreter for a language to 
create adventure-type games. Toms 


gives two sample scenarios, a tiny 
test scenario and a more complex 
one, “City of Alzan.” The latter is 
fairly simple but fun, and it doesn’t 
begin to strain even a mere 16K 
RAM’s capacity. If you’d like to make 
your own clever and complicated 
adventure game, this program 


should give you all the tools you’ll 
need. This chance to create your 
own adventure game may justify the 
price of the book. 

Richard S. Holmes, 

Batavia, IL 


Know Your CPU 


Title: Z80 User's Manual 
Author: Joseph J. Carr 
From: Reston Publishing Co. 

A Prentice-Hall Co. 

Reston, VA 

Price: $10.95 (326 pp., softcover) 

In a nutshell, the Z80 Users Man¬ 
ual is an excellent reference but not 
an instruction manual for beginners. 

While most Z80 hardware techni¬ 
cal manuals tell you what you need 
to know about any given facet of the 
computer’s operation in five different 
places, Carr’s Z80 Users Manual tells 
you everything you need to know in 
one place. For instance, in the 
description of the memory refresh 
register R, this manual tells not only 
what the R register does, but that the 
I register is placed on the high order 
bits of the address bus, and R register 
on the low order bits, and that the R 
register does not increment through 
the eight bit—all important informa¬ 
tion when trying to understand 
ZX/TS character generation and 
keyboard scanning. This sort of infor¬ 
mation may be split up in other man¬ 
uals, or may not be presented at all. I 
wish this book had been around 
when I learned Z80 architecture and 
programming! 

To understand the hardware sec¬ 
tion, you should have some familiar¬ 
ity with digital logic, since it is used 
extensively. 

The hardware section includes in¬ 
terfaces for RS232 and current loop 
devices, I/O port interfacing, mem¬ 


ory mapping, a good description of 
interrupts, explanation of ASCII and 
EBCDIC codes (neither of which the 
ZX81 uses), and short descriptions of 
the Z8 and Z8000 microprocessors, 
which will give you a more worldly 
view of microprocessors. 

The software section of the manual 
describes how addressing modes 
work, interrupts from a software 
standpoint, and, to some degree, 
coding techniques. In the software 
portion of the book, Carr assumes 
you understand logical operators 
(AND, OR, etc.); he gives no expla¬ 
nations while using the terms. 

The last chapter is a comprehen¬ 
sive description of the Z80 instruction 
set, similar to those published in any 
book on Z80 microprocessors, al¬ 
though a little better done than most. 

This book is not for beginners with 
no experience or concept of how 
machine code works. It may also be 
over the heads of those just beginning 
in digital circuitry. It is a very good 
reference work for those who are 
eager to learn. 

Carr presents concepts in a clear, 
concise form, including everything 
you need to know on a subject in one 
place. This manual does not tell you 
amazing things people didn’t know 
before; it retells the old story in an 
understandable form. A warning, 
however: this book does not deal 
specifically with the ZX81 at all, and 
most of the circuits given will require 
some modification. In general, the 
circuits are shown as concepts, and 
therefore will not work as is. 


SYNTAX QUARTERLY/SPRING 1983 


61 




SYNTAX 


Serving Timex-Sinclair 
Personal Computers 


A PUBLICATION OF THE HARVARD GROUP 

ISSN 0273-2696 


SYNTAX is a monthly newsletter exclusively for ZX80/ 
81/TS1000 owners. We bring you news, reviews and ap¬ 
plications for your computer, plus technical notes for 
circuit-builders. SYNTAX also provides a forum for 
thousands of users to share advice and problems about 
programs and vendors. We bring you timely updates 
about new hardware, software and books. And we cover 
all the Sinclair-technology computers, including the new 
TS1000. 

At SYNTAX we emphasize practicality. You can apply 
our suggestions even if you aren’t sure at first why they 
work, because we give you complete instructions. Text is 
clear and easy to understand. SYNTAX readers already 
know about: 

• An automatic phone-dialer they can put together 
in a few hours 

• Syntactic Sums™ to check input for errors 

• Programs to explore computer memory 

• How to build external additional RAM 

• How to add an 8212 I/O chip to control external 
devices from their computers 

And SYNTAX readers like what they get every month. 
Subscribers know they can depend on us. 

After receiving only three issues of SYNTAX , I 
find that I anxiously await the next. . . keep up 
the good work! 

Martin Irons 
Goshen, NY 

Congratulations on the brass-tacks, down-to- 
earth approach of your newsletter. Til be look¬ 
ing forward to future issues. 

Otis Imboden 
Washington, DC 

Many readers get their first issue and immediately order 
the back issues—more proof that they like what they see. 


You can see what’s special about our publication. We 
work hard to bring you a quality newsletter. We strive to 
print useful programs of above-average accuracy. As any 
computer magazine editor can tell you, program listing ac¬ 
curacy is tough to achieve, but we boost our average with 
every issue. We test each program to make sure it works, 
it fits in the designated RAM, and it runs when you follow 
the directions. We print program listings in screen-image 
format to make it easier for you (it’s sure not easier for 
us!) to enter program accurately. We invented Syntactic 
Sum™ as an additional aid for you in getting error-free 
programs. With your subscription you also get access to 
thousands of other readers, and our staff experts are 
available by phone to answer your questions or help you 
solve problems with your machine. 

SYNTAX readers get every month: 

• Latest news of Z80 hardware and software 

• Programs to organize information, calculate, 
entertain, or instruct 

• Do-it-yourself additions 

• Clear explanations for beginners 

To share the benefits of SYNTAX, just indicate your 
choices on the order coupon and return it with your 
choice of payment in U.S. funds. (Please note that addi¬ 
tional postage is required for delivery outside North 
America.) 

We are so sure you’ll find SYNTAX useful that we 
promise to refund your entire subscription fee if you aren’t 
satisfied. An unconditional guarantee—you can’t lose. 

Join the others who stretch the ZX/TS to the utmost. 
Act now—as soon as we receive your coupon with pay¬ 
ment, your first issue will be on its way. For faster service, 
phone your credit card order to 617/456-3661. Don’t 
miss SYNTAX! 


Fill out the coupon below and mail it to: SYNTAX/SQ, RD2 Box 457, Harvard, MA 01451 


SQ383 


□ My check is enclosed. 
Make checks payable to: 
SYNTAX ZX80, Inc. 


□ Pleas ( e charge my □ VISA 

□ Diner’s Club □ American 
Express □ Mastercard 

□ Carte Blanche account 


Account number 


YES! Please send me: 

□ The Combination (12 issues of SYNTAX and 4 issues 

of SQ). $39 

□ The Catch-up (SYNTAX Jan. 82-Dec. 83, 4 issues of SQ, 

plus 1 binder . $77 


Exp. date _Bank number (MC only) 

Signature _ 

Name _ 

Address _ 


□ The Works (SYNTAX Nov. 80-Nov. 83, 4 issues of SQ, 

plus 2 binders, a 50% savings). $97 

□ 12 issues of SYNTAX.. $29 

□ 4 issues of SQ, The Syntax Quarterly. $15 

□ 1 Premier Issue of SQ.$4.95 

□ 1 Binder .$9 □ 1 issue of SYNTAX . $4 


City. 


State 


.Zip 


Day phone ( ) _Evening phone ( 


These offers expire 31 May 83-SUBSCRIBE NOW. 


□ This is a renewal. My subscription number is: 

□ This is a new subscription. 


62 


SYNTAX QUARTERLY/SPRING 1983 












(^fral SYNTAX QUARTERLY 

^~ => JL^J> by The Harvard Group 


Increase Your 
Computer’s Utility 
With Our Help 


Y ou own a powerful computer, capable of sorting, 
analyzing, calculating, displaying and manipulating 
data as well as measuring and controlling. Despite its 
small size, your computer will help you learn, analyze 
your business, keep your records or your schedule, dial 
your phone, send messages, or talk to other computers. 
To control the power available to you, you’ll need hard¬ 
ware and software to use with your machine. Although 
you can buy many of these products—and we’ll tell you 
about them—some you must create or modify for your¬ 
self. SQ will provide you with the complete information 
to let you use your programming or tinkering time 
efficiently. 

Our experts also bring you SYNTAX, the newsletter, 
for up-to-date, concise information. You need news and 
new product announcements quickly. And SYNTAX 
packs a lot of information into its brief, time-saving 
format. 

But we recognized your need for material too long to fit 
in SYNTAX. Syntax Quarterly fulfills that special need. 
In-depth, extensive, detailed information—that’s what 
SQ’s all about. Long programs, big construction articles, 
and detailed directions help you use your computer to its 
fullest while learning. 

SQ gives you tested, accurate information that you can 
depend on. We test, we build, we check everything that 
goes into SQ. Our staff experts work for you; it’s as 
though your full-time staff prepared a report for you 
every quarter. 

At SQ, we specialize in your machine—Timex-Sinclair 
technology. Our programs and projects work, and, 
because we test each one before we publish it, they work 
on your machine. All the information in SQ can work for 
you. 

But, to capture these benefits—free software, free 
plans for hardware, free instruction—you must subscribe. 
Use the coupon to tell us how to help you best. Or call; 
we understand people in a hurry. SQ 


1 


100 LET R* = ’ 

200 LET B$=" 

250 LET C$="_ 

300 PRINT 
4-00 PRINT B$].B$ 

500 PRINT B$( TO 73.6$ 

600 PRINT Bit TO 73jet 

70© PRINT fii,B$ 

600 PRINT " ";B$ 12 TO ) ,Bt 

y00 PRINT ** TO } 'b* 

1000 PRINT B$,B£ 

1100 PRINT 

1200 PRINT RT 7,22;C* 

1300 PRINT RT 9,24.: C* 

14-00 FOR 1=0 TO 24-8 

I>66 RND I<126 THEN GOTO 

1600 

1500 PRINT CHRi I; 

16©0 NEXT I 

170© PRINT RT 1©,8;" UE SPERK V 
OUR LRNGURGE 

SYNTRCTIC SUM: 22174-, BK ROM 




UE SPERK YOUR LRNGURGE 0123 


——-J"RT TRB 7CODE URL LEN 

SIN COS TRN RSN RCS RTN LN EXP 
intsor SGN RBS PEEK USR STR* CH 
R* NOT ** OR RND <=>=<> THEN TO 
STEP LPRINT LLIST STOP SLOU FRS T 
NEU SCROLL CONT DIM REM FOR GOT 
O GOSUB INPUT LORD LIST LET PRUS 
E NEXT POKE PRINT PLOT RUN SWE 


617/456-3661 


SYNTAX QUARTERLY/SPRING 1983 


617/456-3661 


63 



li^jg i BOOK REVIEW 


Inside Story 


t z- 

^ Ft 

f 6V* 


t- 

Title: Secret Guide to Computers 
Author: Russ Walter 
From: Secret Guide to Computers 
Company 

92 Saint Botolph St., 

Boston, MA 02116 
617/266-8128 

Price: $3.70/each or 8 vol. set for 
$29.60 

The tenth edition of Russ Walter’s 
Secret Guide to Computers is prob¬ 
ably the funniest, most interesting, 
most entertaining computer learning 
guide ever written; however, it con¬ 
tains little on the ZX/TS computers. 
Learn the ZX’s BASIC first, then buy 
the guides. 

Here’s a rundown of all eight vol¬ 
umes of the Secret Guide to Com¬ 
puters. Volume 1 starts the reader off 
with a lesson on the keyboard then 
proceeds to fixing mistakes, math, 
variables, input, program storage, 
logic, and all the other necessities so 
you can get started with BASIC on 
most micros, some minis, and some 
maxis. 

Deeper into BASIC 

Volume 2 digs deeper into BASIC. It 
includes information on ON. . . 
GOTO and ON...GOSUB state¬ 
ments (something the ZXs don’t 
have), error handling, error trapping, 
simpleton graphics, advanced funda¬ 
mentals, programming style, math 
functions, sorting, and text files. This 
volume is the most helpful for ZX 
users since neither the ZX80 nor the 
ZX81 manual mention anything 
about graphics, fundamentals, or 
style and sorting. 

Volume 3 covers hardware, buying 
a computer, computer companies, 
peripherals, explanation of the Cen¬ 
tral Processing Unit (CPU), and a run¬ 
down of the major microcomputers. 

The Computer Field and 
Basic Applications 

Volume 4 digs deep into the com¬ 
puter field. It rehashes the major 
microcomputer manufacturers, and 
goes over the major points of buying 
a big computer. This volume also 
covers the different number systems, 


getting a job in the computer field, 
what to read, and computer courses 
offered by the author. 

Volume 5 covers some basic appli¬ 
cations. For example: games, exten¬ 
sive graphics, and the all-important 
VISICALC and its mates SUPER¬ 
CALC, SPECTACULATOR, and 
word processing in most micros. 

Volume 6 isn’t available but I con¬ 
tacted the author who said it will 
cover artificial intelligence and ex¬ 
pand on Volume 5. 

Volume 7 covers FORTRAN, 
PASCAL, COBOL and Volume 8 
goes into an extensive overview of all 
the computer languages but doesn’t 
teach you how to use them. Volume 
8 also goes into the history of the 
CPU and how to program in assem¬ 
bly language for most of the CPUs. 
Yet, I suggest buying Dr. Ian Logan’s 
book written especially for the ZXs 
because Volume 8 doesn’t tell you 
how to go about assembling. It just 
explains various mnemonics. 

Overall, Russ Walter’s eight- 
volume guide is both fun and very in¬ 
formative. Most computer books are 
too technical, but the Secret Guide is 
written in plain English. 

Peter Nichols, Hanover, MA 


Ad Index 


Brainchild Computer Works 52 

Byte-Back Co. 58 

Compuwiz Software 36 

Dallas Development 21 

Down East Computers 56 

E-Z Key 37 

Ezra Group II 36 

Frog Software 64 

General Systems Consulting 23 

Gladstone Electronics 13 

M.C. Hoffman 56 

Innovation Company C3 

Intercomputer, Inc. 17 

International Publishing & Software 1 
JK Audio 56 

Kopak Creations, Inc. C4 

Melbourne House Software 33 

Memotech Corporation 7 

Mindware, Inc. C2 

Sinware 6 

Softsync, Inc. 18 

Syntax/SQ 3, 16, 62, 63 

Tom Woods 64 

Z-Ware 64 


Z-Ware Sale 

ZX81 /TS-1000 Software on 

Cassette 

$8.95 each ppd. 

16K Histogram—plots bar chart 
16K Financial Manager—for 
home or business 
16K Machine Intelligence 
Demo—life forms that actually 
learn. 

Many more available—send 
self-addressed, stamped en¬ 
velope. 

Z-Ware 
Box 111 

Albany, Kentucky 42602 
1-606-387-8391 


LEARN TO 
PROGRAM 

Text and File Organizers with 

ZX DATA FINDER 

A high capacity information 
storage and retrieval tool for 
16 K Timex and Sinclair Com¬ 
puters. 

Advanced file input and editing 
routines are thoroughly 
analyzed. 

Comprehensive search and 
display methods are fully 
explained. 

AN ADVANCED COURSE 
IN DATA HANDLING 

Free specifications are 
available, or send $9.95 for 
program listing and text to: 

THOMAS B. WOODS 

P.O. Box 64, Jefferson, N.H. 03583 


ARTIFICIAL INTELLIGENCE 
FOR THE ZX81? 

YES! 

SYNCZX is an artificial intelligence 
program with natural language capabili¬ 
ties for the ZX81 with 16K RAM, avail¬ 
able from Frog Software. 

SYNCZX will talk to you in ENGLISH/ 
NO MENUS. You can use SYNCZX to 
balance your checkbook or you can 
reprogram SYNCZX to do anything you 
would like. However you do not need pro¬ 
gramming skills to use SYNCZX as is. 
Even a child can use SYNCZX because it 
is easy to read and understand, talking 
to you in simple English. SYNCZX even 
remembers the people who use it! 16K 
cassette with manual only $6.95 plus 
$1.50 postage & handling. 

Frog Software 

Box 95 

Glenmont, New York 12077 
(518) 465-6552 


64 


SYNTAX QUARTERLY/SPRING 1983