Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор ДВК (http://zx-pk.ru/showthread.php?t=18351)

Patron 5th January 2014 17:33

Quote:

Originally Posted by Titus (Post 658531)
Но это все же не 100% точная эмуляция)

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

Titus 5th January 2014 17:38

Quote:

Originally Posted by Patron (Post 658532)
тогда интересующие события будут происходить в общем виртуальном времени с наносекундной синхронизацией.

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

Patron 5th January 2014 17:45

Quote:

Originally Posted by Titus (Post 658535)
И наносекунда - это не показатель точности.
Показатель точности это квант, кратный минимальному интервалу в эмулируемой системе. Во всех иных случаях, каким бы не был мелким квант, набежит погрешность.

Не набежит. Диспетчер синхронизации модульного API рассчитывает виртуальное время каждого следующего периодического события не относительно времени предыдущего события, а относительно времени первого события + [ число предыдущих событий * интервал между событиями ], поэтому максимальная ошибка синхронизации не превышает 1 нс для любого числа предыдущих периодических событий.

Titus 5th January 2014 17:49

Quote:

Originally Posted by Patron (Post 658539)
Не набежит. Диспетчер синхронизации модульного API рассчитывает виртуальное время каждого следующего периодического события не относительно времени предыдущего события, а относительно времени первого события + [ число предыдущих событий * интервал между событиями ], поэтому максимальная ошибка синхронизации не превышает 1 нс для любого числа предыдущих периодических событий.

Допустим, частота процессора 10.05МГц (99.5 1нс квантов).
Как он будет отсчитывать по 99.5 квантов на такт?

Patron 5th January 2014 17:57

Quote:

Originally Posted by Titus (Post 658540)
Допустим, частота процессора 10.05МГц (99.5 1нс квантов). Как он будет отсчитывать по 99.5 квантов на такт?

При абстрактной эмуляции событием процессора является исполнение одной команды. Остальные события могут произойти либо до начала выполнения команды, либо после завершения её выполнения.

Эмулировать не отдельные команды, а (например) отдельные циклы шины или отдельные такты - для абстрактной эмуляции избыточно.

Можно сделать движок дискретной эмуляции, где событием будет изменение логического уровня на отдельной линии шины, но в абстрактной эмуляции ничего этого нет.

Titus 5th January 2014 18:14

Quote:

Originally Posted by Patron (Post 658541)
При абстрактной эмуляции событием процессора является исполнение одной команды. Остальные события могут произойти либо до начала выполнения команды, либо после завершения её выполнения.

Эмулировать не отдельные команды, а (например) отдельные циклы шины или отдельные такты - для абстрактной эмуляции избыточно.

Можно сделать движок дискретной эмуляции, где событием будет изменение логического уровня на отдельной линии шины, но в абстрактной эмуляции ничего этого нет.

Для абстрактной может быть и избыточно, а для абсолютно точной - в самый раз)

---------- Post added at 17:14 ---------- Previous post was at 16:59 ----------

Кстати, об эмуляции, когда я переделал клавиатуру с DirectInput на обработчик хуков, плохо стала работать комбинация из трех нажатых клавиш PrintScr+Scroll+Pause (по ним ресет на спектруме делался у меня). Приходится теперь несколько раз на них нажимать, нажимать, пока сработает. На DirectInput'е такого не было)

Patron 5th January 2014 19:03

Quote:

Originally Posted by Titus (Post 658542)
когда я переделал клавиатуру с DirectInput на обработчик хуков, плохо стала работать комбинация из трех нажатых клавиш PrintScr+Scroll+Pause (по ним ресет на спектруме делался у меня). Приходится теперь несколько раз на них нажимать, нажимать, пока сработает. На DirectInput'е такого не было)

Я сделал для модульного API имитацию DirectInput через хуки - вроде всё работает, даже если нажать эти три клавиши:

Code:

