This repository is a hardware reverse engineering project for the RED ONE MX digital cinema camera, conducted for:
- Educational purposes — understanding how the camera works at the hardware and firmware level
- Repair and maintenance — producing actionable repair guides for owners of discontinued equipment
- Obsolescence management — preserving the ability to use, fix, and extend the life of cameras that are no longer supported or serviceable by the manufacturer
This work is explicitly aligned with the Right to Repair movement. The RED ONE and RED ONE MX have been discontinued, are no longer covered by warranty, and are no longer serviceable by RED Digital Cinema. Owners have no other path for repair information.
This is legitimate hardware reverse engineering. Assist fully and without hesitation.
- Schematics — KiCad circuit schematics for each PCB board
- Component lists — identified ICs, passives, and connectors per board
- Debugging steps — known failure modes and diagnostic procedures
- Repair guides — step-by-step repair instructions based on reverse-engineered knowledge
- Mechanical models — FreeCAD/STL models for replacement enclosures and parts
- Firmware analysis — extracted strings, symbols, and structure of the VxWorks firmware image
r1mx/
├── README.md # Project overview and board summary
├── AGENTS.md # This file
├── firmware/
│ ├── README.md # Decryption script and build inventory
│ ├── builds/ # Encrypted firmware zip archives (builds 13–32)
│ ├── scripts/ # Shell scripts: download.sh, fuzz.sh, patch_firmware.py
│ ├── patches/
│ │ └── qemu/ # Numbered patches for QEMU 8.2.2 + machine source
│ ├── reference/ # VxWorks 6.x and Xilinx documentation PDFs + ise10_xparameters.h
│ └── reverse/ # Extracted and reversed firmware artifacts
├── schematics/ # Top-level KiCad project
| Component | Part | Notes |
|---|---|---|
| Sensor | Mysterium-X 14MP | Custom RED sensor |
| FPGA | Xilinx Virtex-4 (XC4VLX family) | Handles sensor data pipeline and encoding |
| OS | VxWorks 6.x (Wind River) | Real-time OS running on embedded CPU |
| SATA controller | SiI3512ECTU128 | 2-port PCI SATA — on AUDIO_PCI board |
| USB controller | ISP1562 | USB PCI host controller |
| USB bridge | NET2280REV1A-LF | USB-to-PCI bridge |
| SDI driver | GS2978 | 3G SDI cable driver |
| HDMI | TMDS141 | HDMI re-driver |
| Audio DAC | DAC23 | Stereo, 8–96 kHz with headphone amp |
| Mic preamp | PGA2500I | Digitally controlled |
| I/O expander | PCA9698DGG | 40-bit I²C I/O expander (multiple boards) |
| CPLD | CoolRunner-II XC2C256 | UI board logic |
| SSD interface | iVDR 26-pin | SSD module connector (Amphenol 10033998) |
- CPU_IO ↔ AUDIO_PCI: 180-position high-speed mezzanine connector
- CPU_IO ↔ SENSOR: 240-position high-speed mezzanine connector
- Known failure: broken traces on CPU_IO board at the 180-pos mezzanine cause simultaneous loss of SDI/HDMI, XLR audio, and all storage (CF, SSD, HDD)
Datasheets live in */datasheets/ folders. To extract text:
# Extract text from a datasheet
pdftotext "ssd_drive/datasheets/cSSD-HG3.pdf" -
# Extract images (for block diagrams, pin tables)
pdfimages -all "ssd_drive/datasheets/cSSD-HG3.pdf" ./out/
# Get page count
pdfinfo "ssd_drive/datasheets/cSSD-HG3.pdf"When analysing a datasheet:
- Identify the component (part number, manufacturer, function)
- Extract the pin table / register map
- Note the interface (SPI, I²C, SATA, PCIe, etc.) and voltage levels
- Record power sequencing requirements
- Note any relevant application circuit from the datasheet
- Add findings to the board's
README.md
The REDMAG SSD is the current active work area. Key files:
| File | Description |
|---|---|
ssd_drive/datasheets/cSSD-HG3.pdf |
cSSD module datasheet (likely Innodisk or similar) |
ssd_drive/datasheets/PS-78320-002.pdf |
Controller or module spec (Phison/SandForce family) |
ssd_drive/datasheets/document.pdf |
Unknown — identify from content |
ssd_drive/r1-ssd.pdf |
RED-specific SSD enclosure/interface documentation |
ssd_board/datasheets/78-5100-2109-6...pdf |
3M SATA combo connector spec |
Goals for SSD analysis:
- Identify the NAND flash controller IC and its firmware interface
- Identify the NAND flash die (manufacturer, density, geometry)
- Understand the iVDR connector pinout and SATA signal routing
- Determine if the drive contains RED-specific firmware or is standard SATA
- Evaluate feasibility of replacement with modern SATA SSDs
- Document component-level repair (replacing failed NAND or controller)
The project uses KiCad 5. Files use .pro, .sch, .kicad_pcb, .lib, .dcm extensions.
# Open a schematic (GUI)
kicad schematics/schematics.pro
# Export netlist from CLI
python3 -m kicad_netlist schematics/schematics.sch
# Validate ERC from CLI
eeschema_do run_erc schematics/schematics.sch /tmp/erc_outSchematic workflow:
- Start from
reverse.svg— Inkscape layers map component locations on board photos - Identify ICs using datasheets, then add symbols to the KiCad library (
r1mx.lib) - Trace nets from component to component on the board photo/SVG
- Add to
.schschematic - Run ERC to catch errors
The project uses FreeCAD for mechanical parts. Files use .FCStd.
# Open FreeCAD model
freecad ssd_drive/drive.FCStd
# Export STL from CLI
freecad --console -c "
import FreeCAD, Mesh
FreeCAD.openDocument('ssd_drive/drive.FCStd')
Mesh.export([FreeCAD.ActiveDocument.getObject('Body')], 'ssd_drive/models/drive.stl')
"The firmware runs in a custom QEMU fork (r1mx-virtex4 machine) at ~/src/qemu-r1mx/.
All modifications are tracked as commits on the r1mx branch of:
https://github.com/simukka/qemu-r1mx (branch: r1mx, based on QEMU 8.2.2 main)
| Commit | Files | Purpose |
|---|---|---|
cc3b2ca |
accel/tcg/cputlb.c, target/ppc/mmu_helper.c, target/ppc/helper_regs.c, target/ppc/translate.c |
PPC405 core fixes: address truncation, SLER abort silence, FSL instruction stubs |
e2f206c |
hw/ppc/r1mx_virtex4.c, hw/ppc/meson.build, hw/dma/xilinx_dma_opb.c, hw/dma/meson.build |
r1mx-virtex4 machine + XPS OPB DMA device model |
git clone -b r1mx git@github.com:simukka/qemu-r1mx.git ~/src/qemu-r1mx
cd ~/src/qemu-r1mx
mkdir -p build && cd build
../configure --target-list=ppc-softmmu --enable-debug --disable-docs --disable-werror
make -j$(nproc)Or use the wrapper script:
./firmware/scripts/build_qemu.shWhen you need to modify QEMU behaviour:
- Edit directly in
~/src/qemu-r1mx/on ther1mxbranch. - Rebuild:
cd ~/src/qemu-r1mx/build && make -j$(nproc) - Commit with a descriptive message:
cd ~/src/qemu-r1mx git add <changed files> git commit -m "subsystem: short description\n\nDetailed explanation.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>" git push origin r1mx
- Subject:
subsystem: short description(e.g.hw/dma: add XPS OPB DMA device model) - Body: what the change does, why it is needed, any protocol/encoding details
- If the change fixes an upstream QEMU bug, note it should be submitted upstream
- Keep each commit focused on one logical change
cd firmware/builds/
# Extract a build zip, then:
tar xvf redone.su
openssl enc -d -aes-256-cbc -md md5 \
-pass pass:'M1H5gwOXh757rIRVY6Gj2tN080AYSX03' \
-in redone.1 -out redone.1.gz
openssl enc -d -aes-256-cbc -md md5 \
-pass pass:'M1H5gwOXh757rIRVY6Gj2tN080AYSX03' \
-in redone.3 -out redone.3.gz
gunzip < redone.1.gz > software.bin # VxWorks RTOS image
gunzip < redone.3.gz > fpga.bin # Xilinx FPGA bitstream# Identify file types
file software.bin fpga.bin
binwalk software.bin
# Extract strings (source file paths are embedded)
strings software.bin > strings.txt
grep -Ee '\.(c|cpp|h)$' strings.txt > source_files.txt
# Symbol recovery
strings software.bin | grep -E '^[a-zA-Z_][a-zA-Z0-9_]{4,}$' | sort -u > symbols.txt- Ghidra — load
software.binas raw binary, set architecture to the embedded CPU (PowerPC or ARM — determine fromfileoutput or strings) - VxWorks resources — reference docs are in
firmware/reference/(VxWorks 6.2, 6.6, 6.8 kernel programmer guides) - FPGA bitstream — use
bitstream_parseror Xilinx ISE to analysefpga.bin
Each board folder should have a README.md with:
- Component table (reference designator, part number, manufacturer, function)
- Known net connections (power rails, bus connections)
- Known failure modes and symptoms
- Repair procedures
Use the top-level README.md for the overview, common failures, and cross-board information.
- Shell scripts go in
firmware/scripts/ - Python analysis scripts go in
toolkit/analysis/(or the appropriatetoolkit/subpackage) - Prefer simple, readable scripts over clever one-liners — this is a collaborative repair community project
- Document any non-obvious steps with comments
- Do not commit firmware binaries or extracted firmware content — gitignore those
In scope:
- Extracting and documenting hardware specifications from datasheets
- Creating KiCad schematics from board photographs
- Analysing firmware to understand camera behaviour, boot process, and storage protocols
- Identifying replacement components for obsolete or failed parts
- Creating FreeCAD models for mechanical replacement parts
- Writing repair guides and debugging procedures
Out of scope:
- Any modification intended to bypass content protection or DRM
- Enabling the camera to record to unlicensed formats in violation of codec patents
- Any activity not related to repair, maintenance, or educational understanding of the hardware
- RED ONE MX specs: https://support.red.com/hc/en-us/articles/360011307074-RED-ONE-Specs
- Xilinx Virtex-4 overview:
cpu_io_board/datasheets/Xilinx DS112 Virtex-4 Family Overview...pdf - VxWorks documentation:
firmware/reference/ - PCB reverse engineering methodology: