С "умным и послушным" помощником, ИИ [ai kimi k3 chat], проект эмулятора троичной цифровой машины СЕТУНЬ из 1958 года сдвинулся с места!
Автоматически была создана Arduino библиотека для модуля ESP32-C3 (RISC-V) и примеры использования. Требуется проверка и отладка.
# EmulatorSetun1958 — Arduino Library (v2.12)
Arduino library emulator of the Soviet ternary computer **"Setun-1958"** — the world's first serial ternary computer, developed at Moscow State University under the leadership of N.P. Brusentsov and S.L. Sobolev.
⌨ Команды интерпретатора Serial CLI
Управление эмулятором
| Команда | Сокр. | Описание |
| —------— | —----— | —-----------------------— |
| `help` | `h`, `?` | Справка по всем командам |
| `reset` | — | Сброс машины |
| `begin` | `b` | Начать выполнение |
| `run` | `r` | Запуск в непрерывном режиме |
| `step [N]` | `s [N]` | Выполнить N шагов |
| `pause` | `p` | Приостановить |
| `reg` | `rg` | Вывести регистры |
| `version` | `v` | Версия эмулятора |
| `quit` | `q` | Сброс и останов |
- - - - -
Работа с памятью
| Команда | Описание |
| —---------------— | —--------------------------— |
| `fram [zone]` | Дамп зоны FRAM (`-`, `0`, `+`) |
| `drum [zone]` | Дамп зоны DRUM (0-35) |
| `load <addr> <val>` | Записать значение в FRAM |
- - - - -
Отладка
| Команда | Описание |
| —---------------— | —---------------------------------— |
| `debug [0\|1]` | Включить/выключить логирование |
| `break [addr]` | Точка останова по адресу C |
| `breakmb [zone]` | Точка останова по зоне DRUM |
| `clearbp` | Удалить точки останова |
| `calc <a> <op> <b>` | Троичный калькулятор (`+ - * & \| ^`) |

Пример использования
#include <EmulatorSetun1958.h>
EmulatorSetun1958 setun;
void setup() {
Serial.begin(115200);
// Инициализация LittleFS (ESP8266/ESP32/RP2040)
setun.initLittleFS(true); // true = форматировать при ошибке
setun.reset();
setun.begin();
Serial.println(F("Ready. Type 'help' for commands."));
setun.printPrompt();
}
void loop() {
setun.handleSerial(); // Обработка CLI + выполнение шагов
}

Быстрый старт в Serial Monitor
setun1958> help
=== Commands ===
reset - Reset machine
begin, b - Begin execution
...
setun1958> load 0---0 +00000001
Loaded +00000001 to 0---0
setun1958> load 0---1 +0000000+
Loaded +0000000+ to 0---1
setun1958> reg
+========== REGISTERS ==========+
K = 000000000
F = 00000
...
setun1958> step 5
Executing 5 steps...
setun1958> fsinfo
=== LittleFS Info ===
Total: 1048576 bytes
Used: 24576 bytes
Free: 1024000 bytes
setun1958> ls /
Directory: /
------------------------------
drum/ [DIR]
ptp1/ [DIR]
ptr1/ [DIR]
ptr2/ [DIR]
script/ [DIR]
software/ [DIR]
------------------------------

Структура библиотеки
EmulatorSetun1958/
├── EmulatorSetun1958.h # Заголовочный файл (12.7 KB)
├── EmulatorSetun1958.cpp # Реализация (48.9 KB)
├── library.properties # Метаданные Arduino Library
├── keywords.txt # Подсветка синтаксиса
├── README.md # Документация
├── .gitignore
└── examples/
├── Setun1958_Basic/ # Базовый пример с CLI
├── Setun1958_Arithmetic/ # Тесты троичной арифметики
└── Setun1958_LittleFS/ # Работа с файловой системой
Выполнить код Python
Не удалось выполнить код Python
Выполнить код Python
Выполнить код Python
Выполнить код Python
Выполнить код Python
Выполнить код Python
Библиотека EmulatorSetun1958 для Arduino с поддержкой LittleFS и полноценным командным интерпретатором через Serial создана.
Скачать: EmulatorSetun1958.zip (18.0 KB)

