Files
BarotraumaLuaProjects/atlas_os/docs/02-bus-protocol.md

3.8 KiB
Raw Permalink Blame History

02 — Протокол шины (Bus Protocol)

Между IOC ↔ CMC ↔ MMC обмен идёт по сигнальным проводам (пины MicroLua). Сообщения — короткие UTF-8 строки в формате:

OP|ARG1|ARG2|...|ARGn

Где:

  • OP — опкод (ASCII, регистрозависимый).
  • ARG* — аргументы, экранированные по правилу ниже.
  • Разделитель — | (pipe). Внутри аргументов | и \ экранируются как \| и \\.
  • Строка не должна превышать разумный лимит; контроллеры сами усекают при ошибках.

1. Направления и пины шины

Шина Контроллеры Выделенные пины CMC Назначение
CMD IOC ↔ CMC in_cmd, out_cmd ввод команд и вывод текста
MEM CMC ↔ MMC in_mem, out_mem запросы ФС и ответы
SEG MMC ↔ SEG* WE[i], RD[i], DATA прямой доступ к сегментам

2. Опкоды CMD (терминал)

Опкод Направление Аргументы Описание
OUT CMC → IOC text вывести текст на терминал
CLR CMC → IOC очистить экран (out[2]=1)
COL CMC → IOC R,G,B установить текущий цвет
IN IOC → CMC line пользователь ввёл строку

3. Опкоды MEM (файловая система)

Опкод Направление Аргументы Ответ Описание
STAT CMC → MMC path inode|mode|uid|gid|size метаданные файла
READ CMC → MMC path|offset|len data (Base64) чтение фрагмента
WRITE CMC → MMC path|offset|data OK|bytes или ERR|code запись
LS CMC → MMC dir name1|inode1|... список записей каталога
CHDIR CMC → MMC path OK|newcwd или ERR смена cwd (проверка прав)

Коды ошибок: EACCES, ENOENT, EEXIST, ENOSPC, EINVAL.

4. Прямой доступ SEG (MMC ↔ SEG)

MMC управляет сегментами напрямую по линиям WE[i], RD[i], DATA. Формат сообщений SEG-уровня — внутренний (не по шине), но общий принцип:

write_enable(i):   DATA <- encoded_block; pulse WE[i]
read(i):           pulse RD[i]; receive DATA

CMC никогда не касается SEG напрямую — только через MMC.

5. Тайминги и подтверждения

  • Каждый запрос шины требует подтверждения (ответ OK/ERR) в течение разумного числа кадров.
  • CMC может выполнять до одного активного запроса на шину одновременно (сериализация).
  • При отсутствии ответа — таймаут и ошибка ETIMEDOUT.

6. Сериализация и безопасность

  • Все строковые данные экранируются: |\|, \\\.
  • Base64 (или BMP-упаковка) гарантирует, что сжатые данные не содержат управляющих символов.
  • Проверяйте длину: при превышении 4096 символов — ошибка.

Подробности форматов inode, блоков и сжатия — в 03-memory-model.md и 04-filesystem.md.