• Please review our updated Terms and Rules here

Trident VGA and IBM PC

Hi, I just tried pulling RMD7 low with a soldered 10K resistor to ground on two different Sergey VGA cards that work OK in 16 bit bit systems. Neither card worked on a 5150 motherboard running the Anonymous Bios. BTW: Both cards still work on a 16 bit motherboard. Also, I tried a TSENG VGA card with ET4000AX in the same 8 bit system just to make sure the other parts of the setup were OK and the VGA output is working fine. My only caution is that it is REALLY hard to see and solder this pitch on a PCB, but the connections checked OK when probed with a meter.

Michael

Yes, tried the same yesterday evening, doesn't seem to help :-(
 
I've actually tested it...
Sorry, I meant nobody tried to catch extra ALE pulses with logic analyzer on the "chipset" XT motherboards.

AFAIK, AT schematic is rather different and does not put CPU into wait state on DMA although uses similar 82288 bus controller.
 
Sorry, I meant nobody tried to catch extra ALE pulses with logic analyzer on the "chipset" XT motherboards.
Good question. Faraday FE2010/FE2010A chipset specifically has two separate ALE signals: one that goes to the address latches (ALE), and one that goes to the ISA bus (BALE).
The chipset pulses the ALE signal during DMA bus cycles because it shares address latches with the CPU. (I know for sure, I had to redo the board because of that - see the last item in the Known Issues for V1.0 list)
I am not sure about BALE signal, but it is quite possible that it only gets activated during CPU bus cycles.

AFAIK, AT schematic is rather different and does not put CPU into wait state on DMA although uses similar 82288 bus controller.

IBM AT uses old-fashioned HDLA/HOLD bus arbitration mechanism.
 
So, I tested the original IBM XT board, and it is not working with any of the Trident TVGA cards I have (TVGA8900CL, TVGA8900D, TVGA9000A, TVGA9000I-1, TVGA9000I-3). I was sure I tested some of these cards in an IBM XT before, but apparently I was using an XT clone motherboard that doesn't have ALE issue. I apologize for confusion. :-(

I guess now I have to redesign my Trident TVGA9000i board, and include the ALE workaround...

Speaking about that - it should be possible to extend ALE using AEN signal (perhaps add slight delay, e.g. half a clock to that).
 
Last edited:
Speaking about that - it should be possible to extend ALE using AEN signal (perhaps add slight delay, e.g. half a clock to that).
I'm thinking about exactly the same thing - was planning to do some research this weekend...

Quite funny we are still learning new things about 35+ years old design :)
 
Faraday FE2010A implements DMA the "proper" way. It doesn't use the CPU wait states for the DMA operation, instead it implements 8088's maximum mode RQ/GT arbitration protocol.

That is interesting.
I have a Commodore PC20-III, with a Faraday FE2010 chipset. One thing I noticed is that it crashes out on the endpart of 8088 MPH. That endpart is cycle-exact, and assumes that certain code is already in the prefetch-buffer when it modifies it, so that the unmodified code is executed.
The crash on the FE2010 is most probably because it's not cycle-exact, and it actually executes the modified code. But I have not been able to find an explanation why.
What was even more strange was that removing any writes to the CGA card would prevent it from crashing.
But if it does different things for DMA transfers (and thereby memory refresh), that may explain something. Perhaps it also handles wait states from the CGA card slightly differently?
And this RQ/GT arbitration protocol, could it also affect prefetching in some way?
 
Speaking about that - it should be possible to extend ALE using AEN signal (perhaps add slight delay, e.g. half a clock to that).
You can extend ALE to the front of /MRD signal (as Tronix did).
Or just use front of /MRD to latch address - I think this will also work.
 
I'm thinking about exactly the same thing - was planning to do some research this weekend...

Quite funny we are still learning new things about 35+ years old design :)

Here is what I came up with. Haven't tested it yet though:

xt_ale_fix.jpg

It should work as follows:
- If AEN is low (inactive, no DMA operation), it supposed to pass the ALE signal through to BALE
- If ALE pulses while AEN is high, it will switch BALE to high, and keep it high as long as AEN remains high, and a little bit more. AEN low to BALE low delay can be set with the jumper.

(There is a question what circuit should do if ALE goes high first, after that AEN goes high, and after that ALE goes low... I am not sure if this situation can happen, but I don't think the circuit handles this case correctly).
 
Last edited:
I've prototyped and tested my circuit. It works nicely with original IBM PC, PC-Retro, and IBM XT boards. It also works with a chipset based XT clone and an AT/286 board.

Here is the schematic: View attachment xt_ale_fix.pdf. I uploaded the PCB design to OSH Park.

The PCB is designed in such a way that it can be glued on the bottom right corner of back side of the VGA card, and then GND, VCC, and ALE signals can be connected directly to the ISA edge connector. AEN and TALE (ALE to TVGA chip) would need to be wired to the board.
 
You can extend ALE to the front of /MRD signal (as Tronix did).
Or just use front of /MRD to latch address - I think this will also work.

I implemented an easier approach - it only uses ALE and AEN signals.
I believe this approach is also more reliable. It doesn't change ALE (other than adding a slight delay) when AEN is inactive, and therefore it will not break AT systems. (Most likely Tronix's schematic will not work on an AT in 16-bit slot, because LA17-LA23 will not be valid when /MEMR or /MEMW are activated).
 
Some people reported ultra light solution - just pull up TVGA9000 ALE pin to +5V....
Cool! I assume you do this with a resistor as always?

This trick would be useful to get this working on any XT I have in the future; but does the TVGA8900D/9000 chipset have any compatibility with the Olivetti M24's byteswapped BIU implementation? I fear it's what breaks most "XT compatible" video cards from VGA and up on this machine.
 
Some people reported ultra light solution - just pull up TVGA9000 ALE pin to +5V....

Huh, tested this on the boards I have available: IBM PC, IBM XT, PC-Retro, a chipset-based Turbo XT, 286-AT, and it works perfectly.
Apparently Trident TVGA has transparent latches on the address lines, tying ALE pin high keeps these latches in "transparent" mode, and it works as long as the address remains valid during I/O or memory operation.

That's indeed a very easy fix.
 
Cool! I assume you do this with a resistor as always?
Resistor is not needed (but won't hurt), just disconnect TVGA ALE pin from ISA, and connect it to +5V.

does the TVGA8900D/9000 chipset have any compatibility with the Olivetti M24's byteswapped BIU implementation? I fear it's what breaks most "XT compatible" video cards from VGA and up on this machine.

I don't think it is something that a VGA chipset could possibly fix it. The problem is that VGA registers are accessed by writing register index to a lower byte of a 16-bit port and value to the higher byte. If bytes are swapped, it will write the value first... (likely to the wrong register)
 
Last edited:
Well, most, if not all Tseng ET4000 cards somehow manage to maneuver this bug. I don't know how, as I never looked into tracing the problem myself.
 
Will this fix allow your SVGA card to work with the IBM XT 5160?

Thanks!

Heather

Yes, that makes the card work in IBM PC, IBM XT, and compatibles.
On my board, I put a piece of tape to cover the ALE pad on the ISA connector - 4th pad from the right, when looking at the back side of the board, and then I soldered a piece of wire between pin 19 (VCC) and pin 21 (ALE) of the TVGA9000I ICs:
TVGA-ALE_Fix.jpg
 
That's really great news! Your card worked perfectly in my Commodore PC10-III but wouldn't work at all in the 5160. Hopefully I'll have time to mod my card this weekend. I'll report back with the results. :)

Heather
 
Back
Top