S100 Computers

Home S-100 Boards History New Boards Software Boards For Sale
Forum Other Web Sites News Index    

An S-100 LAVA-10 Video Board.  
  Final Lava Board

Many S-100 board manufactures had their own Video boards.  Most initially were character based "video TTY's". The very early ones were restricted to 64 characters/line (for example the SSM board) but soon 80 characters per line became common.  A good example is the SD Systems 8024 Board.

As time went on, boards started to get more sophisticated and began to offer fairly high resolution graphics capabilities.  A good example of this would be the Matrox ALT512 board which offered color graphics at a 512 X 256 resolution. There were even a few of higher resolution.  The NEC 7220 based video controller boards for example, which brought video display graphics to a new level. That chip was the NVIDEA chip of its day back in the early 1980's.

Once the IBM PC appeared on the scene video hardware compatibility with it became key.   There were a few S-100 bus attempts to make equivalent cards. The Lomas "Color Magic" IBM-PC Color Graphics Adaptor (CGA) look-alike probably being the most successful.  However with the phasing out of the S-100 bus in the late 1980's, no higher resolution S-100 video boards were ever produced. 

On the IBM-PC side of things (and its clones), video boards of increasing resolution appeared, eventually culminating in "VGA" boards. At the same time a very long list of "all in one" PC video chips were developed. The firm Chips and Technologies was the first company (outside of IBM) to deliver a compatible VGA chipset, the 82C451. This market was then entered into by companies such as Trident Microsystems, Western Digital, Cirrus Logic, Oak Technologies, and others, until it was saturated.  None of them exist today, nevertheless they started a whole industry of powerful all in one video chips.   With one chip,  a little DRAM and a ROM a complete video board could be constructed with outstanding capabilities.

With the recent of our re-introduction introduction of 16 bit 8086 based S-100 boards and MS-DOS based operating systems there is a clear need for a good high resolution SVGA style video board.  The specifications of a SVGA board is beyond the capability of discrete 74LSxx based TTL chips.   This is the job of a dedicated "Video Controller Chip".  What chip should one use ? There are a number of candidates.   One can choose a "CGA/VGA"  chip such a the Cirrus Logic GD5420 where from a software perspective the BIOS "thinks" it is talking to an IBM-PC CGA/VGA type board in that it uses the same registers and RAM memory locations etc.,  only with more registers and/or memory for higher resolutions.  The disadvantage of this from our S-100 bus perspective is that programming these chips is very difficult. The drivers tend to be Intel/8086 specific.

An alternative approach is to utilize a chip that simply sends out a SVGA video signal and the screen memory/registers are hidden/not needed. Control is via a small set of sequential commands.   This has the advantage that any CPU specific driver can be easily put together.   This is the approach we will use here.

