Translate READMEs to Russian
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,57 +1,59 @@
|
|||||||
# ZIFI32 — ESP32 WiFi/SPI module for ZX Evolution
|
# ZIFI32 — модуль ESP32 WiFi/SPI для ZX Evolution
|
||||||
|
|
||||||
Firmware and hardware for the ESP32-S3-based WiFi/SPI module ("ZiFi32") used
|
Прошивка и аппаратная часть модуля ESP32-S3 (WiFi/SPI, "ZiFi32") для
|
||||||
by the ZX Evolution / TS-Conf ("Pentevo") retro-computer platform. Adds
|
ретро-компьютера ZX Evolution / TS-Conf ("Pentevo"). Даёт WiFi,
|
||||||
WiFi, a WAV/XM/MOD/S3M audio tracker, and (new in this fork, work in
|
аудио-трекер (WAV/XM/MOD/S3M), а также (новое в этом форке, в разработке)
|
||||||
progress) an SMB2/3 network share that exposes the machine's real SD card
|
сетевую шару по SMB2/3, открывающую доступ к реальной SD-карте машины с
|
||||||
to any Windows/macOS/Linux client.
|
любого клиента Windows/macOS/Linux.
|
||||||
|
|
||||||
**Base source**: [tslabs/zx-evo](https://github.com/tslabs/zx-evo/tree/master/pentevo/esp32).
|
**Исходная база**: [tslabs/zx-evo](https://github.com/tslabs/zx-evo/tree/master/pentevo/esp32).
|
||||||
See [`firmware/README.md`](firmware/README.md) for the full list of changes
|
Полный список изменений этого форка и их текущий статус — в
|
||||||
made in this fork and their current status.
|
[`firmware/README.md`](firmware/README.md).
|
||||||
|
|
||||||
## Requirements
|
## Требования
|
||||||
|
|
||||||
- The ZX Evolution/TS-Conf board's own **core firmware must be built with
|
- Прошивка ядра платы ZX Evolution/TS-Conf **должна быть собрана с
|
||||||
VDAC2 and ESP32 (ZiFi32) peripheral support enabled** - without both, the
|
поддержкой VDAC2 и ESP32 (ZiFi32)** — без этого ядро вообще не увидит
|
||||||
core won't recognize this module on the SPI bus at all, and won't drive
|
модуль на шине SPI, а видеочип FT8xx работать не будет.
|
||||||
the FT8xx video chip either.
|
- **Перемычка RESET на разъёме IDE должна быть установлена** — см.
|
||||||
- The **RESET jumper on the IDE connector must be installed** - see
|
|
||||||
[`hardware/connection_diagram.webp`](hardware/connection_diagram.webp).
|
[`hardware/connection_diagram.webp`](hardware/connection_diagram.webp).
|
||||||
|
|
||||||
## Repository layout
|
## Структура репозитория
|
||||||
|
|
||||||
| Path | What's there |
|
| Путь | Что там |
|
||||||
|---------------------|--------------|
|
|---------------------|--------------|
|
||||||
| `src/` | ESP32 firmware source (ESP-IDF project) |
|
| `src/` | Исходный код прошивки ESP32 (проект ESP-IDF) |
|
||||||
| `firmware/` | Ready-to-flash compiled binaries + flashing instructions + changelog |
|
| `firmware/` | Готовые к прошивке скомпилированные файлы + инструкция по прошивке + список изменений |
|
||||||
| `hardware/` | Adapter board connection diagram, PCB photo, Gerber files |
|
| `hardware/` | Схема подключения переходной платы, фото платы, Gerber-файлы |
|
||||||
| `doc/` | Protocol/design notes |
|
| `doc/` | Заметки по протоколу/архитектуре |
|
||||||
| `test/` | Original upstream SPI protocol test scripts (Python, Raspberry Pi) |
|
| `test/` | Оригинальные тестовые скрипты протокола SPI из апстрима (Python, Raspberry Pi) |
|
||||||
| `spi_gpio_probe/` | Standalone diagnostic firmware - logs raw SPI pin edges, used for bring-up debugging, NOT the main firmware |
|
| `spi_gpio_probe/` | Отдельная диагностическая прошивка — логирует сырые фронты на пинах SPI, использовалась для отладки при разработке; НЕ основная прошивка |
|
||||||
|
|
||||||
## Quick start
|
## Быстрый старт
|
||||||
|
|
||||||
1. Flash `firmware/esp-spi.bin` (+ bootloader/partition table) to the ESP32-S3
|
1. Прошейте `firmware/esp-spi.bin` (+ bootloader/таблицу разделов) в модуль
|
||||||
module - see [`firmware/README.md`](firmware/README.md#flashing) for the
|
ESP32-S3 — точная команда `esptool.py` в
|
||||||
exact `esptool.py` command.
|
[`firmware/README.md`](firmware/README.md#Прошивка).
|
||||||
2. Wire it up per [`hardware/connection_diagram.webp`](hardware/connection_diagram.webp)
|
2. Подключите по схеме
|
||||||
(adapter PCB Gerbers are in [`hardware/gerber/`](hardware/gerber/) if you're
|
[`hardware/connection_diagram.webp`](hardware/connection_diagram.webp)
|
||||||
making your own board - see the photo in [`hardware/pcb_photo.jpg`](hardware/pcb_photo.jpg)).
|
(Gerber-файлы переходной платы — в [`hardware/gerber/`](hardware/gerber/),
|
||||||
3. Make sure the ZX Evolution core firmware requirement above is met.
|
если делаете свою плату; фото платы —
|
||||||
4. Build from source instead of flashing the prebuilt binary: ESP-IDF
|
[`hardware/pcb_photo.jpg`](hardware/pcb_photo.jpg)).
|
||||||
**v6.1** (not `v6.1-rc1`), `idf.py build flash`.
|
3. Убедитесь, что выполнено требование по ядру ZX Evolution (см. выше).
|
||||||
|
4. Собрать из исходников вместо прошивки готового бинарника: ESP-IDF
|
||||||
|
**v6.1** (не `v6.1-rc1`), `idf.py build flash`.
|
||||||
|
|
||||||
## Status
|
## Статус
|
||||||
|
|
||||||
WiFi, audio tracker playback, and the SMB2/3 VFS bridge (browse, download,
|
WiFi, воспроизведение аудио-трекера и SMB2/3-мост (просмотр, скачивание,
|
||||||
upload, delete over a real SD card) all work against real hardware. The VFS
|
загрузка, удаление на реальной SD-карте) — всё работает на реальном
|
||||||
bridge is still **actively being developed** - directory creation, in-place
|
железе. Мост к SMB всё ещё **активно дорабатывается** — пока не реализовано
|
||||||
file truncation on overwrite, and live directory-change notifications aren't
|
создание директорий, обрезка файла при перезаписи более коротким
|
||||||
implemented yet. Full details in [`firmware/README.md`](firmware/README.md).
|
содержимым и уведомления об изменениях в реальном времени. Подробности —
|
||||||
|
в [`firmware/README.md`](firmware/README.md).
|
||||||
|
|
||||||
## License
|
## Лицензия
|
||||||
|
|
||||||
This repository vendors [libsmb2](https://github.com/sahlberg/libsmb2)
|
В этом репозитории вендорится [libsmb2](https://github.com/sahlberg/libsmb2)
|
||||||
(LGPL-2.1) under `src/third_party/libsmb2` - see its own `COPYING` and
|
(LGPL-2.1) в каталоге `src/third_party/libsmb2` — см. его собственные файлы
|
||||||
`LICENCE-LGPL-2.1.txt` there.
|
`COPYING` и `LICENCE-LGPL-2.1.txt`.
|
||||||
|
|||||||
+84
-82
@@ -1,92 +1,93 @@
|
|||||||
# ESP32 firmware (ZX Evolution / TS-Conf ZiFi32 module)
|
# Прошивка ESP32 (модуль ZiFi32 для ZX Evolution / TS-Conf)
|
||||||
|
|
||||||
Compiled firmware for the ESP32-S3-based WiFi/SPI module used by the ZX
|
Скомпилированная прошивка для WiFi/SPI-модуля на базе ESP32-S3,
|
||||||
Evolution / TS-Conf ("Pentevo") platform.
|
используемого платформой ZX Evolution / TS-Conf ("Pentevo").
|
||||||
|
|
||||||
**Base source**: this firmware is based on
|
**Исходная база**: этот форк основан на
|
||||||
[tslabs/zx-evo](https://github.com/tslabs/zx-evo/tree/master/pentevo/esp32) —
|
[tslabs/zx-evo](https://github.com/tslabs/zx-evo/tree/master/pentevo/esp32) —
|
||||||
full source for this fork lives in `pentevo/esp32/src` alongside this folder;
|
полный исходный код лежит в `pentevo/esp32/src` рядом с этой папкой; в
|
||||||
this `firmware/` directory only holds ready-to-flash binaries.
|
`firmware/` — только готовые к прошивке бинарники.
|
||||||
|
|
||||||
## Requirements
|
## Требования
|
||||||
|
|
||||||
The ZX Evolution/TS-Conf board's own core firmware must be built with
|
Прошивка ядра платы ZX Evolution/TS-Conf должна быть собрана с поддержкой
|
||||||
**VDAC2** and **ESP32 (ZiFi32)** peripheral support enabled - without both,
|
**VDAC2** и **ESP32 (ZiFi32)** — без этого ядро вообще не увидит модуль
|
||||||
the core won't recognize the ESP32 module on the SPI bus at all (no matter
|
ESP32 на шине SPI (независимо от того, насколько корректна прошивка самого
|
||||||
how correct this ESP32-side firmware is), and won't drive the FT8xx video
|
ESP32), а видеочип FT8xx работать не будет. Проверьте это, прежде чем
|
||||||
chip either. Check this before assuming a connection problem is on the
|
считать проблему подключения проблемой стороны ESP32.
|
||||||
ESP32 side.
|
|
||||||
|
|
||||||
The **RESET jumper on the IDE connector must be installed** as well - see
|
**Перемычка RESET на разъёме IDE тоже должна быть установлена** — см.
|
||||||
`../hardware/connection_diagram.webp`.
|
`../hardware/connection_diagram.webp`.
|
||||||
|
|
||||||
## What's changed vs. the upstream source
|
## Что изменено относительно апстрима
|
||||||
|
|
||||||
Most of the work in this fork is a **VFS bridge that exposes the ZX
|
Основная часть работы в этом форке — **мост VFS, открывающий реальную
|
||||||
Evolution's real SD card as a network share over SMB2/3**, so any Windows/
|
SD-карту ZX Evolution как сетевую шару по SMB2/3**, чтобы любой клиент
|
||||||
macOS/Linux SMB client can browse, download, upload to, and delete files on
|
Windows/macOS/Linux мог просматривать, скачивать, загружать и удалять
|
||||||
the real Wild Commander filesystem without pulling the card. This is still
|
файлы на реальной файловой системе Wild Commander без извлечения карты.
|
||||||
**actively being worked on** — see "Status" below.
|
Эта часть всё ещё **активно дорабатывается** — см. раздел "Статус" ниже.
|
||||||
|
|
||||||
Changes so far, roughly in the order they were made:
|
Изменения, примерно в порядке внесения:
|
||||||
|
|
||||||
- **Real filesystem wired up.** `vfs_bridge.cpp`'s SMB2 handlers
|
- **Подключена реальная файловая система.** SMB2-обработчики в
|
||||||
(CREATE/READ/WRITE/CLOSE/QUERY_DIRECTORY/QUERY_INFO/etc.) now talk to the
|
`vfs_bridge.cpp` (CREATE/READ/WRITE/CLOSE/QUERY_DIRECTORY/QUERY_INFO и
|
||||||
real filesystem via a small request/response bridge (`vfs_request.cpp`)
|
т.д.) теперь общаются с реальной файловой системой через небольшой мост
|
||||||
over the existing SPI link to the Z80 side, instead of the original
|
запрос/ответ (`vfs_request.cpp`) поверх существующей SPI-связи со
|
||||||
hardcoded demo filesystem.
|
стороной Z80, вместо оригинальной захардкоженной демо-файловой системы.
|
||||||
- **Upload (WRITE) and delete support** for files and empty directories,
|
- **Поддержка загрузки файлов (WRITE) и удаления** файлов и пустых
|
||||||
including proper `FILE_DELETE_ON_CLOSE` handling and a
|
директорий, включая корректную обработку `FILE_DELETE_ON_CLOSE` и ответ
|
||||||
`SMB2_STATUS_DIRECTORY_NOT_EMPTY` reply when a non-empty directory delete
|
`SMB2_STATUS_DIRECTORY_NOT_EMPTY` при попытке удалить непустую
|
||||||
is rejected.
|
директорию.
|
||||||
- **Directory listing fixes**: `SMB2_RETURN_SINGLE_ENTRY` pagination support
|
- **Исправления листинга директорий**: поддержка пагинации
|
||||||
(needed by `cmd.exe`'s own SMB2 client, not just Explorer), the missing
|
`SMB2_RETURN_SINGLE_ENTRY` (нужна собственному SMB2-клиенту `cmd.exe`, не
|
||||||
non-"ID" directory info classes, synthesized `.`/`..` entries, and a
|
только Проводнику), недостающие не-"ID" классы информации о директории,
|
||||||
`NextEntryOffset` encoding bug in the vendored `libsmb2` that silently
|
синтезированные записи `.`/`..`, и баг кодирования `NextEntryOffset` в
|
||||||
corrupted any listing past the second entry.
|
вендоренном `libsmb2`, молча портивший любой листинг длиннее двух
|
||||||
- **`srvsvc` share-enumeration fix**: the RPC pipe used to always report the
|
записей.
|
||||||
Phase-1 placeholder share name `"test"` regardless of what a client had
|
- **Исправление перечисления шар в `srvsvc`**: RPC-канал всегда сообщал
|
||||||
actually connected to — fixed to report the real share name.
|
заглушку-имя шары `"test"` из Фазы 1 независимо от того, к чему реально
|
||||||
- **Added `SMB2_FILE_FS_VOLUME_INFORMATION`** support (a bare `dir`/`net use`
|
подключился клиент — исправлено на реальное имя шары.
|
||||||
needs it; Explorer doesn't ask for it, which is why this was missed at
|
- **Добавлена поддержка `SMB2_FILE_FS_VOLUME_INFORMATION`** (нужна голому
|
||||||
first).
|
`dir`/`net use`; Проводник её не запрашивает, поэтому пропустили
|
||||||
- **Stability fixes**: a NULL-pointer crash in the named-pipe RPC transceive
|
изначально).
|
||||||
path, and a 0-length SPI DMA transaction that could wedge the whole SPI
|
- **Исправления стабильности**: падение по нулевому указателю в обработке
|
||||||
channel to the Z80 side.
|
named-pipe RPC transceive, и нулевая по длине SPI DMA-транзакция, которая
|
||||||
- **`libsmb2` (vendored, `src/third_party/libsmb2`) patches**:
|
могла подвесить весь SPI-канал к стороне Z80.
|
||||||
- `SMB2_FSCTL_DFS_GET_REFERRALS` now answers `STATUS_OBJECT_PATH_NOT_FOUND`
|
- **Патчи `libsmb2`** (вендорено в `src/third_party/libsmb2`):
|
||||||
instead of `STATUS_NOT_IMPLEMENTED` — the wrong status code was sending
|
- `SMB2_FSCTL_DFS_GET_REFERRALS` теперь отвечает
|
||||||
Windows Explorer into a retry storm before it would even attempt to
|
`STATUS_OBJECT_PATH_NOT_FOUND` вместо `STATUS_NOT_IMPLEMENTED` —
|
||||||
connect to the share.
|
неверный код статуса отправлял Проводник Windows в шторм повторных
|
||||||
- `SET_INFO` parsing is now permissive for info classes this server
|
запросов ещё до попытки подключения к шаре.
|
||||||
doesn't specifically implement (passes the raw buffer through instead of
|
- Разбор `SET_INFO` стал терпимым к классам информации, которые сервер
|
||||||
failing to parse) — a hard parse failure here used to tear down the
|
отдельно не реализует (пропускает сырой буфер вместо ошибки разбора) —
|
||||||
*entire* TCP connection instead of just failing that one request, which
|
раньше жёсткая ошибка разбора здесь рвала *всё* TCP-соединение вместо
|
||||||
showed up as Explorer aborting mid file-copy with a generic error.
|
отказа только в этом одном запросе, что проявлялось как обрыв
|
||||||
- A `close_cmd` return value of `-2` now maps to
|
Проводником копирования файла посередине с общей ошибкой.
|
||||||
`SMB2_STATUS_DIRECTORY_NOT_EMPTY` in the CLOSE reply instead of a generic
|
- Возврат `-2` из `close_cmd` теперь отображается в ответе CLOSE как
|
||||||
|
`SMB2_STATUS_DIRECTORY_NOT_EMPTY` вместо общего
|
||||||
`STATUS_NOT_IMPLEMENTED`.
|
`STATUS_NOT_IMPLEMENTED`.
|
||||||
- **Auth simplified** to plain guest/anonymous sessions (`authorize_handler`
|
- **Упрощена авторизация** до обычных гостевых/анонимных сессий
|
||||||
always succeeds) — an earlier attempt at forcing NTLMv2 + SMB2 signing
|
(`authorize_handler` всегда успешен) — более ранняя попытка
|
||||||
turned out to be unrelated to a since-fixed listing bug, so it was backed
|
принудительной NTLMv2 + подписи SMB2 оказалась не связана с уже
|
||||||
out rather than kept as unnecessary complexity.
|
исправленным багом листинга, поэтому убрана как лишняя сложность.
|
||||||
- Removed high-frequency per-request debug logging that was originally added
|
- Убрано частое отладочное логирование каждого запроса, добавленное для
|
||||||
to chase the above bugs, replaced with a single per-connection summary
|
отлова описанных выше багов, заменено одной итоговой строкой на
|
||||||
line.
|
соединение.
|
||||||
|
|
||||||
## Status
|
## Статус
|
||||||
|
|
||||||
The SMB2/3 server (read, browse, upload, delete) works against real Windows/
|
SMB2/3-сервер (чтение, просмотр, загрузка, удаление) работает с реальными
|
||||||
Samba clients. **This is still in-progress work** — directory/file creation
|
клиентами Windows/Samba. **Работа всё ещё продолжается** — создание
|
||||||
(`MKDIR`) isn't implemented yet, overwriting an existing file with shorter
|
директорий (`MKDIR`) пока не реализовано, перезапись существующего файла
|
||||||
content doesn't truncate the old tail, and there's no live-update
|
более коротким содержимым не обрезает старый хвост, и нет поддержки
|
||||||
(`change_notify`) support, so Explorer can show a stale listing for a moment
|
уведомлений об изменениях в реальном времени (`change_notify`), поэтому
|
||||||
after a change until it's refreshed. See the source tree's own code comments
|
Проводник может на мгновение показывать устаревший листинг до обновления.
|
||||||
for the current state of any specific handler.
|
Актуальное состояние конкретных обработчиков — в комментариях исходного
|
||||||
|
кода.
|
||||||
|
|
||||||
## Flashing
|
## Прошивка
|
||||||
|
|
||||||
Target chip: **ESP32-S3**. Using `esptool.py` directly:
|
Целевой чип: **ESP32-S3**. Через `esptool.py` напрямую:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
esptool.py --chip esp32s3 -p COM5 -b 460800 write_flash \
|
esptool.py --chip esp32s3 -p COM5 -b 460800 write_flash \
|
||||||
@@ -96,16 +97,17 @@ esptool.py --chip esp32s3 -p COM5 -b 460800 write_flash \
|
|||||||
0x10000 esp-spi.bin
|
0x10000 esp-spi.bin
|
||||||
```
|
```
|
||||||
|
|
||||||
(replace `COM5` with the actual port; `flasher_args.json` in this folder has
|
(замените `COM5` на реальный порт; `flasher_args.json` в этой папке
|
||||||
the same offsets in `idf.py`'s own JSON format, for reference or scripting.)
|
содержит те же смещения в собственном JSON-формате `idf.py` — для справки
|
||||||
|
или скриптов.)
|
||||||
|
|
||||||
If you're building from source instead: ESP-IDF **v6.1** (not `v6.1-rc1`) —
|
Если собираете из исходников: ESP-IDF **v6.1** (не `v6.1-rc1`) —
|
||||||
`idf.py build flash`.
|
`idf.py build flash`.
|
||||||
|
|
||||||
## Hardware
|
## Аппаратная часть
|
||||||
|
|
||||||
See `../hardware/` for:
|
См. `../hardware/`:
|
||||||
- `connection_diagram.webp` — how this module wires up to a ZX Evolution
|
- `connection_diagram.webp` — как этот модуль подключается к плате ZX
|
||||||
board.
|
Evolution.
|
||||||
- `pcb_photo.jpg` — a photo of the adapter board.
|
- `pcb_photo.jpg` — фото переходной платы.
|
||||||
- `gerber/` — Gerber files for the adapter PCB.
|
- `gerber/` — Gerber-файлы переходной платы.
|
||||||
|
|||||||
Reference in New Issue
Block a user