Jump to content
IGNORED

Any info on Video Technology Laser 500 computer?


31336haxx0r

Recommended Posts

I would like to write some game in assembler for this vintage, it's something I craved at the time but had not enough knowledge to achieve it. So after 30 years I want to "close the circle" so to speak.

 

I'm thinking about a "sprite" routine, but I don't even know if this machine is able to switch the graphic page or to sync to the raster. Any clue?

Link to comment
Share on other sites

Regarding the graphics capacities, it seems the jury is still out so to speak. As you know, the question has been raised multiple times in this thread with various hints about what it could do, but no definite answers. I even typed in your program from back in the days which had some advanced features though I didn't really get it to work as I imagined it should.

 

I would love to be able to use custom character graphics, even if only limited to 20 something and not suitable for software sprites. However I'm afraid that is not doable, only bitmapped graphics which is a different chapter.

Link to comment
Share on other sites

unfortunately definable characters are not possible because text mode is drawn by the chip itself (without looking into RAM), but bitmapped graphics should be OK I think.

 

The only matter is whether it's possible to have some sort of double buffer, e.g. moving the pointer of "bitmap RAM start".

 

On a different topic, is there a way to load/save programs from/to a PC (via audio cable) ?

Link to comment
Share on other sites

Trying to understand the bank switching thing... what do "4164x8" and "4416x2" mean on the manual page?

 

I just tried the MAME emulation, it's awful, cursor keys aren't working and it seems there is no emulation for the "RESET" key. And it's prone to hanging. Does anyone experience the same issues?

Link to comment
Share on other sites

Trying to understand the bank switching thing... what do "4164x8" and "4416x2" mean on the manual page?

It describes the RAM chips layout on the PCB: 4164 and 4416 are the RAM chips reference, ×8 and ×2 are the number of RAM chips put in parallel on the bus.

 

The 4164 is a 65536 bits DRAM chip. It has a single data I/O line, which is why you need 8 of them to form 65536 words of 8 bits; each chip data line is tied to one line on the VLSI data bus.

In the Laser 500, those are what is backing the RAM banks 4 through 7.

The Laser 700 has 16×4164 (or more accurately, 2×8×4164), filling banks 4 through 11 (the built-in 128 KB).

 

The 4416 is a 16384×4 bits DRAM chip with 4 data I/O lines. You need two of those chips to get the 16 KBytes of built-in RAM in the Laser 350. The first chip is used to store the lower 4 bits while the second chip contains the higher 4 bits.

This is what is behind bank 3 on the Laser 350 (not present on unexpanded Laser 500/700).

Link to comment
Share on other sites

Yes, I noticed that a number of keys are not emulated in MAME, that is why I had to rewrite the Flipper listing I typed in before.

 

Regarding loading and saving, I found that MAME saves programs as WAV or something like that so a file saved in the emulator can be played back to load onto a real Laser computer, perhaps with adjusting the volume and/or phase. See my previous posts in this topic, I think I descripbed what I did to get it to work.

Link to comment
Share on other sites

I'm thinking about a "sprite" routine, but I don't even know if this machine is able to switch the graphic page or to sync to the raster. Any clue?

The video hardware allows to switch between banks 3 and 7 (bit 3 of port 0x44, 0=bank 7, 1=bank 3), but it is pretty much useless in practice since the unexpanded Laser 350 doesn't have any RAM in bank 7, and the unexpanded Laser 500/700 doesn't have any RAM in bank 3.

And I'm not even sure the Laser 500/700 can be expanded to add the missing 16KB in bank 3.

 

For video sync, the Z80 interrupt line is directly connected to the VSYNC line of the VLSI. You can hook on the BASIC ROM interrupt routine by changing the vector at address 0x8012 (it is a RET instruction by default).

 

Quoting the manual:

 

 

USER INTERRUPT ROUTINE

 

The CPU will be interrupted for every 20 ms. The interrupt service routine will push all registers to stack, and call an exit point at location 8012H. When power up this location is initialized to RET. The user can modify this vector to jump to his service routine if he wish

Link to comment
Share on other sites

It's a disgrace that the emulator is so poor, but I've registered to MAMETesters.org in order to submit bug reports.

 

Any info on timers, I/O and all the rest? I was thinking that it might be helpful to disassemble the ROM, but I'm not much into Z80. Any good disassembler?

Link to comment
Share on other sites

Some more questions:

 

- what is bank "E" (labeled ROM) in the memory map? Is it different from bank 1/2 and is it available in a standard machine? Perhaps it's where DOS commands are installed with the disk drive interface ?

 

- in MAME emulator there is a 2K rom file named "27-393-00.u10" ... what's supposed to do? (It's not Z80 code, it's some data).

 

