Page 2 of 6

Re: Tricks in BASIC

Posted: Tue Jul 20, 2010 11:52 am
by iturbez
XavSnap wrote:Step One ... the Basic.
Step Tow ... The ASM.
Step Tree ... Save the World !
I agree! :lol:

Re: Tricks in BASIC

Posted: Thu Jul 22, 2010 2:01 pm
by XavSnap
Hi,

Ther's a mysterious ASM Code !

Basic:

Code: Select all

# DISPLAY EXEMPLE
# ><AVSNAP
# ®®®®®®®®®®®®®®®®®
# FOUND IN ORDI-5 n2
# PAGE 29
# AUTHOR :
# ERIC WEINSTEIN.
# ®®®®®®®®®®®®®®®®®

     1  REM [HEX:\
0E,21,3E,06,C6,02,47,CD,\
18,09,CD,9B,09,12,FD,34,\
3A,2A,0C,40,23,16,06,ED,\
B1,15,20,FB,54,5D,ED,B1,\
C3,5D,0A ]

     7 POKE 16536,6
     8 POKE 16517,6
    10 LET I=1
    50 DIM N$(50,16)
    55 FOR A=1 TO 50
    60 LET N$(A)=VAL A + "HELLO"+ VAL A
    70 NEXT A
    90 FOR I=1 TO 50
    96 RAND USR 16514
    98 PRINT N$(I);"(";I;")"
   100 NEXT I
  8999 STOP 
  9000 SAVE "AUTO-SCROLL"
ASM:

Code: Select all

#define ORG  .org       ; TASM cross-assembler definitions
ORG $4082
	LD C,$21 
	LD A,$06 
	ADD A,$02 
	LD B,A 
	CALL $0918 ; [LOC-ADDR]
	CALL $099B ; [ONE-SPACE]
	LD (DE),A 
	INC (IY+58) 
	LD HL,($400C) ; GET D-FILE
	INC HL 
	LD D,$06 
Lb4099:
	CPIR 
	DEC D 
	JR NZ, Lb4099 ; [$4099:16537]
	LD D,H 
	LD E,L 
	CPIR 
	JP $0A5D ; [RECLAIM-1]

.end
:?:

Re: Tricks in BASIC

Posted: Thu Jan 02, 2014 8:23 pm
by Shaun_B
As you may have noticed, I've been messing about with Sinclair BASIC again and thanks to this thread I've found some excellent tips.

For instance, you can negate some of the problems of it not allowing multiple statements like:

Code: Select all

10 CLS: FOR I=0 TO 10
...
20 NEXT I
by calling the routine in the BASIC, like

Code: Select all

10 FOR I= USR VAL "2602" TO 10
...
20 NEXT I
As luck would have it, USR 2602 (CLS) returns zero so it's valid in the FOR statement. Very handy indeed :-)

Any more tips?

Regards,

Shaun.

Re: Tricks in BASIC

Posted: Thu Oct 15, 2015 4:20 pm
by AndrewH7
NOT PI =0
SGN PI =1
INT PI =3

SAVE maybe included in program, then after loading from tape it carries on, so if you'd typed LET A=0 before then it'll still =0.

Re: Tricks in BASIC

Posted: Sun Nov 22, 2015 10:58 pm
by AndrewH7
I think NOT PI should = faster than PI-PI
& maybe CODE "$" faster than VAL "35"
LET A = A + A faster than A * 2
IF NOT A THEN faster than IF A <>0 THEN
0 = NOT PI
1 = SGN PI
3 = INT PI
Text within " " may include full words, press key for THEN & then other keys & delete THEN if not needed.

Re: Tricks in BASIC

Posted: Thu Nov 26, 2015 2:38 pm
by stefano
On Spectrum I used sometimes also expressions like PI*PI, PI+PI, etc.
Considering that numbers occupy the visualization bytes plus 5 hidden bytes for the internal number encoding (mantissa etc..), it can save lots of memory, even if many of such combinations slow down the code.
Sometimes the "INT" rounding can be omitted.

One more idea:
USR VAL "3893" (pause) will act also as keyboard scanner reporting different codes depending on the 5-key group being pressed.

Re: Tricks in BASIC

Posted: Thu Nov 26, 2015 3:00 pm
by dr beep
stefano wrote:On Spectrum I used sometimes also expressions like PI*PI, PI+PI, etc.
Considering that numbers occupy the visualization bytes plus 5 hidden bytes for the internal number encoding (mantissa etc..), it can save lots of memory, even if many of such combinations slow down the code.
Sometimes the "INT" rounding can be omitted.

One more idea:
USR VAL "3893" (pause) will act also as keyboard scanner reporting different codes depending on the 5-key group being pressed.
On a ZX Spectrum you don't really need to save memory in BASIC. You have at least 16K where on a ZX81 you would have 1K.
Only reason on a ZX Spectrum might be to stay in BASIC under 24064 to start machinecode on a 256-border.

Re: Tricks in BASIC

Posted: Thu Nov 26, 2015 3:57 pm
by stefano
more interesting constants /hints:

-1 = COS PI
255 = PEEK PI
36.5 = PI**PI (approx.)
1.5 = LN PI**PI (approx)., but VAL "1.5" is just 2 bytes longer

Another interesting trick could be:
10 RAND PI
20 PRINT EXP EXP RND
30 GOTO 20
..and take benefit of the fixed sequence ;)

Re: Tricks in BASIC

Posted: Thu Nov 26, 2015 4:07 pm
by stefano
Memory on a Spectrum: yes and no.. the real memory availability on the 16K model was much lower, I'd say 7/8K. The 16K rampack on a ZX81 had a way wider space for the BASIC programs.

The Supercode II tools for the Spectrum included compression routines able to remove comments and compress number encoding.. I don't remember them all but one of them was simply zeroing all the visible part of the number, thus preserving the program speed, obfuscating the program a little and gaining few bits of pragram size.

Re: Tricks in BASIC

Posted: Thu Nov 26, 2015 4:51 pm
by stefano
A little more, perhaps useful in trigonometry, graphics, etc

360 (approx) = EXP EXP SQR PI
5.5 (approx) = LN PEEK PI