Diagnosing and attempting to fix a Yamaha DX100 – Part 2

At the end of part 1, I’ve established that the basics all seem ok (PCB, interconnections, power) and that basic digital logic stuff is happening.

I rounded off my write-up with the following ideas for what to investigate next:

  • Get some proper triggering from the chip enables to check for valid data signals.
  • Check out the HD44780 display.
  • Attempt to read and verify the ROM image.
  • Break out a logic analyser.

This is the next stage of my experiments and investigations. Spoilers: It’s still not working and I’ve still not found out why! 🙂

Warning! I am not an electronics person. I strongly recommend that you don’t base your own attempts at fixing a beloved vintage synth on anything I’ve said here. I was given this synth rather than it being sent it to a recycling centre so this is a low-risk learning activity for me. I am not responsible for any damage to expensive or irreplaceable electronic musical instruments! There are plenty of places to take something for a proper repair 🙂

If you are new to microcontrollers and electronics, see the Getting Started pages.

An Arduino (E)EPROM Reader

I found a design from Ben Eater for an Arduino EEPROM reader so I thought I’d tailor it slightly and see if I could use it to read out the contents of my DX100’s ROM. I happened upon a ROM image of v1.1 at the same place I found the schematic, so whilst I might not have the exact same version, it gives me an idea of what kind of data to expect.

There are certainly plenty of ASCII strings in there to spot the voice data starts at a known location ($CDA0 in the memory map, which is address location 0x4DA0 in the ROM itself).

Most Arduino EEPROM programmers are designed for 28Cxxx compatible electronically, erasable, programmable read-only memories. But in a lot of vintage technology you’ll find 27Cxxx style EPROMs – erasable, programmable read-only memories, which have a window for UV erasure prior to allowing them to be re-programmed. Or even “mask ROMs” which are one-time programmable.

The pinouts of the two devices are almost the same, and there is a variant of EEPROM with the same pinout (29Cxxx) but these are apparently discontinued and quite hard to come by. The differences for the 27C256 equivalent in the DX100 are:

  • Pin 1: VPP (27C); A14 (28C); /WE (29C)
  • Pin 27: A14 (27C); /WE (28C); A14 (29C)

So to read the ROM requires A14 mapping to pin 27 and VPP (pin 1) tying HIGH. All the other connections should be as shown in Ben Eater’s schematic (with the addition of pin 28 – VCC – to 5V and pin 14 to GND).

Other points to note:

  • The design uses two cascading shift registers (74HC595s) for the address lines and directly connects the data lines to the Arduino.
  • The design uses one of the shift register outputs as Output Enable, which I initially tried, but then switched to using a dedicated IO pin.
  • The design includes a Write Enable connection to allow for programming. I skipped this as I was just reading (and there is no /WE pin on the 27C256).
  • The schematic shows the Arduino 5V as being unconnected, but actually this has to power the shift registers and device to be read.
  • Normally when in use there will be capacitors across the power and GND for the ROM, so I added one to help stability.

I built the circuit on solderless breadboard. But the issue I was always going to have was how can I be sure the circuit is working correctly if I get what looks like corrupted data? If I read out a good image, I’ll know it is fine. But if it looks problematic, then it might just be problems in my wiring, code or unreliability in the reader circuit somehow.

To get some degree of confidence as a test (i.e. with no actual ROM device plugged in) I connected the data lines to some of the address lines via 10K resistors. This means that as the code is cycling through all the addresses, the address line patterns should be read-back on the data lines.

My initial attempt was not encouraging – there were snippets of good data but large areas of rubbish. I was just about to give up on the solderless breadboard when I realised I’d not actually connected the GNDs on the two halves together… sigh. But once that was done the tests worked fine and I was able to read the ROM. It appears ok.

The first test (A7-A14 connected to D0-D7) I wired up by hand. The second test (A0-A7 and D0-D7) I soldered the resistors to a piece of protoboard.

The patterns read back from these tests showed everything was working fine. I added some of the “1-byte LED bar” things I have (they have a common ground) that make excellent indicators for the shift registers, especially when Q0 (on pin 15) is routed round to be next to Q1 (on pin 1). It is really handy that GND is on pin 8.

