runtime: фикс banked-режимов — _bank_pages переезжает из _DATA в _CODE
Регрессия от 961cfb7 (gsinit зануляет _DATA, 2026-07-04): crt0_banked
заполняет таблицу физических страниц _bank_pages ДО gsinit, а тот её
стирал — трамплины banked-вызовов читали нули и прыгали в незамапленную
страницу. Висли ВСЕ banked-программы (banked/bankedbg/banklocl/
banktest); найдено MAME-смоуком. Тот коммит перенёс crt0-приватные
_estex_* в _CODE, но _bank_pages в runtime/bank.s пропустил.
- runtime/bank.s: _bank_pages → .area _CODE (RAM, всегда замаплен —
это же условие нужно и трамплину); +16 Б _CODE у программ с bank.s
- app.mk: exe теперь зависит от runtime/*.s — правка crt0/bank.s
перелинковывает тесты без make clean (фикс иначе не подхватывался)
- эталон размеров обновлён (+16 Б у banked/bankedbg/banklocl/
banktest/openenv — size-check поймал ровно их)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -51,7 +51,12 @@ CC_FLAGS += $(EXTRA_FLAGS)
|
|||||||
|
|
||||||
all: $(EXAMPLE).exe
|
all: $(EXAMPLE).exe
|
||||||
|
|
||||||
$(EXAMPLE).exe: $(SOURCES) $(MKEXE) $(LIB)
|
# runtime/*.s (crt0-семейство, bank.s, heap.s) собираются per-build
|
||||||
|
# внутри sprinter-cc — без этой зависимости их правка не перелинкует
|
||||||
|
# уже собранный exe (кусало: фикс bank.s не подхватился).
|
||||||
|
RUNTIME_DEPS := $(wildcard $(PROJ_ROOT)/runtime/*.s)
|
||||||
|
|
||||||
|
$(EXAMPLE).exe: $(SOURCES) $(MKEXE) $(LIB) $(RUNTIME_DEPS)
|
||||||
$(SPRINTER_CC) $(CC_FLAGS) -o $@ $(SOURCES)
|
$(SPRINTER_CC) $(CC_FLAGS) -o $@ $(SOURCES)
|
||||||
|
|
||||||
$(MKEXE):
|
$(MKEXE):
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
argv 3431
|
argv 3431
|
||||||
assrtest 3847
|
assrtest 3847
|
||||||
attrprob 4091
|
attrprob 4091
|
||||||
banked 1040
|
banked 1056
|
||||||
bankedbg 1051
|
bankedbg 1067
|
||||||
banklocl 4816
|
banklocl 4832
|
||||||
banktest 3751
|
banktest 3767
|
||||||
bios_text 4470
|
bios_text 4470
|
||||||
cat 915
|
cat 915
|
||||||
conio 4634
|
conio 4634
|
||||||
@@ -29,7 +29,7 @@ mdview 19122
|
|||||||
mdview2 27029
|
mdview2 27029
|
||||||
mem_test 4558
|
mem_test 4558
|
||||||
mouse 4394
|
mouse 4394
|
||||||
openenv 6111
|
openenv 6127
|
||||||
ptime 5896
|
ptime 5896
|
||||||
rt_test 4103
|
rt_test 4103
|
||||||
seek 4177
|
seek 4177
|
||||||
|
|||||||
|
+6
-2
@@ -64,7 +64,11 @@ ___sdcc_bjump_ehl::
|
|||||||
jp (hl) ; tail-jump to callee
|
jp (hl) ; tail-jump to callee
|
||||||
|
|
||||||
;; Per-bank physical page table. Index = bank id (1-based; [0] is unused).
|
;; Per-bank physical page table. Index = bank id (1-based; [0] is unused).
|
||||||
;; Filled at startup by crt0_banked.s.
|
;; Filled at startup by crt0_banked.s ДО gsinit, а gsinit зануляет
|
||||||
.area _DATA
|
;; _DATA (с 2026-07-04) — поэтому таблица живёт в _CODE (RAM на
|
||||||
|
;; Sprinter, всегда замаплен: это же нужно и трамплину выше).
|
||||||
|
;; Регрессия «bank_pages[]=0 → трамплин прыгает в мусор» была именно
|
||||||
|
;; из-за .area _DATA здесь.
|
||||||
|
.area _CODE
|
||||||
_bank_pages::
|
_bank_pages::
|
||||||
.ds 16
|
.ds 16
|
||||||
|
|||||||
Reference in New Issue
Block a user