I decided to build an ISA video card after all. Since I already have a good video card, I know I had my fair share of doubts about the usefulness of such a project -- read the synopsis of ISA Audio Interface. But I wanted to learn about ISA video cards. And especially a video graphics array (VGA) cards with basic graphics acceleration. I settled on the Tseng Labs ET4000/W32i video controller chip. There is plenty of documentation on the Internet and the Tseng Labs datasheets are insanely full of details. All this makes for another easy system design project. Well I think designing this card was the easiest job of all I did so far in this domain. It took me about two weeks to read the various datasheets of the parts involved, around four days to draw the schematic and only a couple of days to completely hand-route all PCB tracks. By all means, that was fast!

I also inspected a lot of VGA ISA cards so that I learn as much as possible about the choice of components, PCB layout, and the like. I particularly enjoyed doing this, especially since I discovered this great site called VGA Museum where I could find cards that I didn't ever thought existed -- check this one for instance: Foundation Logic Ruby VGA. And I saw a lot of ISA hardware over the years. Well done on preserving the video card history and maintaining the site!

Here are the hardware specifications.

  • Very Fast MS-DOS Data Transfer
  • Good VGA Compatibility
  • Microsoft Windows Graphics Acceleration
  • True Color RAMDAC
  • 2 Mb RAM (Interleaved Mode)
  • Minimal Glue Logic
  • ISA-board class construction

This video display controller ISA card contains only twelve chips. The main issue with these chips is that only the octal bus transceivers and 3-state buffers are available at Mouser. All the rest need to be sourced from 3rd party sellers. I had some luck finding the ET4000/W32i graphics controller chip at a good price at a seller in China. The price was so good that I bought four chips. Unfortunately the transportation fee was unexpectedly high. The FPM DRAM chips were pretty cheap and readily available at multiple parts sellers. The dual PLL clock generator circuit was harder to find but it turned out to be pretty cheap. Then again I had to pay for the transport. The true color RAMDAC and the UV-erasable EPROM are readily available on eBay. So even if there are very few chips on this PCB, their combined price tag is not something to overlook.

The trigger to launch into such a project was when I accidentally found the ISSI IS41C16257-35T FPM DRAM chips. Seeing they have independent /CAS signals for both high and low byte signifies that I can use one 256Kx16 chip to store two bytes of video data in interleaved mode. This considerably reduces the number of memory chips to only four while providing nearly 64-bit memory access performance. The ET4000/W32i datasheet specifies memory speeds of 50 ns or better. The ISSI chips are rated 35 ns which is perfect. Giving credit to the section that describes the memory controller in the ET4000/W32i datasheet, I am expecting slightly faster memory access times.

Next I started imagining how the PCB would look like and then there was only a small gap before I began hunting for chips at various electronic parts sellers. This is my first computer hardware project that even received a non-cryptic name. I call this video card EXCELGRAPH.

Let's proceed.

Disclaimer: I reserve the right to change the schematics or the implementation without further notice. This is entirely a hobby do-it-yourself design and I am not responsible for any damage made by any possible mistake in any version or revision of the schematics or PCB layouts.

This project is in its final stage.
Current iteration of ASSY. 2486-VDC-201 is VER. 1.3 REV. E

* * *

Laudatur ab his, culpatur ab illis. This project is provided as-is and is not for commercial purposes. It reflects my experimental work in microcomputer system design and should be treated as such. I release the schematic and circuit boards to the public for educational purposes. I did all this on my expense and in my free time. So if you like my work, please consider a donation.

Schematic Diagram (VER. 1.3 REV. E)

Fig. 1: Electrical Principial Schematic

Printed Circuit Boards

Fig. 2: Top Silkscreen

Fig. 3: Bottom Silkscreen

Fig. 4: Top Layer Printed Circuit Board

Fig. 5: Inner Bottom Layer Printed Circuit Board

Fig. 6: Inner Top Layer Printed Circuit Board

Fig. 7: Bottom Layer Printed Circuit Board

Fig. 8: Top Layer Printed Circuit Board - Simulation