- when starting MAME it says: "One or more ROMs/CHDs for this machine have not been correctly dumped." ... any clue on what went wrong?

 

I am going to disassemble the 32K ROM with "dZ80"... damn it the Z80 istruction set is HUGE!

Link to comment
Share on other sites

- what is bank "E" (labeled ROM) in the memory map? Is it different from bank 1/2 and is it available in a standard machine? Perhaps it's where DOS commands are installed with the disk drive interface ?

Banks C through F are for expansion ROM, made available through the expansion connector.

At startup, the BASIC ROM will look for a magic value (byte sequence AA, 55, E7, 18) in banks 2, C, D, E and F (in that order), and transfer execution to that ROM bank at offset 0x0004 if such a value is found (the bank gets mapped at 0000-3FFF in Z80 address space).

 

The manual mentions that the BASIC ROM can detect the presence of the disk unit interface by writing the I/O port 0x13 and reading back the result (this is the data buffer, so if the disk interface is present, you should read back the same value you've written).

And if the disk interface is present, the sector 0 of track 0, will be loaded to memory location 0xA200, and execution will resume at that location (after checking that the boot signature is there, I assume).

So it appears there is a least minimal support for the disk drive interface in the BASIC ROM, but it doesn't exclude loading a fuller support from an expansion ROM module.

 

- in MAME emulator there is a 2K rom file named "27-393-00.u10" ... what's supposed to do? (It's not Z80 code, it's some data).

- when starting MAME it says: "One or more ROMs/CHDs for this machine have not been correctly dumped." ... any clue on what went wrong?

It must be the character generator ROM, used by the VLSI to draw the characters to screen in text mode. IIRC, MAME knows only one chargen ROM, but there are actually regional variations (accented characters for France, pound sign for the UK, …).

 

As for the warning, a comment in the code says that the ROM was dumped using the wrong size: only 2KB were dumped, while the 2764 is a 8KB EPROM, hence the warning.

I don't think it matters much for the usual text mode emulation purposes, but MAME maintainers are thorough people, and since all the address lines are connected to the VLSI, the other 6KB must be used for something, right? ;)

Link to comment
Share on other sites

Thanks for the info! Yes I just checked and the small rom file contains the character generator (128 normal + 128 reversed).

 

I've found part of the bank-checking routine you mentioned (see below) but I could not track where it passes control to 0004h. The Z80 istruction set is still too unfamiliar to me.

66A1  ld      b,05h
      ld      de,66bdh
66A6  ld      a,(de)
      out     (40h),a   ; switches on the 1st bank because he is now on the 2nd (66A6h)
      call    66c2h     ; compares with AA 55 E7 ...
      inc     de
      djnz    66a6h
...
66bd 02 0c 0d 0e 0f 
Edited by nippur72
Link to comment
Share on other sites

My Laser 500 just arrived! I'm happy as a child :) :-D. I haven't touched this machine since the late '80. WOW.

 

- the unit is in pretty good state, doesn't seem to have been used much

- I have the QWERTY model, with ANTENNA/TV connector in place of RGB. It is possible to choose between CH3 and CH3 via a little switch on the back (anyway I haven't tested it)

- no PSU included, but I've plugged to it a 9V DC positive central power supply (thank to the info on this thread). It works even with 0.5 mA but the power supply gets really hot. And by giving less than 9V the image flickers considerably.

- the keyboard is quite responsive, much more than I remembered

- image quality using composite video is rather BAD on my LCD screen. I am puzzled as it was crisp on my old TV. Now it's like there is a VIC20 attached (if you know how that machine looks). But if I switch to monochrome (via the switch on the back) it's very sharp (but alas, no color!).

- typed in my first basic program, it's incredible how the brain is able to retrieve long forgotten memories.

- When scrolling (LIST or PRINT outputs) use the SPACE bar to pause resume the scrolling.

- I was unable to remember how to use USR() to give control to machine language, wasn't it PRINT USR(address) ?

- I tried to figure where the boot routine is located, I thought it was just 0 since the Z80 starts from there, but that gives just "Ready". I've found instead &H66EF does boot the machine, e.g. MON + return + 66EF G

Link to comment
Share on other sites

You use CALL to run a machine language routine. See for example the Flipper listing I typed in last year.

 

http://atariage.com/forums/topic/187667-any-info-on-video-technology-laser-500-computer/?p=3792347

 

I will have to try my Laser 500 on various displays, CRT vs LCD. It is an AZERTY model with antenna + composite video.

Link to comment
Share on other sites

  • 2 weeks later...

By looking at the list of BASIC tokens, I see that TIME$ (aka TI$) is missing... which is puzzling me as I really can't remember how we used to measure time in this machine (if we ever did it).

 

I wonder if there is some sort of technical reason behind this missing feature... or they were just lazy and didn't implement it?

Link to comment
Share on other sites

If it has a timer or clock, it probably runs some bytes in memory that you could PEEK, if only you know where to look. I'm not sure that TIME$ was particularly universal even among Microsoft BASICs, much less other implementations. David A Lien writes in the BASIC Handbook based on his 1981 edition that TIME$ mainly exists on PET and DEC computers, though it might be available elsewhere too.

Link to comment
Share on other sites

yes, GW-BASIC on MS-DOS had TIME$.

 

I really want to reverse engineering the ROM kernel, to see what the machine does in the little details. I wonder whether it shares pieces of code with other machines (110,210,310). But it's a big effort.

 

I also would like to write a custom assembler language for the Z80 in order to make it more human-readable (I already did the same for the 6502 and it's pretty nice). But that's another big project :(

Link to comment
Share on other sites

  • 3 weeks later...

So, I was looking around for another target to support within z88dk and I ran into this thread, the relative obscurity of the machine makes it an interesting target to support and I thought it was going to be easier than the FP-1100.

 

I think I have something that can create ROM cartridges, however I can't seem to get the cartridges to load in Mame - looking at the debugger I can't see the image ever being paged in during the cartridge signature check. This probably means that either a) I've done something wrong, b) The support for the cartridge slot isn't complete in Mame. Can anyone confirm that cartridges are loaded correctly/share a link to a working cartridge so I can see what I've done wrong? Thanks.

 

BTW, the basck tool within z88dk is very useful for discovering addresses in ROMs - it analyses Microsoft and Hudson BASIC ROMs and determines addresses for the commands, floating point routines etc

Link to comment
Share on other sites

there were no cartdriges for this machine -- all games were distributed on tape.

 

The only thing that might resemble a cartdrige is the disk drive interface, which worked as a physical interface adapter and Basic DOS extension. But to my knowledge its ROM was not dumped yet. Disk drives are very rare.

 

I've to look into z88dk, thanks!

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Edit 2: I tried once more, making sure to slow the MAME WAV by 20% which actually made it load on the Laser 500 computer! Perhaps slowing it by 25% would be even more on the safe side.

 

it might be just a matter of tuning some constants in MAME. Looking in the source code I've found this:

 

https://github.com/mamedev/mame/blob/4263a71e64377db11392c458b580c5ae83556bc7/src/lib/formats/vt_cas.cpp

/*********************************************************************
    vtech 1
*********************************************************************/

#define V1_LO   -32768
#define V1_HI   +32767

#define V1_BITSAMPLES   6
#define V1_BYTESAMPLES  8*V1_BITSAMPLES


/*********************************************************************
    vtech 2
*********************************************************************/

#define VT2_LO  -20000
#define VT2_HI  +20000

#define VT2_BITSAMPLES  18
#define VT2_BYTESAMPLES 8*VT2_BITSAMPLES

so Laser 500 (vtech2) has a lower volume (20000 vs 32767) but apparently longer bits (cycles).

 

BTW, I am not aware how the Lasers (and Z80 in general) do timings... is there a timer chip like the Commodore's VIA?

Link to comment
Share on other sites

I'm getting more acquainted with the Z80 and I think I've understood how the video raster interrupt works on the Laser 500. Here's what I came up with:

 

The video chip triggers a maskable interrupt (MODE 1) at the start of every video frame. This is hardwired in the Z80, making it call &H0038 in the ROM within 13 clock cycles.

 

Now &H0038 simply jumps to &H0A0C in the ROM.

 

&H0A0C I guess is pretty standard, it calls the user-configurable routine and then does keyboard and I/O stuff. At first glance, it seems there is no clock-tick counter that is updated (there are no INCs), which might explain the lack of TIME$ in BASIC.

 

   0a0c f5        push    af
   0a0d c5        push    bc
   0a0e d5        push    de
   0a0f e5        push    hl
   0a10 dde5      push    ix
   0a12 fde5      push    iy
   0a14 cd1280    call    8012h    ; user interrupt routine
   0a17 cd2e0a    call    0a2eh    
   0a1a cd560a    call    0a56h
   0a1d cda90a    call    0aa9h
   0a20 cdb80a    call    0ab8h
   0a23 fde1      pop     iy
   0a25 dde1      pop     ix
   0a27 e1        pop     hl
   0a28 d1        pop     de
   0a29 c1        pop     bc
   0a2a f1        pop     af
   0a2b fb        ei      
   0a2c ed4d      reti    
  • Like 1
Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

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...