
[Vincenzo] wanted to read some 82S129 bipolar proms, and why not, they were very common in the 1980′s arcade scene. The problem is that its kind of an odd ball part now, and typically only (even) more expensive EPROM programmers can read them. An Arduino, breadboard and some quick scripting quickly takes care of that problem with this Arcade Rom Reader.
You stick the prom in your breadboard, and wire it up to the appropriate ports and pins of the Arduino, which bit bangs the prom and returns the results though the serial connection of the Arduino. Using a terminal program on the pc side you capture the text and use a script to convert the ascii values into a binary nibble format and save as hex.
This makes it much easier for us to dump roms from old arcade boards, because you never know when you might run across an old Polybius arcade board on your next outing to the salvage or scrap yard.
Join us after the break for all the details and as always comments!
82S129 bipolar proms are very common in '80 Arcade Jamma boards. Unluckly, only more expensive EPROM programmers can read them. I used an Arduino Duemilanove to dump 82S129 contents to PC for backup use. I used a breadboard to connect 82S129 pins to Arduino. Please follow this schematic: Arduino pins ------> 82S129 pin (function) +5v 16 Vcc GND 8 GND Digital 2 5 A0 Digital 3 6 A1 Digital 4 7 A2 Digital 5 4 A3 Digital 6 3 A4 Digital 7 2 A5 Digital 8 1 A6 Digital 9 15 A7 Digital 10 12 O1 Digital 11 11 O2 Digital 12 10 O3 Digital 13 9 O4 GND 13 CE1 GND 14 CE2 Here is pde program to send in Arduino: Begin pde program ------------------------------------------------ /* 82s129 Arduino reader By Vincenzo Femia ([email protected]) */ byte indirizzo=0;//"indirizzo" is Italian for "address"
boolean a0=0;//address bits boolean a1=0; boolean a2=0; boolean a3=0; boolean a4=0; boolean a5=0; boolean a6=0; boolean a7=0; // boolean o0=0;//data bits boolean o1=0; boolean o2=0; boolean o3=0; byte output=0; void setup() { //pin0 & pin1 reserved for serial communication pinMode(2,OUTPUT);//set pins for address pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,INPUT);//set pins for data (it's a nibble) pinMode(11,INPUT); pinMode(12,INPUT); pinMode(13,INPUT); } void loop() { for (indirizzo=0; indirizzo XXXX</p> and last line is:
11111111 -> XXXX
Please verify that file contains only 1 cicle of reads (256 lines).
Now we have to convert this ASCII .txt file in binary file.
Since I use Linux I write in Gambas programming language (http://gambas.sourceforge.net/) a little program to do this conversion.
However Windows user can port it in Visual Basic or other languages.
Simply it read nibble bits, build nibble value (00-0F), write binary value in output .hex file.
Here's the source:
Begin of Gambas program -------------------------------------------------- PUBLIC SUB Main() DIM ingresso AS Stream DIM uscita AS Stream DIM stringa AS String DIM o0 AS String DIM o1 AS String DIM o2 AS String DIM o3 AS String DIM valore AS Byte ingresso = OPEN "/home/enzo/temp/datafile.txt" FOR INPUT uscita = OPEN "/home/enzo/temp/datafile.hex" FOR OUTPUT CREATE WHILE NOT Eof(ingresso) LINE INPUT #ingresso, stringa o3 = Mid$(stringa, 13, 1) o2 = Mid$(stringa, 14, 1) o1 = Mid$(stringa, 15, 1) o0 = Mid$(stringa, 16, 1) valore = 1 * Val(o0) + 2 * Val(o1) + 4 * Val(o2) + 8 * Val(o3) PRINT #uscita, Chr$(valore); WEND CLOSE ingresso CLOSE uscita END ------------------------------------------------------------- End of Gambas program
For questions can contact me:
Vincenzo Femia
[email protected]
Reggio Calabria, ITALY.
Filed under: arduino hacks 
11111111 -> XXXX
Please verify that file contains only 1 cicle of reads (256 lines).
Now we have to convert this ASCII .txt file in binary file.
Since I use Linux I write in Gambas programming language (http://gambas.sourceforge.net/) a little program to do this conversion.
However Windows user can port it in Visual Basic or other languages.
Simply it read nibble bits, build nibble value (00-0F), write binary value in output .hex file.
Here's the source:
Begin of Gambas program -------------------------------------------------- PUBLIC SUB Main() DIM ingresso AS Stream DIM uscita AS Stream DIM stringa AS String DIM o0 AS String DIM o1 AS String DIM o2 AS String DIM o3 AS String DIM valore AS Byte ingresso = OPEN "/home/enzo/temp/datafile.txt" FOR INPUT uscita = OPEN "/home/enzo/temp/datafile.hex" FOR OUTPUT CREATE WHILE NOT Eof(ingresso) LINE INPUT #ingresso, stringa o3 = Mid$(stringa, 13, 1) o2 = Mid$(stringa, 14, 1) o1 = Mid$(stringa, 15, 1) o0 = Mid$(stringa, 16, 1) valore = 1 * Val(o0) + 2 * Val(o1) + 4 * Val(o2) + 8 * Val(o3) PRINT #uscita, Chr$(valore); WEND CLOSE ingresso CLOSE uscita END ------------------------------------------------------------- End of Gambas program
For questions can contact me:
Vincenzo Femia
[email protected]
Reggio Calabria, ITALY.
