# So you want to write EPROMs/uC's?  Look in here.



## alphamule (May 25, 2012)

I'm going to try to make us a little guide on EPROM programmers.  Here's the basics:  (will make table of contents later with links to the specific posts)

1)  If you want to program 27Cxxxx/27512 or similar, you'll need one of the programmers like the Willem.  These are the focus right now.  If you just want to take the data off of one and copy to a PC or a newer, easier-to-program Flash, you'll only need a reader.
a)  Simple readers
b)  EPROM burners

2)  27Fxxxx don't need that cumbersome 12 to 25V power supply and can use the simpler methods.  If you can get a spare motherboard and certain flashing software, you can just burn it on there.  I highly recommend going to Flash ROM's if you can.
a)  Motherboard hack - Simple, elegant, and lazy way to reprogram many Flash BIOS chips.

3)  Serial memory is vastly easier to program.  You'll need support for 1 of several interfaces, depending on the chip.  Here's some popular ones.
a)  JTAG (Also used by routers for parallel memory through the CPU's debug port - probably won't cover)
b)  SPI
c)  I2C
d)  ICSP
e)  LPC
f)   FWH

5)  Microcontrollers generally are programmed much like serial memory.  Not a priority.  This information is available very easily at any of the sites that sell the chips.  Programmers are only about $5-15 to make and usually don't even need more than 2 transistors if even that.  The $5 ones are usually just some resistors and a parallel/serial plug.

6)  References and mirrors.  I'll eventually post up a downloadable copy of as much of the tools and images in here as possible.  I have a LOOOOONNNNNG list of stuff to do.


----------



## alphamule (May 25, 2012)

Parallel EPROM Readers​
Sometimes, you just want to be able to read the data off of a ROM and don't care about write capabilities.  This is where a reader comes into play.  You should be aware that not all nonvolatile memory chips are parallel.  Some use interfaces like SPI or I2C which don't need the same tools.  Serial memory chips will be covered elsewhere.  Note that anything that can read game carts can also read separate EPROM chips.  They're only different connectors for the same chips.  This site has information for dumping the odder chips found on arcade machines.

*Parallel Port Devices*​One of the most popular homebrew devices for reading game carts back in the 1990's was a cart reader called CartIO.  It also doubles as a Flash writer.  See the Flash section for more info.

*Serial Port Devices*​This one can be programmed with using a simple terminal program and works even with USB-to-serial converters.  No special software tool support is needed since it works even with the old Hyperterminal program.  It uses a PIC18F4550, 74HC4040, 3 transistors, and some passive components.


----------



## alphamule (May 25, 2012)

EPROM Burners/Programmers/Writers​
*Commercially Available Designs*​

The easiest solution if you want an all-in-one programmer that supports practically everything is to just get a Willems one.  There aren't a lot of commercial programmers below $100 that are that complete.  The SIVAVA "PCB50" is actually based on a revision 3.0 board, oddly enough.  Be sure also to check this out, for modifications.  There are links to many companies that sell these, here.  Note that some boards have more/less features than others so shop around on those links.

The EZoFlash programmer is a much simpler design.  Their support forum is nice and both the EZoFlash and Willems variations.  This is the way to go if you're wanting to make your own and prefer the easy way.  Software is already made, and the hardware is debugged since so many people have dealt with them in the forums.

An Epromer-5 is also popular.  It's kind of basic compared to Willems programmers but looks well-made.  Not to be confused with the EPROMr2 which is an abandoned DIY programmer.

Even if companies quit making these popular ones, you can just follow the schematics in the next section.  The following are other designs that I've found while scouring the Internet.  You can also build one of these if you prefer.

*Parallel Port Designs*​

I'm thinking of making one of the Parallel-port ones for my own use since I just got a PCI-based Parallel (ECP/EPP) port off of eBay.  You *can not* use USB-to-Parallel adapters for parallel-based programmers!  You might get away with substituting 74HC4040 chips in place of 4040 chis but I don't recommend them as people have had problems sometimes.  Besides the schematics of the Willems-based programmers, there's some simpler designs that I'm posting for hobbyists.

This design is very simple and only needs 2 4040's, 2 transistors, 2 voltage regulators, and some passive components.  This is recommended.

This design is very similar and amazingly enough is a _wire-wrapped_ design(LOL at the pretty/ugly photo of the finished board on there  ).  2 4040s, 5 transistors, and some passive components.  The site has some other good information.

This design uses 5 ICs, 3 transistors, 2 voltage regulators, and some passive components.  3 LS374(latches), 1 LS245 (buffer), and 1 LS02 (NOR gates) are used.  A nice feature is that it has a configuration socket that allows it to quickly be modified for making large batches of the same model of chip.  Not needed anymore since we're likely dealing with 27C512's that all have the same pinout or newer chips that don't need these 12V+ VPP capable programmers.

A funny little programmer called EPROG for an Atari ST's joystick ports which are technically parallel ports.  The design is adaptable but is included only for reference.

