Salora Manager / Laser 2001 BASIC
- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Salora Manager / Laser 2001 BASIC
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.
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.
Re: Salora Manager / Laser 2001 BASIC
Hi, BASIC Manuals are available in german and finnish...
https://www.madrigaldesign.it/creativemu ... 001_de.zip
https://www.madrigaldesign.it/creativemu ... 07_sal.zip
Cheers, TOM:0)
https://www.madrigaldesign.it/creativemu ... 001_de.zip
https://www.madrigaldesign.it/creativemu ... 07_sal.zip
Cheers, TOM:0)
http://www.8bit-homecomputermuseum.at Find me here...
- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Re: Salora Manager / Laser 2001 BASIC
Cheers Tom!
I was looking under software :0)
I was looking under software :0)
Last edited by @username@ on Fri Mar 10, 2023 12:04 pm, edited 1 time in total.
- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Re: Salora Manager / Laser 2001 BASIC
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.
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
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
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
Re: Salora Manager / Laser 2001 BASIC
It’s time to fire up my Laser
- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Re: Salora Manager / Laser 2001 BASIC
More memory locations
These are stored little endian. To calculate program memory in use, do
Small program to LIST all tokens
To list ERROR tokens, change line 30 to
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
103/104 == Program start address ($5001) 20481
105/106 == Program end address
109/110 == Low memory address
111/112 == High memory address
Code: Select all
? (PEEK(105)+PEEK(106)*256) - (PEEK(103)+PEEK(104)*256)
Code: Select all
10 TEXT : HOME
20 REM
30 FOR X = 33 TO 234
50 POKE 20493,X
60 LIST 20
70 NEXT X
Code: Select all
30 FOR X = 235 TO 252
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
- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Re: Salora Manager / Laser 2001 BASIC
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).
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.
The toggler.
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
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
Re: Salora Manager / Laser 2001 BASIC
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

- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Re: Salora Manager / Laser 2001 BASIC
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.
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.
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
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.
- @username@
- Posts: 335
- Joined: Tue Oct 22, 2013 6:59 pm
- Location: Scotland
Re: Salora Manager / Laser 2001 BASIC
DEF FN
Again these exist as tokens only - so POKEing the program is the way to go!
An example of the standard function
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.
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?
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)
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)
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?