Salora Manager / Laser 2001 BASIC

User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Salora Manager / Laser 2001 BASIC

Post by @username@ » Thu Mar 09, 2023 8:50 pm

Hi,

Is there a scan of the BASIC manual available?

I noticed there are a couple of commands, which exist in AppleSoft BASIC, but point to RTS on Salora Manager.

A fun command is &

When BASIC encounters this it jumps to a user-defined assembly routine at $3F5. Any ASM code there just needs to perform a RTS to get back to BASIC.

So & replace CALL 1013.
User avatar
Scouter3d
Posts: 646
Joined: Mon Jun 28, 2010 7:02 am
Location: Wien
Contact:

Re: Salora Manager / Laser 2001 BASIC

Post by Scouter3d » Fri Mar 10, 2023 6:36 am

Hi, BASIC Manuals are available in german and finnish...

http://www.madrigaldesign.it/creativemu ... 001_de.zip

http://www.madrigaldesign.it/creativemu ... 07_sal.zip

Cheers, TOM:0)
User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Re: Salora Manager / Laser 2001 BASIC

Post by @username@ » Fri Mar 10, 2023 9:38 am

Cheers Tom!

I was looking under software :0)
Last edited by @username@ on Fri Mar 10, 2023 12:04 pm, edited 1 time in total.
User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Re: Salora Manager / Laser 2001 BASIC

Post by @username@ » Fri Mar 10, 2023 11:48 am

OK, here's a list of the reserved words which exist, in other words will not cause a syntax error, when encountered in a program.

Code: Select all

FLASH - Used on Apple to flash lower case letters.
MUSIC - MS MML parser - sadly missing
POS - Returns horizontal cursor position
WAIT - Used on Apple to wait for a specific value at an address, with optional mask
Although POS(0) will always return 0 - PEEK(828) will give what should be there.

DISK - although initially to provide the DISK ROM interface, this should be looked more like BASEXT.

The flashing cursor uses characters 127 and 255, should you wish to change it.

The on-screen cursor position is controlled by three bytes at 826,827 and 828.

Code: Select all

 828 == Current horizontal cursor position
 827 == VRAM Offset high byte + 248, biased by BIOS to #BF - display is at VRAM $3800
 826 == VRAM Offset low byte
User avatar
Mobsie
Posts: 708
Joined: Fri Jun 13, 2008 10:38 am
Location: Weinheim, Germany

Re: Salora Manager / Laser 2001 BASIC

Post by Mobsie » Fri Mar 10, 2023 11:37 pm

It’s time to fire up my Laser
User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Re: Salora Manager / Laser 2001 BASIC

Post by @username@ » Sat Mar 11, 2023 8:51 pm

More memory locations

Code: Select all

103/104 == Program start address ($5001) 20481
105/106 == Program end address
109/110 == Low memory address
111/112 == High memory address
These are stored little endian. To calculate program memory in use, do

Code: Select all

? (PEEK(105)+PEEK(106)*256) - (PEEK(103)+PEEK(104)*256)
Small program to LIST all tokens

Code: Select all

10  TEXT : HOME 
20  REM 
30  FOR X = 33 TO 234
50  POKE 20493,X
60  LIST 20
70  NEXT X
To list ERROR tokens, change line 30 to

Code: Select all

30  FOR X = 235 TO 252
The DISK ROM uses memory $4400 to $5000.

If you don't have a DISK ROM - there's 3K of unused RAM there, so ideal for any ASM routines.

How to pass text integer parameters to a routine at $3F5, &

Code: Select all

JSR $D826 to convert parameters to binary. X returns with value.
& 123

For 16-bits, use
JSR $CEBA
JSR $D880
& 12345

Result is returned in A/Y
User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Re: Salora Manager / Laser 2001 BASIC

Post by @username@ » Sat Mar 11, 2023 11:20 pm

Here's a super speed up for any code which has been tested and does not need user input - think mandlebrot et al.

BASIC has a JMP vector at ZP $38. This usually points to a routine at $EDF8. This function polls the keyboard and flashes the cursor - but wastes a fair bit of time doing this.

Here's the code which goes at $3F5, and should NOT be run with DISK ROM loaded, as it goes over $400($4400).

Code: Select all

