Вход

Просмотр полной версии : ZX DevStudio



Lion17
04.05.2014, 15:05
Цели создания ZX DevStudio
1. Максимально точная эмуляция
2. Отладчик с богатыми возможностями отладки
3. Встроенный ассемблер
4. Встроенный интерактивный дизассемблер

Выкладываю первый релиз http://animalservice.ru/ZXDevStudio/ZXDevStudio_1.0.0.zip.
Релиз сырой, будут баги и недоделки.
Однако, на текущий момент это единственный эмулятор с точной эмуляцией времянок Пентагона.

Жду предложений и багрепортов.

SoftLight
04.05.2014, 15:59
Когда ввожу в Basic48 любую команду, например, BORDER 1, то при нажатии Enter открывается окно 'Edit Register':
http://imglink.ru/thumbnails/04-05-14/aedef64b9bbbeb308e927c1c319d923b.jpg (http://imglink.ru/pictures/04-05-14/aedef64b9bbbeb308e927c1c319d923b.jpg)

И еще, можно ли пояснить, что обозначают различные области бордюра? Тактовая картина экрана?

---------- Post added at 15:59 ---------- Previous post was at 15:54 ----------

Еще, как правильно закрывать ZX DevStudio? При нажатии Exit долго думает и зависает с надписью в заголовке 'Не отвечает'. Тестировал на Win7 x64.

Lion17
04.05.2014, 16:09
И еще, можно ли пояснить, что обозначают различные области бордюра? Тактовая картина экрана?
Клик правой кнопкой по экрану откроет много интересного.
Синие полосы сверху и слева - синхроимпульсы.
Красная полоска в углу - импульс прерывания.
Часть бордюра со слабой контрастностью - невидимая часть бордюра.

---------- Post added at 16:07 ---------- Previous post was at 16:05 ----------


Когда ввожу в Basic48 любую команду, например, BORDER 1, то при нажатии Enter открывается окно 'Edit Register':
Скорее всего у тебя активно окно CPU. Кликни по скрину.

---------- Post added at 16:09 ---------- Previous post was at 16:07 ----------


Еще, как правильно закрывать ZX DevStudio? При нажатии Exit долго думает и зависает с надписью в заголовке 'Не отвечает'. Тестировал на Win7 x64.
По любому правильно. У меня под XP выходит чисто. Буду тестировать на других компах. Видимо что-то где-то убивается некорректно.

SoftLight
04.05.2014, 16:30
Часть бордюра со слабой контрастностью - невидимая часть бордюра.
Почти догадался. Но тогда вот тут верхняя часть невидимого бордюра странно выглядит, или так и должно быть?
http://imglink.ru/thumbnails/04-05-14/10c0ee325899ce4753d991fb3ee49899.jpg (http://imglink.ru/pictures/04-05-14/10c0ee325899ce4753d991fb3ee49899.jpg)

---------- Post added at 16:25 ---------- Previous post was at 16:21 ----------

Еще после долгой работы при нажатии клавиш курсор вверх/вниз на клавиатуре ноута вылетает ошибка, хотя все продолжает нормально работать. Я пока не отловил при каких условиях это происходит. Опять же грешу на Win7 x64.
http://imglink.ru/thumbnails/04-05-14/1b30a77f1bd362754771bffc8b8d3538.jpg (http://imglink.ru/pictures/04-05-14/1b30a77f1bd362754771bffc8b8d3538.jpg)

---------- Post added at 16:30 ---------- Previous post was at 16:25 ----------



Скорее всего у тебя активно окно CPU. Кликни по скрину.[COLOR="Silver"]


Точно! На фоне висело окно по Ctrl-Alt-Z. Заметил, что если я пишу на форум не остановив ZX DevStudio, то весь ввод дублируется в его окно.

Lion17
04.05.2014, 16:33
Почти догадался. Но тогда вот тут верхняя часть невидимого бордюра странно выглядит, или так и должно быть?
Все там правильно, в этом месте бордюр еще черный. А Spectaculator просто не отображает эту часть бордюра.

---------- Post added at 16:33 ---------- Previous post was at 16:30 ----------


Точно! На фоне висело окно по Ctrl-Alt-Z.
Надо будет игнорировать клавиатуру если окно Экрана не в фокусе.

Kakos_nonos
04.05.2014, 18:44
Можно маштаб настраивать? А то у меня спектрумистский экран в экран не влазит.

Titus
04.05.2014, 18:47
Однако, на текущий момент это единственный эмулятор с точной эмуляцией времянок Пентагона.

Спасибо! Интересный эмуль.

