libbgi: скролл-примитивы + --w3 + отчёт раскладки памяти
Скролл региона video->video (неактивная страница -> активная, банк 0x50: копия = скролл + heal цели): - gfx_scroll_h / _bgi_scroll_rows_raw — горизонтальный, построчно без страйдов (~54Т/строку), DI/EI бандами по 16 строк, h=0=>256; - gfx_scroll_v / _bgi_scroll_cols_raw — верт. И/ИЛИ гориз. за один проход без буфера (колонка = accel-burst LD A,A, STOP между read/write делает промежуточный OUT Port_Y безопасным), банды по 16 колонок; - _gfx_addr_shadow_base (адрес неактивной страницы) + gfx_rect_t. Пример examples/scroll. check_banks.py + sprinter-cc: отчёт раскладки памяти для ЛЮБОЙ модели (W1/W2 код/данные, остаток кучи/стека, W3 при --w3, банки при --bank), не только при --bank. Док docs/memory-management.md §10. --w3 (резидентный код окна W3) + сопутствующее: crt0_banked W3_RESIDENT, mkexe -W, tests/w3probe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -121,6 +121,17 @@ w2_join:
|
||||
ld (_estex_block_id), a
|
||||
ld (_estex_startup_ix), ix
|
||||
|
||||
.ifdef W3_RESIDENT
|
||||
;; --w3 в HUGE: резидентный код окна W3 (0xC000) — часть HOME-образа,
|
||||
;; замаплен DSS. Загрузка банков ниже подменяет W3 своими страницами;
|
||||
;; запомним физ-страницу резидента, чтобы вернуть её дефолтом после
|
||||
;; цикла — тогда прямые вызовы в резидентный W3-код снова корректны.
|
||||
;; (Трамплин bank.s сам сохраняет/восстанавливает W3 на каждый __banked
|
||||
;; вызов, поэтому дефолтная страница обязана быть резидентной.)
|
||||
in a, (#0xE2)
|
||||
ld (_w3_resident_page), a
|
||||
.endif
|
||||
|
||||
;; ---- Allocate _n_banks pages via ESTEX GETMEM ----
|
||||
ld a, (_n_banks)
|
||||
or a, a
|
||||
@@ -182,6 +193,14 @@ load_bank_done:
|
||||
rst #0x10
|
||||
;; Ignore CF from close.
|
||||
|
||||
.ifdef W3_RESIDENT
|
||||
;; Вернуть резидентную страницу W3 дефолтом (цикл выше оставил в W3
|
||||
;; последний банк). После этого прямые call'ы в резидентный код 0xC0xx
|
||||
;; корректны, а трамплины будут сохранять/возвращать именно её.
|
||||
ld a, (_w3_resident_page)
|
||||
out (#0xE2), a
|
||||
.endif
|
||||
|
||||
skip_bank_load:
|
||||
;; ---- Standard SDCC init path ----
|
||||
call gsinit
|
||||
@@ -411,6 +430,10 @@ _estex_block_id::
|
||||
.ds 1
|
||||
_bank_block_id::
|
||||
.ds 1
|
||||
.ifdef W3_RESIDENT
|
||||
_w3_resident_page:
|
||||
.ds 1
|
||||
.endif
|
||||
|
||||
.area _DATA
|
||||
_argc::
|
||||
|
||||
Reference in New Issue
Block a user