
Security News
Open Source CAI Framework Handles Pen Testing Tasks up to 3,600ร Faster Than Humans
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600ร faster than humans.
Firestarter is an application for the Relatively-Universal-ROM-Programmer.
Get one here Relatively-Universal-ROM-Programmer.
Arduino PlatformIO project is found here Firestarter.
Firestarter in action watch the video.
Anders S Nielsen creator of the Relatively-Universal-ROM-Programmer talks about Firestarter watch the video.
Support and discussions forum at Discord.
To install the Firestarter Python program and the firmware on the Arduino, follow the steps below:
Use the package manager pip to install Firestarter.
pip install firestarter
This command installs the Firestarter application, which allows you to interact with EPROMs using the Relatively-Universal-ROM-Programmer.
How to enable auto complete for firestarter, see: auto complete
First, a few things to remember.
To install the firmware on the Arduino, use the fw command with the --install
option. This command installs the latest firmware version on the Arduino.
Firestarter is using avrdude to install the firmware. avrdude is avalible as a separate installer or via Arduino IDE.
-p, --avrdude-path <path>
: Full path to avrdude (optional), set if avrdude is not found.-c, --avrdude-config-path <path>
: Full path to avrdude config file (optional), may be needed if avrdude cannot find its default configuration (e.g., with older versions like 6.3 or non-standard installations).--port <port>
: Serial port name (optional), set if the Arduino is not found.-b, --board <board>
: Microcontroller board (optional), defaults to uno, other supported boards leonardo.-f, --force
: Will install firmware even if the version is the same.The fw --install
command installs the latest firmware on the Arduino. The process typically involves the following steps:
avrdude
using the --avrdude-path
option if it is not found automatically.--port
option.avrdude
.To install the firmware on the Arduino UNO, you can run:
firestarter fw --install
To install the firmware on the Arduino Leonardo, you can run:
firestarter fw --install --board leonardo
Firestarter provides several commands to interact with EPROMs using the Relatively-Universal-ROM-Programmer. Available commands: read, write, blank, erase, list, search, info, vpp, vcc, fw, config
firestarter [options] {command}
-h, --help
: Show help message-v, --verbose
: Enable verbose mode--version
: Show the Firestarter version and exit.Reads the content from an EPROM.
firestarter read <eprom> [output_file]
<eprom>
: The name of the EPROM.[output_file]
: (Optional) Output file name, defaults to <EPROM_NAME>.bin
.The read command reads the data from the specified EPROM and optionally saves it to a file. The process typically involves the following steps:
<EPROM_NAME>.bin
.Writes a binary file to an EPROM.
firestarter write <eprom> <input_file> [options]
<eprom>
: The name of the EPROM.<input_file>
: Input file name.-b, --ignore-blank-check
: Ignore blank check before write (and skip erase).-f, --force
: Force write, even if the VPP or chip ID don't match.-a, --address <address>
: Write start address in decimal or hexadecimal.The write command writes the contents of a specified binary file to the EPROM. The process typically involves the following steps:
--ignore-blank-check
option.--ignore-blank-check
is used.Checks if an EPROM is blank.
firestarter blank <eprom>
<eprom>
: The name of the EPROM.Erases an EPROM, if supported.
firestarter erase <eprom>
<eprom>
: The name of the EPROM.Lists all EPROMs in the database.
firestarter list [options]
-v, --verified
: Only shows verified EPROMs.Searches for EPROMs in the database.
firestarter search <text>
<text>
: Text to search for.Displays information about an EPROM.
firestarter info <eprom>
<eprom>
: EPROM name.-c, --config
: Show EPROM configuration data in JSON format.The info command retrieves and displays detailed information about the specified EPROM. This information typically includes:
Displays the VPP voltage.
firestarter vpp
Displays the VCC voltage.
firestarter vcc
Checks or installs the firmware version.
firestarter fw [options]
-i, --install
: Try to install the latest firmware. (Do this without a chip in the socket or without the shield attached)-p, --avrdude-path <path>
: Full path to avrdude (optional), set if avrdude is not found.--port <port>
: Serial port name (optional).-c, --avrdude-config-path <path>
: Full path to avrdude config file (optional).-b, --board <board>
: Microcontroller board (optional, defaults to uno).-f, --force
: Install firmware even if the version matches.Shows current configuration values. Use options to set specific values.
firestarter config [options]
-rev, <revision>
: WARNING Overrides hardware revision (0-2), only use with HW mods. -1 disables override.-r1, --r16 <resistance>
: Set R16 resistance, resistor connected to VPE.-r2, --r14r15 <resistance>
: Set R14/R15 resistance, resistors connected to GND.To read an EPROM named W27C512 and save the output to output.bin:
firestarter read W27C512 output.bin
To write a binary file input.bin to an EPROM named W27C512:
firestarter write W27C512 input.bin
To get information about an EPROM named W27C512:
firestarter info W27C512
This command will output detailed information about the W27C512 EPROM, showing package layout and the jumper configuration for the RURP shield.
Eprom Info
Name: W27C512
Manufacturer: WINBOND
Number of pins: 28
Memory size: 0x10000
Type: EPROM
Can be erased: True
Chip ID: 0xda08
VPP: 12v
Pulse delay: 100ยตS
28-DIP package
-----v-----
A15 -| 1 28 |- VCC
A12 -| 2 27 |- A14
A7 -| 3 26 |- A13
A6 -| 4 25 |- A8
A5 -| 5 24 |- A9
A4 -| 6 23 |- A11
A3 -| 7 22 |- OE/Vpp
A2 -| 8 21 |- A10
A1 -| 9 20 |- CE
A0 -| 10 19 |- D7
D0 -| 11 18 |- D6
D1 -| 12 17 |- D5
D2 -| 13 16 |- D4
GND -| 14 15 |- D3
-----------
Jumper config
JP1 5V [ โ(โ โ)] A13 : A13
JP2 5V [(โ โ)โ ] A17 : VCC
JP3 28pin [ โ โ โ ] 32pin : NA
By adding a file named database.json
in the .firestarter folder under the home directory, it is possible to overide Eprom configurations or add new Eproms in the Firestarter database.
To overide an Eprom configuration extract the configuration for the intended Eprom with the info config command, ex: firestarter info W27C512 -c
and the configuration will be printed.
W27C512 config:
{
"WINBOND": [
{
"name": "W27C512",
"pin-count": 28,
"can-erase": true,
"has-chip-id": true,
"chip-id": "0x0000da08",
"pin-map": 16,
"protocol-id": "0x07",
"memory-size": "0x10000",
"type": "memory",
"voltages": {
"vpp": "12"
},
"pulse-delay": "0x0064",
"flags": "0x00000078",
"verified": true
}
]
}
To overide the pulse-delay
copy the configuration into the database.json
in the .firestarter folder and remove all fields that aren't relevant to the change except for the manufacturer name and the Eprom name, ex:
{
"WINBOND": [
{
"name": "W27C512",
"pulse-delay": "0x0064"
}
]
}
By adding a file named pin-maps.json
in the .firestarter folder under the home directory, it is possible to overide a pin map or add new pin map that aren't existing.
To overide or add a new pin map use the info config command, ex: firestarter info W27C512 -c
to get a starting point.
W27C512 pin map:
{
"28": {
"16": {
"address-bus-pins": [
10, 9, 8, 7, 6, 5, 4, 3, 25, 24, 21, 23, 2, 26, 27, 1
]
}
}
}
The top level key ("28"
) refers to the number of pins for the Eprom and the sub-key ("16"
) is the pin-map
in the configuration data for an Eprom.
Valid fields:
address-bus-pins
is an array with the pin numbers from the Eprom pin layout, starts with least significant address pin (A0) and added in order to the most significant address pin (A0,A2,...Ax).rw-pin
Optional, if a read/write or a program enable pin is pressent rw-pin
must be set to the pin layout number.vpp-pin
Optional, if the Eprom needs programming voltage (Vpp) on pin 1 vpp-pin
must be set to 1.Please report back new or changed configurations to Firestarter. Create an Issue where you describe the added Eprom or the changes that are done and add the json configurations from the database.json and pin-maps.json that are made.
Some EPROMs, especially older 24-pin types or those adapted from other packages, require the programming voltage (VPP) or have or not using the OE (Output Enable) pin on a pin different from the standard locations the Firestarter hardware shield expects.
When an EPROM's VPP pin doesn't match these expectations (like the M2716 needing VPP on its Pin 21) or the OE is omitted, you need two things:
The configuration requires adding entries to two files in your .firestarter
user directory: database.json
(for the EPROM definition) and pin-maps.json
(for the physical pin connections of the adapter).
database.json
firestarter info M2716 -c
).database.json
file, add a new entry under the appropriate manufacturer (e.g., "INTEL").M2716-adapter
).pin-count
: Use the pin count of the adapter's socket that plugs into the programmer (usually 28 or 32). For the M2716 adapter example, this is 28
.pin-map
ID: Create a new, unique identifier for this adapter's pin mapping. This ID links this definition to the corresponding map in pin-maps.json
. In the example, 2716
is used.protocol-id
, memory-size
, type
, voltages
(ensure VPP voltage is correct!), pulse-delay
, and flags
from the original EPROM definition. Adjust can-erase
and has-chip-id
as needed for the specific chip.Example (database.json
entry for M2716-adapter):
{
"INTEL": [
{
"name": "M2716-adapter", // Unique name for the adapter setup
"pin-count": 28, // Pin count of the adapter socket plugging into the programmer
"can-erase": false,
"has-chip-id": false,
"pin-map": 2716, // Unique ID linking to pin-maps.json
"protocol-id": "0x0b", // Copied from original M2716
"memory-size": "0x800", // Copied from original M2716
"type": "memory",
"voltages": {
"vpp": "25" // VPP required by the M2716
},
"pulse-delay": "0x01f4", // Copied from original M2716
"flags": "0x00000048", // Copied from original M2716
"verified": false
}
]
}
pin-maps.json
pin-count
of your adapter socket (e.g., "28"
).pin-map
ID you created in database.json
(e.g., "2716"
).address-bus-pins
: List the programmer socket pins (the pins on the 28-pin ZIF socket in this example) that are connected to the EPROM's address lines (A0, A1, A2...) through the adapter. The order must be A0 first, then A1, A2, etc."vpp-pin": 1
. This tells Firestarter to control VPP using its standard VPP circuitry connected to Pin 1 of its socket. This is the case in the M2716-adapter example.vpp-pin
entry here. Firestarter would likely use the OE pin for VPP control based on the protocol-id
(like 0x0b
).rw-pin
(If Applicable): If the EPROM has a Write Enable (WE) or Program (PGM) pin, add rw-pin
and set its value to the programmer socket pin connected to the EPROM's WE/PGM pin via the adapter.Example (pin-maps.json
entry for M2716-adapter):
(This adapter routes VPP from the programmer's Pin 1 to the EPROM's Pin 21)
{
"28": {
"2716": { // Matches the pin-map ID from database.json
"address-bus-pins": [
10, 9, 8, 7, 6, 5, 4, 3, 25, 24, 21 // Programmer socket pins for A0-A10 via adapter
],
"vpp-pin": 1 // Tells Firestarter to use Pin 1 on its socket for VPP control
}
// ... other pin maps for 28-pin sockets ...
}
// ... other pin counts like "24", "32" ...
}
After saving these changes to your user database.json
and pin-maps.json
files, you can now use the adapter definition directly with Firestarter:
firestarter write M2716-adapter my_rom_file.bin
firestarter read M2716-adapter backup.bin
firestarter blank M2716-adapter
Firestarter will use the M2716-adapter
definition, look up the pin-map
ID 2716
under the 28
-pin section in pin-maps.json
, and correctly control the address lines and apply VPP using Pin 1 of its own socket, which the physical adapter then routes to the correct pin on the M2716 EPROM.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
FAQs
EPROM programmer software for the Relatively Universal ROM Programmer
We found that firestarter demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600ร faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.
Security News
CVEForecast.org uses machine learning to project a record-breaking surge in vulnerability disclosures in 2025.