LAVA 10 is a SVGA Graphics Controller based on a Xilinx Spartan 3 FPGA module designed for use in embedded systems.  The main task of this device is taking over most of complex operations related with displaying graphics from the main processor.


  • 3-in-1 Integrated SVGA Display Controller, SDRAM Controller, Flash Memory Controller
  • Displaying 65536 colors (RGB565) in SVGA (800x600) resolution (60Hz) – perfect for use with LCD Monitors
  • Xilinx Spartan 3 (XC3S200)
  • 32 MB SDRAM memory for storing frames (2 buffers) and for general purposes (not necessary related with graphics)
  • 8 MB Flash memory for storing non-volatile data (fonts, icons, pictures etc.)
  • Embedded Character Generator (Code page 437 based characters)
  • Outputs for Video DAC
  • Fast 8-bit interface for bidirectional communication (can be connected to any host controller. (3.3V)
  • Reprogrammable via JTAG interface (adding new hardware functions, using module for other FPGA based projects etc.)
  • Single low power design: 3.0-3.6V supply
  • Prepared for use directly in the application or with the evaluation board
  • Simple instruction set (library written in C is available)
  • See here for more details.  The company (Mylium) does not seem to have a US distributer, but you can get the board from Europe (for ~$77)  within 3 weeks by e-mailing directly to info@mylium.es.


  Lava-10 Chip
The interface to the chip is simply an 8 bit bidirectional parallel port and a few strobe/status bits. 
The manual describing the "chip" interface and software interface can be seen here


  Chip Pinout    

RW Signals
    Lava Pinouts    Lava Read & Write Signals

Communication with the LAVA chip is done by sending a series of simple commands. Here are the main ones:-
  Read RAM   Write RAM
  Read Lava Video Memory   Write to Lava Video Memory
  Copy RAM   Draw Character
  Copy one Video Memory location to another   Draw 1 to 10 characters on screen at current cursor  position
  Lava Registers
  Special Lava Registers that can be read and set.

The above commands are relatively straightforward. However all commands to the LAVA chip are words so when printing characters one has to send an even number of bytes. To display a single character, one can send the ASCII character followed by a 0 byte.  

The character resolution of the screen is 100 characters wide, 32 lines high.

Please note the level of interaction (while extremely fast) is very primitive.  You have to write your own code to do:-
A Backspace, Del, CR, LF, Scroll Up/Down, Clear Screen, Clear to EOL etc.

I have written a very basic 8086 (LAVA.A86) program to demonstrate the utility of the board.  I actually started with an elementary 8080 program just to get started. These can be downloaded (see below).  However the main function of this board is geared to work with MS-DOS etc.   The latest version of my 8086 Monitor/IBM-PC BIOS video output routines have been modified to allow console output to the board.   The program works fine for example with Microsoft's MS-DOS (V4.01) FDISK.EXE which makes extensive use of cursor X,Y positioning etc.


Because the S-100 interface to the Lava chip is relatively simple, the extra room on the board was utilized for a 16 bit EEPROM circuit. Typically one would use 28C256 EEPROMS.   The EEPROM circuit is completely independent of the Lava circuit (and vice versa).  The EPROMS can be switched in or out depending on the current processor utilizing the bus (with the 1 of 16 DMA 0-3 lines).  This way an 8086 CPU board could contain code for an 8086 based video driver while the EEPROM on this board could contain code for another CPU.

Here is a picture of the first board prototype:-

Prototype Board
Please excuse the wire patches. They will be corrected on the final board.  Controlling the LAVA chip involves writing (U10) or reading (U14) 8 bits of data to the 8 bit bidirectional port on the Lava chip.
  Core Circuit
Lets look at S-100 to Lava 8 bit Writes first:-
While completely configurable (switch SW1 & 2), I will use I/O port 90H as a status port and port 91H as a data port. First we send a byte to U10 on data port 91H. To write to the chip we set the R/W mode/bit to write with U11B pin 9 low. We then output enable U10 by bringing its pin 1 low via U11A pin 6.  The data is now on the Lava data bus. Next we raise the "strobe signal" to the Lava chip via U12A pin 6.  We then continuously monitor this signal on input status port 90H via U16 pin 17.  When the Lava chip has processed the data it will return a raised "Done" signal. This signal clears the U12A 74LS74 (pin 1) for the next byte to be sent. The signal at U16 pin 17 will return high.  The whole process can be repeated rapidly for each byte to be sent.  The Xilinx Spartan is incredibly fast, in fact except for a screen scroll and the likes, the chip is ready for the next byte as fast as even an 8MHz 80286 CPU board can send the data.

S-100 to Lava 8 bit Reads:-
Essentially we use the same hardware approach.  However in order to read data from the Lava chip we must first write a few bytes to the chip containing the Read command.  We set the Lava chip to Read mode with U11B pin 9 High.   We then strobe the chip and wait for the "done" signal as described above. However this time we read the 8 bits of data from U14.

This all sounds more complicated than it is. Here is the core 8086 code to read and write a byte to the Lava chip.  All chip interactions go through these routines.

Core Lava Write Routine:-
                             ;Note only [AL] altered
L_PULSE$WR:                  ;>>>>> WRITE ONE BYTE OF DATA TO LAVA CHIP, Data in [AL] <<<<<
        OUT LavaData,AL      ;Send [AL] to Lava data port (91H)
        MOV AL,00000001B     ;Output enable U10 to LAVA data bus, and set LAVA to WRITE mode
        OUT LavaStatus,AL    ;Send to lava status port (90H)
        MOV AL,10000001B     ;Then pulse status port strobe bit LOW (Bit 7 high, pulsed strobe low)
        OUT LavaStatus,AL    ;Send to lava status port (90H)
        IN AL,LavaStatus     ;Wait until LAVA "Done" signal clears U12A. Then we are done
        AND AL,80H           ;This will set strobe bit back HIGH. Note still in WRITE LAVA mode
        JZ L_WR$NOT$RDY

Core Lava Read Routine:-
                              ;Note only [AL] & [BX] altered
L_PULSE$2RD:                  ;>>>>> READ TWO BYTES OF DATA FROM LAVA CHIP, Data in [BX] <<<<<
        MOV AL,00001000B      ;Set to LAVA READ MODE, Disable U10 to LAVA data bus
        OUT LavaStatus,AL     ;Send to lava status port (91H)
        MOV AL,10001000B      ;Then pulse strobe bit LOW
        OUT LavaStatus,AL     ;Send to lava status port (91H)
        IN AL,LavaStatus      ;Wait until JAVA "Done" signal clears U12A. Then we are done
        AND AL,80H            ;This will set strobe bit back HIGH. Note still in READ LAVA mode

        IN AL,LavaData        ;Data [15:8] from port (90H)
        MOV BH,AL             ;Save in BH

        MOV AL,10001000B      ;Pulse strobe bit LOW
        OUT LavaStatus,AL     ;Send to lava status port (91H)
        IN AL,LavaStatus      ;Wait until JAVA "Done" signal clears U12A. Then we are done
        AND AL,80H            ;This will set strobe bit back HIGH. Note still in READ LAVA mode
        JZ L_RD$NOT$RDY1
                              ;Now Second Byte
        IN AL,LavaData        ;Data [7:0] from port (90H)
        MOV BL,AL
        RET                   ;Return with data in [BX]

Note Mylum (the maker of the Lava-10) does supply a high level C-code "driver" for the chip. However it is tailored for their "development kit". It's difficult to understand because the pinout and function of the development kit is not explained. Worse still, one critical .h file was not supplied.

What is needed is a few more basic commands for the Lava chip to do simple things like CR, LF, back-space/overwrite, scroll up, down, and a screen area.  That said, the chip is lightning fast and the resolution of the text at 100 characters/line is incredible.  Here is a picture of a simple display:-
  CRT Display Example

A Second Production Board

Some minor corrections and additions to the above first prototype board were incorporated into a second prototype board  shown here:- 
V2 Board

The complete schematic for this board is shown at the bottom of this page. The critical part is shown here:-

  Core Lava Circuit V2

Changes include:-

A dual colored (Red/Green) LED was used to flag whether the Lava chip is in Read or Write mode.
The Lava "strobe" and "done" pulses were stretched out (vial a 74LS123)  to show a visible pulse on LED's  D3 & D18.
An S-100 Interrupt line can be triggered when a pulse is sent/received by the Lava chip
For the onboard EPROMS, they can now be activated by any one of the 16 possible S-100 bus DMA (master/slave) states.

The board works fine with our 8088, 8086 and 80286 CPU boards running MS-DOS (V4.01).

The Production Board.
Here is a picture of the final production board.  Fortunately the board worked without any changes exactly as the prototype did. The only error is the silkscreen legend has the labels "STR" and "ACK" switched. LED D3 is actually the Strobe pulse and LED D18 is the Acknowledge pulse.
Final Lava Board
Step By Step Building The LAVA-10 S100 Board.
Relative to some of our other boards this one is relatively simple. The first step is to examine the board carefully for scratches or damaged traces. Use a magnifying glass if need be. The quality of the boards we get is excellent. I must have done over 30 by now, never had a problem, but there is always a first time. A broken trace is almost impossible to detect by eye on a completed board.

Next solder in all the required IC sockets, resistors, resistor arrays, capacitors, jumpers, dip switches Zener diodes and the voltage regulators.  The lava mini-board will require a custom socket of dual X2, twenty pin socket.  You can use Jameco #11705 "Double Row Straight Female Header Receptacles" for the job. 

Be sure you put the resistor array  (RR8) in with the correct orientation for pin 1. Check their values also before  soldering (they are difficult to remove).  It's very important to use the correct 3.3V Zener diodes.  I use 1N5226B (Jameco # 743488).  These insure that the TTL outputs will not go above the 3.3V Voltage of the Lava-10 "Chip".  The voltage regulator for the Lava-10 is a 3.3V LM3940IT,  (Jameco # 192524). Note this V regulator requires a 5V input. It is not connected to the S-100 bus 8V supply.

It is easiest to install the indicator LED's first.  Without soldering them in, install D4 (Orange), D1 (Red), D3 (Green) and D18 (Yellow).  You can use your own colors.  Check the LED orientations by grounding U8 pin 4 for D1, U3 pin 12 for D18, U3 pin 4 for D3, and U42 pin10 for D4 of the empty sockets. If the LED's don't light up switch the orientation. Then solder the LED's into place.

Next we need to insert the dual color LED LD1. These Red/Green LED have three inputs can be obtained from Jameco # 156946.  To check before soldering, pull pin 8 of IC socket U11 high, the try pin 6 of U8.   The LED should change color.
Here is a picture of the board at this stage.
  Bare Board
Next we will add the I/O port circuitry.  In my case I will be using I/O ports 90H and 91H.  You can use any pair of ports you like, but the software examples below will need to be adjusted.

Insert IC's U17, U18, U19, U20, U5, IC1 and U35.  Jumper K6 1-2.
Insert IC's U8, U31 and U9.
Set switch SW1 to all closed
Set the switch SW2 (left to right) closed, open,closed,closed, open,closed,closed,closed. (U 1001 000x)

With you monitor input port 91H. In each case you should pick up a high to low pulse on U9 pin3.  No other port addresses should do this.  Likewise output to port 91H should show a pulse on U9 pin 6.
Writing to port 90H should pulse (high to low) U9 pin 8.

Next add IC's U10, U14, U16, U11, U12, U3, and U7.   
Jumper P9 1-2, 7-8, 15-16
Jumper P8 1-2, 7-8, 15-16
Jumper P16 5-6

Now if you  the R/W LED should change color and the Data (D1) LED should come on.
Here is a picture of the board at this stage.
  IO Check Board

The VGA Socket
Please examine carefully the top connector VGA socket connection. This 10  pin connection is the same pinout I use on all my video boards, including the Propeller driven Console-IO board (and incidentally the Lomas IBM-PC  GCA S-100 video board).  So you can switch boards/cables quickly. You will need to make your own ribbon cable VGA connector cable. Here is a picture of the pinout:-
  VGA Pinout
Next carefully check that none of the socket pins for the Lava-10 mini-board have a voltage greater than 3.5 Volts.  Most are less that 1 Volt.  If you output to port 90H, 0FFH however,  J1-13 will get to 3.02 volts.  This is fine so long as no pin is greater that 3.5V we are OK.  Carefully install the Lave-10 mini board.

You are now ready to fire up the board. On power on, the Lava-10 LED's (top to bottom, on its right hand side), go from
green, red, off, green ---->  off, off, green, red.   If you do not see this something is wrong.

No video signal will be seen at this stage. The Lava-10 needs to be initialized.  This is where if you have not already done so, you need to familiarize yourself with the Lava-10 software commands. See here.

I normally use this board in 8086/80286/80386 type systems so I have written a, MS-DOS style interrupt INT 10 style BIOS set of routines for the board.  If you have such a system up and running you can initialize and run the board right away.

In order to get things going however I have written a real basic Z80 board initialization program that can be loaded with CPM.   This is just a basic program to place characters on the screen. If you wish to use the board with a Z80 system you will need to write code to interoperate CR, LF, Scroll etc.  See the 8086 code for help.

The EEPROM Circuit.
The board contains a complete circuit to house a 16 bit dual EEPROM.  Typically a pair of 28C256's would be used. But there are jumpers for other configurations.  The only chips the two board circuits have in common are U17-U20.  Typically these EEPROMS would contain code for video drivers for an 8086 or 68K.  They can be located anywhere within the S-100 bus 16MG address space. I have them located at B0000-BFFFFH.   The circuit is a direct copy of the circuit on the MS-DOS Support board which has proven itself to be quite reliable.

To utilize this circuit. Insert all the remaining IC's
Jumper P14 11-12
Jumper P13 1-2,3-4,5-6,7-8. (Assuming the 8086 will use the S100 bus DMA0 line)
Jumper all 8 pins on P45 to P49
Jumper all pins on P46 to P50 except pins 6 & 8 which go to P48.
Next we need to set the switches SW8,9 and 10.
We will start with 4 wait states so SW8 left to right is open, open, open, open, closed, closed, closed, closed.
For Address 0BxxxxH for SW9 we have closed, closed, closed, closed, open, closed, open, open.
SW10 are all closed.
For 28C256 EEPROMS we set K7 1-2, K1 1-2, Jumper K2, K3 2-3 and K4 1-2.

Here is a picture of these settings on the board.

Remember the EPROM circuit has no direct relationship with the LAVA-10 circuit. The EEPROMS can be used to hold a monitor for an 8086 or 68K for example.

To see the 8086 specific LAVA code please go to the 8086 monitor.   The "acid test" for this board/software is to run the PC-DOS FDISK program.  This program utilizes the ESC character control and positioning functions of the PC-BIOS extensively. Here is a picture of the initial display:-

The board is quite reliable and has never "dropped a character" however the screen scroll is a little slow. This is unfortunate because it is not implemented in the Spartan chip which is easily capable of blindingly fast doing this. I have mentioned this to Mylium, hopefully they will upgrade the code.

The driver source code for the board can be found in the Video routines of the 8086 monitor.  If anybody does a driver for a Z80 or 68K please send them to me I will post them here.

One final point. The Lava-10 mini-board is programmable. I have no idea how one would do that since the source code is not available. But apparently if you wish to do so you use the socket on the board. Unfortunately that socket when mounted on the S-100 board blocks another S-100 board in the next available slot (its too high). I desouldered the socket with a desouldering gun and removed it.  That is why it does not appear in the pictures.  If you too do this, be very careful not to damage the other surface mounted chips on the mini-board.

A Production S-100 Board
Realizing that a number of people might want to utilize a board like this together with a group of people on the  Google Groups S100Computers Forum, "group purchases" are made from time to time.  Contact and join the group if you would like to be involved in this project.  See if bare boards are available and/or see if you and others may be interested in doing another board run.
Please note all the above clearly applies only to people who know what they are doing and can  do a little soldering and board assembly.  There will be little hand holding at this stage.

The links below will contain the most recent schematic of this board.
Note, it may change over time and some IC part or pin numbers may not correlate exactly with the text in the article above.

SIMPLE 8086 LAVA DEMO PROGRAM   (V2 5/7/2012)

Most current KiCAD files for this board  (S100 LAVA-002.zip  11/6/2014)


Other pages describing my S-100 hardware and software.
Please click here to continue...

This page was last modified on 05/14/2016