The cursory visual inspection of the read data from my ROM and the binary file image of V1.1 that I found on the Internet appear to match. Here is a sample of the start of the voice data.

I also found the text “V1.1 02-Aug-85” in my read data so I guess from that I have V1.1 installed.

I wrote a simple python script (based on this hexdump code) to dump the ROM bin image in the same format as the Arduino output and compared them in a difference tool – they were the same, so the ROM contents are fine.

Find the code and Fritzing diagram on GitHub here.

After performing the above experiments, I decided that an Arduino (E)EPROM reader would be quite a useful thing to have lying around, so I’ve built an Arduino EEPROM Reader PCB shield.

Solder Reflowing

At some point around here I opted to simply reflow the solder joints for some of the connectors. I’d already reflowed the joints for the ribbons that pass many of the signals across the board, so now I did the same for the connector for the LCD and a few other things whilst I was at it – the links to the potentiometers and keyboard matrix for example.

Unfortunately this didn’t seem to make any difference that I could see.

Replacing the LCD

As the data pins all go off to the LCD via an on-board connector (C2), I thought this would be a really good place to tap into the data lines to attempt to do some more tests:

  • I could try triggering off the select/enable pins to see how the data signals look when legitimate transactions are underway.
  • I could attach a different HD44780 display to see if that works any better.
  • I could try driving the Yamaha display from an Arduino.

My plan was to build a simple breakout board to sit between the cable to the LCD and the main PCB. However those connectors are proving somewhat difficult to get hold of.

The appear to be very similar to JST XH 2.5 connectors, but there are some key differences:

  • First of all, many of the JST XH 2.5 connectors available have their pins with a 2.54mm pitch. The connectors in the DX100 really are 2.50mm as far as I can see. Now I’ve read that the XH specification calls for 2.50mm, but there really doesn’t seem to be much agreement online or at suppliers. Either way, so far, I’ve not been able to find any with a 2.50mm pitch.
  • The pins on the connectors are actually flat not square, with the long side aligned across the connector (not in line with it).
  • The physical width of the connector appears slightly smaller than common JST XH connectors.

Here are a few photos showing what I mean, comparing the connectors to the JST XH 2.5 connectors I found; showing the flat pins; and putting one alongside an Arduino Nano, showing that although the first 4-5 pins could be seen to match in pitch, pin 14 is definitely out. The nano has pins a the common 2.54mm pitch for inserting into solderless breadboards.

It would appear that many of the Yamaha DX synths from the period use these connectors, but so far, having examined the service manuals of the DX7, DX9, DX11, DX21 in addition to the manual for the DX27/100, I can find no mention of the connectors or any clue as to where to get them from.

Any articles I’ve seen in forums seems to show people just cutting wires off faulty units and soldering them onto replacements. It isn’t clear to me what aftermarket replacement LCD parts are using – none of them specify the connector as far as I can see.

I’ve had several people send me links to a couple of online sites to help identify unknown connectors, but so far I’ve had no luck, so at present, unfortunately, this is still unresolved.

Further Thoughts

So I haven’t managed to get much further so far, but as I’ve had a couple of queries since my first post, I thought I’d pop up what I have so far – this post has been sitting in draft for a few months now!

I’d really like to find some compatible connectors, but so far no luck. I have wondered about finding an old “for spares” Yamaha synth that might have the same connectors… I’ve also wondered if I could 3D print something useful.

Rather than cut wires, I might even resort to soldering on some extra cables to link it up to a JST XH connector to allow me to investigate further. Ironically it feels less intrusive to solder on some extra wires that can be removed later than cut the ribbons!

But I’ve also wondered about cutting them and making a Yamaha to JST XH converter.

Watch this space. I guess I’m still hoping I might be able to find some connectors…

Kevin

2 thoughts on “Diagnosing and attempting to fix a Yamaha DX100 – Part 2

  1. Howdy! You mentioned having a ROM version different from 1.1. Could you post that ROM somewhere, for archival purposes? Thanks!

    Like

Leave a comment