Есть несколько замечаний:

1. Почему так мало отведено на нижний бордюр? Даже скролл в прилагаемом RAGE не умещается на его как бы 'видимую' часть.

2. Звук на Core 2 Duo (WinXP) жутко хрипит (т.е. нет нормальных склеек между соседними фреймами, как я понимаю). При этом, эмуль занимает лишь 60-70 процентов быстродействия.

3. Хорошо бы на интервалах VBlank и HBlank тоже сделать возможность отображения бордюра, т.к. может быть интересно видедь, на каком участке переключается цвет бордюра.

4. Почему единственный точный эмуль? Чем неточны Спектакуляторы, Унрилы и ZXMAK?

---------- Post added at 18:47 ---------- Previous post was at 18:45 ----------


Можно маштаб настраивать? А то у меня спектрумистский экран в экран не влазит.

Скорее не настраивать, а запоминать, ибо настраивается он по правой кнопке мыши.

alone
04.05.2014, 18:48
Однако, на текущий момент это единственный эмулятор с точной эмуляцией времянок Пентагона.
Всё-таки предпочтительно 50 FPS, потому что на оригинальной схеме кварц 14.3 MHz, а не 14: http://alonecoder.nedopc.com/zx/pent_1.jpg
На Pentagon 2.666 тоже 50 FPS.

introspec
04.05.2014, 18:50
4. Почему единственный точный эмуль? Чем неточны Спектакуляторы, Унрилы и ZXMAK?До сих пор никто не эмулировал правильно выборку байтов при отображении экрана на пентагоне. Видимо, это первый эмулятор такого рода. На классике все эти вещи научились эмулировать уже достаточно давно.

Titus
04.05.2014, 18:52
До сих пор никто не эмулировал правильно выборку байтов при отображении экрана на пентагоне. Видимо, это первый эмулятор такого рода. На классике все эти вещи научились эмулировать уже достаточно давно.

Неужели и ZXMAK тоже халявит?

А есть хоть одна прога, где этот глюк был бы заметен?

introspec
04.05.2014, 18:55
Насколько я помню, ZXMAK не покажет мерцания байта в тестах из этого треда: http://zx-pk.ru/showthread.php?t=21212

---------- Post added at 15:55 ---------- Previous post was at 15:53 ----------

Думаю, могут быть ещё и мелкие нюансы в отображении бордерной графики (ошибки на +- один пиксель). Я точно знаю, что это проявляется на профи.

psb
04.05.2014, 19:03
Всё-таки предпочтительно 50 FPS, потому что на оригинальной схеме кварц 14.3 MHz, а не 14
и ау на 3.5 мгц, ога...


На Pentagon 2.666 тоже 50 FPS
Pentagon 2.666 не существует.

Lion17
04.05.2014, 19:19
Можно маштаб настраивать? А то у меня спектрумистский экран в экран не влазит.
Правой кнопкой по окну > Zoom.

---------- Post added at 19:07 ---------- Previous post was at 19:05 ----------


1. Почему так мало отведено на нижний бордюр? Даже скролл в прилагаемом RAGE не умещается на его как бы 'видимую' часть.
По картинке на своем телевизоре настраивал. Видимая часть, естественно, настраивается на любой размер.

---------- Post added at 19:09 ---------- Previous post was at 19:07 ----------


2. Звук на Core 2 Duo (WinXP) жутко хрипит (т.е. нет нормальных склеек между соседними фреймами, как я понимаю). При этом, эмуль занимает лишь 60-70 процентов быстродействия.
У меня тоже 2Duo и XP. Звук чистый. Буду искать причину. По быстродействию - случайно выложил, дебажную версию, она почти в два раза тормознутее оптимизированной.

---------- Post added at 19:11 ---------- Previous post was at 19:09 ----------



3. Хорошо бы на интервалах VBlank и HBlank тоже сделать возможность отображения бордюра, т.к. может быть интересно видедь, на каком участке переключается цвет бордюра.
Это уже есть - правая кнопка мыши по экрану > Border Only. Набор дебажных функций экрана очень неплохой.

---------- Post added at 19:12 ---------- Previous post was at 19:11 ----------


4. Почему единственный точный эмуль? Чем неточны Спектакуляторы, Унрилы и ZXMAK?
В этой теме подробно описано http://zx-pk.ru/showthread.php?t=21212

---------- Post added at 19:14 ---------- Previous post was at 19:12 ----------


Скорее не настраивать, а запоминать, ибо настраивается он по правой кнопке мыши.
Постараюсь в ближайшее время сделать сохранение настроек IDE.