Fig. 9: Bottom Layer Printed Circuit Board - Simulation

If you want to see or hide older schematics please use the following function: Show Older Schematics

Gerber Files

Here are the Gerber files compressed in a .ZIP archive.
Please note that the file naming convention that I used is what OSHPark normally expects.
You can also order the printed circuit board directly from OSHPark by following the link in the bill of materials below.

Compressed Gerber Files: isa-video-display-controller.zip

Bill of Materials (BOM)

The following list contains the parts that are required to assemble this ISA video display controller card.

IdentifierValueQtyNotesMouser Number
Printed Circuit BoardASSY. 2486-VDC-2011VER. 1.3 REV. EOrder from OSHPark
IC1, IC274F2452Octal Bus Transceiver595-SN74F245N
IC3, IC474F2442Octal 3-state Buffer595-SN74F244N
IC5Chrontel CH9294E1Dual Clock GeneratorOrder from eBay
IC627C256-101UV-erasable EPROMOrder from eBay
IC7Tseng Labs ET4000/W32i1Video ControllerOrder from eBay
IC8-IC11ISSI IS41C16257-35T4256Kx16 FPM DRAMOrder from eBay
IC12AT&T ATT20C4901True Color RAMDACOrder from eBay
D1-D61N41486Small Signal Diode78-1N4148
D7LM3851Voltage Reference Diode926-LM385BZ-12/NOPB
C1-C16, C21-C24, C27-C29100 nF / 50 V23MLCC80-C322C104M5R-TR
C17-C20, C5010 nF / 50 V5MLCC80-C315C103J5R
C25, C26, C36-C4910 uF / 25 V16Tantalum Capacitor80-T350E106M025AT
C302.2 uF / 25 V1Tantalum Capacitor80-T350B225K025AT
C31-C33100 pF / 50 V3MLCC80-C320C101J5G
C34-C35120 pF / 50 V2MLCC80-C315C121J5G
C5147 pF / 50 V1MLCC80-C315C470J5G
R1-R3150 Ω3Metal Film Resistor71-RN55C1500B
R4, R533 Ω2Metal Film Resistor71-RN55C33R0F
R6147 Ω1Metal Film Resistor71-RN55C-B-147/R
R71 kΩ1Metal Film Resistor71-RN55E-B-1K/R
R8, R1010 kΩ2Carbon Resistor588-OK1035E-R52
R9220 Ω1Carbon Resistor588-OK2215E-R52
R11, R121 kΩ2Carbon Resistor588-OK1025E-R52
R135.6 kΩ1Carbon Resistor588-OK5625E-R52
R142.2 kΩ1Carbon Resistor588-OK2225E-R52
R15330 Ω1Carbon Resistor588-OK3315E-R52
R164.7 kΩ1Carbon Resistor588-OK4725E-R52
R17, R18470 Ω2Carbon Resistor588-OK4715E-R52
RA14 x 2.2 kΩ1Resistor Array652-4608X-2LF-2.2K
RA2, RA35 x 270 Ω2Resistor Array652-4610X-2LF-270
L1-L5133 Ω / 100 MHz5Ferrite Bead623-2743002111
L6-L868 Ω / 100 MHz3Ferrite Bead623-2743001111
X114.31818 MHz1Quartz Crystal695-HC49US-143-U
IC Socket20-pin5IC1-IC5575-193320
IC Socket28-pin1IC26575-11043628
IC Socket44-pin PLCC1IC12575-944424
JP1, JP22-pin Header2Jumper649-68001-202HLF
J72-pin Header1Header649-68001-202HLF
J115-pin Connector1Female D-Sub617-09-56-152-5612
ScrewScrewlock 4-40 UNC2For J1617-09670019941

Alternatively you can use the following link to the Mouser project that I created for this ISA card. It should make ordering of parts and removing typing faults pretty easy.


Lately I have observed that Mouser discontinued some of the parts in the list above. If you decide to build this project, then you need to find alternatives. It is out of my scope to maintain the correctness of the parts list above.

Assembly Instructions and Notes