5  GOSUB 1000: & 
10  FOR X = 1 TO 40
20  FOR Y = 1 TO 1000
30  NEXT Y
40  NEXT X
50  SOUND (200,10,1)
60  & : END 
1000  REM  *** KEYTOGGLER ***
1010  FOR X = 0 TO 29
1020  READ B
1030  POKE 1013 + X,B
1040  NEXT X
1050  RETURN 
2000  DATA  160,0,173,14,4,73,1
2010  DATA  141,14,4,240,2,200,200,185
2020  DATA  15,4,133,56,185,16,4,133
2030  DATA  57,96,0,248,237,8,238
Running this in an emulator takes around 26 seconds. If you remove the ampersands (&), it takes about 58 seconds.

So roughly twice as quick - just by killing the keyboard polling.

Code: Select all

      1  0411					      processor	6502
      2  03f5					      org	$3f5
      3  03f5
      4  03f5				   KeyOnOff   subroutine
      5  03f5
      6  03f5		       a0 00		      ldy	#0
      7  03f7		       ad 0e 04 	      lda	WhichOne
      8  03fa		       49 01		      eor	#1
      9  03fc		       8d 0e 04 	      sta	WhichOne
     10  03ff		       f0 02		      beq	.2
     11  0401
     12  0401		       c8		      iny
     13  0402		       c8		      iny
     14  0403
     15  0403				   .2
     16  0403		       b9 0f 04 	      lda	OriVector,y
     17  0406		       85 38		      sta	$38
     18  0408		       b9 10 04 	      lda	OriVector+1,y
     19  040b		       85 39		      sta	$39
     20  040d
     21  040d		       60		      rts
     22  040e
     23  040e				   WhichOne
     24  040e		       00		      .byte.b	0
     25  040f				   OriVector
     26  040f		       f8 ed		      .word.w	$edf8
     27  0411				   NewVector
     28  0411		       08 ee		      .word.w	$ee08
The toggler.
User avatar
MADrigal
Site Admin
Posts: 1189
Joined: Sun Sep 15, 2013 1:00 pm
Contact:

Re: Salora Manager / Laser 2001 BASIC

Post by MADrigal » Sat Mar 11, 2023 11:54 pm

@username@ wrote:
Fri Mar 10, 2023 9:38 am
Cheers Tom!

I was looking under software :0)
Differently from the CreatiVision BASIC, that was an "optional cartridge" and therefore the manual came with it. Laser 2001/Manager BASIC was included with the computer - so the computer came with the hardware manual and the BASIC manual.
I hope to find one day the English BASIC manual, although that's going to be very hard. I have never seen Laser 2001/Manager on sale other than in Germany and Finland :(
User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Re: Salora Manager / Laser 2001 BASIC

Post by @username@ » Sun Mar 12, 2023 3:24 pm

POP

Applesoft had a useful function called POP, which essentially converts a GOSUB into a GOTO by removing the return address and continuing.

So, how do you use it in a program?

A little bit of jiggerry POKEerry is needed.

Code: Select all

10  GOSUB 100
20  PRINT "RETURNED OK"
30  END 
100  RETURN 
110  PRINT "POP OK"
120  RETURN 
When run the output is just "RETURNED OK"

To change the RETURN at line 100 to be a POP, just POKE the token for POP (161) over RETURN.
So POKE 20519,161

Now when run the program shows "POP OK" then errors with RETURN WITHOUT GOSUB, in other words the GOSUB return address was removed.
User avatar
@username@
Posts: 320
Joined: Tue Oct 22, 2013 6:59 pm
Location: Scotland

Re: Salora Manager / Laser 2001 BASIC

Post by @username@ » Sun Mar 12, 2023 10:06 pm

DEF FN

Again these exist as tokens only - so POKEing the program is the way to go!

An example of the standard function

Code: Select all

10 DEF FN A(W)=W*1000
20 PRINT FN A(10)
When run, the result 10000 is displayed.

So how is this achieved on Salora Manager BASIC?

Step 1
Use SGN token as a place holder.

Code: Select all

10 SGN SGN A(W)=W*1000
20 PRINT SGN A(10)
Step2
Now replace the SGN tokens with the DEF(184) and FN(194) tokens.
POKE 20485,184 : POKE 20486,194 : POKE 20504,194

Step 3
Now run it and your program returns 10000

Sorcery eh?
Post Reply