b3bf2cca3d
Проверяет то, на чём стоит план раскладки PoP (layout_plan_v2.md §2):
R3 резидент/HOME -> __banked через трамплин работает;
R4 примитивы libbgi можно звать ИЗ БАНКА: _bgi_begin запоминает текущую
страницу W3 (порт 0xE2), _bgi_end её возвращает — банк переживает
рисование и продолжает исполняться;
то же верно для функции W1/W2, вызванной из банка: она рисует, а в W3
остаётся страница БАНКА, не резидента.
Результат в MAME: все пять полос на месте, вердикт ЗЕЛЁНЫЙ. Замеры:
страница банка 0xF0 до рисования, после прямого блита и после возврата из
W1/W2-функции — та же 0xF0; резидент 0xF3; банк дожил до конца и вернул
корректное значение.
Два побочных вывода, важных для стражей:
1. Писучие статики __banked-модуля линкуются В СТРАНИЦУ БАНКА (адрес
0x1C000+), снаружи их не прочитать — состояние банка держать в W1/W2.
2. Инлайновый `in a,(0xE2)` посреди тела функции затирает A, куда SDCC уже
положил параметр (в первой версии пробника цвет заливки становился
номером страницы, и «резидент не рисовал»). Читать порт отдельной
__naked-функцией.
Имя exe — 8.3 (w3bgfx.exe): DSS длинных имён не понимает.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
25 lines
1.8 KiB
Makefile
25 lines
1.8 KiB
Makefile
# w3bankgfx — пробник модели «huge + резидент W3 + банк W3 + графика».
|
|
#
|
|
# Проверяем ровно то, на чём стоит план раскладки PoP (docs/layout_plan_v2.md):
|
|
# R2 из __banked-кода резидентная страница W3 недостижима (НЕ зовём);
|
|
# R3 резидент -> банк работает через трамплин;
|
|
# R4 примитивы libbgi можно звать ИЗ БАНКА: _bgi_begin запоминает текущую
|
|
# страницу W3 (порт 0xE2) и _bgi_end её возвращает — значит банк
|
|
# переживает рисование и продолжает исполняться.
|
|
#
|
|
# Раскладка huge: CODE 0x4100 (W1), DATA 0x8000 (W2), банк 0x1C000 (W3),
|
|
# резидент --w3 делит W3 с банком (crt0 запоминает резидентную страницу).
|
|
PROJ_ROOT := $(abspath $(CURDIR)/../..)
|
|
EXAMPLE := w3bgfx
|
|
MEMORY := huge
|
|
EXTRA_FLAGS := --gfx 256 --w3 res.c --bank 1=bank1.c
|
|
include $(PROJ_ROOT)/app.mk
|
|
|
|
# Ожидаемый результат (проверено 2026-07-29, MAME dev):
|
|
# пять полос сверху вниз: синяя (резидент), бирюзовая (банк рисует сам),
|
|
# жёлтая (W1/W2-функция, вызванная из банка), ЗЕЛЁНАЯ (все проверки ок),
|
|
# синяя (резидент жив после возврата). Красная вместо зелёной = модель
|
|
# не подтвердилась. Диагностика в переменных bank_page_*/home_page_seen/
|
|
# res_page_seen: банк 0xF0, резидент 0xF3, страница W3 внутри банка не
|
|
# менялась вокруг рисования.
|