---------- Post added at 19:17 ---------- Previous post was at 19:14 ----------


Всё-таки предпочтительно 50 FPS, потому что на оригинальной схеме кварц 14.3 MHz, а не 14: http://alonecoder.nedopc.com/zx/pent_1.jpg
На Pentagon 2.666 тоже 50 FPS.
Частота кварца задается в переменной с точностью до герца. Можно и 13MHz, и 15MHz выставить.

---------- Post added at 19:19 ---------- Previous post was at 19:17 ----------


А есть хоть одна прога, где этот глюк был бы заметен?
В пакет вложен тест stest.sna, он показывает этот "глюк".

Titus
04.05.2014, 19:48
Это уже есть - правая кнопка мыши по экрану > Border Only. Набор дебажных функций экрана очень неплохой.

Хорошо бы сделать еще режим, когда тоже самое, но при этом еще и виден экран. Т.е. полный бордюр (вместе с отображением цвета на интервалах VBlank/HBlank), и при этом экран.

Lion17
04.05.2014, 20:10
Хорошо бы сделать еще режим, когда тоже самое, но при этом еще и виден экран. Т.е. полный бордюр (вместе с отображением цвета на интервалах VBlank/HBlank), и при этом экран.
Это сделать несложно.

lisica
04.05.2014, 21:27
А TRD, SCL, и т д и т п будит?

Lion17
04.05.2014, 21:44
А TRD, SCL, и т д и т п будит?
Конечно. BetaDisk уже частично реализован.

Lion17
05.05.2014, 17:13
Свежий релиз http://animalservice.ru/ZXDevStudio/ZXDevStudio_1.1.0.zip

v1.1.0a (5 Апр 2014)
+ Теперь клавиатура игнорируется, если Screen View не в фокусе
+ По просьбе Titus'а опция Border Only заменена на две опции Screen и Wide
Border. Теперь выключение экрана и расширение бордюра на полный кадр происходит независимо.
+ Теперь в режиме отладки RealTime во время паузы работают атрибуты мерцания
+ Проект скомпилирован в режиме максимального быстродействия, скорость увеличилась примерно в два раза
- Исправлены некоторые незначительные баги

Да, еще, клавиша F8 во время эмуляции переключает режим скорости на максимальный.

Titus
05.05.2014, 17:48
+ По просьбе Titus'а опция Border Only заменена на две опции Screen и Wide
Border. Теперь выключение экрана и расширение бордюра на полный кадр происходит независимо.

Хорошее решение, теперь идеально)
На экране показано абсолютно все пространство скрытого бордюра?

Из актуальных вещей:
1. Если эмулятор пока не может запоминать настройки масштаба экрана, то хотя бы сделать по умолчанию 200% вместо 300%, ибо 300 влезает только в очень боооольшие мониторы, и не только я один об этом говорил тут.
2. Расширить видимую нижнюю часть бордюра хотя бы (пока) до влезания целиком в нее скролла от RAGE.
3. Звук так и хрюкает)

---------- Post added at 17:48 ---------- Previous post was at 17:43 ----------

Вот пример хрюкающего звука в Rage - http://sderni.ru/228264

Lion17
05.05.2014, 17:53
На экране показано абсолютно все пространство скрытого бордюра?
Да, полный кадр. 320 строк, 224 такта в строке.

---------- Post added at 17:52 ---------- Previous post was at 17:49 ----------


1. Если эмулятор пока не может запоминать настройки масштаба экрана, то хотя бы сделать по умолчанию 200% вместо 300%, ибо 300 влезает только в очень боооольшие мониторы, и не только я один об этом говорил тут.
2. Расширить видимую нижнюю часть бордюра хотя бы (пока) до влезания целиком в нее скролла от RAGE.
В следующем релизе сделаю.

---------- Post added at 17:53 ---------- Previous post was at 17:52 ----------


3. Звук так и хрюкает)
Какие процессор и звуковуха? Сколько сейчас жрет ресурсов?

Titus
05.05.2014, 18:06
Какие процессор и звуковуха? Сколько сейчас жрет ресурсов?

T2300, 1.6ГГц
Звуковуха - Audigy (крутая в свое время).
Винда XP - SP3.
Все остальные эмули, да и проги работают норм, не хрюкают.

Жрет 50% на Rage (прошлая версия жрала 70%).

Если включаю F8, то показыват ~80fps.

Lion17
05.05.2014, 19:08
Если включаю F8, то показыват ~80fps.
А если Screen View закрыть?

Titus
05.05.2014, 19:14
А если Screen View закрыть?