vkCode[0x2C] ; wParam[ 44] ; uScan[311] ; cFlags[0x1]
vkCode[0x91] ; wParam[145] ; uScan[ 70] ; cFlags[0x0]
WM_KEYDOWN uScan:[ 70] ; DIK_SYSRQ[0x80] ; DIK_SCROLL[0x80] ; DIK_PAUSE[0x00]

vkCode[0x13] ; wParam[ 19] ; uScan[ 69] ; cFlags[0x0]
WM_KEYDOWN uScan:[ 69] ; DIK_SYSRQ[0x80] ; DIK_SCROLL[0x80] ; DIK_PAUSE[0x80]

vkCode[0x13] ; wParam[ 19] ; uScan[ 69] ; cFlags[0xFFFFFF80]
WM_KEYUP  uScan:[ 69] ; DIK_SYSRQ[0x80] ; DIK_SCROLL[0x80] ; DIK_PAUSE[0x00]

vkCode[0x2C] ; wParam[ 44] ; uScan[311] ; cFlags[0xFFFFFF81]
WM_KEYUP  uScan:[311] ; DIK_SYSRQ[0x00] ; DIK_SCROLL[0x80] ; DIK_PAUSE[0x00]

vkCode[0x91] ; wParam[145] ; uScan[ 70] ; cFlags[0xFFFFFF80]
WM_KEYUP  uScan:[ 70] ; DIK_SYSRQ[0x00] ; DIK_SCROLL[0x00] ; DIK_PAUSE[0x00]

Правда у меня почему-то нажатие клавиши <PrintScreen> не сопровождается вызовом WM_KEYDOWN ( лень разбираться почему - просто делаю скриншоты по WM_KEYUP ).

Titus 5th January 2014 20:03

Quote:

Originally Posted by Patron (Post 658555)
Я сделал для модульного API имитацию DirectInput через хуки - вроде всё работает, даже если нажать эти три клавиши


Правда у меня почему-то нажатие клавиши <PrintScreen> не сопровождается вызовом WM_KEYDOWN ( лень разбираться почему - просто делаю скриншоты по WM_KEYUP ).

У меня тоже идет эмуляция DirectInput.

Понятно, у меня при нажатии этих трех клавиш проверяется, что они нажаты и отжаты. Значит это глюк хуков какой-то.

Patron 7th January 2014 01:32

Обновилась текущая сборка "эмулятора ДВК": DVK_Emulator_07.01.14_00-00

Изменения:

1. Исправлены ошибки, обнаруженные в предыдущем релизе.

2. Теперь процессор КМД может обращаться к любым устройствам на шине ДВК.

3. Теперь, если имя файла прошивки содержит "91" или "93" - на шине КМД эмулируется микросхема 1809РУ1, если имя файла прошивки содержит "92" - на шине КМД эмулируется микросхема 537РУ11. Если ни одного из указанных сочетаний символов в имени файла прошивки нет - на шине КМД эмулируется 4 Кбайт памяти в диапазоне 020000..027777.

4. Теперь КМД никак не реагирует на чтение его регистра данных.

...

hobot 8th January 2014 03:57

Quote:

Originally Posted by Patron (Post 659077)
Обновилась текущая сборка "эмулятора ДВК": DVK_Emulator_07.01.14_00-00

Изменения:

1. Исправлены ошибки, обнаруженные в предыдущем релизе.

2. Теперь процессор КМД может обращаться к любым устройствам на шине ДВК.

3. Теперь, если имя файла прошивки содержит "91" или "93" - на шине КМД эмулируется микросхема 1809РУ1, если имя файла прошивки содержит "92" - на шине КМД эмулируется микросхема 537РУ11. Если ни одного из указанных сочетаний символов в имени файла прошивки нет - на шине КМД эмулируется 4 Кбайт памяти в диапазоне 020000..027777.

4. Теперь КМД никак не реагирует на чтение его регистра данных.

...

При всех доработках и функциональности - эмулятор всё ещё помещается (в стандартном наборе) на 1-у дискету ) Мощь! )
Обновил на сайте архив с эмулятором и exe-шник в архиве VT52.


All times are GMT +4. The time now is 02:58.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.