# Схема соединений AtlasOS v2.0 ## Компоненты | Компонент | Кол-во | Назначение | |---|---|---| | MicroLua (IOC) | 1 | I/O Controller — терминал | | MicroLua (CMC) | 1 | Command Controller — shell | | MicroLua (MMC) | 1 | Memory/FS Controller — ФС | | Terminal | 1 | текстовый дисплей | | Memory | 1 | хранилище 8192 символа | ## Распиновка и соединения ### IOC — I/O Controller ``` in[1] ← Terminal (текстовый ввод) in[2] ← CMC.out[1] (текст "OUT|...") in[3] ← CMC.out[2] (очистка, 1) in[4] ← CMC.out[3] (цвет "R,G,B") out[1] → Terminal (текст на экран) out[2] → Terminal (очистка) out[3] → Terminal (цвет "R,G,B") out[4] → CMC.in[1] (команда "IN|...") ``` ### CMC — Command Controller ``` in[1] ← IOC.out[4] (команда "IN|...") in[2] ← MMC.out[1] (ответ ФС "OK|seq|..." / "ERR|seq|...") out[1] → IOC.in[2] (текст "OUT|...") out[2] → IOC.in[3] (очистка, 1) out[3] → IOC.in[4] (цвет "R,G,B") out[4] → MMC.in[1] (запрос ФС "OP|...") ``` ### MMC — Memory/FS Controller ``` in[1] ← CMC.out[4] (запрос ФС "OP|...") in[3] ← Memory.out[1] (чтение данных) out[1] → CMC.in[2] (ответ ФС "OK|seq|..." / "ERR|seq|...") out[5] → Memory.in[1] (запись данных) out[6] → Memory.in[2] (сигнал записи, 1) ``` ### Memory ``` in[1] ← MMC.out[5] (данные для записи) in[2] ← MMC.out[6] (сигнал записи, 1) out[1] → MMC.in[3] (хранимое значение) ``` ## Формат вывода терминала Терминал: 72 символа × 17 строк. Вывод строится очередью — одна строка за кадр. Приглашение ввода: ``` root /path$ команда_пользователя <результат команды> ``` Ошибки отображаются красным цветом. Свободная память — `status`. ## Протокол шины ### IOC → CMC (CMD) ``` IN|команда_и_аргументы ``` Пример: `IN|ls /home`, `IN|cat readme.txt` ### CMC → IOC (три отдельных пина) out[1] — текст: `OUT|текст` out[2] — очистка: `1` out[3] — цвет: `R,G,B` Контроллер IOC разбирает эти три пина независимо. ### CMC → MMC (MEM — запросы) | Опкод | Формат | Описание | |---|---|---| | `LS` | `LS|путь` | список каталога | | `READ` | `READ|путь|смещение|длина` | чтение файла | | `STAT` | `STAT|путь` | метаданные inode | | `CHDIR` | `CHDIR|путь` | смена рабочего каталога (проверка `x`) | | `STATFS` | `STATFS` | статистика памяти: `total\|used` | | `WRITE` | `WRITE|путь|...` | запись (пока readonly — EROFS) | ### MMC → CMC (MEM — ответы) Успех: `OK|seq|данные` Ошибка: `ERR|seq|код` Коды: `ENOENT`, `EACCES`, `ENOTDIR`, `EISDIR`, `EROFS`, `EINVAL` Поле `seq` — монотонный счётчик (позволяет CMC отличить новый ответ от старого). ## Команды CMC | Команда | Аргументы | Описание | |---|---|---| | `help` | — | список команд | | `echo` | текст | вывести текст | | `clear` | — | очистить экран | | `color` | R G B | установить цвет (0-255) | | `status` | — | система + свободная память | | `ls` | `[-a] [путь]` | список файлов; `-a` включая `.` и `..` | | `cat` | путь | содержимое файла | | `cd` | `[путь]` | сменить каталог; без аргумента → `/` | | `stat` | путь | метаданные файла/каталога | Пути могут быть абсолютные (`/home/file.txt`) или относительные (`file.txt` — относительно `cwd`). ## Последовательность запуска 1. Загрузить код **MMC.lua** → старт, чтение Memory; если пусто — инициализация ФС по умолчанию 2. Загрузить код **CMC.lua** → старт, ожидание команд 3. Загрузить код **IOC.lua** → старт, ожидание ввода 4. Соединить провода по схеме 5. Ввод с клавиатуры → отобразится приглашение `root />` ## Пример сессии ``` root /> help AtlasOS v2.0: help This help echo Echo text clear Clear screen color Set color R G B status System status ls List directory [path] cat Show file content cd Change directory [path] stat Show file metadata root /> status AtlasOS v2.0 User: root(0) CWD: / Mem: 7900/8192 free root /> cat /home/captain/readme.txt Welcome to AtlasOS v2.0! root /> cd /home/captain /home/captain root /home/captain$ ls readme.txt root /home/captain$ color 0 255 128 Color set to 0,255,128 root /home/captain$ cat nonexistent nonexistent: No such file or directory (красным) root /> unknown Unknown: unknown. Try 'help'. (красным) ```