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

71 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`.