Skip to the content
PCBKitNew board
2 layers68.8 × 53.6 mmRelatively Universal ROM Programmer, the printed circuit board in 3D

Hardware to program W27C512 EEPROM or any 24/28/32 pin ROM requiring from 5V to 27V programming voltage.

Size
68.8 × 53.6 mm
Copper layers
2
Thickness
1.6 mm
Parts
149
Nets
122
Pads
459
Tracks, vias
1,280, 167
Pours
2
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
7 Aug 2023
Updated
28 Nov 2025

Overview

Relatively Universal ROM Programmer is an open-source printed circuit board by AndersBNielsen, from the AndersBNielsen/Relatively-Universal-ROM-Programmer repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 68.8 × 53.6 mm with 149 parts on 122 nets, routed with 1,280 tracks and 167 vias.

It is built around the ARDUINO UNO R3, 74HC573 and MMBT3904, with the MMBT3906 among its other parts. Its parts include 65 resistors, 34 diodes, 12 capacitors, 12 transistors and 8 connectors. It belongs with the interfaces and adapters boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

4

README

README.md

Relatively Universal-ROM-Programmer

This is meant to be a cheap way to program W27C512 EEPROMs which require 14V erasure voltage and 12V programming voltage... Or basically any other 24/28/32 pin ROM requiring from 5V to 27V programming/erasure voltage.

You can either make your own, get a PCB from JLCPCB using the guide below or order a kit with SMD components presoldered from iMania.dk (sockets available if needed). Kits with SMD components presoldered are available from my store, iMania.dk

Requires a dev board with a processor or microcontroller. Like a 65uino or Arduino Uno for instance.

Software

#1 Don't attach the Programmer shield while power is on.

#2 Don't turn on power if the controller (Arduino/65uino/Nucleo board) isn't programmed with appropriate firmware.

#3 Don't insert a ROM in the socket until you're ready to write it. Don't leave a ROM in the socket during reset or programming.

Firestarter firmware

If you just want to get started fast, there's an amazing third party firmware and desktop software available in the form of Henols's Firestarter Firestarter is recommended if you just want to program ROMs cheaply, easily, and don't care too much about the technical details.

Remember: Don't insert a ROM in the socket until you're ready to write it. Don't leave a ROM in the socket during reset or programming. Program Arduino before attaching shield. Attach shield before powering on Arduino.

Original proof of concept code

6502 assembly code is available in the 65uino repo (to be separated and moved here "soon").

Arduino sketch is available in this repo's /software

Both the 6502 firmware (65uino) and the Arduino sketch use the command line python scripts in this repo for burning and reading ROMs.

read_binary.py reads a ROM via serial.

send_binary.py burns a ROM via serial.

send_command.py issues commands (erase for instance)

Rev 0 photos (The Rev 1 added a voltage divider for reading VPP/VEP, Rev2 has replaced the jumpers with transistors for automatic pin count selection)

Relatively-Universal-ROM-programmer-rev0-front-assembled Romprogrammer-assembled-back ROMprogrammer-assembled

Documentation

The Relatively Universal ROM Programmer relies on the standard JEDEC ROM footprint and common "high voltage" pins to work. BJT drivers handle putting the 12-27V programming voltage on the relevant pins. Which "high voltage" pins are active can be selected in software and BJT drivers control which pins can be used as VCC. The 12-27V for programming is manually set using a small screwdriver and a trimpot with a readout in software or multimeter if your micro doesn't have analog pins (65uino).

Jumpers

Revision 2.X

Revision 2 and later doesn't need physical jumpers to select 24, 28 and 32 pin ROMs, as it has transistor drivers to pass either VCC or the appropriate address line to the correct physical pin.

Revision 2 and 2.1 do however have a jumper to connect high voltage to pin 1 of 28 pin ROMs (JP4) - do NOT leave this jumper in place when programming 32 pin ROMs as it will most likely damage the ROM, the programmer, or both.

JP4

