diff --git a/hw/riscv/esp32_c3.c b/hw/riscv/esp32_c3.c
index 47f7c00a78ada52df9283bdc00a19a3aad44c5eb..6d7f425da3ada6fbfd7241e2d0f37c82a81ba7fa 100644
--- a/hw/riscv/esp32_c3.c
+++ b/hw/riscv/esp32_c3.c
@@ -44,7 +44,7 @@ static const struct MemmapEntry {
 };
 
 /* Reset vector according to technical manual page 217 */
-static const hwaddr esp32_c3_entry = 0x40000400;
+// static const hwaddr esp32_c3_entry = 0x40000400;
 /* System I/O memory (TRM p. 91) */
 static const hwaddr esp32_c3_sysregs = 0x600C0000;
 static const hwaddr esp32_c3_sysregs_size = 4096;
@@ -99,9 +99,9 @@ static void esp32_c3_machine_state_init(MachineState *mstate)
 
     esp32_c3_setup_reset_vec();
 
-    if (mstate->firmware) {
-        // We don't have any (separate) firmware to load, as this is an MCU
-        error_report("This board can't load firmware");
+    if (!mstate->firmware) {
+        // Firmware is required for most programs, as they call directly into it
+        error_report("This board requires a firmware image to run");
         exit(1);
     }
 
@@ -194,6 +194,9 @@ static void esp32_c3_soc_state_realize(DeviceState *dev, Error **errp)
     memory_region_add_subregion_overlap(&sss->container,
                                         esp32_c3_clkcfg, &sss->clock, -1);
     create_unimplemented_device("riscv.esp32.c.sysregs", esp32_c3_sysregs, esp32_c3_sysregs_size);
+
+    /* Load boot ROM dump into emulated ROM */
+    riscv_load_firmware(ms->firmware, esp32_c3_memmap[ESP32_C3_IROM].base, NULL);
 }
 
 static void esp32_c3_soc_class_init(ObjectClass *klass, void *data)