Files
Sprinter-SDCC/applications/PoP/poc/Makefile
T

53 lines
3.1 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PoC порта Prince of Persia (applications/PoP/docs/PORT_PLAN.md §5).
# --memory huge, БЕЗ --bank.
#
# ПОЧЕМУ huge, а НЕ small (исправлено 2026-07-16): poc использует
# raw-клавиатуру (kbd_raw_open → IM2-таблица). Буферы IM2 (_irq_vec_buf,
# BSS) ОБЯЗАНЫ жить в W2 (0x8000-0xBFFF) — во время прерывания W1/W3
# могут быть перемаплены DSS (см. libc/irq/_irq_table.c, memory/
# fps_divider: «verified tiny/big/huge, small=EINVAL»). --memory small
# пулит W1+W2 в плоские ~32КБ и чейнит DATA за CODE — при небольшом CODE
# BSS уезжает в W1 (<0x8000), и _irq_table_ref отдаёт EINVAL →
# kbd_raw_open молча возвращал -1, poc печатал ошибку УЖЕ в графическом
# режиме (невидимо) и выходил в prompt. huge кладёт CODE в W1, а
# DATA/BSS/STACK/HEAP жёстко в W2 → IM2 работает. Цена: раздел 16КБ
# CODE / 16КБ DATA вместо общего 32КБ-пула small — сейчас влезает с
# запасом; при росте настоящего PoP CODE>16КБ понадобится банк под код.
#
# --bank НЕ нужен: gfx_blit_part()/atlas_load() сами временно трогают W3
# (видеобанк / чтение атласа) — банк room.c в W3 давал вероятностный
# «снег»; банк в W1 несовместим с CODE=W1 (трамплин переключения W1 сам
# бы уехал). sprintf() заменён на ручное hex-форматирование пути в
# tile_atlas_load() (единственный потребитель printf, ~2.9КБ).
EXAMPLE := poc
MEMORY ?= huge
EXTRA_FLAGS ?= --gfx 256
EXTRA_SRCS := room.c
TILE_ATLASES := res/tiles/tile01.atl res/tiles/tile14.atl res/tiles/tile03.atl \
res/tiles/tile13.atl res/tiles/tile0e.atl res/tiles/tile0b.atl
EXTRA_DATA := tools/kid.atl tools/room.pal res/room1.dat $(TILE_ATLASES)
include $(CURDIR)/../sdk.mk
LEVEL1_BIN := $(POP_ROOT)/SDLPoP/data/LEVELS/res2001.bin
tools/kid.raw tools/kid.pal: tools/gen_kid_placeholder.py
cd tools && python3 gen_kid_placeholder.py
tools/kid.atl: tools/kid.raw
python3 $(PROJ_ROOT)/toolchain/mkatlas.py $@ tools/kid.raw:16x16:1x12
res/room1.dat: tools/extract_room.py $(LEVEL1_BIN)
python3 tools/extract_room.py $(LEVEL1_BIN) 1 res/room1.dat
res/tiles/1F-0.png: tools/gen_tile_placeholders.py
cd tools && python3 gen_tile_placeholders.py
tools/room.pal $(TILE_ATLASES): tools/kid.pal res/tiles/1F-0.png tools/build_room_palette.py
cd tools && python3 build_room_palette.py
# make_disk.py упаковывает EXTRA_DATA на диск ПОД БАЗОВЫМ ИМЕНЕМ
# (плоская ФС) — tileNN.atl/room1.dat оказываются в корне рядом с
# kid.atl/room.pal, room.c/poc.c грузят их без пути.
$(EXAMPLE).exe: room.c tools/kid.atl tools/room.pal res/room1.dat $(TILE_ATLASES)