С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Долго разбирался с отсутствием экрана: оказывается, он по умолчанию отключён(!). У меня звук работает на "ура", а вот плавного скроллинга почему-то нет (при том, что у меня экран работает на родной частоте 50 Гц). Да, и при попытке выйти эмуль зависает, приходится его "гасить" вручную.
P.S: Конфигурация: Vista x64, ASUS P5E, Core2Quad 2.8 GHz, NVidia GF GTX 560, звуковуха Supreme FX II (идёт в комплекте с материнкой), FullHD TV через HDMI 50 Hz
Windows 8.1 pro x64, эмулятор завершается только принудительно.
3 буффера мало, в zxmak2 насколько помню 8 по 1/50, DirectSound поддерживает маленькие буфера и даже ивенты кидает правильно, но для бесперебойной работы требует чтобы в буффере висело как Минимум около 0.1 сек, т.е. как минимум 4 буфера по 1/50 сек. Но на синхронизацию по ивентам на таких маленьких интервалах полагаться не стоит - раз в 1-2 секунды будет приходить несколько ивентов подряд. Это можно увидеть отключив vblank sync в тестовой версии нового zxmak2 или в unreal - на мерцающих мультиколорах происходит смена кадров, на которых производится пропуск.
Синхронизация по getcurrentposition врядли будет успешной, т.к. у кода не будет возможности отдать процессор системе заблаговременно, чтобы получить его назад вовремя. С Directsound оптимальный вариант - ивенты о достижении нужной позиции
Последний раз редактировалось ZXMAK; 07.05.2014 в 14:54.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
В windows процессор выполняет код не непрерывно, периодически система забирает процессор на некоторое время (порядка10-50 мс), чтобы отдать его другим процессам. Время это довольно существенное для эмулятора. Если эмулятор в цикле опрашивает позицию буффера, дожидаясь нужного момента, для системы это выглядит как выполнение полезной работы и она может прервать этот процесс прямо в момент когда воспроизведение буффера подойдет к нужной позиции.
Чтобы получить идеальную эмуляцию, процессор должен обработать фрейм и долить буффер в нужный момент, после чего сразу добровольно отдать процессор системе, чтобы она успела вернуть его к началу следующего фрейма...
По scanline синхронизация на несколько порядков точнее, чем по позиции аудиобуффера. Но ивентов о событии vblank в windows к сожалению не предусмотрено
Т.е. идеальных средств для такой синхронизации в windows нету. Ивенты нотификации о достижении нужной позиции аудиобуффера были бы таким идеальным решением. И они работают почти идеально, но к сожалению не достаточно стабильно для синхронизации с видеоразверткой дисплея. Точнее, для идеального звука они работают отлично, но плавные скроллы на дисплее по ним не получить.
Я вот тут выкладывал тестовый снапшот http://zx.pk.ru/showpost.php?p=705099&postcount=1183
Если усредненный цвет мультиколора на нем периодически меняется (обычно раз в секунду-две, зависит от стабильности синхронизации), значит есть проблема синхронизации кадров.
Включив debug info, отключая и включая vblank sync в zxmak2, по колебаниям fps можно посмотреть, насколько менее стабильна синхронизация по ивентам от позиции аудиобуффера.
Последний тестовый билд zxmak2 умеет держать синхронизацию стабильно (при включенном vblank), но это пока работает хорошо только на многоядерных процессорах достаточной производительности. Чтобы достичь этого приходится кушать одно ядро на 100% (для отслеживания текущей scanline видеокарты, в твоем случае это GetCurrentPosition). К сожалению даже если вставить Sleep(0) сразу после начала развертки, система иногда не успевает отдать процессор назад до начала следующего кадра. Если у процессора недостаточно ядер, чтобы обслуживать остальные процессы системы, то захватить ядро на 100% не получится и с синхронизацией будут проблемы.
Эмуляторов которые стабильно держут синхронизацию фактически нет, если не считать последнюю версию zxmak2. Ктото писал что для unreal вроде есть такой мод, но можно ли его включить на стандартной сборке не знаю. У меня не получилось.
---------- Post added at 03:24 ---------- Previous post was at 02:36 ----------
PS: кстати, раз уж разобрался, можешь поподробнее описать алгоритм выборки видеобайтов в pentagon? Заранее спасибо![]()
Последний раз редактировалось ZXMAK; 08.05.2014 в 04:13.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
EmuStudio, хотя вариант ZX чисто тестовый, лучше смотреть EmuStudio ТИА-МЦ-1 или какие-то другие. Так вот, EmuStudio в принципе построен так, что главное для него - это 100% синхронизация.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)