libc: IM2 Phase 2b — звук CBL/COVOX через callback fill(), без кольца libc
CBL уже имеет аппаратный буфер 256 Б (2×128, двойная буферизация на стороне железа) — держать поверх него ещё одно кольцо в libc было бы лишней копией. cbl_open(freq, fmt, pump_mode, underrun_mode, fill) регистрирует callback, вызываемый из ISR за очередным блоком; он сам пропихивает данные приложения (откуда угодно) через cbl_push_otir()/ cbl_push_accel() — без промежуточного буфера. - два насоса: OTIR (порт 0x4F) и ACCEL (акселератор, спец-страница EMM 0xFD@0xC000); OTIR+16-бит запрещён (EINVAL) — по исходнику MAME порт данных физически не может собрать 16-бит сэмпл из пары байт; - форматы CBL_FMT_MONO8/16/STEREO8/16, частоты 7.8..109к; - CBL_UNDERRUN_APP (по умолчанию, недолив не наша забота) / CBL_UNDERRUN_SILENCE (буфер тишины malloc'ится только в этом режиме); - tests/cbltest: матрица 64 комбинации (2 насоса × 8 форматов × 4 частоты); tests/cblwav: banked-стрим речи с дискеты (физстраницы кэшированы заранее — mem_get_page нельзя звать из fill()/ISR); tests/cblstream: единственный случай с собственным кольцом уровня приложения (диск нельзя читать из fill()). Verified в MAME 2026-07-07 — все три теста работают. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -84,6 +84,22 @@ Quick wins:
|
||||
dual-write тест → если работает, кэшировать Port_Y в putpixel
|
||||
(~8× меньше OUT для Брезенхэма); если нет — вычистить из доков.
|
||||
- [ ] fdmax: лимит манипуляторов и зависание 9-го OPEN — MAME vs железо.
|
||||
- [ ] CBL: щелчок перед первым проигрыванием звука за сессию (tests/
|
||||
cbltest, tests/cblwav) — воспроизводится ТОЛЬКО на первом запуске
|
||||
программы за сессию MAME, не зависит от содержимого потока
|
||||
(тон/тишина/речь одинаково). Похоже на разовый прогрев звуковой
|
||||
подсистемы MAME при первой активации канала — на реальном железе
|
||||
скорее всего отсутствует. Проверить и закрыть либо описать как
|
||||
реальный аппаратный эффект.
|
||||
- [ ] **CBL: помехи в звуке при движении мыши** (tests/cblstream,
|
||||
2026-07-07) — при потоковом воспроизведении движение мыши даёт
|
||||
слышимые артефакты. Гипотеза (НЕ подтверждена): мышь может
|
||||
делить SIO-канал/детект-бит с клавиатурой (порт 0x19 бит 0,
|
||||
см. _irq_tramp.c), и трамплин классифицирует байты мыши как
|
||||
«клавиатура» → сразу chain на DSS (0x0038), пропуская проверку
|
||||
CBL-хука для ЭТОГО прерывания — при движении мыши часть тиков,
|
||||
которые должны были обслужить CBL-насос, уходят мимо, кольцо
|
||||
недоливается. Нужно исследование (MAME-дамп/лог трамплина).
|
||||
|
||||
## Known quirks (зафиксированы, обходы в libc)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user