Revision 2.2 also has JP4 but rotated 90 degrees (green) and another option of powering the VPP pin of 2716-type ROMs (red). Again: DO NOT leave JP4 in place in either rotation if you are not programming 28 pin ROMs with VPP on pin 1 (check the ROM's datasheet or "firestarter info") or 2716 type ROMs with a very nonstandard VPP pin.

image

Revision 1.x

Revision 1.x require physical jumpers to connect VCC to 24 and 28 pin ROMs

A common configuration is to connect "A" to 5V and B to "A13", which covers the Winbond 27C512 and many other common 28 pin ROMs. This configuration also covers the 32 pin SST39SF010 (5V programmable).

Documentation is on the back of Revision 1.x boards image

Setting the voltage

The "high voltage", VPE, is calibrated using the trimpot on the front of the board after activating the regulator in software. Please be aware that some dev boards WILL put VPE on several pins during reset - especially if reset is held down manually. This MAY damage a chip in the socket (especially if it's only 5V programmable). Clarity: It's best to NOT reset the controller with a ROM in the socket to be on the safe side.

Documentation will be updated with FAQ.

Programmer-back-documentation

Getting a PCB

This project is kindly sponsored by JLCPCB. They offer cheap, professional looking PCBs and super fast delivery.

Step 1: Get the gerber file zip package from the /hardware folder /hardware/rev2/rev2-1316.zip for instance.

Step 2: Upload to JLCPCB https://jlcpcb.com

Upload

Step 3: Pick your color, surface finish and order.

Select settings Save your choice

If you want JLCPCB to assemble a board, the BOM and placement files are also in the repo.

You can use these affiliate links to get a board for $2 and also get $80 worth of New User Coupons at: https://jlcpcb.com/?from=Anders_N

And in case you also want to order a 3D-printed case you can use this link. How to Get a $7 3D Printing Coupon: https://jlc3dp.com/?from=Anders_N

Parts

149
QtyValueFootprintReferences
3010kResistor_SMD:R_0402_1005MetricR12, R19, R20, R21, R33, R41, R43, R44, R45, R46, R47, R48, R49, R50, R51, R52 +14
23GREENLED_SMD:LED_0805_2012MetricD2, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27 +7
1622kResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R6, R7, R8, R9, R14, R15, R23, R24, R25, R29, R30, R31
154k7Resistor_SMD:R_0402_1005MetricR13, R17, R18, R22, R26, R27, R28, R32, R34, R35, R36, R37, R38, R39, R40
8100nFCapacitor_SMD:C_0402_1005MetricC2, C3, C4, C5, C6, C7, C8, C12
61N5819Diode_SMD:D_SOD-323D1, D10, D11, D12, D33, D34
6MMBT3904Package_TO_SOT_SMD:SOT-23Q1, Q3, Q4, Q5, Q9, Q11
6MMBT3906Package_TO_SOT_SMD:SOT-23Q2, Q6, Q7, Q8, Q10, Q12
5REDLED_SMD:LED_0603_1608MetricD9, D29, D30, D31, D32
374HC573Package_SO:TSSOP-20_4.4x6.5mm_P0.65mmU2, U3, U4
3Bodge pointJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP6, JP8, JP9
210uFCapacitor_SMD:C_1206_3216MetricC1, C9
21kResistor_SMD:R_0603_1608MetricR10, R11
2270kResistor_SMD:R_0603_1608MetricR5, R16
110uHInductor_SMD:L_Taiyo-Yuden_MD-4040L1
1220uFCapacitor_SMD:CP_Elec_6.3x7.7C10
128/32 pin ROMSocket:DIP_Socket-32_W11.9_W12.7_W15.24_W17.78_W18.5_3M_232-1285-00-0602JU5
150kPotentiometer_SMD:Potentiometer_Bourns_TC33X_VerticalRV1
1A19_CUTJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP5
1Arduino_UNO_R3Module:Arduino_UNO_R3A1
1CTRLConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ1
1Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ8
1Ext_UARTConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ4
1LSBConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ3
1MIC2288Package_TO_SOT_SMD:SOT-23-5U1
1MSBConnector_PinHeader_2.54mm:PinHeader_1x08_P2.54mm_VerticalJ2
1NCCapacitor_SMD:CP_Elec_5x5.4C11
1OLEDConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ5
1P1_VPP_JMPConnector_PinHeader_2.54mm:PinHeader_2x02_P2.54mm_VerticalJP4
1PolyfuseFuse:Fuse_0805_2012MetricF1
1RSTButton_Switch_SMD:SW_SPST_TL3342SW1
1SAOConnector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_VerticalJ7
1TestPointTestPoint:TestPoint_Pad_D3.0mmTP1
1Tin foil socketJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP7
1USRButton_Switch_SMD:SW_SPST_TL3342SW2
1VPConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ6

Questions

How big is the Relatively Universal ROM Programmer PCB?

It measures 68.8 × 53.6 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Relatively Universal ROM Programmer use?

149 parts, built around the ARDUINO UNO R3, 74HC573, MMBT3904 and MMBT3906. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Relatively Universal ROM Programmer KiCad files?

From the AndersBNielsen/Relatively-Universal-ROM-Programmer repository on GitHub, at the commit this page was made from: the board is hardware/RelativelyUniversalROMProgrammer.kicad_pcb and its schematic hardware/RelativelyUniversalROMProgrammer.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Relatively Universal ROM Programmer design in my own project?

Its repository publishes it under the GPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers99 × 53.3 mmPSLab, the printed circuit board in 3D

    PSLab

    fossasia/pslab-hardware

    PSLab Hardware Design and Schematics https://pslab.io

    199 parts1.7kApache-2.0
  • 4 layers304.8 × 330.2 mm2000ATX, the printed circuit board in 3D

    2000ATX

    jasonsbeer/Amiga-2000-EATX

    An Amiga 2000 PCB in the EATX form factor.

    614 parts200GPL-3.0
  • 6 layers160 × 100 mmAdrmu6layer, the printed circuit board in 3D

    Adrmu6layer

    marcoreps/ADRmu

    ADR1000 10V standard

    240 parts149
  • 6 layers304.8 × 243.8 mmAmigaPCI MainBoard, the printed circuit board in 3D

    AmigaPCI MainBoard

    AmigaPCI/AmigaPCI-MainBoard

    Amiga with Native PCI Bus

    748 parts135
  • 2 layers60.2 × 106.5 mmTiNRS - DuckTape, the printed circuit board in 3D

    TiNRS - DuckTape

    ThisIsNotRocketScience/Eurorack-Modules

    This is not Rocket Science presents: Eurorack modular synthesizer modules!

    262 parts87MIT
  • 2 layers84 × 85 mmHbr mk2-rxtx, the printed circuit board in 3D

    Hbr mk2-rxtx

    afiskon/hbr-mk2

    All HF bands QRP CW/SSB transceiver

    239 parts76MIT
  • 2 layers155 × 70 mmPayphone v1, the printed circuit board in 3D

    Payphone v1

    sdylewski/Analog-Redial

    A circuit board for old telephones to come back to life. Plug one or two phones in, and you can call the other phone, use bluetooth, connect to others via voip, and do a variety of other things with a plain old rotary…

    137 parts46