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

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