Background:
I'm interested in learning more about the electronic side of old computer systems, and also have a faulty famicom and faulty snes game that I'd like to diagnose/fix. I've just got hold of an arduino uno and breadboard/components.
This will definitely involve messing around with de-soldered mask rom, famicom sram, and some shift registers, which are all 5v.
(I'd also, eventually want to try messing with the famicom cpu, possibly making some sort of tester for this. Then maybe the PPU, even, or even other things! The MAD chip in the snes cart, or even the sram, may be the fault, but gonna try the mask rom first.)
I'm absolutely happy writing code, however, my knowledge of electronics is severely lacking, so I have several questions! I don't want to risk damaging anything, if it can be avoided!
Powering these chips - are these fine going straight to vcc/ground? Should there be any decoupling or other capacitors? Resistors?
Output pins (data) - in my non arduino sram circuit, I've used LED + 220 resistor to view memory outputs. Do I need any resistors or anything else to put these into the arduino? Special settings?
Input pins (address, chip enable, output enable, write enable) - I've seen that these need pull up/pull down resistors and people using 10k ones, but why 10k? and would i be better using the arduino pull up/down setting thing? How about when using shift register outputs into the address lines: are these directly connected? Is there anything I should know about this, particularly when it comes to data pins:
data, with regards to the sram, is both input and output - are there any special things I will need to do to accommodate this?
(I'm aware of sanni's project - looks great! but kind of overwhelming to look at/find info in!)
For chip testers, I generally put 1K resistors inline from GPIO pins to arduino, just incase these are shorted to VCC or GND, this protects the Arduino. ALL chips should have decoupling capacitors (look at the original PCB or find a datasheet), without them, you may be chasing a ghost fault. The VCC and GND pins should be controlled by MOSFETS (P type for VCC, N type for GND), this will allow you to 'hot' plug a chip for testing, and allow your firmware to do a quick power down if a major fault is detected.
PULL-UP/DOWN - 10K is a nominal value, the datasheet of the chip will give a recomended value (This MAY be 10K anyway). You could possibly use the internal pull-up on the Arduino, but most do not have a pull-down.
I would use an Arduino MEGA2560 to make this, rather than using an UNO, you have more access to full 8 bit ports, and you can test almost every chip without shift-registers, making programming and construction easier.
Thanks for the replies! So much to learn, hard to know where to start!
Just to clarify:
These refer to the same thing? And will be fine when using the same arduino pins for input and output on the sram data lines?
MOSFETS - would these use other pins coming out of the arduino, and code affecting these, to basically turn the chip to be tested's power and ground on and off?
Arduino mega would probably have been a good idea. I'll likely buy one later, but going to try making something with the uno and shift registers first. Partly just to experiment with these and see if I can successfully do it! Could someone briefly explain "full 8 bit ports"? or "interface to 5V old style memory chips"? Are these referring to the same thing? Is there something special about these on the mega, besides there being enough pins to make up large addresses without shift registers?
I can't actually find datasheets online for the mask rom (Sharp LH537xxx), however there is a single 22uF 6.3v cap between ground and vcc for the entire cartridge side pcb, which includes 2 of this mask rom, an sram chip, a mad-1 address decoder chip, and the cic chip. This thing (What Are Decoupling Capacitors in 5 Minutes | EAGLE | Blog) states: "As a general guideline, we always recommend adding a single 100nF ceramic capacitor and a larger 0.1-10uF electrolytic capacitor for each integrated circuit on your board." Is this advice that actually fits any situation? Would this be bad/damaging?
PULL-UP/DOWN - the data sheet for the sram (MB8416A-15L-SK) as far as I can tell, does not mention a value for pull up/pull down resistors (unless i just don't know how to find that info), and as previously stated, I can't find one for the mask rom... There is one resistor per chip on the cartridge pcb, but i'm unsure what these are used for... There are obviously gonna be a load more things in the console itself...
No. My answer was for LED. The 1k resistors are recommended against phantom powering if you want to remove power from connected chips. The exact value depends on the input currents and voltage levels of the chips.
I wonder why you want to hot-plug chips at all? What do you want to do with the ROM/SRAM chips?
Actually, for a project like you have described, the very first thing you need to learn is to do basic research. Nobody in the "real world" of electronics would ever ask such a question. They would automatically begin looking for the processor data sheet, without even thinking. 99.99% of the questions you might ask, are actually answered there.
Furthermore, reading it will immerse you in knowledge that will aid you in many other aspects of this and any other projects that you undertake.
If you find something there that you do not understand, then you have a good reason to ask here.
I don't actually want to hot plug at all, but missdrew recommended MOSFETs, and stated:
so the question was really in regards to this. I just want to protect the arduino/chips! I obviously don't have anything like the electronics knowledge to make anything commercial right now, but I would like, as much as possible, to follow best practice so as not to damage anything. I'm just trying to determine, for the couple of projects I'm looking at now, what "best practice" would be. Speaking of which, the projects are basically as follows:
Project 1: Dump a mask rom chip (16mbit) to compare against a known good one. I have a bad cart that I have already dumped with a commercial product, finding issues with a single bit spread across about 10,000 non contiguous bytes within the first half, ie the first of 2 mask rom chips (mostly 1 where it should be 0, but a few of the opposite case). The cart, however, contains an address decoder, 2 mask rom chips, and sram. I simply want to dump one of the mask roms by itself to see if the errors are actually within it, or elsewhere (i was under the impression that mask rom going bad was very uncommon).
Project 2: a memory tester for famicom sram (16kbit). basically, write a whole load of different data to the entire chip, and read it back to see if it is right, just like pc memory tests, with different tests, patterns, waiting times, etc.
As for the mega, aarg, both other commenters recommended the mega, but after searching, the thing that I found that seemed to be special about it was its ability to make use of expanded memory for its own programs. I would imagine that this was done by telling the arduino ide about the existence and type of the memory and where it was connected, etc. and it would then compile/link/etc. for this. No idea if this is right, but it is the impression that I got, and this is not what I want to do, so I was basically asking for a quick answer from those who knew, rather than going off on another long tangential search that wouldn't reach the destination i was after.
I realise I could probably just jam wires to power and ground and all the input output pins straight to the arduino that i have, or to daisy chained shift registers, and probably have little in the way of issue (I've seen numerous projects that do just this), but I'd rather learn something about the right way to do this, and, as stated by missdrew, without decoupling, maybe I'd be getting a load of false results, and who knows what else? certainly not me! Not yet!