1b4fbeaa6b
Логический кадр = ровно n кадровых интервалов (1=50/2=25/3=~16.7 fps); при переполнении слота — выравнивание на ближайший фронт (без дрейфа фазы, в отличие от наивного «жди n фронтов»). Механика: фоновый счётчик _gfx_frame_tick инкрементит _gfx_frame_isr, поставленный в СВОЙ слот цепи (irq_chain_add); gfx_set_fps_div(1) снимает только этот слот (irq_chain_remove), не трогая хендлер приложения. gfx_wait_vsync: ветка n>=2 (счётчик + halt) перед лучевым поллингом; поллинг вынесен в static gfx_wait_vsync_beam (функция с хвостовым __asm не должна иметь переходов через asm — SDCC не эмитит эпилог-метку; ранний return делителя в чистом-C gfx_wait_vsync). Файлы: common/_gfx_fps_state.c (данные), _gfx_frame_isr.c (ISR), gfx_set_fps_div.c (сеттер, единственная ссылка на irq-механику → DCE). Работает tiny/big/huge (цепочка all-modes); small для мелких программ = EINVAL. Проверено MAME (tests/fpsdiv): n=1/2/3 → 20/40/60 кадров на 20 wait'ов (drift=0); n=2 с рендер-заглушкой ~1 кадр → период держится 2 (поглощение перерасхода, наивный путь дал бы ~60); huge идентично; small = EINVAL graceful. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
63 lines
882 B
Plaintext
63 lines
882 B
Plaintext
# Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
|
|
accfill 3772
|
|
argv 3431
|
|
assrtest 3847
|
|
atlas 9193
|
|
attrprob 4087
|
|
balls 6031
|
|
banked 1056
|
|
bankedbg 1067
|
|
banklocl 4683
|
|
banktest 3767
|
|
bgi_img 7057
|
|
bgitest 3737
|
|
bios_text 4461
|
|
blitperf 5860
|
|
blitw 4939
|
|
cat 913
|
|
cblstream 6217
|
|
cbltest 6366
|
|
cblwav 6434
|
|
conio 4605
|
|
conio2 3929
|
|
dec_test 860
|
|
errno 5966
|
|
fbench 8085
|
|
fdmax 6023
|
|
filetest 10547
|
|
fpsdiv 4870
|
|
gets 509
|
|
gfx_dbuf 5032
|
|
gfx_demo 4103
|
|
gfxbanks 6044
|
|
hello 4167
|
|
hello2 4244
|
|
irqtest 6527
|
|
ls 4835
|
|
malloc 4461
|
|
mdview 18878
|
|
mdview2 27031
|
|
mem_test 4555
|
|
mouse 4382
|
|
openenv 6124
|
|
palfile 5406
|
|
ptime 5744
|
|
rpgprof 12082
|
|
rpgwalk 9501
|
|
rt_test 4892
|
|
seek 4188
|
|
simple 955
|
|
solidt 11531
|
|
space 11272
|
|
spranim 9431
|
|
spriteclip 4119
|
|
sprites 6791
|
|
stattest 7549
|
|
stdlib 6643
|
|
stest2 3644
|
|
strtest 1340
|
|
text_palette 5024
|
|
timedir 5454
|
|
w0page 8831
|
|
winrest 4459
|