What rules does ROM play in Arduino?

and in MCU's in general ?

Flash is for program memory. RAM is for dynamic variables. EEPROM- is for saving data (non volatile).

But what is ROM ?

So why do we need ROM anyway? why the boot loader is not stored in the Flash ? I can't seems to understand the differences between them even after reading anything I could find in Google.

Arduino Docs has nothing about ROM, this word is not even mentioned once.

There is no ROM in normal Arduinos, the bootloader is stored in FLASH.

ROM is constant memory that gets programmed in the manufacturing process of the IC, so it is mainly used in big volume applications.

@gil22

The 'original' constant memory, was the ROM (Read Only Memory), which as it's name indicates you could read but not write to it.

This was followed by the EPROM (Erasable Programmable Read Only Memory) which allowed you to erase the contants with UV light and then, using a programmer, insert new code into it.

The modern versions are the EEPROM (Electrically Erasable Read Only Memory), which allows the contants to be erased and reprogrammed in situ. Flash is very similar to EEPROM.

Fof