Functional VDP Test (TMS9129NL) with Arduino

Page 1/3
| 2 | 3

By calderone

Rookie (23)

calderone's picture

05-06-2020, 22:10

I'm trying to repair my VG-8010, for a while now. But until now, I had no luck and I'm still stuck with a black screen.
Also see my comments in this tread: https://www.msx.org/forum/msx-talk/hardware/vg8000-and-vg801...
Nevertheless there are other things I will need to verify, or other things that could be the cause, sure.

One thing I had noticed: the VDP chip became very hot, really hot. I'm speaking of a TMS9129NL(PAL) in this VG-8010.
So, from all chips on this motherboard, the VDP was the only chip producing heat. That made him a suspect to me.
Not sure and not finding any confirmation this would be normal behaviour, I wanted to find a way to test this VDP.
Is it dead, shorted or just malfunctioning ?
Luckily, this TMS9129NL sits in a socket on the motherboard, so it is easy to take it out and test it !?
There stopped my luck, I had no other MSX were I could easily swap VDP's and see if it was working or not.

I searched this forum and also on the internet, to find anything that could point me in the right direction.
I found bits and pieces but nothing like: 'here is a way how to test your VDP'.
I did a broader search on all kind of VDP's (TMS9118 TMS9128 TMS9129 TMS9918A TMS9928A TMS9929A) and finally found a short YouTube video showing a short screen test with a TMS9929 or TMS9918A:
https://www.youtube.com/watch?v=1CjWzx8yxoA
The video is not very clear on what was tested, also there were no instructions or schematics. But the VDP was on a breadboard and he used an Arduino Uno to generate some signals, and that..., interested me much !
And fortunately, he was also so kind to give me the new link to the sketch he used for the test:
https://pastiebin.com/5eccfd51d28cc

With this, I started to generate a breadboard schematic with fritzing. By reviewing the video many times I was able to recreate the connections between the VDP and the Arduino.
Also reviewing the sketch gave me clues on the pins used. But my TMS9129NL is similar but not the same, it has no composite out, but video is split over 3 signals (Y, R-Y and B-Y), which are video component signals. I had to include this in my schematics as well and finally I ended up with a working breadboard schematic.

Then I connected the video signals (Y, R-Y and B-Y) to a GBS-8200 VGA converter board with 470 Ohm resistors between signal and ground.
On the GBS-8200 converter board, I use the Y, Pb, Pr inputs.
I also use a separate power supply to power the VDP and Converter Board (both to 5V), because the Arduino will not provide enough current.

Also the sketch needed some change and explications. But I'm not (yet) an arduino sketch programmer, so I try to understand what it does. I believe it uses Graphics I mode and writes to register 7 to display the different Backdrop Colours. Also it writes data to the Pattern Plane? I combined them both and was able to display some colour outputs on my VGA screen !

Here is what I see on my screen:
https://www.youtube.com/watch?v=vpC5HCH4lHk

A short note about the crystal on the breadboard, I ordered some 10.738635 MHz crystals from mouser to simulate the same conditions as on the motherboard. But testing with a 10.245 MHz crystal gave me the same results. So you don't really need the exact crystal to be able to perform this test.

So to conclude, I believe:

- My VDP seems to work ok
- My VDP generates the same heat when on the breadboard, so it would be normal

Are people using a heat sink on their vdp and why ?

PLEASE contribute if you believe this would be a good tester and can be made better ;-)

Login or register to post comments

By calderone

Rookie (23)

calderone's picture

05-06-2020, 22:27

By calderone

Rookie (23)

calderone's picture

05-06-2020, 22:22

By Manuel

Ascended (17048)

Manuel's picture

05-06-2020, 23:50

There are many MSX machines with a heat sink on the VDP. Quite annoying as we then can't easily see which VDP type it is...

By mohai

Paladin (892)

mohai's picture

06-06-2020, 10:36

This is very interesting.
I think it is a unexpensive and easy way to test VDP chips.
It would be interesting to add some VRAM too, if that does not make it too complex.

By calderone

Rookie (23)

calderone's picture

06-06-2020, 20:46

My idea was to be able to test this VDP chip with a minimal of components. And to be true, I was amazed it was possible without adding VRAM and just using the internal registers. Sure, you could add some VRAM too, it would give more possibilities.
But I'm also wondering, if other tests, and using other graphics modes, would be possible when only using this minimal setup.

But feel free to experiment and share your experiences.

By Fabf

Master (247)

Fabf's picture

06-06-2020, 21:02

Have you test /int signal from VDP ?

By calderone

Rookie (23)

calderone's picture

07-06-2020, 12:47

No, /INT is not connected.
Any suggestions ?

By calderone

Rookie (23)

calderone's picture

09-06-2020, 10:03

On the VG-8010, /INT coming from VDP is always high, so that is a problem. I understand it should be a 50Hz signal (PAL).
There could be multiple reasons for /INT staying high, so further investigation will be needed.

But, If I want to test the /INT (out) with the VDP on the breadboard, would it be possible, by reading the status register frequently? Just to see some pulses, so I could conclude the /INT on the VDP is working?

By lintweaker

Champion (311)

lintweaker's picture

09-06-2020, 11:16

I am not sure if you need to enable interrupt generation, maybe check the datasheet.

By calderone

Rookie (23)

calderone's picture

07-09-2020, 21:23

Big smile I got progress in this topic, with the good help from my brother-in-law Pieter. Many thanks Pieter !
He has more programming skills than I have. So he gave it a quick glimpse and was able to correct/modify the previous sketch and add the correct code to read the VDP's status register.
With this new code, INT need to be enabled first, and by doing this, the INT goes from HIGH to LOW when the sketch is started, but stays LOW afterwards.
Resetting the interrupt is then done by reading its status register. This can be done by adding this simple code:

setReadAddress(0xC002);
setDBReadMode();
readByte(); //Read from the status register (quick & dirty, discarding the result)

When powering the VDP, it starts with the INT in HIGH state. Then the schetch is started, INT is enabled, and INT becomes LOW when the first frame is showed.
Then the INT state is reset to HIGH once the status register is read.
When you connect a logic probe on the INT pin, you will see INT mostly LOW and a smal HIGH pulse once the status register is read.

Pieter has also partially cleaned up the previous sketch, added his own comments and commented out other code not really needed for this test.
A more thorough cleanup might be done in the future but for now it will do its job: testing VDP color and INT functionality !

I believe, I can prove the VDP is working as espected.

Page 1/3
| 2 | 3