Here is a list of things you need to pay attention to should you decide to build such ISA video display controller card.

  • Inspect the printed circuit board once you receive it. Normally OSHPark produces very good quality boards but one never knows. There must be absolutely no short circuits on the printed tracks. If the PCB is faulty then it can damage other ISA cards that you might install in the system.
  • Carefully observe polarity of the tantalum electrolytic capacitors on the silkscreen. I made sure there is no error on the printout. Tantalum capacitors will violently explode and burst in fire if mounted in reverse, possibly injuring you.
  • Take your time to solder all the components on the board. There are a lot of solder points and if you don't have patience in general, then this project might not be for you.
  • Use a temperature-controlled soldering station and quality solder. Take care not to leave solder bridges as any short circuit will most likely lead to failures.
  • In order to ease-up the PCB assembly, I would suggest mounting parts in the following order: Tseng Labs ET4000/W32i, ISSI IS41C16257-35T chips, diodes, carbon resistors, metal film resistors, quartz crystal, IC sockets, resistor networks, MLCC capacitors, tantalum capacitors, jumpers, ferrite beads, connectors.
  • At the end, clean any flux residues with isopropyl alcohol.

Principle of Operation

The schematic is very explicit thus I don't consider a block diagram really necessary. But I will provide some details that I gathered from the datasheets on the main chips that make up this video display controller card.

The video display controller is controlled by the Tseng Labs ET4000/W32i video controller integrated circuit. This chip has the following features.

  • 8-bit, 16-bit, or 32-bit Memory and I/O Bus
  • 20-bit, 22-bit, or 24-bit Address Bus
  • Supports ISA, EISA, MCA, or Local Bus
  • Interlaced or Non-interlaced VSYNC and HSYNC with Polarity Control
  • External RAMDAC Lookup (Pixel Clock, Blanking, R/W Control)
  • 8-bit Pixel Output RAMDAC Interface
  • VGA Compatible Data Rotate/Mask/Logical Functions
  • Proprietary Enhanced-LRU Replacement Policy and Block Transfer Cache System
  • Up to Two FIFOs for Display Pixel Data
  • 512 Kb, 1 Mb, 2 Mb, 4 Mb linear, or 2 Mb Interleaved FPM DRAM
  • System Priority Controller Resolves Multiprocessors and Resource Requests
  • Horizontal CRT Controller with 9-bit Programmable Display Enable, Blanking, and HSYNC
  • Vertical CRT Controller with 11-bit Programmable Line Counter for Display Enable, Blanking, Split Screen, and VSYNC
  • 20-bit Linear Doubleword Address Generator with Programmable Starting Address and Row Address Offset
  • 5-bit Row Scan Address that Provides up to 32-line Character Height
  • 64 x 64 x 2 Sprite Creates a Second Hardware Window for Simultaneous Display of Graphics or 30 fps Digital Video
  • 20-bit Cursor Position and 5-bit Cursor Start, 5-bit Cursor End Control
  • Support for up to Two 256 Character Sets
  • IBM-compatible Text Attribute Decoding and Cursor Blink/Underline
  • AT&T-compatible Underline Decoding in Color Text Mode
  • 6, 7, 8, 9, 10, 12, and 16 Pixel Programmable Text Font Width
  • Up to Eight Pixel Clock: 86 MHz (Graphics Mode), 56 MHz (Text Mode), 50 MHz (System Clock)
  • Graphics Accelerator Supports 32-bit with 256 Raster Operation and D/S/P BLT, Tiling, Pattern, FG/BGROP, and CPU-assisted Operations
  • Linear Word Graphics and VGA-compatible Text Foramt up to 16-bit Wide Character
  • 1024 x 768 px in 65K Colors Interlaced or Non-interlaced in Graphics Mode
  • CGA/MDA/HERC/EGA/VGA Register Level Compatibility
  • 8514A Display Level Compatibility
  • Zero Wait State Operation
  • Programmable /CAS before /RAS Refresh Provides DRAM Refresh During Display Blanking

