Arduino Mega Eprom Programmer

Versão em Português aqui.


Recently I acquired a SNES. But it only came with a bootleg Mortal Kombat cartridge. Searching for games I found a lot of repro cartridges (Cartridges with the ROM swapped) being sold at local second hand selling websites. The problem is that they are sold usually at prices comparing to those of original untouched cartridges.  People should not overprice something they are stealing anyway.

So what? I made this post to prove anyone with an Arduino Mega and some spare components can burn a EPROM for cheap.

How are repro cartridges made ?(usually)

  • Find a boring game cartridge (sports specially);
  • Burn a EPROM with the desired ROM file;
  • Swap the cartridge ROM with the programmed ROM.

Okay, but then why is not everyone making their own repros? Because a programmer is not so cheap. EPROM programmers can be pricey. Even the Chinese ones (It actually depends on the place, here you can pay overpriced from some scumbag or try to import and probably be taxed).

Everything has a cost-benefit ratio and Makers/Hackers are always creating super useful tools with cheap materials. In 2014, I fixed Mega Drive cartridge using a BIOS chips found in scrap. Write flash memory is not trivial, there is a certain algorithm, but still is a relatively simple process. Maybe write EPROM was not complicated.

The Programmer

An EPROM also is a memory. And it’s actually even easier to program than flash memories. To write a byte in EPROM simply select the address via pins A0, A1, A2 … and so on; put the byte to be written in Q0 pins, Q1, Q2 … etc, and give a pulse with a high voltage (13V) in the Vpp pin. The problem is just to do this for 8 * 1024 * 1024 = 8388608 addresses. More information can be found on the  27C801 eprom datasheet.

I’ve used Arduino to program other kinds of memory. Why not also try EPROMs? Also, Arduinos are super cheap (Ebay/Ali express). However, I did not buy an Arduino only to program memories, I have some here at home I use to all kinds of things.

Below is a schematic I came up with for the programmer:

schematicSchematic for the EPROM burner with Arduino.

Also, it should be noted the Eprom needs to be fed 6V when being programmed. Hence the switch in the schematic above. I used a simple jumper and manually change Vcc when needed.
I soldered the circuit on a prototyping shield with a ZIF socket. This makes it eadsy to attach and remove the Eprom. The 13 volts are provided by a boost module, but possibly a 12 volt supply can be used (I did not test, may be you can;). I used a boost so everything is powered by USB.

img_20160828_173037268 EPROM burner shield (Incomplete, still lacked the transistors)

Cool, but in this case, hardware without software is nothing. Python for the win. A Python script reads the data from a file and sends over serial to the Arduino Mega, which receives the data and writes in memory, all very simple.

The project files are available in my github.

The memories I have here I bought on Ebay, about $ 2 each.

Now you know that you can program EPROMS with just a Arduino Mega and some additional components ;). Below are some pictures of the project.


img_20160906_153952614Cartridge with a Eprom programed.

img_20160911_163622728Shield finished. I adapted the code to write flash memories as well. But it still has some problems. The code is also in my github anyway.

zZelda running on the cartridge above.


Harvest Moon.


The EPROM eraser I use


The other side of the board.

Final points

  • Please do not use this work for commercial stuff
  • Dragão sem Chama does not share ROMS
  • Have fun!

See you  o/

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported License.

Robson Couto

Estudante de engenharia elétrica. As vezes parece gostar mais dos consoles antigos que dos jogos. Tem interesse em dominar bits, bytes e afins.

20 thoughts on “Arduino Mega Eprom Programmer

  1. Da hora. Estou tentando trazer a vida alguns MSX antigos e por alguma razão cosmica dois deles estão com as Eproms muito estranhas (um está respondendo 00h eternamente). Tentei usar um gravador de Eprom de epoca mas o conector serial antigo não tem mais computador que suporte (e se tem nao tem software e bla-bla-bla). Novos programadores sao uma otima opcao, mas pagar 300 dinheiros para provavelmente usar duas vezes nao me anima…

    Vou tentar sua ideia de usar o Arduino para elas, vamos ver no que dá !

  2. Hello, is a great proyect that you have between hands. I’m very interested on it, because i have the same trouble, overpriced game carts, low budget and a growing interest on electronics and arduino proyects. It will be awesome if you can share some schematics and component list. Because the model/values of the transistors that you used (except for lm317) are not shown on the post. It will be really appreciated if you do in an update. Thanks in advance :)

    Best wishes, Miguel

    P.D: I think in the linear regulator with lm317 a 1uf ceramic capacitor is missing, but not sure because you take that 6 volts from the buck boost, right. So the peaks are already atenuated by the regulator if i understand the circuit…

    1. Hi Miguel, thanks!
      Sorry, I totally forgot to mention that. The NPN trasnsitors are BC548 and the PNP ones are BC558. I guess they are very easy to find and vey cheap too. I got the boost module (I thisnk is not a buck boost,not sure) from ebay. Yes, also it may miss some capacitors, I just was working much on the code and forgot hardware a bit haha.
      Please tell if you can get everything working(or not)!

      1. Hi Robson !

        It’s an interesting post ! I’m a web developer, and I want to go back to my fundamentals ^^

        I’m a noob in this stuff, and I want to learn with these kind of project, can you help me ?

        I’m actually reading some books to learn micro prog and soldering. Have you some advise for me challenge.

        I really want to realize this project, it’s a personnal challenge ????

        Have an email or any way to chat with you ?

        Thx !

  3. Hi Miguel !

    It’s an interesting post ! I’m a web developer, and I want to go back to my fundamentals ^^

    I’m a noob in this stuff, and I want to learn with these kind of project, can you help me ?

    I’m actually reading some books to learn micro prog and soldering. Have you some advise for me challenge.

    I really want to realize this project, it’s a personnal challenge ????

    Have an email or any way to chat with you ? Mine : [email protected]

    Thx !

    1. Hi Geoffrey.
      I really recomend you to get an Arduino board.
      I started in the world of microcontrollers with a Arduino UNO.
      There is a huge community and a lot of content about Arduino, so it is easy to understand everything.
      Also, Arduinos(UNO, Mega, Micro, Leonardo and so on) generally have a USB port and don’t need a programmer, that is really usefull. You can programm them with a simple click of a button.
      From that you may want to dig more and learn assembly, AVR C or ARM stuff, it is up to you.
      Good luck!

  4. Hello, i’m elektrobrain from Czech Republic and i’ve like your project, i making advanced version of your programmer, with c# interface and some new features, like recieve chip and pin config from interface to programmer and universal ZIF Socket for any memory (Willem inspirated dil switches :D)
    In my current working version i can read and programm 42pin, 32, pin and 28pin memorys only by changing chip in interface.
    If you are interest, i can send you my version.

  5. Hello, it’s been a while since I wrote the previous comment… Until the date I have the Arduino mega, the prototyping board, the boost converter, the linear converter, the transistors, the ZIF 42pin connector, but not the correct eeproms for writing. Maybe in a month I will have all the materials and then hopefully everything working. Cheers, Miguel :)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">