обнаружилось что рилтайм граф не на всех видеокартах рисовался, на лаптопе не рисовался, ломал голову почему, оказалось дело в rhwvalue для transformed color вершин.
Также заметил интересную особенность, Direct3D девайс запоминает дисплей на котором был создан и если перетянуть окно на другой дисплей с другой частотой, он продолжает обновляться с частотой другого видеоадаптера (на котором был создан). Нашел способ вычислить на каком адаптере сейчас работает эмулятор - его можно найти по имени дисплея, а имя дисплея можно вытянуть из hWnd. Это дает возможность получить частоту дисплея, но нужно еще придумать способ заставить Direct3D применить новую частоту.
Кстати люди пишут, что если через твики менять частоту дисплея, то DirectX дает неправильную частоту... Так что с этим тоже засада, похоже реальную частоту нужно только замерять...
Еще интересный факт - по графу теперь стало видно, что на каждой машине синхронизация от звука работает совершенно по разному
Вторым открытием стало то что Win 7 иногда чегото творит, что в результате кадры успешно и вовремя отправляются, но система их забывает показать, наблюдается обычно если чтото тяжелое начинает ворочаться на уровне ядра (антивирус)
PS: также был обнаружен и пофиксен баг с синхронизацией потоков в реализациях IHostKeyboard
Последний раз редактировалось ZXMAK; 12.01.2015 в 22:52.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
а из неприятностей - Full Screen всегда работает на одном экране, даже не на том, на котором создан(девайс запоминает дисплей на котором был создан и если перетянуть окно на другой дисплей с другой частотой, он продолжает обновляться с частотой другого видеоадаптера (на котором был создан).
Profi v3.2 -=- Speccy2010,r2
Зарелизил новую версию: 2.8.3.37808
Что нового:
- исправлена ошибка синхронизации потоков;
- добавлен рилтайм граф, отображающий время между сменой кадров и затраченного времени на обновление и отправку данных на видеокарту и звуковую карту;
- исправлено измерение fps (теперь для большей точности интервал измерения 1 секунда);
- исправлена заливка фона для индикатора fps (раньше на некоторых видеокартах его просто не было);
- исправлена синхронизация XNA4 хоста;
- исправлен сброс Z80 (USR 46578);
- исправлен порт IRB у AY8910 для PENTEVO (подвисало при переходе в 48К бейсик);
- исправлена эмуляция флага только чтение для HDD (теперь операция записи выполняется как положено, но запись на диск не происходит);
- исправлена обработка ошибок для лучшей совместимости с Linux;
- добавлена возможность закрыть консоль логов по Ctrl+C/Ctrl+Break;
- отключена кнопка закрытия у консоли логов, т.к. приводила к мгновенному закрытию эмулятора без сохранения данных (также консоль логов отключена по дефолту в log4net.config);
- масштабный рефакторинг кода практически завершен, теперь UI полностью отделен от движка, крупные изменения завершены (ну разве что Hardware часть будет вынесена в отдельную или несколько отдельных сборок), изменения теперь будут более точечными;
- также поменяласть структура имени типа при загрузке/сохранении конфигурации машины (в связи с масштабной сменой структуры);
- также, если нет конфига машины, то по дефолту теперь открывается конфигурация из machines.config, помеченная аттрибутом isDefault="true"
![]()
Последний раз редактировалось ZXMAK; 13.01.2015 в 00:15.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Я смотрю идея с графом понравилась, в unreal тоже прикрутили![]()
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
возился с синхронизацией видео, в конце концов попробовал синхронизацию просто от времени сделать и на ней к моему удивлению эмуль стал работать очень плавно и отзывчиво
Вот как выглядит граф при синхронизации по времени:
частота кадров иногда дергается между 50.000 и 50.001, а так стоит как вкопанная
но к сожалению в этом режиме, также как и в спектакуляторе и unreal, происходит смена четных/нечетных кадров каждые 5-10 секунд. Что заметно в ZXTIME-15... Но плавность скролов и отзывчивость эмулятора с такой синхрой просто обалденная. Вобщем маст хевБуду добавлять синхру по времени (сейчас пока отладочный вариант -кривоватый).
![]()
Последний раз редактировалось ZXMAK; 14.01.2015 в 05:24.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
да, а других источников точного измерения времени на PC вроде как и нету
Кстати заодно заменил поэлементное копирование массивов с графикой и звуком на kernel32 MemoryCopy. Если вывести время копирования на граф, то с достаточно заметного уровня оно упало практически до уровня, который на графе даже не виден![]()
Проверял еще как эмит кода в рантайме на моно под линуксом работает - все ок
Проверял точками останова по условию в отладчике Adlers, я ему подсказал вариант с эмитом кода в рантайме для условных точек останова и он на удивление быстро этот вопрос разобрал и реализовал. код конечно требует переработки, но работает все на удивление быстро. например условие остановки AF==0005 на скорость эмуляции практически не влияет
Под моно в линуксе сейчас нет видео, поэтому проверял вслепую через встроенный отладчик Adlers, путем установки брейкпонита по обращению к памяти: br memread 0003
Все работает - после сброса вываливается в отладчик, т.е. эмит кода в рантайме под моно работает
Возможностей для оптимизации еще уйма![]()
Последний раз редактировалось ZXMAK; 14.01.2015 в 20:12.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Обновил эмулятор до версии 2.8.4.37878:
- исправлен фулскрин на системах с несколькими дисплеями;
- заметная оптимизация производительности для video/sound rendering;
- оптимизация измерения fps;
- добавлен Time Sync (синхронизация кадров по времени);
- значительно улучшен VBlank Sync;
- Настройки меню View переработаны (добавлены пункты "Frame Sync Source" и "Video Filter");
- значительно уменьшена нагрузка на процессор для Time sync;
- значительно уменьшена нагрузка на процессор для VBlank sync;
- рефакторинг кода (CPU, Engine, Circuits, HDD emulation)
Основная фишка этого релиза - переработанная синхронизация видео/звука. Добавлена возможность синхронизации по времени. Качество VBlank Sync улучшено в разы.
Теперь при включении синхронизации от видео эмулятор не жрет процессор!При этом качество еще улучшилось.
Синхронизация по Video, теперь работает лучше чем во всех остальных эмуляторах и процессор при этом не жрет
Правда ресамплер пока заточен под 75 Гц дисплеи, на 60 Гц будут наблюдаться биения, нужно будет переделать.
В релизе замечен небольшой баг - после включения Max Speed, синхронизация сбрасывается на Sound, хотя отображается та что была выбрана. Фиксится выбором Frame Sync Source после каждого нажатия Max Speed. В следующем релизе исправлю.
Последний раз редактировалось ZXMAK; 15.01.2015 в 13:44.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)