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:
2026-07-23 19:38:00 +03:00
parent d1bc97c589
commit 95c22be9bd
46 changed files with 4125 additions and 133 deletions
+113
View File
@@ -0,0 +1,113 @@
; îáùàÿ ïðîöåäóðà âûõîäà.
; â A ïîìåñòèòü êîä âîçâðàòà.
; Åñëè áûëà îøèáêà, òî ëó÷øå -1 (255)
; Åñëè îøèáêè íåáûëî, òî 0.
quit0: pop ix
ld b,a
ld c,quit
rst 10h
jp $ ; çàãëóøêà
;-[]------------------------------------------------------------
; misc procedures and functions...
;---------------------------------------------------------------
open: ld a,1
ld c,fopen
rst 10h
ret
close: ld c,fclose
rst 10h
ret
read: ld c,fread
rst 10h
ret
;dir_ret: ld hl,cur_dir
; ld c,chdir
; rst 10h
; ret
gmem: ld c,getmem
ld b,1
rst 10h
ret
; ïðîöåäóðà ñîõðàíåíèÿ ñòðàíèöû â óêàçííîì îêíå.
; C = îêíî (ïîðò)
; HL = êóäà ñîõðàíÿòü.
save_pg: in a,(c)
ld (hl),a
ret
; ïðîöåäóðà âîññòàíîâëåíèÿ ñòðàíèöû â óêàçííîì îêíå.
; C = îêíî (ïîðò)
; HL = îò êóäà âîññòàíîâèòü.
restore_pg: ld a,(hl)
out (c),a
ret
; îáðàáîòêà îøèáêè îòêðûòèÿ ôàéëà
open_err:
ld hl,open_err_str
ld c,pchars
rst 10h
.err_file: ld hl,0
ld c,pchars
rst 10h
ld hl,crlf0
ld c,pchars
rst 10h
ld a,-1
jp quit0
; îáðàáîòêà îøèáêè ÷òåíèÿ ôàéëà
rd_err:
ld hl,read_err_str
ld c,pchars
rst 10h
.err_file: ld hl,0
ld c,pchars
rst 10h
ld hl,crlf0
ld c,pchars
rst 10h
ld a,-1
jp quit0
; îáðàáîòêà îøèáêè çàïðîñà ïàìÿòè
gmem_err: ld hl,gmem_err_str
ld c,pchars
rst 10h
ld a,-1
jp quit0
; îáðàáîòêà îøèáêè îòêðûòèÿ âèäåîðåæèìà
vm_err: ld hl,vm_err_str
ld c,pchars
rst 10h
jp quit0
IFDEF debug
debug_print: ld c,pchars
rst 10h
ret
ENDIF
; îáðàáîòêà îøèáêîê òîêåíîâ
;tok_err:
; ld hl,token_err_str
; ld c,pchars
; rst 10h
;.token_ptr: ld hl,0
; ld c,pchars
; rst 10h
; ld hl,crlf0
; ld c,pchars
; rst 10h
; ld a,-1
; jp quit0