User Tag List

Страница 173 из 278 ПерваяПервая ... 169170171172173174175176177 ... ПоследняяПоследняя
Показано с 1,721 по 1,730 из 2779

Тема: Xpeccy

  1. #1721

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Эмулируемые железяки на вывод звука вообще не влияют, они только сообщают о своей громкости, не надо их сюда приписывать.
    Суть такова:
    Есть кольцевой буфер размером 16кб. Во время эмуляции считается сэмулированное время, и через определенные промежутки с текущей железяки снимается громкость, несколько таких значений подряд усредняются и этот усредненный сэмпл ложится в буфер. Это всё происходит в потоке эмуляции. Без ускорения эмуляция происходит кусками, цель каждого куска - заполнить буфер на столько семплов, сколько хочет SDL. Это делает звук более гладким, но разрывает графику. Иначе будет наоборот, но ещё хуже.
    Далее есть SDL-овский callback на воспроизведение звука, он работает в своём собственном потоке. Первые пара буферов пропускается, чтобы не пересекаться с заполнением буфера. Воспроизведение идёт с того же самого кольцевого буфера, но чуть позади заполнения. В идеале заполнение и воспроизведение идут с одной скоростью, не догоняют и не обгоняют друг друга. Но если вдруг воспроизведение догнало заполнение на расстояние одного буфера, то оно откатывается назад - тут происходит проигрывание прошлого буфера.
    Есть два особых случая - эмуляция запаузена и эмуляция запущена на полной скорости (insert). В первом случае всё должно быть как описано выше, но т.к. устройства не эмулируются, то снимаемый сэмпл звука не меняется, это тишина. А во втором случае я, возможно, опять накриворучил...
    Все любят гипножабу

  2. #1722

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,093
    Спасибо Благодарностей отдано 
    103
    Спасибо Благодарностей получено 
    152
    Поблагодарили
    100 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    > Первые пара буферов пропускается, чтобы не пересекаться с заполнением буфера. Воспроизведение идёт с того же самого кольцевого буфера, но чуть позади заполнения.

    Говорили же старшие - никогда не заполняй воспроизводимый буфер. Воспроизводи только "задний". Если нужен такой большой запас - делай 3 буфера. В unreal-е три буфера. Каждый, правда, в 200 байт (и этого всегда хватает, и лага практически нет).

    У тебя после "тишины" инсерта (или дебаггера) указатель воспроизведения оказывается не "перед" указателем заполнения. Иногда. И ненамного. Настолько ненамного, что они периодически пересекаются.
    Последний раз редактировалось Dexus; 04.11.2019 в 12:25.

  3. #1723

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,981
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    321
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    243 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style Посмотреть сообщение
    Есть кольцевой буфер размером 16кб. Во время эмуляции считается сэмулированное время, и через определенные промежутки с текущей железяки снимается громкость, несколько таких значений подряд усредняются и этот усредненный сэмпл ложится в буфер. Это всё происходит в потоке эмуляции. Без ускорения эмуляция происходит кусками, цель каждого куска - заполнить буфер на столько семплов, сколько хочет SDL. Это делает звук более гладким, но разрывает графику. Иначе будет наоборот, но ещё хуже.
    Далее есть SDL-овский callback на воспроизведение звука, он работает в своём собственном потоке. Первые пара буферов пропускается, чтобы не пересекаться с заполнением буфера. Воспроизведение идёт с того же самого кольцевого буфера, но чуть позади заполнения. В идеале заполнение и воспроизведение идут с одной скоростью, не догоняют и не обгоняют друг друга. Но если вдруг воспроизведение догнало заполнение на расстояние одного буфера, то оно откатывается назад - тут происходит проигрывание прошлого буфера.
    зачем всё это при живом SDL_QueueAudio? с которым нужно следить только за длиной очереди
    Прихожу без разрешения, сею смерть и разрушение...

  4. #1724

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    зачем всё это при живом SDL_QueueAudio?
    Потому что сначала там присутствовало ещё и alsa.
    Да и SDL1 придётся бросать. Хотя, нафиг он мне сдался теперь...
    Все любят гипножабу

  5. #1725

    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это конечно, прикольно как там кольцевой буфер глючить (делов, то). Ну, мне уже не интересно, писал эмуляторы в начале 2000г. И как там чего у каждой платформы (железа) сделано, не объять. Все это выходит за рамки Z80 (zx).

    Давайте становиться первым в мире плагинным эмулятором. До этого были попытки у ZXMAK2, но там все уперлось в ZX.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  6. #1726

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от OrionExt Посмотреть сообщение
    Давайте становиться первым в мире плагинным эмулятором. До этого были попытки у ZXMAK2, но там все уперлось в ZX
    На самом деле это не так и сложно сделать в рамках xpeccy. Он и так почти состоит из обособленных блоков. Но сейчас на что-то такое времени и сил нет. Может, позже соберусь и сделаю
    Все любят гипножабу

  7. #1726
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #1727

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я завяз в комодуре - хотя бы до минимально рабочего состояния хочется довести. Понятно, что тут мне вряд ли ответят, но всё же:
    • как я понял, CIA тактируется на частоте CPU, примерно 1МГц с отклонениями. Значит, таймер в большинстве случаев отсчитывает такты CPU. Да? (не считаем счетчик внешнего сигнала и счетчик таймера B по переполнению таймера А)
    • Вделал загрузку самых простых тапок - raw tape image, пробую загрузить по LOAD - получаю дулю с покоцаными данными. Во время пилота irq генерирует только /flag, но как только начинаются данные, включается irq от таймера А - он там зачем? По дебагу вижу irq от мофонного сигнала с периодами ~380/520/680 тактов, и иногда в них вклинивается irq от таймера А.
    • И ещё вопрос - когда таймер стартует, в его счетчик всегда записывается значение инициализатора? Даже когда "стартует" уже запущенный таймер?
    Все любят гипножабу

  9. #1728

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проще будет взять рабочий эмуль с дебагером и провести жменю тестов
    ну или сорец
    дето сами буржуины писали что циа это редкостное...
    ...в плане описания возможностей

  10. #1729

    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,087
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    98 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Насчет тестов. Сам написать не смогу, потому как в 6502 не силён. Если есть таковые в виде PRG (что-то типа снапшота) для разных компонентов коммодора - буду рад заиметь. Находил такие только в d64, но до эмуляции дисков мне ещё как до Луны ползком.

    == added

    Нашёл ещё один даташит на CIA. Перегрузка таймера работает не так, как я сначала думал:
    - при переполнении таймер всегда инициализируется
    - при записи в старший регистр таймера в остановленном состоянии он тоже инициализируется
    - бит "force load" в контрольном регистре значит "инициализировать таймер прямо сейчас" - сначала я думал, этот бит значит "перегружать таймер при переполнении или оставлять его FFFF).
    - при запуске таймера без бита "force load" он, соответственно, не инициализируется
    Последний раз редактировалось SAM style; 04.12.2019 в 10:51.
    Все любят гипножабу

    Этот пользователь поблагодарил SAM style за это полезное сообщение:

    NEO SPECTRUMAN(04.12.2019)

  11. #1730

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,981
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    321
    Спасибо Благодарностей получено 
    321
    Поблагодарили
    243 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а звук-то починил? если да, то хоть бы выложил, без комода
    Прихожу без разрешения, сею смерть и разрушение...

Страница 173 из 278 ПерваяПервая ... 169170171172173174175176177 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •