What are EPROMs?

Eprom (Erasable Programmable Read Only Memory) are electrically programmable memories widely used to keep data even without power supply. In 8bit computers these memories are used for the character set, Kernel, Basic, programs, etc.

They can be found with or without the OTP window (one time programmable) and the difference as well as the cost is the fact that they can be deleted and rewritten. Those with a window can be deleted using a UV light, while the others once written can no longer be deleted.
The evolution of these memories leads to the birth of a new type of ROM, the Eeprom (Electrically Erasable and Programmable Read Only Memory) which, unlike the previous ones, no longer have the erasing window because they can be erased by an electric signal. This type is now also used in micro controllers to be able to easily write and delete the program.
The operation of the Eproms in our beloved 8bit computers (we are talking about parallel Eproms) is quite simple, we have an output data bus (called D0..7 or O0..7) and an address bus with a variable number of pins depending on of memory capacity, plus other pins for power, programming, enable etc. Then by selecting the memory address to be read and enabling the reading of the Eprom, we will have the requested value on the output bus.

These that we have mentioned are parallel Eproms, which means that for each selected location there are more outputs enabled at the same time. Now on the market there are also serial Eeproms that have a similar operation but a serial protocol is used to request and read the data. The advantage of the latter is that they are much more compact as they no longer have all the input / output pins as in parallel roms, the disadvantage is that to select the address to read or write, a series of data transmitted via serial such as a i2c communication, spi, etc ..

 

Pinout for everyone!

Let's start with the 23xxx series
obsolete but often present in 8bit

16kb = 2 Kilobytes

32kb = 4 Kilobytes

64kb = 8 Kilobytes

128kb = 16 Kilobytes

256kb = 32 Kilobytes

Below are the most recent 27xxx ROMs

16kb = 2 Kilobytes

32kb = 4 Kilobytes

64kb = 8 Kilobytes

128kb = 16 Kilobytes

256kb = 32 Kilobytes

512kb = 64 Kilobytes

These are just some pinout of the Eprom but for 8bit computers they are just fine to be able to replace a damaged ROM or to create an adapter

For example, the ROMs used in the C64 are the 2364 and 2332 no longer in production. For the C64C a 23128 is used for the Basic and Kernal but these have a different pinout than the recent memories and to replace them it is necessary to remap the pins to make them compatible or to find memories with compatible pinouts (but not always possible).

ROM adapters

27256 to 2364

To be able to insert a 27256 on a board prepared for a 2364

2764/128 to 2364

To be able to insert a 2764 or 128 on a card prepared for a 2364

Using larger memories it is possible to use the new addressing pins to select the program to be read in the ROM, this is useful if you want to have different versions in a single memory and be able to select them through a switch. If you use larger memories to put only the original version of the code, it is always recommended to rewrite it until all the memory is filled, so that if the new address pins do not have a fixed signal or if you are not sure about it, at least the program will be always the same even if the address goes to a different location desk.

Now with all these pinouts you will be able on your own to make adapters for the most varied types.

MULTI-ROM adapters

One image is not enough!

As described before, using larger EPROMs we can use the remaining space to insert other “images” and then be able to choose which one to run. For example if we replace the C64 kernal, we can put a rom containing its original kernal and other versions such as the Jiffy Dos or other versions.
But then how do I select the correct image?

Watch this video to understand how the memory of an Eprom is managed.

Consider an Eprom as a container, on a 64k we pretend that there are 64 drawers, if we replace it with a 128K we have another 64 empty drawers to put data !.

 Being a larger memory, it will also have more addresses to be able to select all the extra "drawers". ES: a 128k one compared to a 64k one has one more address line, which in binary will mean having double the previous combinations.

So using the new addressing pin we could select the "drawer" from which to start, if set to GND (therefore = 0), we would have the standard addresses (always talking about a 64k) from $0 to $FFF (for ease I express the value in hexadecimal ). Now if instead we put the new pin at + 5V (therefore = 1), we will have that the starting address is no longer $0 but will start from $1000 and will go up to $1FFF. This will allow us to have a new program on the Eprom that will be read without realizing that we are managing one or more addressing lines in addition, these lines will be managed manually with switches or they can be managed by a microcontroller automatically, perhaps by holding down a particular key we can select a new location.

A scheme to clarify what has been said

This is an example of how to fit a 27C512 or 256 or even 128 ROM on a 23128.
The pinout of the 23128 (often used in 8-bit computers like the C16, C128 etc.) is very similar to that of the new ROMs (even if now the 128 are more difficult to find) and if we replace it with a 27128 we will use it as the 'original, with a program in it. However, if we replace it with a 256 at this point having double the memory we can load 2 different images and select them using the new address that will not be used by the machine. The same thing is true if we put a 512 instead of a 128, in this case we can insert 4 programs and select them through 2 new input pins (binary logic 00,01,10,11).