Важная информация

User Tag List

Страница 63 из 267 ПерваяПервая ... 596061626364656667 ... ПоследняяПоследняя
Показано с 621 по 630 из 2664

Тема: Xpeccy

  1. #621
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А что у тебя вынесено в отдельный поток? Непосредственно генерация звука или воспроизведение результата этой генерации?
    В процедурине на событие таймера 20мс:
    Буфер дозаполняется, если не полностью заполнился, отправляется играть.
    Выдаётся сигнал на отрисовку окна (если она закончилась с прошлого раза)
    Выдаётся сигнал на начало эмуляции (тоже если закончилась)
    Изнутри эмуляции через эн-ные промежутки сэмулированного времени выдаётся сигнал "положить очередной сэмпл в буфер".

    Сигналы привязаны к соответствующим слотам и обрабатываются главным циклом Qt - судя по докам, каждый в своём потоке.
    Все любят гипножабу

  2. #622
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style Посмотреть сообщение
    Сигналы привязаны к соответствующим слотам и обрабатываются главным циклом Qt - судя по докам, каждый в своём потоке.
    Вот что-то насчет этого есть сомнения. Цикл, получается, должен созавать по потоку на каждого подписчика.

  3. #623
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Вот что-то насчет этого есть сомнения. Цикл, получается, должен созавать по потоку на каждого подписчика.
    Да, сфэйлил. Опытным путём проверил - даже 2 разных объекта не одновременно выполняют слоты.
    Все любят гипножабу

  4. #624
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style Посмотреть сообщение
    Да, сфэйлил. Опытным путём проверил - даже 2 разных объекта не одновременно выполняют слоты.
    Распараллеливание эмуляции не такая простая задача, как кажется.

    Единственная идея была- все влияющие на звукогенерацию выводы в порт ставить в очередь вместе с временнОй меткой и рендерить либо в конце фрейма (для однопоточного режима) либо по мере поступления (для двухпоточного, но возможны затраты на синхронизацию).

    Например, вот как делается рендеринг AY в ZXTune.
    На вывод в порт зовется метод:
    Код:
        virtual void RenderData(const DataChunk& src)
        {
          BufferedData.Add(src);
        }
    Т.е. ничего не делаем, просто ставим в очередь.

    Когда у нас конец фрейма, можно проанализировать очередь и выбросить всякие левые устройства (например, не было вывода в порт ковокса, нафига его микшировать?). Потом просто все элементы очереди обрабатываются:

    Код:
        void RenderChunks(Renderer& render)
        {
          for (const DataChunk* it = BufferedData.GetBegin(), *lim = BufferedData.GetEnd(); it != lim; ++it)
          {
            RenderSingleChunk(*it, render);
          }
          BufferedData.Reset();
        }
    где
    Код:
        void RenderSingleChunk(const DataChunk& src, Renderer& render)
        {
          render.SetNewData(src);
          if (!Clock.HasOutputBefore(src.TimeStamp))
          {
            return;
          }
          Clock.SetFrameEnd(src.TimeStamp);
          MultiSample result;
          while (const uint_t toEnd = Clock.GetTicksToFrameEnd())
          {
            const uint_t toSound = Clock.GetTicksToSample();
            const uint_t toTick = 1 + std::min(toSound, toEnd);
            render.Tick(toTick);
            if (Clock.Tick(toTick))
            {
              render.GetLevels(result);
              Target->ApplyData(result);
            }
          }

  5. #625
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По ходу, для потоков надо всё переделывать.
    Созданный с pthread_create поток помирает, когда вызываший его метод заканчивает работу, даже если сам pthread_t определен вне этого метода? Например, внутри обработчика таймера я создаю поток, обновляющий окно. Некоторое время он работает, но потом вдруг перестаёт - экран не обновляется, хотя звук идёт.
    Все любят гипножабу

  6. #626
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,258
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    84
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style Посмотреть сообщение
    Созданный с pthread_create поток помирает, когда вызываший его метод заканчивает работу, даже если сам pthread_t определен вне этого метода? Например, внутри обработчика таймера я создаю поток, обновляющий окно. Некоторое время он работает, но потом вдруг перестаёт - экран не обновляется, хотя звук идёт.
    Ну этот поток все равно должен когда-то прерваться, так что проверь сначала логику и логами или отладчиком узнай причину выхода. Просто так завершаться ничего не должно.

  7. #627
    Master
    Регистрация
    26.03.2005
    Адрес
    Ivanovo
    Сообщений
    640
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    1 сообщение
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вставлю свои 10 копеек. Сделал я в SDL выводе заодно и заливку в файл. Вот что происходит если нет никакого звука:
    Код:
    00083D14 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083D40 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083D6C 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083D98 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083DC4 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083DF0 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083E1C 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083E48 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083E74 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083EA0 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083ECC 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00083EF8 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F │ 3F 3F 3F 3F  ????????????????????????????????????????????
    00
    Это генерит конкретно вот этот вот кусок кода:
    Код:
    gsPair gsvol = gsGetVolume(zx->gs);
    	levl += gsvol.left * gsVolume / 100.0;
    	levr += gsvol.right * gsVolume / 100.0;
    У меня появилось сильностойкое подозрение что проблема в 8-битном звуке. Попробую переделать на 16 бит и посмотреть.

  8. #628
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    build 20130115
    • Вернул формирование звука обратно
    • Заодно избавился от щелчков в некоторых случаях (смена состояния паузы эмуляции)
    • Вроде, получилось вывести обновление окна в отдельный поток, осталось получше подобрать время задержки между проверками сигнала на обновление

    А 8-битный звук у меня был с самого его появления. Раз раньше играло ровно, то проблема все-таки не в этом.
    [ deb x86 ][ win32 ]

    жуки
    • при изменении палитры (ATM2, Evo) рушится (фикс залит на гитхаб). Дело сугубо SDL-овое, из-за смены палитры. Собранных файлов выше не касается.
    Последний раз редактировалось SAM style; 21.01.2013 в 22:20.
    Все любят гипножабу

  9. #629
    Member Аватар для mungo
    Регистрация
    04.10.2006
    Адрес
    Минск
    Сообщений
    89
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Попытался запустить в режиме пентагона, но на этапе подстановки ромов стал в ступор: как их правильно расставить? Что значат эти пейджи и цифирьки рядом?
    И кста обидно, что нужно диски заново подставлять в тырдос - не запоминает на выходе...
    Последний раз редактировалось mungo; 07.02.2013 в 10:54.
    Сомневаюсь, и вам советую!

  10. #630
    Guru Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    2,055
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    218
    Поблагодарили
    92 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от mungo Посмотреть сообщение
    Попытался запустить в режиме пентагона, но на этапе подстановки ромов стал в ступор: как их правильно расставить? Что значат эти пейджи и цифирьки рядом?
    *.rom - файлы лежат в ${CONFIGDIR}/roms. ${CONFIGDIR} - директория конфигов, зависит от оси и указана в первом посте темы.
    Обычно страницы распределены так:
    Page0 - бейсик-128
    Page1 - бейсик-48
    Page2 - теневое ПЗУ
    Page3 - TRDOS
    Цифры справа от названия файлов - это номер части. 0 значит, что берутся первые 16К из файла, 1 - 16К начиная со смещения 16К, 2 - 16К начиная со смещения 32К итд.
    Если файл ПЗУ собран в один (64К, 128К итд), его можно указать как single file - тогда первые 16К файла пойдут в Page0, вторые - в Page1 итд до конца (максимум 512К)
    Все любят гипножабу

Страница 63 из 267 ПерваяПервая ... 596061626364656667 ... ПоследняяПоследняя

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

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

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

Ваши права

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