Jump to content
31336haxx0r

Any info on Video Technology Laser 500 computer?

Recommended Posts

I don't think they are compatible. We had both 310 and 500 but as far as I can remember we never used the disk drive on the 310. Consider that the drive was plugged on the L500 through a sort of memory expansion which also extended the basic with commands like "DLOAD", "DIRECTORY" etc.. That makes me think it was a 500-only feature (I vaguely remember the basic booted showing V3.51 as version number).

 

We had also a diskette with CP/M for the L500, but we never used it because CPM was totally unknown to us. All I remember is that it booted to a 80 column black screen and dos prompt, with regular CP/M commands.

Share this post


Link to post
Share on other sites

I've been asking myself the same question, ranging over the entire or at least most of the VTech Laser range. It seems to me like a lot of engineering work to come up with one set of peripherals for each model, so at least some part of it should be the same. I know data recorders for the 200, 350, 500, 2001 must be interchangable, but those use regular mic/ear so not Laser specific.

Share this post


Link to post
Share on other sites

How about the sound capability of Laser 350/500/700 ?

I just dug out Scheidegger's Easybit BASIC programming course (in Dutch) and the SOUND command works like this:

 

SOUND frequency,duration

 

Frequency:

0 - Silence

1 - A0

2 - A#0

3 - B0

4 - C1

etc up to

28 - C3

29 - C#3

30 - D3

31 - D#3

 

Higher frequency than so yields a ILLEGAL FUNCTION CALL error.

 

Duration;

0 - Error

1 - 1/8 second

2 - 1/4 second

3 - 3/8 second

4 - 1/2 second

5 - 3/4 second

6 - 1 second

7 - 1 1/2 seconds

8 - 2 seconds

9 - 3 seconds

10 - 20 seconds (estimate)

11 - just below 3 seconds (est)

12 - 5 seconds (est)

13 - 16 seconds (est)

and so on..

 

So yes, one square wave tone generator with a range of 2.5 octaves and reasonable but not perfect duration resolution.

 

There may be other ways to call the sound too, but that is from BASIC.

 

Unfortunately this BASIC course doesn't mention graphic capabilities by a word. It stops at introducing 40 and 80 column text modes and plotting graphs using the TAB command and asterisks. It doesn't even cover the COLOR command.

 

Since my machine has an AZERTY keyboard, it doesn't make experimenting easier. At least CAPS LOCK will enable shifted numbers.

 

Anyway, I found a web page that has the keywords listed:

http://www.razzmoket.esy.es/basic.htm

 

It makes it possible to draw some graphics, a quick example:

 

 

10 GR 3
20 FOR I=1 TO 15
25 COLOR I:MOVE(10,10)
27 DRAW(I*10,30):NEXT
30 IF INKEY$="" THEN 30
40 COLOR 0,15,15:TEXT 40

 

(Perhaps JamesD already figured out the syntax, I'm not sure)

Share this post


Link to post
Share on other sites

I just dug out Scheidegger's Easybit BASIC programming course (in Dutch) and the SOUND command works like this:

...

It makes it possible to draw some graphics, a quick example:

10 GR 3
20 FOR I=1 TO 15
25 COLOR I:MOVE(10,10)
27 DRAW(I*10,30):NEXT
30 IF INKEY$="" THEN 30
40 COLOR 0,15,15:TEXT 40

(Perhaps JamesD already figured out the syntax, I'm not sure)

I haven't looked at it since my last post.

 

I would expect some option on DRAW to select the color on the fly and possibly source pixel.

Something like

DRAW(x,Y,Color)

or

DRAW(X,Y),Color

or maybe

DRAW(sourceX,Y)-(DestX,Y),Color

 

 

*edit*

Nope

Edited by JamesD

Share this post


Link to post
Share on other sites

I took another look at the keyword table.
The first and last character of keywords are both altered from the standard ASCII value.
Anding the last character with 127 (01111111) makes the last character normal.
The first character is... complicated.
The W in WIDTH, WAIT, WHILE, WEND, and WRITE is a different value each time.



Share this post


Link to post
Share on other sites

I took another look at the keyword table.

The first and last character of keywords are both altered from the standard ASCII value.

Anding the last character with 127 (01111111) makes the last character normal.

The first character is... complicated.

The W in WIDTH, WAIT, WHILE, WEND, and WRITE is a different value each time.

I updated the BASIC program I posted so you can see what I'm talking about

10 A=7196 : REM START ADDRESS $1C1C
20 B=PEEK(A)
30 REM SKIP FIRST CHARACTER OF KEYWORD FOR NOW
40 REM
50 PRINT B;
60 A=A+1
70 B=PEEK(A)
80 IF B>127 THEN 110
90 PRINT CHR$(B);
100 GOTO 60
110 B=(B AND 127)
120 PRINT CHR$(B)
130 A=A+1
140 IF A < 7851 THEN 20

Share this post


Link to post
Share on other sites

Yeah. I made a modified version of your program yesterday, where I'd OR with 32 for values < 32, and AND with 127 for values > 127. I noticed the oddity as well and was about to post an estimated list of keywords, when I found the link to the French page in Spain which has all keywords already listed. Most of my educated guesses seem true.

 

You can use COLOR to change just foreground colour, but I agree that an extra argument to the DRAW etc commands probably would make it more convenient. The reason I mentioned your name was that I saw earlier this year in a different thread in the Atari 8-bit section, you were trying to port a "hat drawing program" to as many systems as possible and mentioned the Laser 500 among those, but I didn't see any listing at that time.

 

I had hopes the above linked page would contain some downloadable software, but it doesn't seem to. It has some technical details about memory maps etc though, so a meaningful resource anyway.

Share this post


Link to post
Share on other sites

regarding SOUND command being arranged in semitones instead of frequency, I remember a quick "piano" program I used to write:

10 A$=INPUT$(1)
20 X=INSTR("Q2W3ER5T6Y7UI9O0P",A$,1)
30 SOUND X,2
40 GOTO 10
  • Like 1

Share this post


Link to post
Share on other sites

Yeah. I made a modified version of your program yesterday, where I'd OR with 32 for values < 32, and AND with 127 for values > 127. I noticed the oddity as well and was about to post an estimated list of keywords, when I found the link to the French page in Spain which has all keywords already listed. Most of my educated guesses seem true.

 

You can use COLOR to change just foreground colour, but I agree that an extra argument to the DRAW etc commands probably would make it more convenient. The reason I mentioned your name was that I saw earlier this year in a different thread in the Atari 8-bit section, you were trying to port a "hat drawing program" to as many systems as possible and mentioned the Laser 500 among those, but I didn't see any listing at that time.

 

I had hopes the above linked page would contain some downloadable software, but it doesn't seem to. It has some technical details about memory maps etc though, so a meaningful resource anyway.

I didn't get to the 500 for the Fedora plot. I was working on systems I had documentation for first.

I was working on a Laser 2001 port but ran into so many emulator problems I decided I'd better quit while I still had some sanity remaining.

The MESS emulation of the 500 looks pretty stable so it probably wouldn't be difficult. Pasting text seems to work well which makes porting pretty easy.

 

The BASIC with the 500 appears to be pretty good but the way the first letter of the tokens are stored seems unique. At least I haven't seen anything like it before.

Maybe some sort of logic or math operation with it's position in the table?

Keyword wise it's pretty close to Microsoft BASIC with the exception of the unique syntax for it's graphics and sound commands.

Simplified syntax such as leaving an optional color off of the DRAW command would make the interpreter smaller, though it makes BASIC programs larger.

Share this post


Link to post
Share on other sites

Oh, look how pretty!

post-5454-0-94194700-1450209577_thumb.jpg

 

And this is the machine that made it possible:

post-5454-0-39368700-1450209579_thumb.jpg

5 PI=ATN(1)*4
10 COLOR 15,0,1:GR 3
20 FOR I=0 TO 2*PI STEP .1
30 COLOR INT(RND(1)*15)+1
40 MOVE(80,96)
50 RX=INT(RND(1)*40)+20:RY=INT(RND(1)*40)+20
60 DRAW(80+COS(I)*RX,96+SIN(I)*RX)
70 NEXT
80 IF INKEY$="" THEN 80
90 COLOR 0,15,15

Because this BASIC seems to be missing the PI constant, I had to calculate it. Possibly I have mixed up SIN and COS as well regarding which should operate on X and Y, but I can't be bothered to look it up. In GR 3 mode, we have a resolution of 160 horizontal x 192 vertical pixels in 16 possible colours, which nicely avoids the colour clashes you'd otherwise see, but I figure it uses a chunk of RAM to use that mode.

 

Edit: Bah, stupid me! I never used the RY variable. Well, it was just a test anyway. Besides I'm a little annoyed that this BASIC interpreter is one of those that require keywords to be separated by space when typing them in, otherwise you get runtime errors. I'm used to other dialects that either add spaces on their own, or don't need them at all.

Edited by carlsson

Share this post


Link to post
Share on other sites

The stretched shape is because of MESS.

post-10422-0-37197200-1450248005_thumb.png

 

 

*edit*
That must have been after running the code a 2nd time so the screen was cleared to the proper foreground and background colors.
Here is what it looks like otherwise.
post-10422-0-18663600-1450248958_thumb.png

Edited by JamesD

Share this post


Link to post
Share on other sites

Holy cow! I wanted to sell my Laser 500 in the mean time but didn't get around to it.

 

Now I think, with all the stuff you guys figured out, I'll kepp that thing. :)

Share this post


Link to post
Share on other sites

Anyone had good luck in finding a manual for the Laser 500 yet?

You can barely find one of these computers, and you want a manual? :D

What is it with people throwing out manuals for computers?

Share this post


Link to post
Share on other sites

Anyone had good luck in finding a manual for the Laser 500 yet?

 

I have it probably, but it would be in French if I have one :D

Share this post


Link to post
Share on other sites

Didn't we extract commands with parameters before? That is probably as much as you'd find in the manual.

 

The Laser 500 appears every now and then on eBay, so anyone seeking one would not have to wait for years unless of course you have a maximum bid.

 

Edit: Yes, see here. If French is too difficult for you, try Google Translate or ask for help here. http://www.razzmoket.esy.es/basic.htm

Edited by carlsson

Share this post


Link to post
Share on other sites

These are the "commercial" games sold on tape, on the rear cover of the magazine:

l500_games.jpg

 

I haven't given up on finding some dumped games for the Laser 500, 700, 750 series. In the mean time I found this thread on a different forum, where the same user who posted a video on Flickr posted more screenshots. It seems he's got the entire (?) library of 8 games available on floppy disk, but as it was mentioned earlier in this thread, transferring Laser 700 software from disk to tape so it could be loaded on a 500 is not easily done.

 

http://www.zonadepruebas.com/viewtopic.php?style=1&f=40&t=103

  • Like 1

Share this post


Link to post
Share on other sites

It shouldn't be so difficult, the games had no copy protection if I remember well, so it should be a matter of DLOAD and then CSAVE. There was also BSAVE for saving chunks of memory (or perhaps it a MONitor command, I don't remember).

  • Like 1

Share this post


Link to post
Share on other sites

I had a go trying to type in Nippur72's listing on page 2. The magazine scan is not of the highest resolution, so I may have made some typos. Furthermore, his game depends on joysticks, which don't seem to be emulated in MAME. I tried to replace that with INKEY$ to read the keyboard. Probably there are few bugs somewhere, because the game looks more like Doodle than Snake, Qix or anything else it is supposed to. I don't know how to score or die, but that might due to typos in the listing.

 

Lines 300, 301, 320, 540 are altered on purpose. The combination of lower and upper case in the instructions were lost when I pasted the text listing into MAME.

 

dogbuster.txt

 

WAV file: http://www.cbm.sfks.se/tmp/dogbuster2.wav

 

How to load in MAME once you have obtained the ROMs required for Laser 500 emulation:

 

1. Press Scroll Lock to enable UI and TAB to obtain menus.

2. Choose File Manager and cass, locate the WAV file.

3. Return to previous menu, choose Tape control. Stop and rewind the file.

4. Return to the emulator with a few ESC, type CLOAD + Return

5. Press TAB and go back to tape control followed by Play.

6. Once loading is done, press Scroll Lock to disable UI again.

 

But as mentioned, the game doesn't run as I think it is supposed to. A good set of eyes proofreading the listing vs the text file above may be in order.

Share this post


Link to post
Share on other sites

After some research, I found the issue of the magazine scanned at better resolution and contrast, which helped me fix the typos. Eventually I will paste this into the emulator and replace the WAV file posted above with the new version.

 

dogbuster.txt

 

http://www.retroedicola.it/_archivioRivisteInformatica/Laser_Computer_Club/1986%20(06).pdf

 

I found two more issues of the Laser Computer Club magazine which contain a number of listings for both the Laser 310 and 500 models:

 

http://www.retroedicola.it/_archivioRivisteInformatica/Laser_Computer_Club/1988%20(03).pdf

http://www.retroedicola.it/_archivioRivisteInformatica/Laser_Computer_Club/1988%20(04).pdf

 

With a bit of work, that would set up a very small software library even if entirely from an Italian user club.

  • Like 1

Share this post


Link to post
Share on other sites

I typed in Flipper by Roberto B. It seems to utilize the cursor keys to move the flippers but the Laser 500 driver in MAME appears to not support cursor keys, so I modified the listing to use keys Z and M instead.

 

A few interesting details here:

 

  • PEEK(&H85F0) is an INKEY$ routine that might be better suited for continuous reading the keyboard. The values returned are rather based on some matrix, so they need to be looked up.
  • DEF FN P$(X,Y)=CHR$(27)+CHR$(161)+CHR$(31+X)+CHR$(31+Y) is a way to get a PRINT AT routine, which obviously lacks in the built-in BASIC
  • STRING$(n,CHR$(x)) creates a string that contains n occurrences of CHR$(x)

flipper.txt

 

WAV: http://www.cbm.sfks.se/tmp/flipper.wav

 

I'll try it on my real Laser 500 later this week.

Share this post


Link to post
Share on other sites

Based on the French page, and combined with the few listings I've found, here is the beginning of a POKE library:

 

&H8030 = ASCII code of last key pressed

&H85E5 = Number of scrolling rows (default 24, lower value means bottom rows are fixed)

&H85E6 = Left column indent (default 0, in steps of 2, odd values will yield funny results)

&H85F0 = Key code currently pressed (255 = no key)

&H85FA = Turn on/off inverse text (bit 1) and beep (bit 3)

&H8604 = Content at cursor position

&H8995 = Start of BASIC program

 

If you want a flashing cursor during INKEY$, you can issue the following commands:

 

POKE &H8013,64:POKE &H8014,10:REM PREPARE FLASHING CURSOR

POKE &H8012,&HC3:REM ENABLE FLASHING CURSOR

POKE &H8012,&HC9:REM DISABLE FLASHING CURSOR

 

The video memory is the last 16K. In 40 column text mode, the screen matrix starts at &HF800 and is arranged in a ZX Spectrum like order, where every even byte contains the character and every subsequent odd byte is a combination of background (low nybble) and foreground (high nybble).

 

Row 0: Bytes 0 .. 79

Row 1: Bytes 256 .. 335

Row 2: Bytes 512 .. 591

Row 3: Bytes 768 .. 847

Row 4: Bytes 1024 .. 1103

Row 5: Bytes 1280 .. 1359

Row 6: Bytes 1536 .. 1595

Row 7: Bytes 1792 .. 1871

Row 8: Bytes 80 .. 159

Row 9: Bytes 336 .. 415

Row 10: Bytes 592 .. 671

Row 11: Bytes 848 .. 927

Row 12: Bytes 1104 .. 1183

Row 13: Bytes 1360 .. 1439

Row 14: Bytes 1596 .. 1675

Row 15: Bytes 1872 .. 1951

Row 16: Bytes 160 .. 239

Row 17: Bytes 416 .. 495

Row 18: Bytes 672 .. 751

Row 19: Bytes 928 .. 1007

Row 20: Bytes 1184 .. 1263

Row 21: Bytes 1440 .. 1519

Row 22: Bytes 1676 .. 1755

Row 23: Bytes 1952 .. 2031

 

As you can see, the last 16 bytes in each block of 256 bytes are wasted in this scheme, a total of 7 * 16 = 112 bytes.

 

Both in the MAME emulator and on my real Laser 500, one needs to OUT &H43,7 before writing to the video memory. It produces some garbage at the bottom of the screen and locks up the computer at first, but if you issue a soft reset it kind of works. OUT &H43,5 to restore the memory map. Perhaps PRINT is a safer way to work with the screen matrix than POKE, at least until I understand exactly what it happening.

 

This program kind of displays the entire font, if it has not been obvious before:

 

5 CLS:OUT &H43,7
10 FOR J=0 TO 7:FOR I=0 TO 31
15 POKE &HF800+J*256+I*2,J*32+I
20 NEXT I,J
25 OUT &H43,5

What I really would like to figure out is if it supports custom characters in some way. Nippur72 hinted about that earlier, but so far I haven't found any obvious signs that would be the case. Probably there is at least one POKE to steer the font from ROM to RAM in that case. Hmm... the question is if the manual even mentions such advanced operations. CatPix, you previously hinted that you might be sitting on a French edition of the manual?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...