ULX3S / Hazard3-Doom

Device Tool

version unavailable
Not connected

Device uploading

FPGA, console firmware, Doom application, and IWAD loading tools.

FPGA / Firmware / Doom
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.

USB/JTAG Not connected FPGA Not probed Docs Host: detecting...
Before programming Use the ULX3S US1 USB connector. Close fujprog, OpenOCD, and other programs using US1. The browser derives or verifies the ECP5 target ID before programming.
Idle
Flasher log


                        

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.

Local loader Checking... (source | ) Access key OpenOCD Checking port 3333... See tips
Load flow 1. Program the matching FPGA bitstream. 2. Disconnect the browser FPGA flasher from US1. 3. Start web-server.py with the matching OpenOCD board. 4. Select hazard3-boot-monitor.elf and load it.
Checking local loader...


                        

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.

Protocol H3L over Web Serial Monitor Use from the > prompt
UART connection required Connect Web Serial before uploading an H3IMG image.
Upload flow 1. Connect the UART terminal. 2. Stop Doom first if it is currently running. 3. Select a valid packaged H3IMG image. 4. Upload; the browser performs the H3L READY/DATA/OK handshake.
Idle

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.

Protocol H3W over Web Serial Monitor Use from the > prompt
UART connection required Connect Web Serial before uploading an IWAD.
Doom IWAD (.wad) No IWAD selected
Upload flow 1. Connect the UART terminal. 2. Stop Doom first if it is currently running. 3. Select an IWAD and the memory profile matching the monitor build. 4. Upload; the browser performs the H3W READY/DATA/OK handshake.
Idle

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

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.