| Electronics > Projects, Designs, and Technical Stuff |
| AY-3-8910 - can't write odd values to its registers? |
| (1/7) > >> |
| nockieboy:
Hi everyone, This is a pernicious problem that has me stumped - I've built an 8-bit sound card from my homebrew computer based on the AY-3-8910 PSG. Problem is, it's not working, at least it's not making music like it should do. I'm using a reference design for the LM386 amplifier stage and am not overly concerned about that at the moment - my problem lies with the PSG chip itself. For some unfathomable reason, I'm unable to write any odd values (bit 0 set) to any of the registers. I can read values from the registers, I can write even values to the registers and read them back just fine, but if I try to write an odd value to any of the registers, the chip just seems to ignore the write and returns its previous value when I next read it. I've checked the data bus to the chip and it seems to be fine. I'm getting values of FFh returned from the IO ports, which is correct as nothing is connected to them and they have internal pull-up resistors according to the documentation, so I'm happy that the data bus is okay and D0 is functioning in some capacity, unless I'm missing something. :-// I've even swapped the chip out for a duplicate - same problem. :palm: Does anybody, anywhere, have a clue what might be going on or how I might go about finding the problem? Or have I missed something obvious in the datasheet where it says it only takes even values, and the sound distortion is being caused by a problem elsewhere downstream of the PSG? |
| radiolistener:
--- Quote from: nockieboy on February 26, 2019, 05:54:25 pm ---but if I try to write an odd value to any of the registers, the chip just seems to ignore the write and returns its previous value --- End quote --- this behavior has strong indication that there is something wrong with data line D0, check it's connection. Probably you just connected it to a different pin. Or mixed it with other signal |
| floobydust:
I would look at write bus timing including BC1 and BC2. It's a slow chip, write timing tDW is 500ns-10us (8910,8912) plus databus setup time and hold time. It's an NMOS IC and might have weak drive if your databus load is high. Otherwise, I can't see a reason for the LSB to not stick unless you are hitting the wrong registers. "General Instruments did take orders for customized MSB bits (factory set to other than '0000'). The chips made with customize-set MSB register bits allow the same processor to control more than one AY chip on the same bus (e.g. Mockingboard sound card for Apple or TurboSound for ZX Spectrum). There are many new-old-stock (NOS) chips on the secondary market with MSB bits factory set to a non-'0000' value. The non-0000 value can cause significant developmental troubles for designers and repair technicians. Software must be written to identify the correct value of the MSB bits on any given chip. Also, software must be changed or hardware added to allow these factory set MSB chips to be used in place of the default '0000' chips." |
| nockieboy:
--- Quote from: radiolistener on February 26, 2019, 06:32:19 pm --- --- Quote from: nockieboy on February 26, 2019, 05:54:25 pm ---but if I try to write an odd value to any of the registers, the chip just seems to ignore the write and returns its previous value --- End quote --- this behavior has strong indication that there is something wrong with data line D0, check it's connection. Probably you just connected it to a different pin. Or mixed it with other signal --- End quote --- Yes, this was the first thing I thought of as well - I've checked the entire data bus to the PSG and there's nothing wrong with it that I can detect. I'm seeing highs and lows on D0 via my oscilloscope as well. |
| radiolistener:
then may be there is short circuit of line D0 with some control line? Try to disconnect D0 from computer and connect it to the ground and Vcc, and check how it works in such mode. If there is some short circuit between D0 and control line, it will not work with D0 connected to the ground. Then you can find the location of short circuit. |
| Navigation |
| Message Index |
| Next page |