260фпс.

Lion17
05.05.2014, 19:27
260фпс.
А без Экрана хрюкает?

Titus
05.05.2014, 19:38
А без Экрана хрюкает?

Да, абсолютно одинаково.

Чуть глаже начинает играть, когда делаешь F8 - максимум fps.

Lion17
05.05.2014, 20:19
Да, абсолютно одинаково.

Чуть глаже начинает играть, когда делаешь F8 - максимум fps.

Значит дело не в скорости. Скорее всего драйвер звуковой не поддерживает длину буфера длиной 1/50 секунды. Сделаю вариант с более длинным буфером - проверишь.

Titus
05.05.2014, 23:31
Значит дело не в скорости. Скорее всего драйвер звуковой не поддерживает длину буфера длиной 1/50 секунды. Сделаю вариант с более длинным буфером - проверишь.

Вряд ли. У меня звуковуха очень гибкая, поддерживает то, чего другие не держат. И буфера тоже. Я же тоже писал эмули всякие и так и сяк ее насиловал.

А как ты выводишь звук? Как синхронизируешься?

Lion17
06.05.2014, 00:32
Вряд ли. У меня звуковуха очень гибкая, поддерживает то, чего другие не держат. И буфера тоже. Я же тоже писал эмули всякие и так и сяк ее насиловал.

А как ты выводишь звук? Как синхронизируешься?

Дык, я не про звуковуху говорю, а про драйвер.

Звук вывожу через DirectSound. Три буфера длиной 1/50 секунды.
Синхронизируюсь по звуку при помощи GetCurrentPosition.

Titus
06.05.2014, 01:16
Дык, я не про звуковуху говорю, а про драйвер.

Звук вывожу через DirectSound. Три буфера длиной 1/50 секунды.
Синхронизируюсь по звуку при помощи GetCurrentPosition.

У... ты в курсе, что погрешность маркера текущей позиции в буфере может варьироваться до километра? Т.е. показывает, что он в позиции, допустим, 500, а на самом деле позиция 200 или 700.

Lion17
06.05.2014, 01:52
У... ты в курсе, что погрешность маркера текущей позиции в буфере может варьироваться до километра? Т.е. показывает, что он в позиции, допустим, 500, а на самом деле позиция 200 или 700.

В курсе. Поэтому у меня там есть настройка сдвига фазы. Можно смещать позицию в пределах одного фрейма. На текущих настройках это около 900. Выведу ее в настройки, посмотрим, что получится.

ЗЫ: За достоверность позиции маркера как раз и отвечает драйвер звуковухи.

Titus
06.05.2014, 02:09
ЗЫ: За достоверность позиции маркера как раз и отвечает драйвер звуковухи.

Драйвер звуковухи, аппаратная часть звуковухи и сама винда.
Например, начиная с висты, нельзя определять позицию точнее, чем с дискретностью 480 отсчетов (при 48000кГц). Т.е. 10мс.

Doronetty
06.05.2014, 12:32
Долго разбирался с отсутствием экрана: оказывается, он по умолчанию отключён(!). У меня звук работает на "ура", а вот плавного скроллинга почему-то нет (при том, что у меня экран работает на родной частоте 50 Гц). Да, и при попытке выйти эмуль зависает, приходится его "гасить" вручную.

P.S: Конфигурация: Vista x64, ASUS P5E, Core2Quad 2.8 GHz, NVidia GF GTX 560, звуковуха Supreme FX II (идёт в комплекте с материнкой), FullHD TV через HDMI 50 Hz

Lion17
06.05.2014, 12:45
Долго разбирался с отсутствием экрана: оказывается, он по умолчанию отключён(!). У меня звук работает на "ура", а вот плавного скроллинга почему-то нет (при том, что у меня экран работает на родной частоте 50 Гц). Да, и при попытке выйти эмуль зависает, приходится его "гасить" вручную.

Так как синхронизация идет по звуку, то скролинг не будет плавным. К тому же частота кадров в эмуляторе меньше пятидесяти герц. 3500000/71680=48.828Hz

Про зависания при выходе на семерке и висте знаю. Ищу причину.

[bETA]mEN
06.05.2014, 20:14
Про зависания при выходе на семерке и висте знаю. Ищу причину.
Windows 7 x64, зависаний при выходе нет.

Alexandr Medvedev
07.05.2014, 13:39
Windows 8.1 pro x64, эмулятор завершается только принудительно.

ZXMAK
07.05.2014, 14:36
Дык, я не про звуковуху говорю, а про драйвер.