*Serial (EIA232) Port Designs*​

They exist but aren't practical.  If you're going to be using microcontrollers or such, then it's better to look below.

*USB Designs*​

Microcontrollers have USB support and enough memory to cache chunks of the binary file being written to the EPROM without all the issues that USB-to-parallel adapters cause.  A nice feature is that it's possible to write a tool for them using virtual COM port drivers that should be on any computer with USB.  Many of the microcontroller/serial EEPROM programmers do this.  If you use a microcontroller, you can eliminate most of the component count that parallel port programmers have.  This is also the most compatible with laptops.  A good design will have a small charge pump, a microcontroller, and a transistor to control VPP.  I'll post more info, later.

*General Info*​

Jeff Frohwein's site has somea lot of hardware info.  Sadly, most of those links are defunct.

http://www.z80.info/ has a pinout of all EPROMs upto 27512.


----------



## alphamule (May 25, 2012)

Motherboard Hack​This also includes using addon cards or such.  Check your boards for the sockets below to determine physical compatibility, then find out if your Flash ROM is compatible with the existing chip's bus, then setup the software to burn ('flash'/'write') your desired ROM image.  This is the most limited method but is often the best if you just want to get a motherboard working again.  It is also the most efficient and convenient method when you're working with embedded devices that have JTAG support and you want to try a custom firmware/backup the existing one.  For example, DD-WRT on routers.
I hate BBBugs!*Hardware*​If you're really lucky, you'll see something like this on your old board.  This is the easiest to get working with DIPs and custom adapters.  






If you see one like this, then you can't really do DIP Flash ROM's (you'd need some way over-priced adapter), but you can conveniently do many PLCC Flash ROM's.  LPC and FWH interfaces are possible on these boards.  In fact, they're quite common now.





If you board only has this, go elsewhere:





The legacy PCI support for stuff like those cheap parallel port adapters is a bonus if you own an older game cart transfer cable.  This is not even remotely required but is likely to be true if you're using an older board.  Don't ever use your main system's board for this.  You'll be really mad when you have to replace a $50-150 board instead of some old junker! 

*insert other devices like addon cards*
I hate BBBugs!*Software*​In order to get the system to be stable, you'll probably have to enable "System BIOS shadow RAM" or "BIOS cached" or the like in your BIOS setup screen.  A program written to bypass the BIOS (it's own drivers) wouldn't likely care, though.  There's a reason no one writes this kind of junk (proprietary, undocumented, and totally different chipsets for one)!

For AMIBIOS, you can use AMI Flash EPROM Programming Utility or the standard "AMI BIOS Flasher" (same site), with the *insert override command line option*.  Make sure that the version you use allows for other Flash device/manufacturer IDs or else use the exact same chip.  I'll try to post a version that works on all.

Award BIOS can use these old DOS tools.  Add "/f" to the end of the command line, to force it to work.  The Windows tools are of course mostly useless.  You plan on dedicating an old drive to a likely even older 'junker' board?  Rarely does a Windows tool ever let you override the BIOS with a non-matching file.

Some motherboards are a real pain and don't work with the above tools.  You might have to get one specific to your brand (Asus for example does this), or use a different board.  Don't spend too much time on this, as there are better options if you get stuck.  The motherboard hack is just for cheapskates who can't solder and can't afford a professionally-manufactured programmer.  Not a whole lot of those people want to read ROMs or even know what the heck those are!  

For the addon cards, there's similar options in most update tools.

