OpenComputers/EEPROM
**EEPROM** — специальный чип с кодом, который вставляется в соответствующий слот в корпусе компьютера. Этот чип необходим всем типам компьютеров: компьютерам, серверам, планшетам, роботам и микроконтроллерам. Он содержит программу, которая выполняется сразу после старта компьютера. Например, стандартный чип **Lua BIOS** ищет файл `init.lua`

и запускает его, загружая операционную систему OpenOS. Таким образом, EEPROM выполняет роль BIOS в настоящем компьютере.

Чипы с данными можно копировать при помощи верстака. Для этого необходимо положить два чипа в верстак — на выходе будут два чипа с одинаковыми данными. Если один чип пустой, копироваться будет чип с данными. Если оба чипа имеют данные — копироваться будет первый из них.

После загрузки компьютера, чип можно вынуть, или заменить другим. Например, для того, чтобы запрограммировать новый чип, используя этот же компьютер.

Для программирования чипа вы можете воспользоваться командами его API или программой `flash.lua`

операционной системы OpenOS.

Объем данных, которые можно поместить на чип, имеет ограничение по размеру в 4 КБ (4096 байт).

Благодаря тому, что код загрузки компьютера (начиная с версии 1.4.2) не задан жестко модификацией, а вынесен в специльный чип, компьютеры получили способность загружаться не только с файловых систем OpenComputers, но и с других носителей информации. Например — с программы, переданной по сети, или с магнитной кассеты мода Computronics.

## Крафт

Ингредиенты | Процесс |
---|---|

Бумага + Микрочип (Уровень 1) + Транзистор + Кусочек золота + Красный факел |


## Lua BIOS

Это чип со стандартным кодом загрузки компьютера, который ищет файловую систему с файлом `init.lua`

(файл операционной системы OpenOS).

### Крафт

Ингредиенты | Процесс |
---|---|

EEPROM +Книга |


## API

Название компонента: `eeprom`


`get(): string`

— возвращает код, содержащийся в чипе

`set(data:string)`

— помещает код, переданный в виде строки, в чип.

`getLabel(): string`

— возвращает метку чипа.

`setLabel(data:string)`

— устанавливает новую метку.

`getSize(): number`

— возвращает объем данных основного раздела на чипе.

`getDataSize(): number`

— возвращает объем данных в дополнительном разделе чипа.

`getData():string`

— возвращает дополнительные данные чипа (строку с адресом загрузочной файловой системы компьютера).

`setData(data:string)`

— перезаписывает дополнительные данные чипа заданной строкой.

`getChecksum(): string`

— возвращает уникальную контрольную сумму чипа.

`makeReadonly(checksum:string)`

— делает чип с указанной контрольной суммой доступным только для чтения. Процесс необратим.

EEPROM содержит 2 раздела, основной (4096 байт) и дополнительный (256 байт). Основной раздел по умолчанию предназначен основной код, дополнительный — это область модифицируемой памяти, например в чип EEPROM (Lua BIOS) в дополнительный раздел пишется адрес загрузочного диска с операционной системой.

## Ссылки

- Туториал по установке и программированию EEPROM в микроконтроллере
- Туториал по созданию, программированию и отладке дронов