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

68 lines
942 B
Plaintext

# Эталон размеров _CODE (байт); обновление: python3 toolchain/size_check.py --update
accfill 3783
accop 7067
argv 3431
assrtest 3847
atlas 9193
attrprob 4087
banked 1056
bankedbg 1067
banklocl 4683
banktest 3767
bgi_img 8677
bgitest 3748
bios_text 4461
blitperf 5860
blitw 4939
cat 913
cblstream 5862
cbltest 6008
cblwav 6101
conio 4605
conio2 3929
convbench 3508
dec_test 860
errno 5966
fbench 8085
fdmax 6023
filetest 10547
fpsdiv 4870
gets 509
gfx_dbuf 5142
gfx_demo 4114
gfxbanks 6044
hello 4167
hello2 4244
irqtest 6690
kbdpoll 1282
kbdraw 4911
ls 4835
malloc 4461
mem_test 4555
mouse 4382
openenv 6124
pageflip 6334
palfile 5406
ptime 5744
rt_test 5197
scroll 6744
seek 4188
simple 955
solidt 11531
spranim 9431
spriteclip 4119
sprites 6791
stattest 7549
stdlib 6643
stest2 3644
strtest 1340
text_palette 5024
timedir 5454
w0page 8831
w3bgfx 5243
w3big 3673
w3huge 3700
w3probe 3556
w3tiny 3471
winrest 4459