How to replace a AND function by a GOTO...

Anything Sinclair ZX Basic related; history, development, tips - differences between BASIC on the ZX80 and ZX81
Post Reply
User avatar
XavSnap
Posts: 1941
Joined: Sat May 10, 2008 4:23 pm
Location: 'Zx81 France' Fb group.

How to replace a AND function by a GOTO...

Post by XavSnap »

Hi,

To test a on screen location, your can use booleans functions.

Where C=lines (Y) and B=Columns(X)
4165 PRINT AT C,B;"X"

We had to test several location on the screen:
Line 12; test the column 12 and 13 ...

If (C=12 AND B=16) OR (C=12 AND B=10) THEN GOTO 6000
equal...
If C=12 AND (B=16 OR B=10) THEN GOTO 6000

Exemple:
For each scrutations, the BASIC had to check all conditions...

Code: Select all

4180 IF C=12 AND B=16 OR C=7 AND\
 B=4 OR C=7 AND B=10 OR C=8 AND \
B=4 OR C=8 AND B=11 OR C=9 AND B\
=5 OR C=9 AND B=12 OR C=10 AND B\
=6 OR C=10 AND B=13 OR C=11 AND \
B=8 OR C=11 AND B=14 OR C=12 AND\
 B=10 OR C=12 AND B=15 THEN GOTO\
 6000
In case of AND function,

C=7 AND B=4 ; C=7 AND B=10 >> C=7 AND (B=4 OR B=10)
C=8 AND B=4 ; C=8 AND B=11 >> C=8 AND (B=4 OR B=11)
C=9 AND B=5 ; C=9 AND B=12 >> C=9 AND (B=5 OR B=12)
C=10 AND B=6 ; C=10 AND B=13 >> C=10 AND (B=6 OR B=13)
C=11 AND B=8 ; C=11 AND B=14 >> C=11 AND (B=8 OR B=14)
C=12 AND B=10 ; C=12 AND B=15 ; C=12 AND B=16 >> C=11 AND (B=10 OR B=15 OR B=16)

Juste replace the AND conditions by a GOTO function.

Code: Select all

4165 PRINT AT C,B;"X"
4178 REM JUMP TO THE RIGHT
4179 REM LINE CONDITIONS.
4180 GOTO 4183+C*2
4183 REM IF C=0
4185 REM IF C=1
4187 REM IF C=2
4189 REM IF C=3
4191 REM IF C=4
4193 REM IF C=5
4195 REM IF C=6
4196 GOTO 5000
## IF C=7 (LINE 7)
4197 IF B=4 OR B=10 THEN GOSUB 7000
4198 GOTO 5000
## IF C=8 (LINE 8)
4199 IF B=4 OR B=11 THEN GOSUB 7000
4200 GOTO 5000
## IF C=9 (LINE 9)
4201 IF B=5 OR B=12 THEN GOTO 6000
## IF C=10 (LINE 10)
4203 IF B=6 OR B=13 THEN GOTO 6000
## IF C=11 (LINE 11)
4205 IF B=8 OR B=14 THEN GOTO 6000
## IF C=12 (LINE 12)
4207 IF B=10 OR B=15 OR B=16 THEN GOTO 6000

5000 REM ...END OF YOUR PROGRAM (OR PRG. LOOP)
5500 STOP

6000 PRINT AT 0,0;"BANG!"
6010 GOTO 5000

7000 PRINT AT 0,0;"THO!!!"
7010 RETURN
This code will take more memory room,
But, will save time during Basic execution.
Have Fun.
Xavier ...on the Facebook groupe : "Zx81 France"(fr)
Post Reply