     if mode == 3 { return 0xFF; }
 
     return *(vram + (address & 0x1FFF));
-  }
-
-  // External RAM: $A000 – $BFFF
-  if (address & 0xF000) <= 0xB000 {
-    printf("warn: unhandled read from external ram: $%04X\n", address);
-    return 0xFF;
   }
 
   // Work RAM: $C000 – $DFFF

  } else {
    0;
  }) * 1024;

  // Destination Code
  let dst_code = *(rom + 0x014A);

    free(rom);
  }

  // Free External ROM (if needed)
  if eram != 0 as *uint8 {
    free(eram);
  }

  // Allocate space in ROM
  rom = malloc(length);

  // Read file into ROM
  fread(rom, 1, length, stream);

  // Allocate space in external RAM
  let eram_size = rom_get_ext_ram_size();
  if eram_size > 0 {
    eram = malloc(size_t(eram_size));

    // Zero out space
    memset(eram, 0, size_t(eram_size));
  }
}

def rom_get_ext_ram_size(): uint16 {
  let ext_ram_size_code = *(rom + 0x149);

  return (if ext_ram_size_code == 0x01 {
    2;
  } else if ext_ram_size_code == 0x02 {
    8;
