Files
Sprinter-SDCC/docs/size_baseline.tsv
T
snark13 b34997073e libc/cbl: выключение CBL больше не оставляет железо петь одну ноту
cbl_close() не пишет в порт управления ноль: пока gfx_wait_vsync держит
ссылку ради бита луча (в PoP её берёт pop_pace_arm на всю программу),
bit7 остаётся включённым.  А буфер CBL (256 слотов) при включённом bit7
крутится по кругу и не чистится ничем — железо бесконечно поёт хвост
последнего сэмпла, тоном и громкостью по последней мелодии.  Пойман
пользователем на железе: Ctrl+S во время музыки и пропуск заставки
давали ноту до следующего cbl_open.

В MAME не воспроизводится: "немым" кодом частоты был reserved-код 2, у
которого divs[2]==0 и таймер не заводится вовсе.  На железе reserved-коды
не определены, ЦАП тактируется — тишина держалась на свойстве эмулятора,
а не железа.

Теперь тишину даёт СОДЕРЖИМОЕ БУФЕРА:
- _cbl_port_sync() после каждой записи в порт управления зовёт
  _cbl_prime(0x80).  Это закрывает и паузу звука, и включение bit7 ради
  луча на холодном старте (в буфере лежал мусор от прошлой программы), и
  полное выключение — при bit7=0 те же 256 записей уходят прямо в ЦАП
  обычного COVOX и центруют его, снимая щелчок;
- _CBL_VSYNC_FREQ переведён с reserved-кода 2 на документированный 8
  (7,8125 кГц): поведение определено и на железе, и в MAME, прерывания
  по-прежнему выключены (bit4=0), а бит 7 порта 0xFE трамплин смотрит
  только при живом хуке насоса;
- cbl_close() зовёт sync внутри той же DI-скобки, где снимает хук, иначе
  насос долил бы буфер уже после заливки.

Цена: +2 Б программам со звуком, +11 Б графическим (тянется _cbl_prime
следом за gfx_wait_vsync), 256 OUT'ов (~0,3 мс) на редкое событие —
эталоны cblstream/cbltest/cblwav/gfx_dbuf обновлены.  Рост atlas в
size-check к этой правке отношения не имеет (замерен тот же и без неё).

Проверено: кодоген _cbl_port.asm; SprPoP пересобран и прогнан в MAME
(титры → пропуск заставки → уровень 1, пейсинг по лучу жив).  Сам баг
проверяется только на железе.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DSYUpuaQpKr48kBav2iiV4
2026-09-02 10:55:15 +03:00

942 B

1# Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
2accfill3783
3accop7067
4argv3431
5assrtest3847
6atlas9193
7attrprob4087
8banked1056
9bankedbg1067
10banklocl4683
11banktest3767
12bgi_img8677
13bgitest3748
14bios_text4461
15blitperf5860
16blitw4939
17cat913
18cblstream5862
19cbltest6008
20cblwav6101
21conio4605
22conio23929
23convbench3508
24dec_test860
25errno5966
26fbench8085
27fdmax6023
28filetest10547
29fpsdiv4870
30gets509
31gfx_dbuf5142
32gfx_demo4114
33gfxbanks6044
34hello4167
35hello24244
36irqtest6690
37kbdpoll1282
38kbdraw4911
39ls4835
40malloc4461
41mem_test4555
42mouse4382
43openenv6124
44pageflip6334
45palfile5406
46ptime5744
47rt_test5197
48scroll6744
49seek4188
50simple955
51solidt11531
52spranim9431
53spriteclip4119
54sprites6791
55stattest7549
56stdlib6643
57stest23644
58strtest1340
59text_palette5024
60timedir5454
61w0page8831
62w3bgfx5243
63w3big3673
64w3huge3700
65w3probe3556
66w3tiny3471
67winrest4459