Звук вывожу через DirectSound. Три буфера длиной 1/50 секунды.
Синхронизируюсь по звуку при помощи GetCurrentPosition.

3 буффера мало, в zxmak2 насколько помню 8 по 1/50, DirectSound поддерживает маленькие буфера и даже ивенты кидает правильно, но для бесперебойной работы требует чтобы в буффере висело как Минимум около 0.1 сек, т.е. как минимум 4 буфера по 1/50 сек. Но на синхронизацию по ивентам на таких маленьких интервалах полагаться не стоит - раз в 1-2 секунды будет приходить несколько ивентов подряд. Это можно увидеть отключив vblank sync в тестовой версии нового zxmak2 или в unreal - на мерцающих мультиколорах происходит смена кадров, на которых производится пропуск.
Синхронизация по getcurrentposition врядли будет успешной, т.к. у кода не будет возможности отдать процессор системе заблаговременно, чтобы получить его назад вовремя. С Directsound оптимальный вариант - ивенты о достижении нужной позиции

Lion17
07.05.2014, 14:58
Синхронизация по getcurrentposition врядли будет успешной, т.к. у кода не будет возможности отдать процессор системе заблаговременно, чтобы получить его назад вовремя.
Переведи.

ZXMAK
08.05.2014, 04:24
Переведи.

В 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? Заранее спасибо :)

Titus
08.05.2014, 05:26
Эмуляторов которые стабильно держут синхронизацию фактически нет, если не считать последнюю версию zxmak2.

EmuStudio (http://zx.pk.ru/showthread.php?t=21908), хотя вариант ZX чисто тестовый, лучше смотреть EmuStudio ТИА-МЦ-1 (http://zx.pk.ru/showthread.php?t=23064) или какие-то другие. Так вот, EmuStudio в принципе построен так, что главное для него - это 100% синхронизация.

Lion17
08.05.2014, 06:20
Эмуляторов которые стабильно держут синхронизацию фактически нет, если не считать последнюю версию zxmak2. Ктото писал что для unreal вроде есть такой мод, но можно ли его включить на стандартной сборке не знаю. У меня не получилось.
Есть! Мой ZX-Emul под DOS :). Синхронизация по обратному ходу луча и ФАПЧ звука. Видеорежим нестандарный 50Hz.

---------- Post added at 06:20 ---------- Previous post was at 06:19 ----------


PS: кстати, раз уж разобрался, можешь поподробнее описать алгоритм выборки видеобайтов в pentagon? Заранее спасибо
Сегодня после обеда напишу.

Lion17
08.05.2014, 14:27
PS: кстати, раз уж разобрался, можешь поподробнее описать алгоритм выборки видеобайтов в pentagon? Заранее спасибо

Алгоритм простейший. Но, требует много ресурсов и больших изменений в коде.
Эмуляцию делаем не на основе инструкций, а на основе тактов. Каждая команда Z80 разбивается на циклы и такты. На каждом такте делаем проверку. Если в этом такте читаем или пишем ОЗУ (только ОЗУ), то в этом такте ничего больше не делаем. Иначе вычисляем какой должен быть адрес пикселей или атрибутов на текущем такте кадра. В зависимости от флип-флоп флага считываем из памяти байт пикселей или атрибутов. Сохраняем этот байт в буфере экрана на своем месте. Перекидываем флип-флоп флаг. По достижению конца кадра по информации в буфере строим изображение экрана. Вот и все.

Vinnny
08.05.2014, 20:10
можно первый пост обновлять свежей ссылой на релиз?

ZXMAK
09.05.2014, 03:28
EmuStudio (http://zx.pk.ru/showthread.php?t=21908), хотя вариант ZX чисто тестовый, лучше смотреть EmuStudio ТИА-МЦ-1 (http://zx.pk.ru/showthread.php?t=23064) или какие-то другие. Так вот, EmuStudio в принципе построен так, что главное для него - это 100% синхронизация.

Так в нем же синхронизации по сути нет - тупо привязка к vblank :) в этом ничего сложного нет. Проблемы начинаются когда на 60-75 герцовом дисплее пытаешься засинкать 50 герцовую развертку, вот тут и начинаются фокусы...
В том-же zxmak2 последнего билда, когда включен vblank sync, синхронизация идет по развертке дисплея, но частота остается 50 герц, независимо от частоты дисплея (пока что поддерживатся не выше 100 гц). Можно частоту дисплея на лету менять, а fps всеравно остается 50.0 Гц

