95c22be9bd
Скролл региона 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>
114 lines
1.8 KiB
NASM
114 lines
1.8 KiB
NASM
; îáùàÿ ïðîöåäóðà âûõîäà.
|
|
; â 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
|