153 lines
5.2 KiB
Markdown
153 lines
5.2 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 символа |
|
|
|
|
## Полная схема
|
|
|
|
```
|
|
Терминал (Keyboard/Button) Терминал (Display)
|
|
│ text ▲
|
|
▼ │ text
|
|
┌──────────┐ ┌──────────┐ │ clear
|
|
│ │─────────▶ │──────┤ color
|
|
│ IOC │ IN|cmd │ CMC │ │
|
|
│ │◀────────│ │◀─────┤
|
|
└──────────┘ OUT|text│ │ 1 │
|
|
▲ clear=1 │ │◀─────┤
|
|
│ R,G,B └────▲────┘ R,G,B│
|
|
│ │ │
|
|
│ LS|path │
|
|
│ READ|... │
|
|
│ │ │
|
|
│ ┌────▼────┐ │
|
|
│ │ │ │
|
|
│ │ MMC │ │
|
|
│ │ │ │
|
|
│ └──┬──┬───┘ │
|
|
│ │ │ │
|
|
│ data │ │ write(1) │
|
|
│ ▼ ▼ │
|
|
│ ┌────────┐ │
|
|
│ │ Memory │ │
|
|
│ │ 8192 │ │
|
|
│ └───┬────┘ │
|
|
│ │ │
|
|
└──────────────────┴────────────┘
|
|
```
|
|
|
|
## Соединения проводом
|
|
|
|
### IOC ↔ Терминал
|
|
|
|
| Пин IOC | → / ← | Пин Terminal | Назначение |
|
|
|---|---|---|---|
|
|
| IOC.out[1] | → | Display.in (text) | текст на экран |
|
|
| IOC.out[2] | → | Display.in (clear) | очистка (1) |
|
|
| IOC.out[3] | → | Display.in (color) | цвет R,G,B |
|
|
| IOC.in[1] | ← | Keyboard.out (text) | ввод пользователя |
|
|
|
|
### IOC ↔ CMC
|
|
|
|
| Пин IOC | → / ← | Пин CMC | Назначение |
|
|
|---|---|---|---|
|
|
| IOC.out[4] | → | CMC.in[1] | команда `IN|cmd` |
|
|
| CMC.out[1] | → | IOC.in[2] | текст `OUT|text` |
|
|
| CMC.out[2] | → | IOC.in[3] | очистка (1) |
|
|
| CMC.out[3] | → | IOC.in[4] | цвет `R,G,B` |
|
|
|
|
### CMC ↔ MMC
|
|
|
|
| Пин CMC | → / ← | Пин MMC | Назначение |
|
|
|---|---|---|---|
|
|
| CMC.out[4] | → | MMC.in[1] | запрос `OP|args` |
|
|
| MMC.out[1] | → | CMC.in[2] | ответ `OK|seq|...` |
|
|
|
|
### MMC ↔ Memory
|
|
|
|
| Пин MMC | → / ← | Пин Memory | Назначение |
|
|
|---|---|---|---|
|
|
| MMC.out[5] | → | Memory.in[1] | данные для записи |
|
|
| MMC.out[6] | → | Memory.in[2] | сигнал записи (1) |
|
|
| Memory.out[1] | → | MMC.in[3] | чтение данных |
|
|
|
|
## Протокол шины
|
|
|
|
### IOC → CMC (CMD)
|
|
|
|
```
|
|
IN|команда
|
|
```
|
|
|
|
### CMC → IOC (CMD)
|
|
|
|
```
|
|
OUT|текст — вывести текст
|
|
1 на out[2] — очистить экран
|
|
R,G,B на out[3] — установить цвет
|
|
```
|
|
|
|
### CMC → MMC (MEM)
|
|
|
|
```
|
|
STAT|путь — метаданные
|
|
READ|путь|смещение|длина — чтение файла
|
|
LS|путь — список каталога
|
|
CHDIR|путь — смена директории (проверка)
|
|
WRITE|путь|смещение|данные — запись (пока EROFS)
|
|
```
|
|
|
|
### MMC → CMC (MEM)
|
|
|
|
```
|
|
OK|seq|данные
|
|
ERR|seq|код_ошибки
|
|
```
|
|
|
|
Коды ошибок: `ENOENT`, `EACCES`, `ENOTDIR`, `EISDIR`, `EROFS`, `EINVAL`
|
|
|
|
## Последовательность запуска
|
|
|
|
1. Загрузить код MMC.lua в контроллер MMC
|
|
2. Загрузить код CMC.lua в контроллер CMC
|
|
3. Загрузить код IOC.lua в контроллер IOC
|
|
4. Соединить провода по схеме выше
|
|
5. При первом запуске MMC инициализирует пустую ФС и запишет в Memory
|
|
6. Подать сигнал на Terminal — появится приглашение
|
|
|
|
## Пример сессии
|
|
|
|
```
|
|
> ls
|
|
home
|
|
etc
|
|
> ls /home/captain
|
|
readme.txt
|
|
> cat /home/captain/readme.txt
|
|
Welcome to AtlasOS v2.0!
|
|
> cd /home/captain
|
|
/home/captain
|
|
> status
|
|
AtlasOS v2.0 | User: root(0) | CWD: /home/captain
|
|
> color 0 255 128
|
|
Color set to 0,255,128
|
|
> help
|
|
AtlasOS v2.0 commands:
|
|
help Show 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
|
|
```
|