Titus
09.05.2014, 10:45
Так в нем же синхронизации по сути нет - тупо привязка к vblank :) в этом ничего сложного нет. Проблемы начинаются когда на 60-75 герцовом дисплее пытаешься засинкать 50 герцовую развертку, вот тут и начинаются фокусы...

Как это нету? Видео привязано к vblank, а вот аудио вынуждено синхронизироваться очень сложным способом, т.к. ... это все описано в моем посту. Это случай синхронизации по видео.

Синхронизация же по аудио - это отдельная тема, я ее в своем эмуляторе еще не делал.
Кстати, на счет тех же ивентов - эксперементировал с ними - никакие они не точные. Могут приходить с произвольной задержкой, и собираться в кучи, и приходить хоть по 20 штук сразу. Единственная польза - опознавание, что буфер был закончен. Но именно для точной синхронизации они не особо подходят, имхо.

Lion17
09.05.2014, 17:51
Свежая версия
v1.2.0a (9 Мая 2014)
- Устранены зависания при выходе на некоторых компьютерах
+ Добавлена настройка для устранения хрюканья звука
+ Добавлена настройка размера видимой части бордюра
+ Добавлена настройка масштабирования экрана по умолчанию

Настройка звука Options > Emulator > Sound, звук можно настраивать при работающей эмуляции на слух.
Настройки бордюра Options > Emulator > Timings
Настройки масштабирования Options > Emulator > Video

SoftLight
09.05.2014, 18:11
- Устранены зависания при выходе на некоторых компьютерах

Зависать при выходе перестал.

ZXMAK
09.05.2014, 21:55
Кстати, на счет тех же ивентов - эксперементировал с ними - никакие они не точные. Могут приходить с произвольной задержкой, и собираться в кучи, и приходить хоть по 20 штук сразу. Единственная польза - опознавание, что буфер был закончен. Но именно для точной синхронизации они не особо подходят, имхо.

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

Titus
09.05.2014, 23:09
В zxmak2 синхронизация от звуковухи работает именно на ивентах, работает стабильно и точно, никаких подстроек не требует. Проблема в том, что точности не хватает для ресамплинга видео, из за чего на плавных скролах присмотревшись внимательно, можно заметить небольшие биения плавности. Что касается звука, то звук синхронизируется идеально

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

Вот в том-то и проблема, когда синхронизируешься по одному, сложно (хотя и можно, порой, дикими извращениями) добиться синхронизации другого. Видео, когда синхришься по звуку, и звука, когда синхришься по видео.

Lion17
09.05.2014, 23:54
Titus, что с хрюканьем в новой версии. Получилось при помощи настройки избавиться?

Titus
10.05.2014, 00:17
Titus, что с хрюканьем в новой версии. Получилось при помощи настройки избавиться?

Пока не знаю, я на даче все праздники и даже несколько после них, так что только после этого смогу проверить.

ZXMAK
10.05.2014, 05:48
Понятно, что все синхронизируется по аудио, то чего ему не быть плавным. Никуда не убежит и не отстанет. Лишь задержка будет из-за длины буфера. Кстати, какая задержка у тебя?

Вот в том-то и проблема, когда синхронизируешься по одному, сложно (хотя и можно, порой, дикими извращениями) добиться синхронизации другого. Видео, когда синхришься по звуку, и звука, когда синхришься по видео.

Ну со звуком в zxmak2 проблем нет ни при синхронизации по звуку, ни по видео. Проблема только в том, что при синхронизации по видео, точное отслеживание начала развертки требует большой нагрузки на процессор, т.к. в windows нет ивентов по vblank, поэтому приходится в цикле следить за scanline.

