b34997073e
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
68 lines
942 B
Plaintext
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
|