The VGA analog signal interface is made possible by the AT&T ATT20C490-80 RAMDAC chip. It has the following features.

  • 256, 32K, 64K, 256K, and 16M On-Screen Colors
  • 24-bit, 16-bit, 15-bit True Color, 8-bit Pseudo Color
  • Aliasing and Window Color Corruption is Eliminated in True Color Mode
  • XGA, TARGA, and HICOLOR Formats
  • VGA Accessible Control Register
  • Antisparkle Circuitry
  • 256 x 24 Color RAM
  • 15 x 24 Overlay RAM
  • 1280 x 1024 px / 60 Hz Non-interlaced Maximum Resolution
  • 1024 x 768 px / 85 Hz Non-interlaced Maximum Resolution

The master (video) and system (memory) clock signals are generated by the Chrontel CH9294E dual PLL frequency synthesizer integrated circuit. It has the following features.

  • Supports VGA, SVGA, XGA, and 8514A Graphics Standards
  • Generates 16 Video Clock Frequencies
  • Generates 4 Memory Clock Frequencies
  • Supports Output Frequencies up to 135 MHz
  • Requires a Single 14.31818 MHz Quartz Crystal

I thought early '90s video display technology was more or less a bad joke and everything was spartan and simple. Well after reading through the ET4000/W32i datasheet, my preconceptions were drastically destroyed. Good for me as I learned that things were actually very advanced and complicated. After all this was cutting edge technology back in 1993. In the same way NVIDIA RTX3090 GPU is at the end of 2020. I think this is a good analogy.

Interface Connectors Description

Following are described all the interface connectors and their respective pinouts.

J1VGAVGA Output1 - RED
3 - BLUE
4 - Monitor ID2
5 - Ground (HSYNC)
6 - Ground (RED)
7 - Ground (GREEN)
8 - Ground (BLUE)
9 - NC
10 - Ground (VSYNC)
11 - Monitor ID0
12 - Monitor ID1
13 - HSYNC
14 - VSYNC
15 - Monitor ID3

ISA Card Configuration

I have provided some basic card configuration options under the form of jumpers.
The star (*) symbol signifies the default option.

JP10WSZero Wait StateCL: Enabled (*)
OP: Disabled
JP2IRQ9Vertical Retrace IRQCL: Enabled
OP: Disabled (*)

Construction and Pictures

The PCBs have arrived from the Factory. Now on to the assembly procedure.

This is the bare 4-layer PCB.


I have soldered one memory chip and the video controller chip.

Details on the soldering job.

All memory chips are in place.

Small signal diodes and almost all of the metal film and carbon resistors are the first non-SMD parts that I soldered next.

Other parts such as quartz crystal, ferrite beads, and MLCCs follow next.

Tantalum capacitors and integrated circuit sockets are soldered as well.

Then I inserted all the logic ICs into their specific sockets. I programmed the ROM with the modified BIOS that I described in the VGA ROM Fonts essay.

Conclusions and Reflections

My enthusiasm quickly turned down when I first tested the card. The PC booted but the colors were very, very weird. Some sort of weird negative colors with a strong emphasis on green. Also there were a lot of vertical stripes and weird video artifacts in graphics mode and bad character rendering in text modes. Time for investigation and debugging. Let's walk through the following list.

  1. Measuring the voltages across the ICs on the PCB revealed a steady 4.98 V. All good.
  2. I measured the clock generator circuit outputs and the clock carrying lines are very clean. Furthermore, these clock signals propagate correctly on the PCB. Pixel clock signal is good as well. Nothing to do here.
  3. Measuring the red, green, and blue signals on the RAMDAC revealed some weird activity on the oscilloscope screen. Thus I have to investigate a bit the RAMDAC interface and PCB connections.
  4. The vertical lines are most probably related to DRAM interface. So I have to investigate that as well.

Let's just skip the first two points and concentrate on the other ones.

RAMDAC Interface

As I said, while probing the VGA output signals with the oscilloscope, I found some strange activity. Some of the color signal pulses were actually inverted. It took me less than two seconds from the moment I saw the scope screen to the identification of the issue. It was pretty much clear that I somehow mis-connected the RAMDAC.