Задержка в zxmak2 зависит от системы, как только приходит ивент, так заливается новый фрейм. Если ивенты система бросает с задержкой, то добавится эта задержка. В среднем минимальная задержка должна быть на уровне около 1 фрейма, т.е. порядка 0.02 сек, но т.к. эмулятор всегда следит чтобы в буффер не был пустым, то реальная задержка будет ближе к максимальной - по числу буфферов, т.е. не более 8 фреймов = 0.16 сек. Т.к. эмуляция фрейма не мгновенная, а требует какогото времени, плюс задержки на переключение задач а они в windows очень существенны), то на деле задержка должна составлять 6-7 фреймов или 0.12 сек.
ZXMAK2 при синхронизации по звуку ориентируется исключительно на ивенты системы, оставляя на ее совести неравномерность генерации этих ивентов. Т.е. если система бросает ивенты пачками, то и фреймы будут заливаться пачками. Это естественно сделает скроллы менее плавными, т.к. фреймы будут эмулироваться не достаточно плавно, но раз системе так нужно для нормального воспроизведения звука, то с этим ничего не поделаешь. При синхронизации по видео таких эффектов не будет, т.к. vblank происходит равномерно, заодно и привязка к развертке получается, поэтому скролы в этом случае получаются плавными (если не считать влияние пропуска кадров для ресэмплинга, но это на плавности малозаметно, а больше влияет на визуальное восприятие цветов в мультиколорах).
Тут следует отметить что рендер на экране в zxmak2 осуществляется асинхронно от эмуляции, поэтому задержки UI влияют только на обновление окна, но не на саму эмуляцию (включая и запись в звуковой буфер). За счет этого удалось добиться высокой скорости реакции UI, при полном отсутствии влияния на поток эмуляции. Поэтому эмулятор так шустро реагирует на ресайз окна, не останавливается при перетаскивании и т.п. Добиться такого было непросто :) Изображение вначале заносится в текстуру из потока эмуляции и инвалидируется окно. А UI уже по запросу системы на WM_PAINT рендерит тектуру в окно. WM_PAINT система синхронизирует с vblank, поэтому изображение на дисплей попадат синхронно с разверткой. Независимо от источника синхронизации фреймов.
У меня была идея сделать синхронизацию от по WM_PAINT, но это оказалось не очень хорошей идеей, т.к. в UI windows это сообщение приходит с задержкой, например если с UI чтото происходит (ресайз и тп).

Hacker VBI
10.05.2014, 10:26
звука нет
kX 10k1 Audio (3550) - Generic

Titus
10.05.2014, 11:03
Ну со звуком в zxmak2 проблем нет ни при синхронизации по звуку, ни по видео. Проблема только в том, что при синхронизации по видео, точное отслеживание начала развертки требует большой нагрузки на процессор, т.к. в windows нет ивентов по vblank, поэтому приходится в цикле следить за scanline.

Что, прям один из процессов всегда висит и сканирует сканлинию?
У меня тоже есть жесткое ожидание нужной сканлинии, но не такое.


задержки на переключение задач а они в windows очень существенны

Не знаю, с этой стороны проблем вообще не заметил, переключаются задачи быстро, квант выставляю самый маленький - 1мс.



Тут следует отметить что рендер на экране в zxmak2 осуществляется асинхронно от эмуляции, поэтому задержки UI влияют только на обновление окна, но не на саму эмуляцию (включая и запись в звуковой буфер). За счет этого удалось добиться высокой скорости реакции UI, при полном отсутствии влияния на поток эмуляции. Поэтому эмулятор так шустро реагирует на ресайз окна, не останавливается при перетаскивании и т.п. Добиться такого было непросто :) Изображение вначале заносится в текстуру из потока эмуляции и инвалидируется окно. А UI уже по запросу системы на WM_PAINT рендерит тектуру в окно. WM_PAINT система синхронизирует с vblank, поэтому изображение на дисплей попадат синхронно с разверткой. Независимо от источника синхронизации фреймов.

Это хорошо, если два ядра и больше. А если одно, то выигрыша не будет.

Lion17
11.05.2014, 20:58
Свежая версия

v1.3.0a (11 Мая 2014)
+ Добавлена возможность настраивать набор ПЗУ

ПЗУ опознаются по CRC. Если понадобится добавить какие-либо ПЗУ
отсутствующие сейчас, присылайте их CRC и описание.

Вскоре добавлю возможность добавлять свои списки ПЗУ, а также возможноcть экспортировать и импортировать эти списки.

http://animalservice.ru/ZXDevStudio/ZXDevStudio_1.3.0.zip

ZXMAK
13.05.2014, 14:15
Это хорошо, если два ядра и больше. А если одно, то выигрыша не будет.

На одном ядре тоже отлично работает. В режиме vblank sync, сканлиния проверяется в цикле из потока эмуляции. Т.е. пока обрабатывается фрейм, scanline не проверяется. Пробовал из отдельного потока проверять, но такой вариант работает плохо, т.к. проверка съедает слишком много процессорного времени, не остается на полезную работу. Если вставить Sleep, то начинаются пропуски, т.к. система не успевает отдать процессор назад во время прохождения vblank. Умный Sleep (в зависимости от текущей scanline) ситуацию улучшает, но не в достаточной мере - пропуски всеравно появляются, хоть и реже.

