2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-09-14 12:28:13 +03:00
2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-08-31 21:04:48 +03:00
2026-09-14 12:28:13 +03:00

ZiFi

#ZiFi - Internet client for ZX Evolution with TS Conf

About project (ru): ZiFi homepage , ZiFi или интернет для Z80 , ZiFi v. 0.61 released!

Work with sites: vtrdos, zxart, prods.tslabs, hype, pouet, irclogs;

Download: games, system progs, demopack disk's, diskmag's;

See: zx spectrum screens;

Listen: Ay8910 chip music

ZiFi splash

Work with cable socket driver by PSB and Wifi module ESP8266, driver by DDp / Hacker VBI

For Z80 CPU

Доработки в этой сборке (2026)

Оригинальный проект давно не поддерживается автором, поэтому часть функций я переделал под текущее состояние сети и сервисов.

Убрал проверку обновлений по HTTP. Раньше при загрузке клиент ходил на zifi_ver.php, проверял версию, при необходимости скачивал новый клиент и сверял CRC16. Сервер обновлений больше не обновляется — всю эту ветку (autoupdate, CRC16, скачивание .spg) я убрал из zifi.asm.

Перевёл синхронизацию времени на стандартные AT-команды SNTP. Использую штатный протокол ESP-AT — он есть в том числе в обычной прошивке для ESP-01/ESP8266:

AT+CIPSNTPCFG=1,0,"pool.ntp.org"   — включить SNTP, UTC, публичный сервер
AT+CIPSNTPTIME?                    — получить текущее время

Ответ (+CIPSNTPTIME:Www Mmm dd hh:mm:ss yyyy) я разбираю прямо на Z80 — с учётом того, что синхронизация происходит в фоне и первые секунды может отдавать заглушку 1970 года (в этом случае клиент подождёт и переспросит, с ограничением по числу попыток, чтобы не подвесить загрузку насовсем).

Часовой пояс по-прежнему берётся из zifi.ini (time: +N / time: -N / time: none) и применяется на стороне Z80 поверх времени UTC от SNTP.

Заодно добавил запись секунд и дня недели (0 = воскресенье) в RTC (DS1685) — раньше эти два поля не заполнялись вообще.

Добавил поддержку HTTPS. Часть сайтов в списках загрузок (prods.tslabs.info, bbb.retroscene.org) перестала пускать по обычному http и принудительно перенаправляет на https. Клиент теперь сам определяет схему ссылки и выбирает AT+CIPSTART="TCP",...,80 или AT+CIPSTART="SSL",...,443 — это касается и ссылок из меню, и ссылок, которые сервер присылает внутри списков файлов.

Добавил сообщение о готовности. После завершения всех этапов загрузки (подключение к Wi-Fi, синхронизация времени, папка загрузок) на экране появляется "ZiFi is ready." — раньше было не всегда понятно, можно ли уже пользоваться меню.

Убрал мигание вертикальных полос при воспроизведении музыки. Индикатор громкости AY-каналов (music_analizator) раньше рисовался прямо внутри прерывания, которое отвечает за точное по строкам переключение видеорежима текст/графика — и делал это вместе с DMA-очисткой экрана и переключением страниц памяти. На динамичных треках (больше эффектов — дольше выполняется код) это сбивало тайминг прерывания и давало заметные мигающие полосы на экране. Я вынес отрисовку индикатора из прерывания в обычный код главного цикла (раз в кадр, синхронно с wait_frame, но уже не в раст-критичной цепочке) — сам плеер и его тайминг (темп, высота нот) не тронул.

Поправил позицию нижней панели управления. Она была смещена на пару пикселей вниз относительно верхней панели с самого начала (не моя регрессия) — поправил смещение GYOFFSL в int_text_off.

Добавил таймаут загрузки с автоматическими повторами. Раньше при зависшем/неотвечающем сайте клиент мог ждать данные бесконечно — выйти можно было только вручную нажав крестик отмены. Теперь если от сервера ~10 секунд вообще нет никаких данных (интервал считается по кадрам экрана, 50Гц, не зависит от частоты процессора/турборежима), запрос повторяется — до 3 раз. Если и это не помогло — для музыки клиент переходит к следующему треку в списке (со своим лимитом на подряд неудачные треки, чтобы не крутиться по всему плейлисту вечно, если сети вообще нет), для остального — обычная отмена, как раньше по крестику.

Мелкие исправления:

  • перевёл обращение к порту #EFF7 (общий системный регистр — управляет не только доступом к часам, но и видеорежимом/turbo/кэшем) на read-modify-write вместо прямой перезаписи всего байта, чтобы не сбивать остальные настройки;
  • исправил баг в разборе двузначного GMT-смещения из zifi.ini (например +10) — были перепутаны местами разряды;
  • теперь DMA-очистка под индикатор громкости дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи);
  • исправил переполнение буфера имени файла (create_filename): при скачивании имя файла из ссылки копировалось в 48-байтный буфер без проверки длины, и если оно было длиннее — переполнение затирало соседние переменные (zifi.ini, имена служебных папок) прямо в памяти. Теперь копирование корректно обрезается на 48 символах. Проверено на железе: создание папки и файла с длинными именами (в т.ч. ровно 48 символов) и последующее чтение содержимого — всё работает штатно, никакой драйверной обрезки до 8 символов нет.

Заменил драйвер SD-карты. Штатный _sd/WDFCVBI2.COD (закрытый бинарник без исходников, автор — "Hacker VBI") был заменён на собственный, открытый SD/FAT32-драйвер (_sd/zc_sd_driver.asm + _sd/zc_sd_driver_body.asm) — реализует те же ~15 функций CORE-таблицы, которые реально использует ZiFi. Заодно исправлена и порча имён папок на FAT32 (короткие имена 8.3 иногда совпадали с уже существующей записью в каталоге). Подробнее — _sd/README.md.

S
Description
ZiFi client
Readme
64 MiB
Languages
Assembly 82%
C 13%
Python 4.2%
PHP 0.4%
Batchfile 0.3%
Other 0.1%