Device uploading
FPGA, console firmware, Doom application, and IWAD loading tools.
FPGA / Firmware / Doom
Device uploading
FPGA, console firmware, Doom application, and IWAD loading tools.
FPGA web flasher ULX3S US1 / JTAG
Program Hazard3-Doom from the browser
Uses WebUSB to drive the ULX3S FT231X JTAG interface directly. This first version programs FPGA SRAM from a Hazard3-Doom .bit file or an SVF file, so the image is temporary and is lost when the board powers off.
US1 USB connector.
Close fujprog, OpenOCD, and other programs using US1.
The browser derives or verifies the ECP5 target ID before programming.
Persistent SPI flash is intentionally not written by this first implementation. Verify browser/JTAG programming on both ULX3S 12F and 85F before enabling a permanent-flash workflow.
Console firmware uploader Local GDB / OpenOCD
Load the Hazard3 console firmware
(normally attached to FPGA bitstream file)Select hazard3-boot-monitor.elf. The local web server passes the ELF to the existing GDB loader, which halts Hazard3 through OpenOCD, writes and verifies the ELF sections, sets _start, and resumes the core.
web-server.py with the matching OpenOCD board.
4. Select hazard3-boot-monitor.elf and load it.
The firmware does not need a self-replacement listener for this path. OpenOCD and GDB load it through the Hazard3 debug module. The public GitHub Pages UI can use web/web-server.py as a loopback-only helper at 127.0.0.1:8000. A browser may ask for loopback/local-network permission. If the helper was started with --access-key, enter the same key above; the page keeps it only in memory and does not save it.
Doom H3IMG uploader UART / H3L
Load a Doom image over UART
Select a packaged .h3img image and send it directly to the resident monitor. The browser validates the H3IMG header and payload CRC32 before transfer. This loads SDRAM only; it does not modify the SD card.
The UART terminal may stay connected. During an H3IMG upload, the uploader temporarily owns UART writes while terminal output remains visible. Doom itself must be stopped and the resident monitor > prompt active. On ULX3S 12F, progress can reach 100% while the monitor is still copying and CRC-verifying the restart image; wait for H3L OK.
Doom IWAD uploader UART / H3W
Load a Doom IWAD over UART
Select a legally obtained .wad file and send it to the resident monitor's reserved SDRAM IWAD region. The browser validates the IWAD header, directory, lump bounds, filename, and CRC32 before transfer.
IWAD files are not included with Hazard3-Doom. Use a legally obtained IWAD. The selected memory profile must match the resident monitor (.h3img file) build because the H3W header contains the SDRAM load address.
Serial connection
Direct browser connection using the Web Serial API.
UART disconnected
Web Serial
Serial connection
Direct browser connection using the Web Serial API.
UART terminal
No serial port selected.
Hazard3-Doom controls
Convenience controls for the resident monitor. Line commands use the selected line ending; raw monitor keys are sent as one byte.
Monitor
SAO / I2C
I2CDriver GUI keys
Single-byte controls for the interactive i2c gui screen; no CR/LF is appended.
The custom command is saved only in this browser.