Reading out old EP-Rom on arduino - Page 1
Forum section: electronics / general

author: Rerouter
author_rank: Super Contributor
timestamp: June 05, 2012, 11:26:38 am
content: I am in the process of repairing a piece of test gear (1982 Vintage) and before i go and damage the rom's in any way during testing i would like to make a backup of them,i have seen quite a few implementations for offloading older game cartriges, such ashttp://cc.davisremmel.com/2009/11/22/read-atari-game-rom-with-arduino/and was wondering if any of you could forsee problems or limitations, or possibly some better way to store and confirm the read off data from later passes,the ep-rom in question is a 27128 a 5V (10% tolerant) 128K UV Erasable kind, with 14 address lines and 8 output lines,it may even be corrupted as it is from aging but it would be nice to have a copy incase it is intact,

author: nctnico
author_rank: Super Contributor
timestamp: June 05, 2012, 12:01:15 pm
content: Save yourself the trouble and get a cheap Eprom programmer from Ebay:http://www.ebay.com/itm/TOP853-USB-Universal-Programmer-12-MHz-s-40-Pin-Socket-EPROM-MCU-GAL-PIC-PLCC-/150763161122

author: Rerouter
author_rank: Super Contributor
timestamp: June 09, 2012, 06:33:43 am
content: if anyone ever needs a copy of the ep-rom images for an analogic data precision 6000, i now have them

author: Rerouter
author_rank: Super Contributor
timestamp: June 09, 2012, 12:28:28 pm
content: seems i missed one rom, a bipolar :/ so looks like i will still need to use an arduino to read it out, (please forgive my inefficient code)here what i have so farCode:/*82s129 Arduino readerBy Vincenzo Femia (enzofemia@gmail.com)Shortened, Fixed and Modified from Zhazma's Version*/word addr=0;// Actual Addressboolean a;// Address Pinsboolean o;// Data Pinsvoid setup(){for(int A=2;A<11; A++){pinMode(A, OUTPUT);} //set pins for addressfor(int Q=11;Q<15; Q++){pinMode(Q, INPUT);} //set pins for data}void loop(){for (addr=0; addr<512; addr++)// from 00 to 200 HEX address{for(int A=0;A<10; A++) //read status bit of address...a=bitRead(addr,A);{for(int A=2;A<12; A++) //...and set outputif (a==1) {digitalWrite(A,HIGH);}else {digitalWrite(A,LOW);}delay (50);} //Wait so outputs can be set by ROM{for(int Q=0;Q<4; Q++)o=digitalRead(Q+11);}//read bit from data outputsSerial.begin(9600);//Setting serial communication//Write in binary ASCII address read and "->"{for(int A=8;A>=0; A--)if (a==0) {Serial.print("0");}else {Serial.print("1");}Serial.print(" -> ");//Write in binary ASCII output nibble{for(int Q=3;Q>=0; Q--)if (o==0) {Serial.print("0");}else {Serial.print("1");}Serial.println(""); //newline.}if (addr==511) {Serial.println("ROM has been read");}Serial.end();}}}}based uponhttp://hackaday.com/2011/05/18/arduino-arcade-rom-dumper/only thing i would like to add to this is how to convert the nibbles i pull out into hex values, i have gotten this far myself, but am struggling on the last mile,

author: TerminalJack505
author_rank: Super Contributor
timestamp: June 09, 2012, 06:11:19 pm
content: Probably the easiest way is to use sprintf:Code:char HexStr;sprintf(HexStr, "%x", (o << 3) | (o << 2) | (o << 1) | o);Serial.print(HexStr);This code assumes the MSB is in o.

author: TerminalJack505
author_rank: Super Contributor
timestamp: June 09, 2012, 07:30:53 pm
content: It looks like there is a HEX option for Arduino's Serial::print() method as well. So you should be able to do something like this:Code:int Nibble = (o << 3) | (o << 2) | (o << 1) | o;Serial.print(Nibble, HEX);

author: Rerouter
author_rank: Super Contributor
timestamp: June 10, 2012, 02:07:37 am
content: thank you very much TerminalJack505,

author: Rerouter
author_rank: Super Contributor
timestamp: June 30, 2012, 02:14:51 pm
content: another slight problem, not on the backup side, but rather understanding side,8 bits are stored on each ROM, however the 68000 CPU of this device reads off 2 at a time for a 16 bit word,i have the ROM images, but am at a loss on how to interleave them to make them meaningful,i have attached the first ROM pairs images if any of you might know a method, (Motorola, big edian stored as straight hex)i apologise if the method is obvious, but all i have found so far is old console Roms, and mac tutorials which are larger than 16 bit or in little edian, :/(having a little trouble with attachments so trying to add with editing)