Titus
13.05.2014, 22:35
На одном ядре тоже отлично работает. В режиме vblank sync, сканлиния проверяется в цикле из потока эмуляции. Т.е. пока обрабатывается фрейм, scanline не проверяется. Пробовал из отдельного потока проверять, но такой вариант работает плохо, т.к. проверка съедает слишком много процессорного времени, не остается на полезную работу. Если вставить Sleep, то начинаются пропуски, т.к. система не успевает отдать процессор назад во время прохождения vblank. Умный Sleep (в зависимости от текущей scanline) ситуацию улучшает, но не в достаточной мере - пропуски всеравно появляются, хоть и реже.

Что-то не сходится.

Представим одноядерный комп:
Если у тебя приоритет эмуля высокий, то сканирования линии развертки 'втупую' тут же посадит быстродействие всей системы. Если же приоритет эмуля низкий, то любые фоновые процессы с более высоким приоритетом тут же собьют твою синхронизацию.

ZXMAK
14.05.2014, 00:48
Что-то не сходится.

Представим одноядерный комп:
Если у тебя приоритет эмуля высокий, то сканирования линии развертки 'втупую' тут же посадит быстродействие всей системы. Если же приоритет эмуля низкий, то любые фоновые процессы с более высоким приоритетом тут же собьют твою синхронизацию.

Чтото я не понял. Мы вроде про синхронизацию от звуковухи и асинхронную отрисовку говорили, при чем тут scanline. Асинхронная отрисовка работает хорошо как на одноядером, так и на многоядерном процессоре. Синхронизация vblank на одном ядре работает действительно хуже, но это с асинхронной отрисовкой никак не связано.

Titus
14.05.2014, 00:54
Нет, я про другое. Если ты проверяешь сканлинию в цикле (для синхронизации по VBlank), то у тебя либо дико тормозит компьютер, если у эмуля приоритет высокий, либо если приоритет низкий, то эта методика неэффективна, ибо VBlank будет пропущен из-за активности более высокоприоритетных приложений. Что я тут непонятного написал?

Titus
15.05.2014, 04:43
Titus, что с хрюканьем в новой версии. Получилось при помощи настройки избавиться?

Проверил на своем домашнем компе.
Перестает хрюкать при -100..-65, и при 55..100.

Что это за цифры?

Lion17
15.05.2014, 06:03
Проверил на своем домашнем компе.
Перестает хрюкать при -100..-65, и при 55..100.

Что это за цифры?

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

Titus
15.05.2014, 13:24
Выбирается точка синхронизации среди трех фреймов
Первый фрейм сейчас проигрывается. Во втором уже залиты данные следующего фрейма. Если значение равно 0 - ждем (синхронизируемся) начала второго фрейма. Если -100 - ждем начала первого фрейма. Если +100 - ждем начала третьего фрейма. Промежуточные точки - соответственно ждем нужного места внутри первого или второго фрейма.

Каковы размеры фреймов?

Lion17
15.05.2014, 14:08
Каковы размеры фреймов?

1/50 секунды, это если грубо. Если точно, то частота CPU делится на количество тактов в кадре. Далее частота звука (сейчас жестко 44000) делится на это значение. В общем около 900 слов сейчас один фрейм.

Titus
15.05.2014, 15:58
1/50 секунды, это если грубо. Если точно, то частота CPU делится на количество тактов в кадре. Далее частота звука (сейчас жестко 44000) делится на это значение. В общем около 900 слов сейчас один фрейм.

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

Lion17
03.06.2014, 01:13
Обновление 1.4.0

v1.4.0a (3 Июня 2014)
+ Если размер экрана превышает размер Screen View добавляются скроллбары для позиционирования фрагмента экрана
+ Добавлена возможность помещать View на основное окно (там где меню). Таким образом, можно собрать все View в одном окне эмулятора.
+ Добавлена возможность создавать многочисленные Screen View с индивидуальными настройками
- Исправлены некоторые баги в работе IDE
+ Немного оптимизирован код

http://www.animalservice.ru/ZXDevStudio/ZXDevStudio_1.4.0.zip

Alexandr Medvedev
05.06.2014, 16:25
Помещаем Screen View на основное окно. Делаем Zoom -- 1x1, Display Area -- Paper Only. Видим главное меню стало в две строки, однако из-за этого размер окна неправильно рассчитался и появились полосы прокрутки, коих быть не должно.
И ещё окно эмулятора не видно в списке по alt+tab в Windows 8.1 x64 (на
других не проверял).

Ещё пожелание чтобы по умолчанию окно Screen View было включено и помещено на основное окно.

Lion17
06.06.2014, 01:03
И ещё окно эмулятора не видно в списке по alt+tab в Windows 8.1 x64 (на
других не проверял).
Под XP окно в списке есть.