Структура библиотеки
plain
EmulatorSetun1958/
├── EmulatorSetun1958.h # Заголовочный файл (12.7 KB)
├── EmulatorSetun1958.cpp # Реализация (48.9 KB)
├── library.properties # Метаданные Arduino Library
├── keywords.txt # Подсветка синтаксиса
├── README.md # Документация
├── .gitignore
└── examples/
├── Setun1958_Basic/ # Базовый пример с CLI
├── Setun1958_Arithmetic/ # Тесты троичной арифметики
└── Setun1958_LittleFS/ # Работа с файловой системой

Автоматическое создание каталогов
При вызове initLittleFS() создаются каталоги:
Таблица
Каталог Назначение
/drum Образы памяти DRUM (магнитный барабан)
/ptp1 Вывод перфоратора (перфолента)
/ptr1 Ввод с фотосчитывателя 1
/ptr2 Ввод с фотосчитывателя 2
/script Программы в формате .sst
/software Дампы FRAM, регистров, ПО
⌨ Команды интерпретатора Serial CLI
Управление эмулятором
Таблица
Команда Сокр. Описание
help h, ? Справка по всем командам
reset — Сброс машины
begin b Начать выполнение
run r Запуск в непрерывном режиме
step [N] s [N] Выполнить N шагов
pause p Приостановить
reg rg Вывести регистры
version v Версия эмулятора
quit q Сброс и останов
Работа с памятью
Таблица
Команда Описание
fram [zone] Дамп зоны FRAM (-, 0, +)
drum [zone] Дамп зоны DRUM (0-35)
load <addr> <val> Записать значение в FRAM
Отладка
Таблица
Команда Описание
debug [0|1] Включить/выключить логирование
break [addr] Точка останова по адресу C
breakmb [zone] Точка останова по зоне DRUM
clearbp Удалить точки останова
calc <a> <op> <b> Троичный калькулятор (+ - * & | ^)
LittleFS — файловая система
Таблица
Команда Описание
fsinit Инициализировать LittleFS
fsinit format Инициализировать с форматированием
fsinfo Информация о файловой системе
ls [path] Список файлов
rm <file> Удалить файл
savedrum <file> Сохранить DRUM в /drum/
loaddrum <file> Загрузить DRUM из /drum/
savefram <zone> <file> Сохранить зону FRAM в /software/
loadfram <zone> <file> Загрузить зону FRAM из /software/
loadscript <file> Загрузить программу из /script/

Пример использования
cpp
#include <EmulatorSetun1958.h>
EmulatorSetun1958 setun;
void setup() {
Serial.begin(115200);
// Инициализация LittleFS (ESP8266/ESP32/RP2040)
setun.initLittleFS(true); // true = форматировать при ошибке
setun.reset();
setun.begin();
Serial.println(F("Ready. Type 'help' for commands."));
setun.printPrompt();
}
void loop() {
setun.handleSerial(); // Обработка CLI + выполнение шагов
}

Быстрый старт в Serial Monitor
plain
setun1958> help
=== Commands ===
reset - Reset machine
begin, b - Begin execution
...
setun1958> load 0---0 +00000001
Loaded +00000001 to 0---0
setun1958> load 0---1 +0000000+
Loaded +0000000+ to 0---1
setun1958> reg
+========== REGISTERS ==========+
K = 000000000
F = 00000
...
setun1958> step 5
Executing 5 steps...
setun1958> fsinfo
=== LittleFS Info ===
Total: 1048576 bytes
Used: 24576 bytes
Free: 1024000 bytes
setun1958> ls /
Directory: /
------------------------------
drum/ [DIR]
ptp1/ [DIR]
ptr1/ [DIR]
ptr2/ [DIR]
script/ [DIR]
software/ [DIR]
------------------------------

Особенности реализации
| Компонент | Описание |
| —--------------— | —-------------------------------------------— |
| **LittleFS** | Условная компиляция — отключается на AVR |
| **Каталоги** | Автосоздание при `initLittleFS()` |
| **CLI** | Полноценный парсер с backspace, echo |
| **Форматы файлов** | CSV для DRUM/FRAM, текст для скриптов |
| **PROGMEM** | Поддержка загрузки программ из Flash |
| **Платформы** | ESP8266, ESP32, RP2040 (LittleFS); AVR (без FS) |
You do not have the required permissions to view the files attached to this post.
"Ученье свет, а неученье — тьма. Дело мастера боится, и коль крестьянин не умеет сохою владеть — хлеб не родится." (С)