Files
Sprinter-SDCC/docs/size_baseline.tsv
T
snark13 1b4fbeaa6b libbgi: FPS-делитель gfx_set_fps_div(n) поверх цепочки кадровых IRQ
Логический кадр = ровно 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>
2026-07-15 10:36:37 +03:00

882 B

1# Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
2accfill3772
3argv3431
4assrtest3847
5atlas9193
6attrprob4087
7balls6031
8banked1056
9bankedbg1067
10banklocl4683
11banktest3767
12bgi_img7057
13bgitest3737
14bios_text4461
15blitperf5860
16blitw4939
17cat913
18cblstream6217
19cbltest6366
20cblwav6434
21conio4605
22conio23929
23dec_test860
24errno5966
25fbench8085
26fdmax6023
27filetest10547
28fpsdiv4870
29gets509
30gfx_dbuf5032
31gfx_demo4103
32gfxbanks6044
33hello4167
34hello24244
35irqtest6527
36ls4835
37malloc4461
38mdview18878
39mdview227031
40mem_test4555
41mouse4382
42openenv6124
43palfile5406
44ptime5744
45rpgprof12082
46rpgwalk9501
47rt_test4892
48seek4188
49simple955
50solidt11531
51space11272
52spranim9431
53spriteclip4119
54sprites6791
55stattest7549
56stdlib6643
57stest23644
58strtest1340
59text_palette5024
60timedir5454
61w0page8831
62winrest4459