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:
@@ -43,9 +43,14 @@ AT+CIPSNTPTIME? — получить текущее врем
|
|||||||
|
|
||||||
**Убрано мигание вертикальных полос при воспроизведении музыки.** (Ну почти убрана =))) Индикатор громкости AY-каналов (`music_analizator`) раньше рисовался прямо внутри прерывания, которое отвечает за точное по строкам переключение видеорежима текст/графика — и делал это вместе с DMA-очисткой экрана и переключением страниц памяти. На динамичных треках (больше эффектов — дольше выполняется код) это сбивало тайминг прерывания и давало заметные мигающие полосы на экране. Отрисовку индикатора вынесли из прерывания в обычный код главного цикла (раз в кадр, синхронно с `wait_frame`, но уже не в раст-критичной цепочке) — сам плеер и его тайминг (темп, высота нот) не тронуты.
|
**Убрано мигание вертикальных полос при воспроизведении музыки.** (Ну почти убрана =))) Индикатор громкости AY-каналов (`music_analizator`) раньше рисовался прямо внутри прерывания, которое отвечает за точное по строкам переключение видеорежима текст/графика — и делал это вместе с DMA-очисткой экрана и переключением страниц памяти. На динамичных треках (больше эффектов — дольше выполняется код) это сбивало тайминг прерывания и давало заметные мигающие полосы на экране. Отрисовку индикатора вынесли из прерывания в обычный код главного цикла (раз в кадр, синхронно с `wait_frame`, но уже не в раст-критичной цепочке) — сам плеер и его тайминг (темп, высота нот) не тронуты.
|
||||||
|
|
||||||
|
**Поправлена позиция нижней панели управления.** Она была смещена на пару пикселей вниз относительно верхней панели с самого начала (не наша регрессия) — поправлено смещение `GYOFFSL` в `int_text_off`.
|
||||||
|
|
||||||
**Мелкие исправления:**
|
**Мелкие исправления:**
|
||||||
- обращение к порту `#EFF7` (общий системный регистр — управляет не только доступом к часам, но и видеорежимом/turbo/кэшем) переведено на read-modify-write вместо прямой перезаписи всего байта, чтобы не сбивать остальные настройки;
|
- обращение к порту `#EFF7` (общий системный регистр — управляет не только доступом к часам, но и видеорежимом/turbo/кэшем) переведено на read-modify-write вместо прямой перезаписи всего байта, чтобы не сбивать остальные настройки;
|
||||||
- исправлен баг в разборе двузначного GMT-смещения из `zifi.ini` (например `+10`) — были перепутаны местами разряды;
|
- исправлен баг в разборе двузначного GMT-смещения из `zifi.ini` (например `+10`) — были перепутаны местами разряды;
|
||||||
- DMA-очистка под индикатор громкости теперь дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи).
|
- DMA-очистка под индикатор громкости теперь дожидается завершения перед тем, как CPU начинает рисовать поверх той же области (была гонка записи);
|
||||||
|
- в текстовом режиме (`int_text_on`) включён бит `TSU_SEN` (аппаратные спрайты TSU), который раньше был закомментирован — на всякий случай, чтобы курсор мыши мог отображаться и поверх текстовой области тоже.
|
||||||
|
|
||||||
|
**Известная нерешённая мелочь:** курсор мыши (аппаратный спрайт TSU) обрывается по фиксированной строке экрана прямо над нижней панелью управления — похоже на границу, завязанную на тайминг переключения видеорежима или на аппаратный бордюр, а не на что-то, что двигается вместе с содержимым панели. Не нашли способ поправить это без риска сломать что-то ещё, оставили как есть.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -2203,9 +2203,9 @@ txt_border ld a,#f0
|
|||||||
ld b,high VCONFIG
|
ld b,high VCONFIG
|
||||||
ld a,VID_TEXT+VID_320X240
|
ld a,VID_TEXT+VID_320X240
|
||||||
out (c),a
|
out (c),a
|
||||||
; ld b,high TSCONFIG
|
ld b,high TSCONFIG
|
||||||
; ld a,TSU_SEN
|
ld a,TSU_SEN
|
||||||
; out (c),a
|
out (c),a
|
||||||
ld b,high VPAGE
|
ld b,high VPAGE
|
||||||
ld a,Text_page
|
ld a,Text_page
|
||||||
out (c),a
|
out (c),a
|
||||||
@@ -2249,7 +2249,7 @@ int_text_off push af,hl,de,bc,ix,iy
|
|||||||
push af
|
push af
|
||||||
exa
|
exa
|
||||||
call set_256c_mode
|
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
|
ld b,high GYOFFSL
|
||||||
out (c),l
|
out (c),l
|
||||||
inc b
|
inc b
|
||||||
@@ -3479,7 +3479,7 @@ status_icon_copy
|
|||||||
cancel_icon_copy
|
cancel_icon_copy
|
||||||
db #1a,low cancel_icon
|
db #1a,low cancel_icon
|
||||||
db #1b,high cancel_icon
|
db #1b,high cancel_icon
|
||||||
db #1c,2
|
db #1c,2
|
||||||
db #1d,4+4+128
|
db #1d,4+4+128
|
||||||
db #1e,#3e-2
|
db #1e,#3e-2
|
||||||
db #1f,Vid_page+8
|
db #1f,Vid_page+8
|
||||||
|
|||||||
Reference in New Issue
Block a user