sprinter-cc: убрать устаревший комментарий «--w3 несовместим с huge»
Комментарий у блока разбора --w3 утверждал, что режим подразумевает small и несовместим с huge, хотя код тремя строками ниже huge как раз поддерживает: резидент делит окно W3 с трамплин-банками (порт 0xE2), crt0_banked запоминает резидентную страницу и возвращает её дефолтом после загрузки банков, а трамплин bank.s сохраняет/восстанавливает W3 на каждый __banked вызов. Следствие, которое теперь тоже записано: резидент -> __banked работает, обратное невозможно (из банка резидентной страницы в W3 просто нет). В справке по --w3 дополнено правило «W3-код не переключает страницу W3»: сюда же относится собственная графическая скобка _bgi_begin/_bgi_end — она маппит видеобанк ЧЕРЕЗ ТОТ ЖЕ порт 0xE2, и открытая из W3-кода означает исполнение из видео-ОЗУ (белый экран). Звать графические примитивы HOME можно: скобку они открывают и закрывают внутри себя. Только комментарии, поведение не менялось. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+16
-6
@@ -40,11 +40,16 @@
|
||||
# --constseg W3CODE (writable statics stay in W2). In huge
|
||||
# the resident page SHARES W3 with trampoline banks: crt0
|
||||
# captures/restores it (W3_RESIDENT), mkexe gets -W.
|
||||
# Rules: W3 code must NOT switch the W3 page; W1/W2 code that
|
||||
# swaps W3 to another page must restore it; no writable data
|
||||
# belongs in W3 (code + rodata only). From a __banked
|
||||
# context the resident W3 code is unreachable (but resident
|
||||
# -> __banked via the W1 trampoline is fine).
|
||||
# Rules: W3 code must NOT switch the W3 page — this includes
|
||||
# opening a graphics batch bracket itself (_bgi_begin/_bgi_end
|
||||
# map the video bank via the SAME port 0xE2; doing that from
|
||||
# W3 code executes from video RAM -> white screen). Calling
|
||||
# HOME graphics primitives is fine: they open and close the
|
||||
# bracket internally and restore the page before returning.
|
||||
# W1/W2 code that swaps W3 to another page must restore it;
|
||||
# no writable data belongs in W3 (code + rodata only). From a
|
||||
# __banked context the resident W3 code is unreachable (but
|
||||
# resident -> __banked via the W1 trampoline is fine).
|
||||
# --mkexe FLAG extra mkexe flag (repeatable; e.g. --mkexe -p --mkexe 0)
|
||||
# --max-allocs N SDCC --max-allocs-per-node (default: 100000 — smaller/
|
||||
# faster code at the cost of compile time; pass a lower
|
||||
@@ -154,7 +159,12 @@ done
|
||||
# W3-модули едут в область W3CODE @0xC000 и вызываются напрямую (без
|
||||
# трамплинов). Работает поверх small-лейаута: main-код с 0x4100 (W1/W2),
|
||||
# W3 свободно, DSS маппит все страницы образа сам (проверено tests/w3probe).
|
||||
# --w3 подразумевает small; с huge несовместим (там W3 занят банками).
|
||||
# --w3 подразумевает small ПО УМОЛЧАНИЮ, но поддержан во всех режимах
|
||||
# tiny|small|big|huge. В huge резидент ДЕЛИТ окно W3 с трамплин-банками
|
||||
# (порт 0xE2): crt0_banked запоминает резидентную страницу и возвращает её
|
||||
# дефолтом после загрузки банков, а трамплин bank.s сохраняет/восстанавливает
|
||||
# W3 на каждый __banked вызов (см. W3_RESIDENT ниже). Следствие: резидент ->
|
||||
# __banked работает, обратное — НЕТ (из банка резидентной страницы в W3 нет).
|
||||
if [[ ${#W3_SPECS[@]} -gt 0 ]]; then
|
||||
[[ -z "$USER_SET_MEMORY" ]] && MEMORY_MODE="small" # --w3 → small по умолчанию
|
||||
case "$MEMORY_MODE" in
|
||||
|
||||
Reference in New Issue
Block a user