163 lines
5.4 KiB
Markdown
163 lines
5.4 KiB
Markdown
# Схема соединений 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'. (красным)
|
|
```
|