There are 3rd party programs.   UniFlash is supposed to work on most older boards.  It works even on some network and video cards, heh.  Flashrom is a newer utility that works in almost any OS.  It works with a lot more than parallel Flash ROM's, but that's to be discussed elsewhere.  Here's a comparison between the 2.
I hate BBBugs!*Electrical Compatibility*​Be aware that some of the PLCC chips (and very few DIP's) are not in fact Parallel Flash ROM but instead LPC or FWH.  Some Flash ROM's are 3.3V and others are 5V.  You can guess what happens if you put a 3V part into a 5V socket.    Just use a compatible chip.  Check below for a cross reference.  Note that LPC and FWH are related busses.

Key:  ?=wildcard (single letter/number), *=wildcard (1+ letters/numbers), parentheses=optional character/s
5V, parallel:  AT49(H)F???, SST29EE???, SST29SF???, 39SF???A
3V, parallel:  SST29LE???, SST29VE???, SST29VF???
LPC:  W39V???C
FWH:  W39V???*FB*, W39V???*FA*, SST49LF00?A
LPC+FWH:

Someone else has made a pretty extensive list here.


----------



## alphamule (May 26, 2012)

Flash Writing​*Parallel Port Devices*​CartIO was one that I can't believe that I forgot about when researching Flash writers.  In fact, that page has a ton of info for Gameboy modders although most of those commercial devices are defunct.  Note that CartIO/C3/Synced CartIO are more aimed at Flash carts.  From the schematics, they don't seem capable of VPP greater than 5V.  The first 3 devices on this list are all CartIO or based on it.

The original CartIO uses 1 74HCT00, 1 74HCT138, 1 74HCT244, 3 74HCT374's, and practically no passive components.

The C3 is based on CartIO and uses 1 74HCT00, 1 74HCT138, 1 74HCT157, 3 74HCT374's, a voltage regulator, and around half a dozen passive components.

Here's one derivative of CartIO called 'Syncronized CartIO'.  It uses 1 74HC00, 1 74HC138, 1 74HC244, 4 74HC374's, 1 74HC688, a voltage regulator, and a dozen or so passive components.  Note the lack of TriState devices (HC*T*).


----------



## alphamule (May 28, 2012)

*JTAG placeholder*


----------



## jimmyemunoz (May 28, 2012)

Alpha you could start up a little business making GB carts with programmers.


----------



## alphamule (May 28, 2012)

*SPI placeholder*

Oh hell, no!  (LOL, I can see it now)


----------



## alphamule (May 28, 2012)

*I2C placeholder*


----------



## alphamule (May 29, 2012)

*ICSP (In-circuit Socket Programming) placeholder*


----------



## alphamule (Jun 4, 2012)

*LPC placeholder*

You'll end up finding quite a few motherboards compatible with FWH or LPC, especially if they're newer.  I'll cover LPC first as it is popular for some reason.  *cough*Game consoles*cough*


----------



## alphamule (Jun 4, 2012)

*FWH placeholder*


----------



## alphamule (Jun 4, 2012)

*LPC placeholder*


----------



## alphamule (Jun 4, 2012)

*Microcontrollers placeholder*


----------



## raulpica (Jun 8, 2012)

I have one of those first motherboard types... I'm in luck it seems  So, I can just build adapters for it?


----------



## alphamule (Jun 9, 2012)

Depends on the voltage...  I'm trying to build a list of possible model numbers for each voltage/interface.  If you see a 27C512 on your old motherboard, then you can handle the types of chips used on the NES (for reading, obviously since they're ROMs) with just a physical adapter.  Too bad that the NES used those damn bank switchers though - you'll have to remove the chips from the board or use an overhead adapter like professional reversers use.  

Oh, and the pins can be swapped.  Not likely on Flash ROM's, due to performance reasons, but it's quite possible to swap any address line or any data line with another of the same type.  So the pin for D0 might be the same as D5 for another cartridge.  The same with A17 and A0.  The performance issue with Flash ROM's is because they usually have a steep cache miss penalty every time they leave a 2^m window.  So, if you have one that has for example 32-byte windows with a byte-wide data bus, then you can safely swap any of the top address lines so long as you leave A0-4 alone.  Another funny thing:  Many datasheets list no D0 on 16-bit devices, and no D0 or D1 on 32-bit devices.  Apparently, to reduce confusion with people trying to use multiplexers.  

I should make sure that people understand that I mean parallel NOR Flash, not NAND or EEPROM's.  They have an entirely different interface.  A NOR Flash can have 100+ nanosecond delays on changing higher address lines, while only a 15ns delay on consecutive reads in the same window.  They cache the entire window so that you're effectively reading from a tiny set of registers(RAM).  In terms that most people are familiar with, that's the difference between 10MB/s (like class 10 SD cards) and 60MB/s (like higher-speed Compact Flash cards).


----------



## scharkalvin (Jan 12, 2021)

While USB->Parallel Printer adapters probably won't work with Parallel interfaced eprom burners, there are several USB interface chips that might work in a custom designed programmer with software drivers written for it.  PCIE printer cards that support EPP mode "should" work.   I'm working on a design that will use an EPP mode printer port.  The software will be written for Linux.  The design is partly based on the serial EProm burner (V2) by Steve Ciarcia in Byte Magazine.  It will use two 8255 chips, and an 8253 chip for the interface, plus several LS or HCT 74 series logic chips.  The length of the PGM pulse is timed by the 8253 rather than in software, the interface is polled for the end of the pulse.   Rather than controlling the VPP and VCC voltages under software, I will have three switches that select which pins are used for VCC and VPP (2 DP3T ON-ON-ON, and 1 DPDT).  Selection of CE/PGM is done under software control.  VPP and VCC voltages are 'dialed in' via 2 ten turn knob pots with indicator dials.  So you have two dials and three switches, plus two sockets to select the device.  A 32 pin socket for 8 bit devices, and a 40 pin socket for 16 bit devices.  40-44 pin 8/16 bit devices are not supported but could be added with a third socket if desired.  I have A1-19 connected to the 40 pin socket as A0-A18 so the correct VPP / PGM signals line up (word addressing, not byte addressing).


----------



## ClancyDaEnlightened (Jan 20, 2021)

Use can also use an Arduino an some shift registers, and only need about 6 pins....


----------

