alexandClaude Sonnet 5 168d6a71bd Fix esp32 wait-timing race, rename wc_api.lib, keyboard: Enter-to-advance
esp32.c: two-phase esp_wait_busy() so a stale non-BUSY status right after
esp_cmd() isn't mistaken for completion (fixed a real TRACK_PLAY/0x88 race
on heavier XM files); added single-phase esp_wait_not_busy() for
esp_send_dma()'s per-chunk wait, which never actually sets BUSY and was
timing out on every chunk under the two-phase version.

vgm_wc_api.lib renamed to wc_api.lib (build.bat updated to match).

Keyboard: tried replacing wc_key_esc/pgup/pgdn/space with a raw PS/2-FIFO
reader (matching how VGMPLAY.WMF's own player reads keys) so Enter could
also advance to the next file. Reverted after two confirmed hardware
regressions (esp32 transfers failing with ESP_ERR_INV_XM, and the keyboard
going unresponsive once WC's own PS/2 scanning was disabled to stop it
competing with the raw reads) - VGMPLAY's approach relies on a full custom
interrupt handler xmplay has no equivalent need for. Back to the simple
wc_key_*() wrappers, plus wc_key_enter() so Enter now advances too, and
wc_key_wait_release() (called after wc_gedpl()) to debounce the Enter/F3
that launched the plugin itself.

Also: About window now centers dynamically for all three WC text modes
(90x36/80x25/80x30) instead of a fixed position, and matches the main
window's color scheme.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-07 12:40:36 +03:00

XM Player

Плагин для Wild Commander (ZX Evolution / TS-Conf), проигрывающий XM, XMZ (запакованный gzip'ом XM) и S3M модули через ESP32-сопроцессор платы. Z80 только передаёт файл на ESP32 и отображает окно со статусом; сам разбор модуля и синтез звука выполняет прошивка ESP32.

⚠️ Несовместим со стандартным ftview. Оригинальный (стандартный) плагин ftview сам регистрируется на расширения .XM и .XMZ — ровно те же, что и у этого плагина. У Wild Commander таблица "расширение → плагин" статическая, зашита в заголовок при сборке, и если файл поставить вместе со стандартным ftview, они будут конфликтовать за одни и те же расширения. Используйте переработанную версию ftview (расширения .XM и .XMZ из неё убраны, воспроизведение вынесено в этот плагин) — она лежит отдельным репозиторием: https://git.alexkorochinskiy.ru/alex/ftview.git

Требования

  • ZX Evolution / TS-Conf с прошитым ESP32-сопроцессором
  • Wild Commander (заголовок плагина версии 10+, есть в текущих сборках)
  • переработанная версия ftview (см. предупреждение выше), а не стандартная

Возможности

  • Проигрывание .XM, .XMZ, .S3M
  • Окно с живым статусом: имя файла, статус загрузки/воспроизведения, паттерн, строка, BPM, прошедшее/общее время, прогресс-бар
  • Ошибки выводятся прямо в строке статуса (с кодом ошибки ESP32, например Playback error (0x90)), без отдельного всплывающего окна
  • Автоматический переход к следующему файлу по окончании трека
  • Параметр stoponerror в ini — остановка на ошибке вместо автоперехода, удобно, чтобы найти, какой именно файл в подборке вызывает проблему

Управление

Клавиша Действие
PgDn, Enter Следующий файл
PgUp Предыдущий файл
Esc Остановить воспроизведение и выйти
Space Выйти, не останавливая текущее воспроизведение

Установка

Скопировать xmplay.wmf в каталог плагинов Wild Commander. Плагин сам регистрируется на расширения .XM, .XMZ и .S3M.

Чтобы при ошибке воспроизведения плагин останавливался, а не переходил сразу к следующему файлу, добавить в wc.ini:

XMPLAY.WMF -stoponerror=1

(0 или отсутствие параметра — поведение по умолчанию: автопереход при ошибке.)

Сборка

Нужен SDCC версии 4.6.0 (зафиксирована в build.bat) и hex2bin — оба есть в тулчейне SDK ZX Evolution.

build.bat

Результат — xmplay.wmf в корне проекта.

Благодарности

Собран на основе wc_api.lib из demyanenko-d/VGMPLAY.WMF — используется для доступа к API Wild Commander (окна, вывод текста, клавиатура, ini-параметры).

Статус

Проверено на реальном железе: воспроизведение, живая статистика, прогресс-бар, обработка ошибок и управление с клавиатуры.

S
Description
Плагин для Wild Commander воспроизводящий xm, xmz и s3m файлы через ESP32 (ZiFi32)
Readme
369 KiB
Languages
C 49.1%
Assembly 48.9%
Batchfile 2%