diff --git a/README.md b/README.md index 05942f7..41fa7ed 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,8 @@ AT+CIPSNTPTIME? — получить текущее врем **Мелкие исправления:** - перевёл обращение к порту `#EFF7` (общий системный регистр — управляет не только доступом к часам, но и видеорежимом/turbo/кэшем) на read-modify-write вместо прямой перезаписи всего байта, чтобы не сбивать остальные настройки; - исправил баг в разборе двузначного GMT-смещения из `zifi.ini` (например `+10`) — были перепутаны местами разряды; -- теперь DMA-очистка под индикатор громкости дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи). +- теперь DMA-очистка под индикатор громкости дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи); +- исправил переполнение буфера имени файла (`create_filename`): при скачивании имя файла из ссылки копировалось в 48-байтный буфер без проверки длины, и если оно было длиннее — переполнение затирало соседние переменные (`zifi.ini`, имена служебных папок) прямо в памяти. Теперь копирование корректно обрезается на 48 символах. Проверено на железе: создание папки и файла с длинными именами (в т.ч. ровно 48 символов) и последующее чтение содержимого — всё работает штатно, никакой драйверной обрезки до 8 символов нет. **Известная нерешённая мелочь:** курсор мыши (аппаратный спрайт TSU) обрывается по фиксированной строке экрана прямо над нижней панелью управления — похоже на границу, завязанную на тайминг переключения видеорежима или на аппаратный бордюр, а не на что-то, что двигается вместе с содержимым панели. Я не нашёл способ поправить это без риска сломать что-то ещё, оставил как есть. diff --git a/_spg/ZIFI/zifi.spg b/_spg/ZIFI/zifi.spg index 013dfef..9828b92 100644 Binary files a/_spg/ZIFI/zifi.spg and b/_spg/ZIFI/zifi.spg differ diff --git a/zifi.asm b/zifi.asm index 4bcd64c..b5e68f1 100644 --- a/zifi.asm +++ b/zifi.asm @@ -157,17 +157,18 @@ create_filename ; and check extension for scl scr sxg others dec hl jr 1b 1 - inc hl + inc hl ld de,FILE_NAME ; file_name create + ld b,48 ; FILE_NAME is exactly 48 bytes - never write past it 2 ld a,(hl) cp ' ' jr z,1f ld (de),a inc hl inc de - jr 2b + djnz 2b ; ran out of room - stop here and null-terminate below -1 +1 xor a ld (de),a