Fix bottom panel vertical offset, enable TSU sprites in text mode

Bottom control panel sat a couple pixels too low relative to the top
panel (pre-existing, not a session regression) - nudged GYOFFSL in
int_text_off from 47+240-1 to 47+240. Confirmed correct on hardware.

Also uncommented the TSU_SEN write in int_text_on so hardware sprites
(mouse cursor) are enabled during text mode too, not just graphics
mode. Doesn't fix the known cursor clip right above the bottom panel
(that appears tied to a fixed screen row, independent of panel
position or this bit - left as a known issue, documented in README).
This commit is contained in:
2026-09-01 10:05:43 +03:00
parent 292d42f8ea
commit afaab68ac1
3 changed files with 11 additions and 6 deletions
+6 -1
View File
@@ -43,9 +43,14 @@ AT+CIPSNTPTIME? — получить текущее врем
**Убрано мигание вертикальных полос при воспроизведении музыки.** (Ну почти убрана =))) Индикатор громкости AY-каналов (`music_analizator`) раньше рисовался прямо внутри прерывания, которое отвечает за точное по строкам переключение видеорежима текст/графика — и делал это вместе с DMA-очисткой экрана и переключением страниц памяти. На динамичных треках (больше эффектов — дольше выполняется код) это сбивало тайминг прерывания и давало заметные мигающие полосы на экране. Отрисовку индикатора вынесли из прерывания в обычный код главного цикла (раз в кадр, синхронно с `wait_frame`, но уже не в раст-критичной цепочке) — сам плеер и его тайминг (темп, высота нот) не тронуты.
**Поправлена позиция нижней панели управления.** Она была смещена на пару пикселей вниз относительно верхней панели с самого начала (не наша регрессия) — поправлено смещение `GYOFFSL` в `int_text_off`.
**Мелкие исправления:**
- обращение к порту `#EFF7` (общий системный регистр — управляет не только доступом к часам, но и видеорежимом/turbo/кэшем) переведено на read-modify-write вместо прямой перезаписи всего байта, чтобы не сбивать остальные настройки;
- исправлен баг в разборе двузначного GMT-смещения из `zifi.ini` (например `+10`) — были перепутаны местами разряды;
- DMA-очистка под индикатор громкости теперь дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи).
- DMA-очистка под индикатор громкости теперь дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи);
- в текстовом режиме (`int_text_on`) включён бит `TSU_SEN` (аппаратные спрайты TSU), который раньше был закомментирован — на всякий случай, чтобы курсор мыши мог отображаться и поверх текстовой области тоже.
**Известная нерешённая мелочь:** курсор мыши (аппаратный спрайт TSU) обрывается по фиксированной строке экрана прямо над нижней панелью управления — похоже на границу, завязанную на тайминг переключения видеорежима или на аппаратный бордюр, а не на что-то, что двигается вместе с содержимым панели. Не нашли способ поправить это без риска сломать что-то ещё, оставили как есть.
Binary file not shown.
+4 -4
View File
@@ -2203,9 +2203,9 @@ txt_border ld a,#f0
ld b,high VCONFIG
ld a,VID_TEXT+VID_320X240
out (c),a
; ld b,high TSCONFIG
; ld a,TSU_SEN
; out (c),a
ld b,high TSCONFIG
ld a,TSU_SEN
out (c),a
ld b,high VPAGE
ld a,Text_page
out (c),a
@@ -2249,7 +2249,7 @@ int_text_off push af,hl,de,bc,ix,iy
push af
exa
call set_256c_mode
ld hl,47+240-1
ld hl,47+240 ; was 47+240-1 - bottom panel sat a couple pixels too low
ld b,high GYOFFSL
out (c),l
inc b