I inspected the schematic diagram but there was nothing wrong. Then one thought crossed my mind. Have I done something wrong when I designed the RAMDAC part library? Yes I did. I inverted all data and all video data pins. I corrected my library right away.

I just wasted an hour or so to build a simple adapter just to prove that my design works correctly. It looks very messy indeed.

Since I already have three quasi-working VER. 1.3 REV. D PCBs, I designed a small RAMDAC adapter PCB so that I don't have to throw these PCBs away. In the meantime, the RAMDAC adapter PCB arrived in the mail. Here it is.


Then I soldered this adapter on the graphics card PCB. I'd say it looks nice. Unfortunately, I lifted one of the fragile pads on the solder side. The result is that one of the RAMDAC pins cannot connect to it's appropriate signal on the main PCB. A quick and dirty wiring job solves the issue.

One issue solved. Now let's attack the next one.

DRAM Interface

Although I initially made some impedance calculations for the main high-speed transport lines, somehow the reality proved me wrong. I decided to do some spartan experiments with the impedance matching resistor arrays and I have observed improvements with each step of increasing the resistance.

So I incrementally increased RA2 and RA3 until I got rid of all visual artifacts. I experimentally found that a 300 Ω resistor array would be the best. But I had difficulties sourcing such parts. Thus I went with 270 Ω resistor arrays which allow a good impedance matching of the /RAS and /CAS high-speed signal transport lines.

If for some reason there are still visual artifacts issues then a solution would be to further increase RA2 and RA3 to 330 Ω. In my case I find the card stable in 99 % of all the normal use-cases. A few MS-DOS games still show artifacts in certain screens (most notably in High Score screens). But that does not bother me at all.

The new resistors are soldered in place.

Another issue solved.


I have updated resistors R17 and R18 to 470 Ω.

Video Tests

I ran a suite of tests provided by the VDIAG.EXE program by Tseng Laboratories, Inc.

Everything went well. Here are some pictures with the CRT screen. I took the pictures with my mobile phone so beware of the moire effect.

Final Conclusions

I am happy the idea of an adapter crossed my mind. So far all is not lost. I will still be able to use the PCBs I already have. In a way, the small adapter looks very nice by itself. When mounted on the PCB assembly it looks even more technical. It reminds me of limited production laboratory equipment PCBs. I've seen some very nice PCBs for physics experiments with some very ingenious PCB post-production corrections with all kind of adapters.

Here is the final VER 1.3 REV D video card.

The connection wire to the RAMDAC adapter looks very steampunk. It's a prototype. So weird looks are accepted!

EXCELGRAPH is a good name for an ISA video card that can handle all MS-DOS games and most of the Windows games up until the year 1998 or so. Well the FPS of the Windows 3D games is suffering a lot due to the low ISA bus bandwidth. But then again, the Windows 98 era goes hand in hand with PCI graphics cards.

But hey, I just proved that an all ISA system consisting entirely of DIY cards can be used to play StarCraft fluently. Don't believe me? Check this video on YouTube. It clearly shows how the ISA bus can handle four storage devices, one sound card, one video card, and an Ethernet card and still deliver performance. I am positively sure the ISA bus was not meant for this kind of systems. Then again, it is fun to push the limits of computing hardware.

I will most probably not produce the VER 1.3 REV. E PCB for personal use. But I updated the schematic and the Gerber files so if you would venture into building such video card, you will not have to mess around with any adapter.

I did some slight updates to the ROM BIOS. I injected my own assembly routine that displays and highlights the card name.

The modified ROM is for personal use only. It will not be available for download. But you can find compatible ROM BIOS binary images on the Internet.

Versions and Revisions

This section lists the project version and revision history.

VER. 1.3 REV. E

  • Corrected RAMDAC component layout
  • Increased memory /RAS and /CAS signal tracks width
  • Corrected Chrontel CH9294 IC identifier
  • Small updates to component values

VER. 1.3 REV. D

  • Fully functional (with RAMDAC adapter) initial production version

Copyright © 2004- Alexandru Groza
All rights reserved.
VER. 1.0 | REV. A