3.8 KiB
3.8 KiB
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.