Вход

Просмотр полной версии : ZXMAK2 - Виртуальная машина ZX Spectrum



Страницы : 1 2 3 4 [5] 6 7 8 9

ZXMAK
01.06.2013, 12:51
Схема получения NMI (K.NMI и K.RES - сигналы с клавиатуры):


странно, на риале при выходе прерывания не запрещаются и клавиатура продолжает опрашиваться?
Тогда вопрос - как?:smile: При выходе из NMI (см. точку останова #0071) флаг IFF2 уже сброшен, прерывания принудительно не разрешены. Соответственно восстанавливать их некому.

PS: в целях поддержки редактора с подсветкой и автокомплитом, а также док-панелей, рассматривается переход на WPF и фреймворк 4.0. Вопрос - насколько это может снизить переносимость под моно на линуксе?

Eltaron
01.06.2013, 13:48
странно, на риале при выходе прерывания не запрещаются и клавиатура продолжает опрашиваться?
Тогда вопрос - как?:smile: При выходе из NMI (см. точку останова #0071) флаг IFF2 уже сброшен, прерывания принудительно не разрешены. Соответственно восстанавливать их некому.

Да, на настоящем "Кворуме" всё работает. Вообще странно. Сейчас выдеру прошивку с реала, чтоб исключить её влияние на проблему.


в целях поддержки редактора с подсветкой и автокомплитом, а также док-панелей, рассматривается переход на WPF и фреймворк 4.0. Вопрос - насколько это может снизить переносимость под моно на линуксе?
WPF в mono вообще не поддерживается, насколько я знаю. 4й фреймворк (по крайней мере dynamic и дефолтные значения параметров методов) там есть.

Но, в принципе, без переносимости можно жить - текущая версия эмулятора под свежим Wine работает шикарно, почти без глюков в интерфейсе и с загрузкой проца всего в 30-40%. Для сравнения - нативный линуксовый Xpeccy жрет 55% :) А с интерфейсом одна проблема - фулскрин под убунтовским Unity выглядит так:

ZXMAK
01.06.2013, 13:59
Да, на настоящем "Кворуме" всё работает. Вообще странно. Сейчас выдеру прошивку с реала, чтоб исключить её влияние на проблему.


Я уже нашел в чем проблема, проблема в эмуляции IFF2. Очевидно он работает не совсем так как было описано в документации по которой я ее реализовывал. Вобщем-то уже все работает без привязки к INT.

На данный момент не совсем ясно - должен ли устанавливаться IFF2 при выполнении EI? И должен ли сбрасываться при обработке INT? Если нет, то это позволяет организовать внутри обработчика NMI свои прерывания и потом корректно восстановить состояние прерываний при выходе из обработчика NMI. Но помню что как минимум в двух мануалах читал что что EI устанавливает оба флага IFF1 и IFF2. А обработка INT сбрасывает оба флага.

После фикса DI, обнаружилась еще интересная фишка - при установке IFF2 по EI, скорпионовский проф-ром с винчестером входит в вечный цикл перезагрузки :)
Т.е. похоже что IFF2 по EI не устанавливается. Это уже дает возможность написать тест для риала.

Остается еще выяснить - сбрасывает ли IFF2 обработка INT?

ZXMAK
01.06.2013, 15:27
Требуется помощь владельцев реального железа. Желательно с реальным Z80, а не эмулятором на PLM.

Нужно прогнать этот тест и выложить тут его результаты с указанием какой именно Z80 использовался.

Eltaron
01.06.2013, 15:32
Нужно прогнать этот тест и выложить тут его результаты с указанием какой именно Z80 использовался.

Z0840006PSC

Blade
01.06.2013, 15:35
Z84C0020
Тест пишет 12.

ZXMAK
01.06.2013, 15:46
Z84C0020
Тест пишет 12.

хм, тогда похоже мои предположения не подтвердились.

Вопрос остается открытым - каким образом при выходе из NMI кворум разрешает прерывания?

Проблема состоит в следующем. При входе в NMI, состояние прерываний сохраняется во внутреннем флаге процессора IFF2. При входе в обработчик NMI, кворум выполняет инструкцию DI (см. точку останова #C028). Инструкция DI сбрасывает оба флага - IFF1 и IFF2. Таким образом информация о состоянии прерываний теряется и после выполнения RETN, прерывания будут запрещены.

Мое предположение основывалось на том, что DI вероятно не очищает флаг IFF2, а воздействует только на IFF1. При таком варианте скорпионовский проф-ром зацикливается. Чтобы это пофиксить, нужно убрать также установку флага IFF2 в EI. Но вышеуказанный тест показал, что на реальном Z80 IFF2 как минимум устанавливается по EI. Поэтому эта модель не верна.

Пока есть одно предположение - пзу в котором на риале выход из NMI не приводит к блокировке прерываний отличается, например не содержит операцию DI в обработчике NMI.

Eltaron
01.06.2013, 16:20
Пока есть одно предположение - пзу в котором на риале выход из NMI не приводит к блокировке прерываний отличается, например не содержит операцию DI в обработчике NMI.
Достал свою v3.5. Смог, правда, вытащить только системную страницу и 48 бейсик, TR-DOS и 128 взял из v4.2. Виснет точно так же, IFF2 на выходе из NMI - 0.

ZXMAK
01.06.2013, 16:28
Достал свою v3.5. Смог, правда, вытащить только системную страницу и 48 бейсик, TR-DOS и 128 взял из v4.2. Виснет точно так же, IFF2 на выходе из NMI - 0.

ну тогда на риале либо что-то не так происходит и DI по адресу #C028 при входе в NMI не выполняется, либо NMI каким-то образом к INT-у привязан и при выходе из NMI попадает на EI в конце обработчика прерываний.

Можно попробовать тест сделать - добиться чтобы импульс NMI не попадал на первые 1500 тактов от начала INT и посмотреть - будут ли опрашиваться кнопки (по прерыванию) на риале после выхода из NMI. Сможешь такой тест провернуть?
Еще такой вопрос - а сколько тактов процессора на твоей диаграмме между импульсом NMI и импульсом INT?

ZXMAK
01.06.2013, 17:18
WPF в mono вообще не поддерживается, насколько я знаю. 4й фреймворк (по крайней мере dynamic и дефолтные значения параметров методов) там есть.

попробуй вот эти примеры кода запустить под линуксом, будет работать или нет?

Eltaron
01.06.2013, 17:53
Еще такой вопрос - а сколько тактов процессора на твоей диаграмме между импульсом NMI и импульсом INT?
Когда как. Сейчас зашел 10 раз подряд в NMI-меню, промежуток между NMI и предыдущим INT составил в каждом случае 12, 19, 19.5, 11.5, 12.8, 12.8, 8, 15.7, 10, 5.5 миллисекунд. Как я понимаю, 1500 тактов - это где-то 0.5 мс, то есть я вообще ни разу в обработчик INT не попал.
После этих испытаний кнопки всё ещё опрашиваются.

ZXMAK
01.06.2013, 17:57
Когда как. Сейчас зашел 10 раз подряд в NMI-меню, промежуток между NMI и предыдущим INT составил в каждом случае 12, 19, 19.5, 11.5, 12.8, 12.8, 8, 15.7, 10, 5.5 миллисекунд. Как я понимаю, 1500 тактов - это где-то 0.5 мс, то есть я вообще ни разу в обработчик INT не попал.
После этих испытаний кнопки всё ещё опрашиваются.

тогда вообще загадка как прерывания разрешаются.
а можешь как-то отследить - выполняет делает ли процессор выборку инструкции DI (код #F3) по адресу #C028 после импульса NMI?
Это вроде первая инструкция читаемая из озу, после подачи NMI. И похоже вообще первое M1 обращение к памяти после перехода в 48 режим.

Eltaron
01.06.2013, 19:22
попробуй вот эти примеры кода запустить под линуксом, будет работать или нет?
Под mono вообще не запускаются (The entry point method could not be loaded), под wine работают, но очень неспешно.

---------- Post added at 21:22 ---------- Previous post was at 20:07 ----------


а можешь как-то отследить - выполняет делает ли процессор выборку инструкции DI (код #F3) по адресу #C028 после импульса NMI?
Так. Поставил у анализатора триггер на передний фронт A15 с условием, что /M1 должен быть 0. Последовательно перекидывая оставшиеся 2 щупа с A0 по A14 снял их значения в момент срабатывания триггера.
Первый читаемый адрес - #C029 :o
Кучу раз перепроверил - на A0 высокий уровень, факт. Это всё объясняет, осталось лишь понять - почему :)

ZXMAK
01.06.2013, 20:00
Так. Поставил у анализатора триггер на передний фронт A15 с условием, что /M1 должен быть 0. Последовательно перекидывая оставшиеся 2 щупа с A0 по A14 снял их значения в момент срабатывания триггера.
Первый читаемый адрес - #C029 :o
Кучу раз перепроверил - на A0 высокий уровень, факт. Это всё объясняет, осталось лишь понять - почему :)

может все-же какая-то ошибка? в коде прошивки не видно ссылок на #C029... :confused_std:

Eltaron
01.06.2013, 20:23
может все-же какая-то ошибка? в коде прошивки не видно ссылок на #C029... :confused_std:
Непонятно, может и ошибка.
Я сейчас еще D0..D7 снял. С ними хуже, поскольку я не особо представляю, когда после M1 они должны на шине появиться. Но D7..D4 видны довольно четко - 0011, то есть опкод выглядит как #3x, что опять же очень похоже на #3E по #C029.

ZXMAK
01.06.2013, 20:53
может анализатор пишет со следующего фронта M1?

Нельзя ли задать задержку 20711 тактов от заднего фронта импульса NMI и записать по очереди A0,A1/A2,A3 и D0,D1/D2,D3
По расчетам процессор в это время должен выполнять


021F C9 RET
C028 F3 DI
C029 3E20 LD A,#20


---------- Post added at 19:53 ---------- Previous post was at 19:29 ----------

есть тут кое-какие идеи, сейчас сделаю программный тестик для кворума

Eltaron
01.06.2013, 21:34
может анализатор пишет со следующего фронта M1?
Блин. Да. Анализатор хоть и китайский, но разработчик его софта - приличная американская фирма, и я потерял бдительность :) Слева от точки, в которой сработал триггер, есть еще один /M1 с высоким A15. И там A0...A8 = #28.

ZXMAK
01.06.2013, 22:33
Уфф, вот сделал тестик для кворума. Запусти его на риале.
Инструкция:
1) После сброса выбриаем 2 (басик 48)
2) В менюшке выбираем рестарт
3) делаем LOAD "" с магнитофона (загрузка из трдоса может быть проблемной, т.к. трдос может портить 0-ю страницу)
4) Жмем NMI первый раз - пишем результаты
5) Жмем NMI второй раз - пишем результаты

Желательно повторить тест после отключения питания и сверить что результаты совпали, если нет - пишем их отдельно тоже сюда

Eltaron
01.06.2013, 22:53
Жму NMI - и вылазит менюшка Return/Screen/Main Menu. Значения - нули, что после первого, что после второго раза. Но, как я понимаю, что-то идет не так, потому что в эмуляторе менюшка не выскакивает.

ZXMAK
01.06.2013, 22:57
Жму NMI - и вылазит менюшка Return/Screen/Main Menu. Значения - нули, что после первого, что после второго раза. Но, как я понимаю, что-то идет не так, потому что в эмуляторе менюшка не выскакивает.

да, чтото идет не так, менюшка вылазить не должна, ты загружал с магнитофона через "2- BASIC 48" -> "Restart" -> "LOAD"?

Из других режимов может работать неправильно

Eltaron
01.06.2013, 22:58
да, чтото идет не так, менюшка вылазить не должна, ты загружал с магнитофона через "2- BASIC 48" -> "Restart" -> "LOAD"?
Да, именно так.

ZXMAK
01.06.2013, 23:03
Да, именно так.

А в кворуме нет случайно каких-то блокировок порта #00?

Попробуй сделать такой тест:
Заходим в басик 48 через рестарт, затем:

Вариант 1:

OUT 0,96
RANDOMIZE USE 15616


trdos включиться не должен - все должно повиснуть или сброситься.

Вариант 2:

OUT 0,224
RANDOMIZE USE 15616


должен запуститься trdos


смысл этого теста - обнаружить работает-ли out 0 из бейсика?

PS: да, посмотри еще если сможешь, что висит в регистре порта #7FFD после перехода в басик 48 через рестарт? Должно быть #17

Eltaron
01.06.2013, 23:09
Блокировок нет, стоит в тесте нажать BREAK и написать OUT 0,0, как всё сбрасывается в "черное" меню.

Счас дисковод притащу и 15616 проверю

ZXMAK
01.06.2013, 23:12
Блокировок нет, стоит в тесте нажать BREAK и написать OUT 0,0, как всё сбрасывается в "черное" меню.

Счас дисковод притащу и 15616 проверю

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

Eltaron
01.06.2013, 23:27
так дисковод для этого не нужен, главное посмотреть мапится трдос пзу или нет
USR 15616 не проходит в обоих вариантах. ПЗУ что-то оно даже с дисководом не мапится. Из меню-128 когда захожу, появляется внизу надпись "RUN TRDOS" и все сбрасывается обратно в меню-128.
Проверил на двух Кворумах, поведение одинаковое.

ZXMAK
02.06.2013, 00:51
USR 15616 не проходит в обоих вариантах. ПЗУ что-то оно даже с дисководом не мапится. Из меню-128 когда захожу, появляется внизу надпись "RUN TRDOS" и все сбрасывается обратно в меню-128.
Проверил на двух Кворумах, поведение одинаковое.

может это кворумы модифицированные кем-то, зачем меню которое не работает? Судя по поведению бит 7 порта 0 жестко закорочен на землю.

Жаль что тест iff2-v2 не заработал, это помогло бы заодно проверить эмуляцию флагов iff1/iff2. Похоже тут у Z80 какая-то неизвестная еще фишка есть.

Дмитрий
02.06.2013, 01:00
ZXMAK, по поводу Кворумов, я думаю стоит пообщаться с Caro (http://zx-pk.ru/member.php?u=3), он лучше всех их знает.

Eltaron
02.06.2013, 01:11
может это кворумы модифицированные кем-то, зачем меню которое не работает? Судя по поведению бит 7 порта 0 жестко закорочен на землю.
Этот порт внутри кворумской ULA находится, не представляю, как его можно так модифицировать...


по поводу Кворумов, я думаю стоит пообщаться с Caro, он лучше всех их знает
Кстати да. Не просто знает, а он это ROM-MENU и написал ведь.

ZXMAK
02.06.2013, 01:42
Кстати да. Не просто знает, а он это ROM-MENU и написал ведь.

написал ему, будем надеяться что ответит :smile:

---------- Post added at 00:42 ---------- Previous post was at 00:18 ----------


Жму NMI - и вылазит менюшка Return/Screen/Main Menu. Значения - нули, что после первого, что после второго раза. Но, как я понимаю, что-то идет не так, потому что в эмуляторе менюшка не выскакивает.

а ты кстати на какой версии прошивки проверял?

Eltaron
02.06.2013, 01:57
а ты кстати на какой версии прошивки проверял?
3.5 что на реале, что в эмуляторе.

ZXMAK
02.06.2013, 02:20
3.5 что на реале, что в эмуляторе.

ну да, я под нее и затачивал. Кстати в унрилкворуме тоже менюшка на тесте появляется, потому что порт #7FFD по непонятной причине заблокирован и код грузится не в нулевую страницу, а в 7

---------- Post added at 01:20 ---------- Previous post was at 01:10 ----------

аха! как выяснилось бит BLK_WR блокирует запись в #7FFD!

чтобы тест заработал исправь в строке 20 на такой OUT:


20 OUT 0,32


Вот исправленная версия:

Eltaron
02.06.2013, 10:18
Вот исправленная версия:
После первого NMI нули, после второго виснет.

Нет, гоню, виснет после первого, в тот раз нажал слабо, похоже.

Виснет не по HALT, на ноге /HALT высокий уровень. Но висит качественно, без артефактов на экране.

ZXMAK
02.06.2013, 11:23
Как ты определяешь зависание? После nmi прерывания могут запретится, поэтому на клавиатуру может не реагировать.

Нули на первом нажатии - чтото странно, попробуй - перед первым нажатием остановить и сделать poke 32768,255; 32769,255; 32770,255 потом продолжить исполнение и нажать nmi - так будет видно нули это результат или nmi просто вешает комп без вывода результатов

И еще - попробуй тест несколько раз выполнить, дело в том что первые два нуля означают что прерывания были запрещены в момент нажатия nmi - что удивительно, если nmi пришло не в момент обработки прерываний

Eltaron
02.06.2013, 11:41
Как ты определяешь зависание? После nmi прерывания могут запретится, поэтому на клавиатуру может не реагировать.
На BREAK перестает реагировать, еще я после чисел стал выводить RND, оно перестаёт обновляться после нажатия NMI.



Нули на первом нажатии - чтото странно, попробуй - перед первым нажатием остановить и сделать poke 32768,255; 32769,255; 32770,255 потом продолжить исполнение и нажать nmi - так будет видно нули это результат или nmi просто вешает комп без вывода результатов

Сделал, на экране 255 и висит.


И еще - попробуй тест несколько раз выполнить, дело в том что первые два нуля означают что прерывания были запрещены в момент нажатия nmi - что удивительно, если nmi пришло не в момент обработки прерываний
10 раз выполнил - 10 раз зависло.

ZXMAK
02.06.2013, 11:58
На BREAK перестает реагировать, еще я после чисел стал выводить RND, оно перестаёт обновляться после нажатия NMI.


похоже виснет цикл ожидающий INT при запрещенных пререываниях, видимо что-то не так с IFF2 работает чем я расчитывал, нужно будет с этим разобраться отдельно. Убрал его и доработал тест, теперь он 4-е число выводит - счетчик нажатий NMI :)

Eltaron
02.06.2013, 12:44
похоже виснет цикл ожидающий INT при запрещенных пререываниях, видимо что-то не так с IFF2 работает чем я расчитывал, нужно будет с этим разобраться отдельно. Убрал его и доработал тест, теперь он 4-е число выводит - счетчик нажатий NMI :)
После первого NMI выводит 3-3-0-0
Потом 0-0-0-1
При последующих нажатиях последнее число увеличивается, и в какой-то случайный момент рядом с ним появляется еще одно число. В первый раз у меня это было 35, во второй 092376

ZXMAK
02.06.2013, 13:00
После первого NMI выводит 3-3-0-0
Потом 0-0-0-1
При последующих нажатиях последнее число увеличивается, и в какой-то случайный момент рядом с ним появляется еще одно число. В первый раз у меня это было 35, во второй 092376

после первого NMI клавиатуру опрашивает? (на брейк реагирует?)

Кстати почему фон черный, а текст белый - это ты чтото менял или так работает?

Eltaron
02.06.2013, 13:14
после первого NMI клавиатуру опрашивает? (на брейк реагирует?)

Кстати почему фон черный, а текст белый - это ты чтото менял или так работает?
После первого NMI жму BREAK - ничего не происходит. Но когда жму потом еще раз NMI - сразу вылазит L BREAK into program.

Цвета такие сам ставлю, это чтоб видеосинхронизации крышу не сносило.

ZXMAK
02.06.2013, 14:22
Благодаря результатам теста обнаружилась ошибка эмуляции флагов IFF - оказалось что на риале нельзя прочитать IFF1, читается только IFF2. После фикса выход из NMI в эмуляторе стал работать нормально :)

Но нужно еще разобраться почему зависало на ожидании INT с запрещенными прерываниями. Вот сделал два теста, нужно проверить какой из них зависает на риале. Под зависанием понимается что после первого-же нажатия NMI продолжают светится 255. Зависать должно с первого раза. Если зависло - второй раз можно не жать, результаты будут непредсказуемыми.
Если не зависнет, то результаты должны быть такими-же как прошлом тесте.

Eltaron
02.06.2013, 15:19
какой из них зависает на риале
Оба виснут.

На всякий случай выключал даже компьютер из розетки перед каждым тестом. Виснут.

ZXMAK
02.06.2013, 16:07
Обновил эмулятор до версии 2752 (https://zxmak2.codeplex.com/releases/view/107438):
- исправлена эмуляция флагов процессора IFF1/IFF2
- исправлен маппинг памяти для QUORUM
- исправлены тайминги для NMI/RESET

http://savepic.org/3562669.png

Eltaron
02.06.2013, 22:42
На радостях допилил маппинг DirectInput-джойстика на кемпстон.

ZXMAK
03.06.2013, 00:25
На радостях допилил маппинг DirectInput-джойстика на кемпстон.

добавил, вот пробный билд, у кого есть джойстик - проверьте пожалуйста что джойстик в этом билде работает :)

Eltaron
03.06.2013, 01:42
добавил, вот пробный билд, у кого есть джойстик - проверьте пожалуйста что джойстик в этом билде работает :)
Если что - у меня работает и под виндой, и под Wine. В обоих случаях тестил два джойстика, обычный геймпад a la Sega Megadrive 2, и более продвинутый, с аналоговым стиком.

Но лучше бы сторонний взгляд незаинтересованного лица :)

Djoni
03.06.2013, 15:55
А можно добавить второй HDD, Master/Slave в Profi.

nodeus
03.06.2013, 18:03
добавил, вот пробный билд, у кого есть джойстик - проверьте пожалуйста что джойстик в этом билде работает

Thrusmaster Run`n`Drive под Win8 работает.

[bETA]mEN
04.06.2013, 23:28
Но лучше бы сторонний взгляд незаинтересованного лица :)

Xbox 360 Controller for Windows под Windows 7 64 bit. Полёт нормальный.

ZXMAK
05.06.2013, 03:41
Обновил до версии 2753 (https://zxmak2.codeplex.com/releases/view/107560):
- дебагер: добавлен индикатор LPC (значение PC последней выполененной инструкции - удобно для поиска откуда произошел вызов подпрограммы)
- добавлена поддержка джойстика (за что благодарим Eltaron'а :))
- изменено расширение файла CMOS PENTEVO на "cmos" (вместо "eeprom")
- добавлен монитор аппаратных значений (см. Memory Map для PENTEVO/ATM/PROFI)

http://savepic.org/3543977.png

---------- Post added at 02:41 ---------- Previous post was at 02:38 ----------


А можно добавить второй HDD, Master/Slave в Profi.

можно, он будет добавлен, когда прикручу гуй для настройки IDE

abelenki
05.06.2013, 07:06
- добавлена поддержка джойстика (за что благодарим Eltaron'а :))

надеюсь, его можно отключить?

а то он мне совсем не к месту, т.к. у меня оба реальных джойстика замаплены на Sinclair 1 и Sinclair 2 через JoyToKey.

Eltaron
05.06.2013, 07:14
надеюсь, его можно отключить?
Удалить устройство Kempston Joystick
Но какой-то конфликт будет только если какая-то программа одновременно будет опрашивать и Sinclair-, и Kempston-джойстики

abelenki
05.06.2013, 07:22
Удалить устройство Kempston Joystick

понял, спасибо.

и ещё тогда вопрос (т.к. в данный момент проверить не могу):

можно ли назначить Kempston-джойстик на определённый номер DirectInput-девайса в системе?

например, у меня три геймпада Xbox 360, первые два у меня замаплены на Sinlcair 1 и 2 через Joy2Key, а третий я бы замаппил на Kempston через сам ZXMAK2.

Eltaron
05.06.2013, 07:29
можно ли назначить Kempston-джойстик на определённый номер DirectInput-девайса в системе?

например, у меня три геймпада Xbox 360, первые два у меня замаплены на Sinlcair 1 и 2 через Joy2Key, а третий я бы замаппил на Kempston через сам ZXMAK2.
Неа, используется первый найденный джойстик. Идея интересная, сделаю.

abelenki
05.06.2013, 07:33
Неа, используется первый найденный джойстик.

спасибо за информацию.


Идея интересная, сделаю.

тогда в ближайшем будущем можно будет сыграть втроём в Fist+ на геймпадах. :)

abelenki
05.06.2013, 10:34
сейчас запустил 2753, чтобы посмотреть реализацию Kempston-джойстика.

в дефолтной конфигурации Pentagon'а его нет, что есть хорошо. добавляется отдельным девайсом из Others.

Eltaron
06.06.2013, 10:15
Вот как-то так.

Но код пока что переполнен вызовами статических методов и мне за него стыдно :)
ZXMAK, а есть возможность из экземпляра устройства достучаться до виртуальной машины? Мне надо сказать ей какой именно джойстик опрашивать. Я бы мог, конечно, опрашивать все, но не уверен, что это не вызовет конфликта, если джойстик уже занят тем же Joy2Key.

А хотя даже не до виртуальной машины, а до хоста надо добраться. Ну нафиг, проще событие назначить.

ZXMAK
08.06.2013, 15:08
можно идентифицировать джойстики по имени. Имя сохранять в конфиге. Но нужно будет продумать как оптимальнее сканирование сделать чтобы сканить только джойстики которые реально используются.

Кстати, давно напрашивается мысль сделать все порты девайсов настраиваемыми через конфиг.

Eltaron
08.06.2013, 21:03
Здравствуй, интернет :)
http://zx.pk.ru/picture.php?albumid=117&pictureid=783


можно идентифицировать джойстики по имени. Имя сохранять в конфиге. Но нужно будет продумать как оптимальнее сканирование сделать чтобы сканить только джойстики которые реально используются.
Это-то уже работает. Там архитектурная проблема в виде необходимости увеличить связность кода.

Eltaron
08.06.2013, 22:30
А скриншот выше - это Hayes-модем заэмулированный. Вот он скромненький по архитектуре, даже в виде плагина скомпилировался :)

Eltaron
09.06.2013, 01:17
А с джойстиком так и не могу придумать способа красиво его встроить. Всё одно выходит, что надо или экземпляр виртуальной машины вниз к устройствам пробрасывать, или BusManager нагружать дополнительными методами, притянутыми за уши. Ни тот, ни другой способы мне не нравятся, а глубоко всё рефакторить не вижу смысла, так как всё равно автору видней, как и куда эмулятор развивать.
В принципе, оно и так работает :)

ZXMAK
09.06.2013, 02:14
добавил выбор джойстика и хаес модем.
Довольно сильно поменялся код джойстиков, нужно проверить как работает.
При выборе джойстика можно также выбрать "Keyboard Numpad" для эмуляции джойстика на нумпадной клавиатуре

Проверьте, жду результатов, если все ок, зачекиню и сделаю релиз.

[bETA]mEN
09.06.2013, 02:37
Проверьте
джойстик работает нормально

хаес модем
http://i.imgur.com/ypG88ri.png

это норма?

ZXMAK
09.06.2013, 04:55
mEN;608247']


это норма?

В этом списке отображаются COM порты хост машины, если ком портов на машине нет, то так и будет

---------- Post added at 03:55 ---------- Previous post was at 02:10 ----------

Обновил эмулятор до версии 2754 (https://zxmak2.codeplex.com/releases/view/107763):
- добавлен хаес-модем написанный Eltaron;
- добавлена возможность выбора джойстика хост-машины
- добавлена возможность выбора джойстика на клавиатурном нумпаде.
http://savepic.org/3583645.png

Eltaron
09.06.2013, 11:21
добавлен хаес-модем написанный Дмитрием
Александр я :)

[bETA]mEN
09.06.2013, 11:43
В этом списке отображаются COM порты хост машины, если ком портов на машине нет, то так и будет
Требуется модем подключенный к com-порту?

ZXMAK
09.06.2013, 11:54
Александр я :)

Сорри, все перепутал :rolleyes: Исправил :)

Eltaron
09.06.2013, 12:41
С джойстиками замечено два бага:

1. От этого падает если в системе два или больше джойстиков:

Error 13:53:04.953 Exception System.Reflection.TargetInvocationException: Адресат вызова создал исключение.
в System.RuntimeTypeHandle.CreateInstance(RuntimeTyp e type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
в System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
в System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
в System.Activator.CreateInstance(Type type, Boolean nonPublic)
в System.Activator.CreateInstance(Type type)
в ZXMAK2.Controls.FormMachineSettings.CreateConfigSc reenControl(BusManager bmgr, Object objTarget) в c:\Projects\zxmak2-clean\ZXMAK2\Controls\FormMachineSettings.cs:ст ока 404
в ZXMAK2.Controls.FormMachineSettings.initWorkBus() в c:\Projects\zxmak2-clean\ZXMAK2\Controls\FormMachineSettings.cs:ст ока 460
InnerException System.InvalidOperationException: Сбой при сравнении двух элементов массива.
в System.Collections.Generic.ArraySortHelper`1.Sort( T[] keys, Int32 index, Int32 length, IComparer`1 comparer)
в System.Array.Sort[T](T[] array, Int32 index, Int32 length, IComparer`1 comparer)
в System.Collections.Generic.List`1.Sort(Int32 index, Int32 count, IComparer`1 comparer)
в System.Collections.Generic.List`1.Sort()
в ZXMAK2.MDX.DirectJoystick.Select() в c:\Projects\zxmak2-clean\ZXMAK2\MDX\DirectJoystick.cs:строка 352
в ZXMAK2.Controls.Configuration.CtlSettingsJoystick. BindTypeList() в c:\Projects\zxmak2-clean\ZXMAK2\Controls\Configuration\CtlSettingsJoy stick.cs:строка 28
в ZXMAK2.Controls.Configuration.CtlSettingsJoystick. .ctor() в c:\Projects\zxmak2-clean\ZXMAK2\Controls\Configuration\CtlSettingsJoy stick.cs:строка 22
InnerException System.ArgumentException: По крайней мере в одном объекте должен быть реализован интерфейс IComparable.
в System.Collections.Comparer.Compare(Object a, Object b)
в System.Collections.Generic.ObjectComparer`1.Compar e(T x, T y)
в System.Collections.Generic.ArraySortHelper`1.SwapI fGreaterWithItems(T[] keys, IComparer`1 comparer, Int32 a, Int32 b)
в System.Collections.Generic.ArraySortHelper`1.Quick Sort(T[] keys, Int32 left, Int32 right, IComparer`1 comparer)
в System.Collections.Generic.ArraySortHelper`1.Sort( T[] keys, Int32 index, Int32 length, IComparer`1 comparer)
---
Full StackTrace:
в ZXMAK2.LogAgent.Error(Exception ex)
в ZXMAK2.Controls.FormMachineSettings.initWorkBus()
в ZXMAK2.Controls.FormMachineSettings.Init(VirtualMa chine vm, RenderVideo renderVideo)
в ZXMAK2.Controls.FormMain.menuVmOptions_Click(Objec t sender, EventArgs e)
в System.Windows.Forms.MenuItem.OnClick(EventArgs e)
в System.Windows.Forms.MenuItem.MenuItemData.Execute ()
в System.Windows.Forms.Command.Invoke()
в System.Windows.Forms.Command.DispatchID(Int32 id)
в System.Windows.Forms.Control.WmCommand(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Mes sage& m)
в System.Windows.Forms.ContainerControl.WndProc(Mess age& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
в System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
в System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
в System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
в System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
в System.Windows.Forms.Application.Run(Form mainForm)
в ZXMAK2.Program.Main(String[] args)



Фикс простой:


Index: HostDeviceInfo.cs
================================================== =================
--- HostDeviceInfo.cs (revision 26670)
+++ HostDeviceInfo.cs (working copy)
@@ -2,7 +2,7 @@

namespace ZXMAK2.Entities
{
- public class HostDeviceInfo
+ public class HostDeviceInfo : IComparable
{
public string Name { get; private set; }
public string HostId { get; private set; }
@@ -17,5 +17,10 @@
{
return Name;
}
+
+ public int CompareTo(object obj)
+ {
+ return ToString().CompareTo(obj.ToString());
+ }
}
}


2. От этого не падает, но джойстики просто не работают в некоторых случаях:

Error 14:01:17.332 Exception System.InvalidOperationException: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "FormMain" не из того потока, в котором он был создан.
в System.Windows.Forms.Control.get_Handle()
в Microsoft.DirectX.DirectInput.Device.SetCooperativ eLevel(Control parent, CooperativeLevelFlags flags)
в ZXMAK2.MDX.DirectJoystick.CaptureHostDevice(String hostId) в c:\Projects\zxmak2-clean\ZXMAK2\MDX\DirectJoystick.cs:строка 101
---
Full StackTrace:
в ZXMAK2.LogAgent.Error(Exception ex)
в ZXMAK2.MDX.DirectJoystick.CaptureHostDevice(String hostId)
в ZXMAK2.Engine.InputAggregator.Capture()
в ZXMAK2.Engine.InputAggregator..ctor(IHostKeyboard hostKeyboard, IHostMouse hostMouse, IHostJoystick hostJoystick, IKeyboardDevice[] keyboards, IMouseDevice[] mouses, IJoystickDevice[] joysticks)
в ZXMAK2.Engine.VirtualMachine.runThreadProc()
в System.Threading.ThreadHelper.ThreadStart_Context( Object state)
в System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()


Фикс:


Index: DirectJoystick.cs
================================================== =================
--- DirectJoystick.cs (revision 26670)
+++ DirectJoystick.cs (working copy)
@@ -69,6 +69,13 @@
}
}

+ // Should be executed in the FormMain thread
+ public delegate void FormMainDelegate(Form form, Device joystick);
+ public static void SetCooperativeLevel(Form form, Device joystick)
+ {
+ joystick.SetCooperativeLevel(form, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive);
+ }
+
public void CaptureHostDevice(string hostId)
{
try
@@ -98,7 +105,8 @@
var joystick = new Device(deviceInstance.InstanceGuid);
try
{
- joystick.SetCooperativeLevel(m_form, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive);
+ // multithreaded joystick.SetCooperativeLevel analogue
+ m_form.Invoke(new FormMainDelegate(SetCooperativeLevel), m_form, joystick);
joystick.SetDataFormat(DeviceDataFormat.Joystick);
joystick.Acquire();
}


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


mEN;608283']Требуется модем подключенный к com-порту?
Ага. Или модем, или сотовый через шнурок, или сотовый через блютуз. В двух последних случаях только надо чтоб при этом виртуальный COM-порт создавался.

---------- Post added at 14:41 ---------- Previous post was at 14:27 ----------

И наверное есть смысл сделать так:


Index: CtlSettingsJoystick.cs
================================================== =================
--- CtlSettingsJoystick.cs (revision 26670)
+++ CtlSettingsJoystick.cs (working copy)
@@ -37,7 +37,7 @@
m_bmgr = bmgr;
m_device = device;

- cbxType.SelectedIndex = -1;
+ cbxType.SelectedIndex = 0;
for (var i = 0; i < cbxType.Items.Count; i++)
{
var hdi = (HostDeviceInfo)cbxType.Items[i];


Иначе если запустить эмулятор, а перед запуском отключить тот джойстик, который прописан в конфиге, то при входе в Settings и нажатии Apply вылетает окошко про NullReferenceException.

ZXMAK
09.06.2013, 12:46
2. От этого не падает, но джойстики просто не работают в некоторых случаях:


а если просто заменить на такой вызов помогает?


joystick.SetCooperativeLevel(m_form.Handle, CooperativeLevelFlags.Background | CooperativeLevelFlags.NonExclusive);

Eltaron
09.06.2013, 12:53
а если просто заменить на такой вызов помогает?
Неа, поток-то всё равно другой остался. Падает с той же ошибкой, разве что Stacktrace уменьшился на одну строчку.

Error 14:50:26.667 Exception System.InvalidOperationException: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "FormMain" не из того потока, в котором он был создан.
в System.Windows.Forms.Control.get_Handle()
в ZXMAK2.MDX.DirectJoystick.CaptureHostDevice(String hostId) в c:\Projects\zxmak2-clean\ZXMAK2\MDX\DirectJoystick.cs:строка 101

ZXMAK
09.06.2013, 13:13
ах ну да, а если хэндл окна в конструкторе сохранять и потом использовать готовый, без обращения к mainform?

Eltaron
09.06.2013, 13:49
ах ну да, а если хэндл окна в конструкторе сохранять и потом использовать готовый, без обращения к mainform?
Haldle же всего лишь объект ядра, число. Оно вроде неизменное на всём протяжении работы программы.
Но счас попробую.

Ошибся, не число, а IntPtr это. Работает! :)

---------- Post added at 15:49 ---------- Previous post was at 15:34 ----------

Еще баг - если вытащить джойстик во время работы, то падает в районе DirectJoystick.cs:43 с разными ошибками. Было и "Коллекция была изменена; невозможно выполнить операцию перечисления", и что-то про невозможность перечисления пустой коллекции. Эмулятор при этом прекращает работу.
Ой, строка 43 - это же у меня после разных изменений :) В общем, тут падает:


var guidList = m_devices.Keys;
foreach (var guid in guidList)

ZXMAK
09.06.2013, 14:12
Еще баг - если вытащить джойстик во время работы, то падает в районе DirectJoystick.cs:43 с разными ошибками. Было и "Коллекция была изменена; невозможно выполнить операцию перечисления", и что-то про невозможность перечисления пустой коллекции. Эмулятор при этом прекращает работу.
Ой, строка 43 - это же у меня после разных изменений :) В общем, тут падает:


вот поправил, проверь

Eltaron
09.06.2013, 14:22
вот поправил, проверь
Счас когда выдергиваю, в логе гигантское количество

Error 16:20:14.646 Exception Microsoft.DirectX.DirectInput.NotAcquiredException : Ошибка в приложении.
в Microsoft.DirectX.DirectInput.Device.Poll()
в ZXMAK2.MDX.DirectJoystick.ScanDevice(String hostId)
---
Full StackTrace:
в ZXMAK2.LogAgent.Error(Exception ex)
в ZXMAK2.MDX.DirectJoystick.ScanDevice(String hostId)
в ZXMAK2.MDX.DirectJoystick.Scan()
в ZXMAK2.Engine.InputAggregator.Scan()
в ZXMAK2.Engine.VirtualMachine.runThreadProc()
в System.Threading.ThreadHelper.ThreadStart_Context( Object state)
в System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()

Но сам эмулятор при этом продолжает работать.

ZXMAK
09.06.2013, 14:29
Счас когда выдергиваю, в логе гигантское количество
Но сам эмулятор при этом продолжает работать.

поправил, проверь еще раз

Eltaron
09.06.2013, 14:41
поправил, проверь еще раз
Счас всё в идеале, нигде не падает.

ZXMAK
09.06.2013, 15:01
обновил эмулятор до версии 2755 (https://zxmak2.codeplex.com/releases/view/107779)
- исправлен опрос джойстиков

http://savepic.org/3564216.png

ZXMAK
11.06.2013, 01:00
Обновил эмулятор до версии 2756 (https://zxmak2.codeplex.com/releases/view/107857):
- исправлен баг чтения CSW
- исправлен баг декомпрессии CSW V2
- файлы CSW/WAV при открытии разбиваются на двух-секундные блоки, для удобства навигации
- добавлено отображение описания файла для CSW V2
- улучшена точность чтения CSW/WAV (теперь читаются даже те WAV, которые не читабельны в Spectaculator)
- добавлено сохранение последней рабочей папки Save/Open

http://savepic.org/3639692.png (http://newton.sunderland.ac.uk/~specfreak/DirectRecords/Robocop%203.zip)
http://savepic.org/3627396.png

Gelip
12.06.2013, 21:13
Обновил эмулятор до версии 2756 (https://zxmak2.codeplex.com/releases/view/107857):
- файлы CSW/WAV при открытии разбиваются на двух-секундные блоки, для удобства навигации

Cool, now while WAV loading possible make pause :-)
42115

Alex Rider
15.06.2013, 13:44
ZXMAK, а реально сделать поддержку TS-Conf?

ZXMAK
15.06.2013, 19:04
ZXMAK, а реально сделать поддержку TS-Conf?

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

introspec
15.06.2013, 19:54
ZXMAK, я гонял свой код в последней версии эмулятора и обратил внимание, что у вас есть конфигурации ULA "128к ранняя модель" и "128к поздняя модель". Я, если честно, ни разу не слышал об таком подразделении. По времянкам, насколько я второпях понял, "поздняя модель" - это просто +2.

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

ZXMAK
15.06.2013, 20:27
ZXMAK, я гонял свой код в последней версии эмулятора и обратил внимание, что у вас есть конфигурации ULA "128к ранняя модель" и "128к поздняя модель". Я, если честно, ни разу не слышал об таком подразделении. По времянкам, насколько я второпях понял, "поздняя модель" - это просто +2.

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

отличие ранней и поздней моделей для 48 и 128 - это это просто смещение развертки на 1 такт. Для +3 такого деления нет, а вот 48 и 128 были в обоих вариантах, где я об этом узнал уже не помню :smile:

У +3 другие времянки. Во времянках +3 в ZXMAK2 возможны ошибки, я эту модель особо не отлаживал, т.к. нечем - мало софта с мультиколором под нее.

Updated: спутал +2 и +3 :) Да поздняя модель 128 это по всей видимости +2 и есть.

Alex Rider
15.06.2013, 22:39
Но мне сейчас больше интересно развитие отладчика
Эх, это тоже безумно пользительно. Я сейчас отлаживаю все на Unreal (отлажчик более удобный и привычный пока, да), а проверяю работу на клонах ня ZXMAK. Хотелось бы все в одном флаконе :) И TS-Conf тоже, но, да, понимаю, что приоритеты правильные. Кстати, может отладчик ZXMAK уже и догнал по комфорту Unreal'овский. Но! Отсутствие help'а по кнопкам, равно как и кастомного мапирования кнопок, сильно тормозит исследование. В последний раз кнопки отладчика ZXMAK я изучал в отладчике Visual Studio - не самый быстрый способ.

ZEK
16.06.2013, 01:25
На Win8 x64 не ставится managed DX инсталером с первой страницы и списке совместимости нет винды 8, пора уже в сторону XNA копать

ZXMAK
16.06.2013, 01:37
На Win8 x64 не ставится managed DX инсталером с первой страницы и списке совместимости нет винды 8, пора уже в сторону XNA копать

хм, странно... Веб инсталлер DX9 брал тут: http://www.microsoft.com/en-us/download/details.aspx?id=35

Результат:
http://savepic.org/3665500.png

ZEK
16.06.2013, 01:52
Я вытащил либу microsoft.directx.direct3dx из полного дистрибутива, положил рядом с эмулем, тем и победил

---------- Post added at 00:52 ---------- Previous post was at 00:41 ----------

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

ZXMAK
16.06.2013, 01:59
Я вытащил либу microsoft.directx.direct3dx из полного дистрибутива, положил рядом с эмулем, тем и победил

---------- Post added at 00:52 ---------- Previous post was at 00:41 ----------

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

шаги такие:
1) чистая W8 x64
2) запускаем эмуль, система предлагает обновить дотнет фреймворк - соглашаемся
3) Запускаем эмуль получаем ошибку что не найдена сборка DirectX
4) вводим в гугле DirectX 9, качаем из первой ссылки веб инсталлер и устанавливаем (ссылка кстати совпадает с той что в этой теме на первой странице)
5) Запускаем эмулятор - все работает, результат на скрине выше

на W8 x86 точно также

---------- Post added at 00:59 ---------- Previous post was at 00:55 ----------



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

а что за тестовый режим?

ZEK
16.06.2013, 02:03
а что за тестовый режим?
а хз, для отладки драйверов вроде, мне нужен что бы на x64 эмулятор хаспа работал,
надпись внизу показывает

ZXMAK
16.06.2013, 02:11
а хз, для отладки драйверов вроде, мне нужен что бы на x64 эмулятор хаспа работал,
надпись внизу показывает

а где ты его включал?

ZEK
16.06.2013, 02:13
В инсталляторе эмулятора хаспа скрипты есть, они что то с реестром и загрузчиком оси шаманят
Вспомнил, самое главное для чего тестовый режим, это операционка начинает принимать самоподписаные драйвера

ZXMAK
16.06.2013, 02:33
читал недавно на каком-то сайте, мол ходят слухи что Managed DirectX наоборот вроде вернуть в Windows 8 в каком-то виде собираются :)

ZEK
16.06.2013, 02:35
О еще фичу нашел, при отладке в тестовом режиме не выскакивает сообщение OS Loader lock, хотя его не отключал, я на либу SharpDX наткнулся для решения проблем с DX в metro

ZXMAK
16.06.2013, 02:37
В инсталляторе эмулятора хаспа скрипты есть, они что то с реестром и загрузчиком оси шаманят
Вспомнил, самое главное для чего тестовый режим, это операционка начинает принимать самоподписаные драйвера

если включать через

bcdedit /set {globalsettings} advancedoptions true

после этого при загрузке система предалагает опции загрузки, по F7 загружается с отключенной проверкой подписи.
Эмуль в этом режиме работает

---------- Post added at 01:37 ---------- Previous post was at 01:35 ----------


О еще фичу нашел, при отладке в тестовом режиме не выскакивает сообщение OS Loader lock, хотя его не отключал

похоже что эти дрова чтото здорово в системе сломали :)
попробуй отключить тестовый режим через

bcdedit.exe -set TESTSIGNING OFF

но я думаю чтото там серьезно испорчено

ZEK
16.06.2013, 02:42
Не, если эмуль хаспа слетит я работать не смогу, он важней, эмулятор работает с библиотекой MDX рядом с exe, это обновлялка DX не хотела ставить mdx

ZXMAK
16.06.2013, 02:48
Не, если эмуль хаспа слетит я работать не смогу, он важней, эмулятор работает с библиотекой MDX рядом с exe, это обновлялка DX не хотела ставить mdx

по всей видимости установщик драйвера что-то серьезно испортил в системе, поэтому система не может нормально установить DirectX. Можно было попробовать вначале все что нужно установить, включая DirectX 9, а потом уже этот драйвер ставить...

ZEK
16.06.2013, 02:51
Это я уже понял, но меня устраивает, винда так работает уже почти год, причем сбило с толку то что стояло 2 восьмерки, одна 32х битная и там вообще никаких заморочек не было с MDX все работало, она игровая была и там тестовых режимов никаких не было, да и эмулятор хаспа на 32х битку ставится без таких танцев

alone
17.06.2013, 13:23
ZXMAK, а реально сделать поддержку Eva V9990? Ради такого даже .NET поставлю.

ZXMAK
19.06.2013, 01:52
ZXMAK, а реально сделать поддержку Eva V9990? Ради такого даже .NET поставлю.

ну это не простая задача, особенно учитывая что софта под него нет...

alone
19.06.2013, 13:58
Есть тесты с исходниками (очистка, загрузка bmp, вывод спрайтов, скролл):

Cat_Alex/QRP
20.06.2013, 09:51
ZXMAK, как на счет того,что бы сделать поддержку такого клона как "Балтик" со всеми его наворотами?

Doronetty
21.06.2013, 14:30
Нашёл одну странность - решил проверить работоспособность Ковокса в АТМ (почему-то по умолчанию в конфиге для АТМ Ковокс не прописан, хотя что в АТМ-1, что в АТМ-2 стоит обычный Ковокс по стандарту Pentagon). В режиме АТМ-1 загрузил диск с плеером (см. в аттаче), всё пучком, всё работает. А вот когда попробовал режим АТМ-2, этот же диск упорно отказался читаться - сплошные ошибки чтения (некоторые сектора при нажатии Retry проходятся, а некоторые - нет)!

ZXMAK
21.06.2013, 17:55
Включи no delay для вг93

Doronetty
21.06.2013, 21:26
Работает, но всё же это право странно - в режиме no delays обычно работают далеко не все диски, а вот в обычном режиме с отключённым no delays должны работать все диски. Тут же наоборот. Да и притом в режиме АТМ-1 всё работало безо всяких колдований с no delays!

Djoni
24.06.2013, 10:16
ZXMAK,можно добавить в Profi 3.xx поддержку 512K,такой объём памяти устанавливался на оригинальных платах v3.xx.

ZEK
27.06.2013, 14:43
В рендерах для ATM теряется 4й бит цвета бордюра


public virtual void UpdateBorder(int value)
{
m_borderIndex = value;
m_borderColor = Palette[m_borderIndex & 7];
}

introspec
27.06.2013, 14:59
Возник вопрос, похожий на тот, что я уже задавал.
В списке настроек ULA, мне кажется, развелось теперь слишком много моделей (вот уж не думал, что когда-нибудь скажу такое! :) ) Конкретно, вопросы есть по следующим моделям:
48k (snow)
48k (early model)
48k (late model)
Что такое снег и зачем он нужен, я понимаю. Но почему есть две разные модели 48k в плане времянок - непонятно. Если верить WoS FAQ, времянки на всех 48k должны совпадать, возможно, с разницей начала экрана на такт. А в ZXMAK2 "48k (late model)" отличается такта где-то на 4 как минимум и совершенно непонятно, что это вообще такое. Другие точные эмуляторы (Spectaculator и ZXSpin) дают только один и тот же набор времянок, и для 48 и для 48+. Мне кажется, нужно всё же использовать какую-то более стандартную номенклатуру и не размножать модели, если нет хорошего (т.е. понятного) на то повода.

Точно также, номенклатура
128k (early model)
128k (late model)
путает. Времянки "128k (early model)" соответствуют стандарту (т.е. WoS FAQ), а времянки "128k (late model)", кажется, соотетствуют +2. Но тогда их так и нужно назвать.

Есть ещё пожелание в плане интерфейса. Когда проверяешь работоспособность софта на разных моделях, очень неудобно независимо менять модель памяти и ULA. М.б., есть смысл подумать о том, чтобы сделать какой-то более простой и доступный переключатель "модели", как пресеты что ли, которые настроят эмулятор так, чтобы соответствовать каким-то конкретным компьютерам (скажем, 48к, 128к, 128к +2, 128к +2а, 128к +3, Пентагон 128, Scorpion (три модели) и т.д. и т.п.).

Дмитрий
27.06.2013, 15:46
introspec, есть возможность такие пресеты делать, тока, имхо, их надо вручную делать. Набрал конфиг - закрыл эмуль, в его папке остался файлик ZXMAK2.vmz, его переименовываем как хочется, внутри файла в строке <VirtualMachine> добавляешь атрибут Name, например <VirtualMachine name="BYTE 48K"> и суешь этот файл в архив MACHINES.PAK. приследующем запуске эмуля в настройках в кнопке Wizard будет новая конфигурация.

introspec
27.06.2013, 17:02
introspec, есть возможность такие пресеты делать, тока, имхо, их надо вручную делать. Набрал конфиг - закрыл эмуль, в его папке остался файлик ZXMAK2.vmz, его переименовываем как хочется, внутри файла в строке <VirtualMachine> добавляешь атрибут Name, например <VirtualMachine name="BYTE 48K"> и суешь этот файл в архив MACHINES.PAK. приследующем запуске эмуля в настройках в кнопке Wizard будет новая конфигурация.

Чёрт, да я же дебил! Я не нажимал Wizard, просто не понимал, что это такое. А там в визарде уже есть всё что мне нужно! :)

---------- Post added at 14:02 ---------- Previous post was at 12:48 ----------

Не, похоже сегодня не мой день. Посмотрел исходники и понял, откуда взялись вариации спектрумов (late timings/early timings). Мне кажется, нужно так и написать в интерфейсе, "late timings/early timings", потому что иначе возникает впечатление, что речь идёт о разных моделях, хотя эти вариации к моделям, насколько я знаю, отношения не имеют.

SoftLight
27.06.2013, 17:43
что такое 'late timings/early timings' ?

introspec
27.06.2013, 17:53
что такое 'late timings/early timings' ?
Такт X, на котором начинается экран у классических спектрумов 48/128, вообще говоря, задан не совсем точно. Точное число X я сейчас из головы не вспомню (см. FAQ на WoS), но есть спектрумы, у которых экран начинается на такте Х, а есть спектрумы, у которых экран начинается на такте Х+1. По всей видимости, это эффект каких-то аналоговых цепей, т.к. известны вариации среди одних и тех же моделей, и описаны даже случаи, когда холодный компьютер выдаёт Х, а прогретый - Х+1.

ZXMAK
28.06.2013, 05:31
ZXMAK,можно добавить в Profi 3.xx поддержку 512K,такой объём памяти устанавливался на оригинальных платах v3.xx.

попробовал отключить старшийбит номера страницы (порт #DFFD), но пзу с такой памятью запускаться не хочет. Есть информация по назначению битов порта #DFFD в профи 3.xx?

---------- Post added at 04:26 ---------- Previous post was at 04:18 ----------


Конкретно, вопросы есть по следующим моделям:
48k (snow)
48k (early model)
48k (late model)
Что такое снег и зачем он нужен, я понимаю. Но почему есть две разные модели 48k в плане времянок - непонятно.

отдельную модель со снегом я сделал для экспериментов, чтобы не портить основной код ULA48. Дело в том что точных подробностей что именно происходит со снегом нет, поэтому снег сейчас имитируется на основе той информации что я нашел в интернете и подобрал экспериментально. Вобщем это не точный снег :smile:
Поэтому эта экспериментальная ULA со снегом так и осталась отдельным классом.

early и late модели для ULA48 и ULA128 отличаются только смещением таймингов на 1 такт. другой разницы в них нету.

---------- Post added at 04:31 ---------- Previous post was at 04:26 ----------


В рендерах для ATM теряется 4й бит цвета бордюра


public virtual void UpdateBorder(int value)
{
m_borderIndex = value;
m_borderColor = Palette[m_borderIndex & 7];
}


спасибо, исправил

Djoni
28.06.2013, 15:55
попробовал отключить старшийбит номера страницы (порт #DFFD), но пзу с такой памятью запускаться не хочет. Есть информация по назначению битов порта #DFFD в профи 3.xx?[COLOR="Silver"]



Вот ссылка на альбом схем Profi v 3.02
http://sblive.narod.ru/ZX-Spectrum/Profi/profi_interface_v32.rar
http://sblive.narod.ru/ZX-Spectrum/Profi/profi_comp_v32.rar
http://sblive.narod.ru/ZX-Spectrum/Profi/profi_instrukciya_v32.rar
там есть описание,на плате версией v 3.02 всего две линейки РУ7 и в видеоконтроллере нет регистров атрибутов только двухцветный режим.
На платах v4,02 и выше видео контролер использует странички (#3A,#38) из второй половины мегабайта памяти для отображения цвета.

Вложении прошивки для Profi v 3.02.

ZXMAK
29.06.2013, 03:13
Обновил эмулятор до версии 2757:
- исправлена эмуляция TZX (Bruce Lee, Zynaps)
- исправлен 16 цветный бордюр для ATM/EVO (спасибо ZEK)
- добавлен модуль памяти PROFI 512K и образ пзу PROFI-V03

http://savepic.org/3805299.pnghttp://savepic.org/3806323.png

с пзу PROFI-V03 память PROFI-512K запускается, но в тесте "Checker" (из менюшки в пзу), при первом проходе пзу пытается писать в старшие 512к, которые недоступны. Не уверен, насколько это корректное поведение... проверьте плиз.

Djoni
30.06.2013, 06:16
с пзу PROFI-V03 память PROFI-512K запускается, но в тесте "Checker" (из менюшки в пзу), при первом проходе пзу пытается писать в старшие 512к, которые недоступны. Не уверен, насколько это корректное поведение... проверьте плиз.

Как я помню так и должно быть,сперва определяется доступная память потом тестируется,на Profi можно было на разные линейки памяти ставить РУ5,РУ7 даже могло быть так: 512кб, пусто, 256кб :eek_std:

Непонятно только почему TEST v1.0 под расширенный экран не работает.

zorel
01.07.2013, 17:11
ZXMAK, есть предложение добавить в поддержку джойстиков синклер 1, 2 джойстика и курсора? Можно было бы на 2 джойстика играть вдвоем.
И еще было бы удобно, если бы из меню (например из FILE, VM или Tools) можно было выбирать в какой диск загружать дискету, просто пока не очень удобно особенно если запущен режим АТМ турбо, обязательно нужно каждый раз при смене дискетки захоlить в settings, не очень удобно.. :)

Eltaron
02.07.2013, 19:37
ZXMAK, есть предложение добавить в поддержку джойстиков синклер 1, 2 джойстика и курсора? Можно было бы на 2 джойстика играть вдвоем.
А лучше сразу настраиваемый, что и QAOPspace забиндить можно было, и что угодно еще.
Я хотел такое сделать, но в существующей архитектуре нельзя "кинуть МГТФ" и сотворить что-то в духе bmgr.FindDevice<IKeyboardDevice>().KeyboardState[fireKey] = true;

ZXMAK
03.07.2013, 00:44
впринципе давно напрашивается настраиваемая раскладка клавиатуры и джойстиков, т.к. код там однотипный и его можно переписать на опрос по таблице. Но для этого нужно посидеть повозиться с этим :)

breeze
23.11.2013, 16:41
Выложил образ, там есть кой-какой софт. должен определиться как диск С и по идее загрузиться ОС с него.
http://rghost.ru/46009536
http://rghost.ru/46009550

Хех, решил тут посмотреть наконец что есть спринтер, но файлы уже потёрли :( может у кого сохранилось? Можно даже уже пропатченную версию ;)

ZEK
23.11.2013, 17:30
Она на оффсайте с спринтеров внутрях

breeze
23.11.2013, 17:48
Она на оффсайте с спринтеров внутрях

Я честно говоря не в курсе где сий сайт, можно носом тыкнуть?

ZEK
23.11.2013, 17:57
На первой странице темы, там и faq краткий

breeze
23.11.2013, 19:12
На первой странице темы, там и faq краткий

эээ… если ты про http://zxmak2.codeplex.com то я первым делом его обнюхал, но кроме архивов самого эмулятора там ничего не нашел.

ZEK
23.11.2013, 19:23
Ну так в настройках эмуля жми визард и вибирай спринтер, визард настроит эмуль

breeze
23.11.2013, 19:33
Ну так в настройках эмуля жми визард и вибирай спринтер, визард настроит эмуль

ээээ… вообще-то я просил образ винта:

SprinterHDD.part1.rar
SprinterHDD.part2.rar

Срок хранения на рыгхосте уже истёк… а сам эмулятор у меня давно настроен. Я нашел дискетку с файлами, но вот создать образ харда с нуля так и не получилось, всё время выдаёт, что он не загрузочный.

[bETA]mEN
23.11.2013, 20:26
ээээ… вообще-то я просил образ винта:
SprinterHDD.part1.rar
SprinterHDD.part2.rar

http://zalil.ru/34828806
http://zalil.ru/34828807

breeze
23.11.2013, 20:30
Спасибо огромное!

Hacker Grey
28.11.2013, 22:59
ZXMAK, Вечер добрый.
В режиме Sprinter пробую писать в порты 4Eh , 4Fh а в ответ тишина.
И стандартный wavplay молчит - ну он то может как то нестандартно к fdd, hdd обращается, ему простительно, но то что COVOX-Blaster молчит, очень обидно.
А то вот захотелось проигрыватель mod-ов на Sprinter накодить, а не выходит.
Или может я что то делаю не так ?
(SprinterSDK, кстати тоже молчит)

abelenki
25.12.2013, 20:14
ZXMAK, есть ли надежда на эмуляцию ULAPlus (http://speccy.info/ULAplus) в будущих релизах?

ZXMAK
29.12.2013, 07:09
ZXMAK, есть ли надежда на эмуляцию ULAPlus (http://speccy.info/ULAplus) в будущих релизах?

Сейчас сложно выделить время на эмуль, ulaplus я давно хотел добавить, вопрос только в том чтобы понять как оно должно работать из существующих описаний это не очевидно, если ктото поможет разобраться, можно добавить. К сожалению временя найти чтобы подебажить существующий код сейчас сложно

---------- Post added at 05:09 ---------- Previous post was at 05:04 ----------


ZXMAK, Вечер добрый.
В режиме Sprinter пробую писать в порты 4Eh , 4Fh а в ответ тишина.
И стандартный wavplay молчит - ну он то может как то нестандартно к fdd, hdd обращается, ему простительно, но то что COVOX-Blaster молчит, очень обидно.
А то вот захотелось проигрыватель mod-ов на Sprinter накодить, а не выходит.
Или может я что то делаю не так ?
(SprinterSDK, кстати тоже молчит)

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

Eltaron
15.02.2014, 21:27
Случайно реализовал сохранение в TAP-файлы :) Вообще, делал совсем другое, но как побочный продукт вышел такой плагин.

Установка - кинуть TapeRecorder.dll в папку Plugins (возможно, её потребуется создать). Запустить эмулятор, добавить Tape Recorder к виртуальной машине.
Перехватывает идущий на магнитофон сигнал (трапов нет, честно парсится магнитофонный выход), распознаёт блоки и добавляет их к текущему открытому TAP-файлу. Или к пустому, если ничего не открыто. Сохранение образа через File - Save As (выбрать .tap).
Распознанные блоки добавляются в окошко Tools - Tape, но там косяк с обновлением, если окно уже открыто. В этом случае надо его закрыть и снова открыть.

Плагин и исходник (пусть будет BSD license) в аттаче.

DenisGrachev
26.02.2014, 08:29
ZXMAK, а можешь сделать сборку под XNA 4.0? А то у меня есть воксельный движок и хотелось бы сделать такое:

http://www.youtube.com/watch?v=h9WhGs2_dM0

Я его прикручивал к какому-то эмулятору на C#, но там звука не было и вообще не задалось.
У меня даже были инишники для Cybernoid, в которых прописывался размер вокселя для каждого цвета.Чтобы объём был.

ZXMAK
29.03.2014, 21:07
ZXMAK, а можешь сделать сборку под XNA 4.0? А то у меня есть воксельный движок и хотелось бы сделать такое:

http://www.youtube.com/watch?v=h9WhGs2_dM0

Я его прикручивал к какому-то эмулятору на C#, но там звука не было и вообще не задалось.
У меня даже были инишники для Cybernoid, в которых прописывался размер вокселя для каждого цвета.Чтобы объём был.

немного отрефакторил код, теперь класс VirtualMachine работает со всеми девайсами через IHost, который предоставляет доступ к Video, Sound, Keyboard, Mouse и Joystick. Т.е. для чтобы перевести на другую платформу нужно просто реализовать UI, реализовав эти интерфейсы.
Связей от движка на UI насколько помню вроде не оставалось, если не считать extensions для плагинов, они не должны мешать - просто AttachGui не будет вызываться. Главное чтобы UI типы не помешали создать сами объекты плагинов. Нужно будет это тоже отрефакторить. Для XNA это не будет проблемой, т.к. XNA работает под виндой и все эти типы будут доступны.

---------- Post added at 19:07 ---------- Previous post was at 18:59 ----------


ZXMAK2757, режим VM=Scorpion
мини-дема от интраспека:)
http://zx.pk.ru/attachment.php?attachmentid=42960&d=1378074443
Работает, красиво.
После нее не работает RESET ((
Это нормально?
upd
Да, и вот такой иногда косячок вылезает, несколько раз получалось)


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

2. Это не косячек. У тебя в настройках включена опция View->Scale->Fixed Pixel Size, поэтому если не хватает размеров окна (чтобы уместить все пикселы фиксированного размера), масштаб изображения уменьшается, чтобы уместить все пикселы фиксированного размера. Увеличь размер окна (View->Size->200%) и все будет ок ;)


ZXMAK, есть ли надежда на эмуляцию ULAPlus (http://speccy.info/ULAplus) в будущих релизах?

я сам бы хотел его добавить, но по той документации что есть на ULAPlus, быстро понять как это работает сложно (не достаточно подробно описаны детали). А времени сидеть ковыряться пока нету

---
Из новостей, то что увидел по коду, Adlers прикрутил к своему отладчику брейкпоинты по доступу к памяти (проверил работает) и встроенный ассемблер (используется unmanaged библиотека Pasmo (http://pasmo.speccy.org/)). Конечно нехорошо, что в чисто managed эмуляторе используется unmanaged ассемблер, хотелось бы все managed, но ладно пусть будет :smile:
Новый релиз пока не делал.

MetalliC
31.03.2014, 23:36
можно на опцию "Maximum Speed" хоткей сделать ? или комбинацию клавиш

ZXMAK
01.04.2014, 02:01
можно на опцию "Maximum Speed" хоткей сделать ? или комбинацию клавиш

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

примерно так это будет выглядеть:
http://savepic.org/5193520.png

nodeus
01.04.2014, 11:32
Для хоткеев нужно менеджер какой-то делать


Ждём, ждём!

Faster
03.04.2014, 12:48
Раз уж грядет новая версия, то прошу пофиксить еще следующий момент:

Согласно документации:

Восстановление 0000hvxx - команда восстановления используется для инициализации микросхемы КР1818ВГ93, обеспечивая установку магнитной головки выбранного дисковода в исходное состояние (на нулевую дорожку). Команда имеет следующие параметры:
h - бит определяет положение магнитной головки дисковода во время выполнения команды. Если он обнулен, то головка поднята, если установлен - находится в рабочем положении (опущена на дискету). Следует учитывать, что при h=0, контроллер не выдает сигнал на включение двигателя дисковода.
Во всех эмуляторах ВГ-шка так и эмулируется, но:


Это дисковод не включается, а ВГ93 команду выполняет. Выдает 256 импульсов "шаг"
Так вот, прошу в эмуляторе учесть этот момент и сделать эмуляцию физического дисковода, т.е. при выполнении команд с h=0 "мотор дисковода" не включать (тормозить), как это и происходило на физическом дисководе. После этого фикса заработают программы, в которых используется, как пример, процедура гашения лампочки дисковода (торможение диска), которые на данный момент работают только с включенной опцией No delays, например мой крек Satisfaction (http://vtrdos.ru/demoz/demozrus/SATISF.ZIP). Первоисточник здесь (http://zx.pk.ru/showthread.php?t=21039&page=4).

ZXMAK
05.04.2014, 18:24
зачекинил новую версию UI :)

Eltaron: проверь пожалуйста, как последний вариант работает под Linux?

zebest: проверь пожалуйста, как последний вариант работает на особенной Win2K, где когда-то наблюдались креши при ресайзе? (вот ссылка на версию эмулятора, которая глючила, для проверки: http://zxmak2.codeplex.com/downloads/get/517848)

тестовый билд последней версии с новым UI см. тут: https://zxmak2.codeplex.com/downloads/get/823996

Moro
05.04.2014, 19:41
ZXMAK, А поддержка General Sound в Вашем эмуляторе планируется? И в тулбар можно вывести дисководы для быстрого доступа? А так же еще можно boot меню.

zebest
05.04.2014, 19:46
zebest: проверь пожалуйста, как последний вариант работает на особенной Win2K, где когда-то наблюдались креши при ресайзе? (вот ссылка на версию эмулятора, которая глючила, для проверки: http://zxmak2.codeplex.com/downloads/get/517848)
ну 2660 как глючила - так и сейчас висит, за много лет ничего не изменилось, проверил.
Новая вроде с первого раза нормально, но вот второй запуск
http://savepic.org/5246463m.jpg (http://savepic.org/5246463.htm)
если окон изменить размер - конечно восстанавливается, но все равно - как то неаккуратненько, доктор (с)

zip-файлы оТвалились(

Eltaron
05.04.2014, 19:59
Eltaron: проверь пожалуйста, как последний вариант работает под Linux?
Всё отлично: и выглядит хорошо, и скорость вроде не упала.

ZXMAK
05.04.2014, 20:28
если окон изменить размер - конечно восстанавливается, но все равно - как то неаккуратненько, доктор (с)

а перед закрытием не так было? дело в том что эмулятор сохраняет последние размеры окна и при новом запуске их восстанавливает. Т.е. после перезапуска размеры окна должны остаться такими-же как перед последним закрытием приложения.


zip-файлы оТвалились(

точно, при драг-н-дроп теперь путь к файлу через URI передается, приставка file:// не поддерживается SharpZipLib'ом, исправлю.
Через File->Open ZIP работает



---------- Post added at 19:28 ---------- Previous post was at 19:25 ----------


ZXMAK, А поддержка General Sound в Вашем эмуляторе планируется? И в тулбар можно вывести дисководы для быстрого доступа? А так же еще можно boot меню.

планировалась, я даже одно время начал ее делать, в сырцах даже файлик с заготовкой для GS валяется, но все на этом так и остановилось, пока нет времени, а GS сложная штука :)

по поводу тулбара, можно :)

Moro
05.04.2014, 21:03
Жаль конечно, что GS нет, довольно приличное количество игр и дем поддерживают GS, а то попалась мне дема и не идет на Вашем эмуле, а там звук - only GS. Даже немного обидно стало за такой отличный эмулятор :-)

ZXMAK
06.04.2014, 02:46
Обновил тестовый билд 2761 (https://zxmak2.codeplex.com/downloads/get/824075):
- удалена старая иконка паузы
- исправлено открытие локальных ZIP файлов через drag-n-drop
- рефакторинг команд UI
- рефакторинг видео рендерера движка (теперь каждый видеорежим рисуется в отдельной памяти, скорость вроде незначительно подросла, исчезли артефакты при переключении видеорежимов)
- добавлен шорткат для max speed - Alt+Scroll
- добавлена кнопка quick boot в тулбар

Просьба протестить переключение видеорежимов, прошелся посмотрел вроде все работает, но мог чтото зацепить :)

http://savepic.org/5305619.png

Gutten
06.04.2014, 12:46
Не совсем понял - как отцепить мышь от "спектрума" обратно в эмулятор? Пока приходится переключатся между программами по Alt-Tab, но это не удобно.

ZXMAK
06.04.2014, 13:04
Не совсем понял - как отцепить мышь от "спектрума" обратно в эмулятор? Пока приходится переключатся между программами по Alt-Tab, но это не удобно.

Alt+Ctrl

breeze
06.04.2014, 13:33
Alt+Ctrl

ну вообще-то во многих эмуляторах, в том числе и различных виртуалках, отслеживается просто нажатие правого контрола — release mouse. В прочем для удобства лучше всё-же дать возможность настроить индивидуально, кто как привык.

Gutten
06.04.2014, 13:45
И настройку кнопок мышки - непривычно нажимать правую вместо левой.

Vitamin
06.04.2014, 15:33
Обычно во всяких виртуалках в строке статуса внизу пишут статус мыши и способ ее освобождения.

breeze
06.04.2014, 16:49
Обычно во всяких виртуалках в строке статуса внизу пишут статус мыши и способ ее освобождения.

ну в принципе да, тоже логично.

ZXMAK
07.04.2014, 00:27
обновил до версии 2.7.6.2 (https://zxmak2.codeplex.com/releases/view/120545):
- подрефакторил код дизассемблера и тайминг тула (DasmTool/TimingTool)
- отрефакторил код IHostSound и фреймовую синхронизацию движка (WaitFrame/PushFrame)
- исправлена ошибка синхронизации потока эмуляции (при быстром нажатии старт/стоп)
- отрефакторил код IHostVideo (WaitFrame/PushFrame)
- добавилась синхронизация по видео (VBlank) (пока-что реализация WaitFrame тупая в лоб - блокирующая, при включении жрет ядро на 100%, но зато скролы плавные :) Пока не нашел способа синхронизироваться по ивентам в Direct3D)
- добавлен выбор источника синхронизации (Video/Sound/None)
- добавлен автоматический подсчет для скипанья фреймов, чтобы выравнивать частоту обновления на 50 Гц в зависимости от частоты дисплея. Лучше всего сейчас работает на 75 Гц.

Ключевое обновление - появилась синхронизация по видеоразвертке, хотя ожидание луча пока не оптимальное.
При этом выяснилась причина биений в скролах при синхронизации по звуку (единственный способ в прошлых версиях). Виной тому буферизация звука в виндовс. С синхронизацией по видео фпс стал стабильнее (50.02 Гц). Скролы стали плавные. Но из-за неэффективной реализации ожидания луча может иногда пропускать кадры.

http://savepic.org/5305727.png

По коду, интерфейсы IHostVideo и IHostSound стали однотипные - добавились методы WaitFrame (по ним идет синхронизация кадров) и PushFrame. Микшер звуковых потоков вынес в IHost, т.е. метод IHostSound.PushFrame принимает сразу массив буферов, которые нужно смикшировать перед выводом. Т.е. можно заюзать аппаратный микшер на нужной платформе. Пока микширование звука реализовано на C#

Titus
07.04.2014, 01:14
При этом выяснилась причина биений в скролах при синхронизации по звуку (единственный способ в прошлых версиях). Виной тому буферизация звука в виндовс. С синхронизацией по видео фпс стал стабильнее (50.02 Гц). Скролы стали плавные. Но из-за неэффективной реализации ожидания луча может иногда пропускать кадры.

Каким методом ты синхронизируешься с лучом?

ZXMAK
07.04.2014, 01:42
Каким методом ты синхронизируешься с лучом?



// wait VBlank
while (!_isCancel)
{
var state = D3D.RasterStatus.InVBlank;
var change = state != _vblankValue;
_vblankValue = state;
if (change && _vblankValue)
{
break;
}
}


кроме свойства InVBlank, других способов узнать момент начала развертки в MDX Direct3D не нашел :) И насколько помню в нативном API с этим тоже вроде проблемы были. В unreal тоже тупой цикл из-за этого сделали

Titus
07.04.2014, 02:09
кроме свойства InVBlank, других способов узнать момент начала развертки в MDX Direct3D не нашел :) И насколько помню в нативном API с этим тоже вроде проблемы были. В unreal тоже тупой цикл из-за этого сделали

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

psb
07.04.2014, 02:25
Это что же, у тебя вечный цикл до смены вбланка?
а как в пц демах делают? и почему тут нельзя так же?

ZXMAK
07.04.2014, 02:44
Это что же, у тебя вечный цикл до смены вбланка?
Я тоже искал для своего эмулятора хоть какой-нибудь способ усыпить приложение до прихода VBlank, но не нашел. Пришлось так же отслеживать состояние пока оно не изменится.

Да, если включить VBlank, то при вызове IHostVideo.WaitFrame работает тупой цикл, пока не прийдет VBlank. Пробовал сделать высокоприоритетный поток из которого кидать ивенты, но он как-то не стабильно работает, если его усыплять на 5-10 мс в момент ивента, то работает более менее, если усыплять на меньшее время, он начинает отбирать время у потоков эмуляции, если на большее, то пропускает кадры. Короче работает менее стабильно чем тупой цикл, а процессор жрет еще больше...

---------- Post added at 01:44 ---------- Previous post was at 01:29 ----------


а как в пц демах делают? и почему тут нельзя так же?

в демках не нужно узнавать когда бланк пришел, они просто вызывают Present, который при включенной настройке VBlank у девайса блокирует выполнение и крутит такой-же цикл уже внутри системы...
Тут есть загвоздка в том что в эмуляторе Present вызывается из UI потока. А синхронизировать нужно поток эмуляции, т.е. не из UI...
Хм.. Можно попробовать настроить девайс на Present с ожиданием VBlank и кидать после Present'а ивент для потока в котором выполняется WaitFrame...

Titus
07.04.2014, 02:57
Да, если включить VBlank, то при вызове IHostVideo.WaitFrame работает тупой цикл, пока не прийдет VBlank. Пробовал сделать высокоприоритетный поток из которого кидать ивенты, но он как-то не стабильно работает, если его усыплять на 5-10 мс в момент ивента, то работает более менее, если усыплять на меньшее время, он начинает отбирать время у потоков эмуляции, если на большее, то пропускает кадры. Короче работает менее стабильно чем тупой цикл, а процессор жрет еще больше...

А этот 'тупой цикл' не отбирает все быстродействие системы?

В своем эмуле я просто засыпаю на 1мс, потом проверяю не пришел ли вбланк, и так по кругу (если очень упрощенно говорить).
Хотя на самом деле я делаю чуть хитрее. Я не жду вбланк, а жду некой линии развертки, примерно линий за 100 до вбланк'а (с отдачей квантов другим задачам по 1мс кусочкам), после чего забираю все быстродействие на себя, таким образом могу очень точно отловить приход вбланка. Кроме того, такой подход позволяет избежать случайного пропуска момента вбланка, если в данное время какое-то приложение забрало на себя кванты времени, и не хочет отдавать.
Экспериментально тестировал в разных условиях, работает весьма стабильно даже если на фоне начался жуткий свап или другое безобразие.

ZXMAK
07.04.2014, 03:14
Хотя на самом деле я делаю чуть хитрее. Я не жду вбланк, а жду некой линии развертки, примерно линий за 100 до вбланк'а (с отдачей квантов другим задачам по 1мс кусочкам), после чего забираю все быстродействие на себя, таким образом могу очень точно отловить приход вбланка.

У Windows Sleep работает на аппаратных прерываниях 10 мс. Так что вызвав Sleep(1), назад управление можно получить и через 10 мс. А это практически время развертки целого кадра (1/75=13мс), о каком отслеживании VBlank в таких условиях можно говорить? :)

Titus
07.04.2014, 03:25
У Windows Sleep работает на аппаратных прерываниях 10 мс. Так что вызвав Sleep(1), назад управление можно получить и через 10 мс. А это практически время развертки целого кадра (1/75=13мс), о каком отслеживании VBlank в таких условиях можно говорить? :)

По умолчанию может и 10мс, но я устанавливаю предварительно принудительно 1мс, и действительно оно переключается каждую мс. Проверял тестами на всех машинах.

Можешь запустить у себя EmuStudio, он в консольном окне напишет измеренный минимальный интервал, уверен на 99.9%, что там будет написано Timer Period Min - 1ms.

Faster
07.04.2014, 16:39
А можно поподробнее как это обрабатывает реальная вг93? Зачем тут принудительное прерывание?
Итак, *****код процедуры торможения диска в лоадере Satisfaction находится по адресу #6084.


xor a
out (#1f),a
ld a,#d0
out (#1f),a
ret
Непосредственно после загрузки первой части мегадемо, до выполнения процедуры торможения диска, имеем следующую ситуацию в эмуляторе:

http://x-bytes.net/pic1.jpg

Далее выполняется код:


xor a - гасим лампочку, bit 3 загрузки головки h выставляем в 0
out (#1f),a
Здесь выполняется команда "Восстановление" 0000hvxx - обеспечивает переход МГ на нулевую дорожку ГМД. Команда имеет следующие параметры:
h - бит определяет положение магнитной головки дисковода во время выполнения команды. Если он обнулен, то головка поднята, если установлен - находится в рабочем положении (опущена на дискету). Следует учитывать, что при h=0, контроллер не выдает сигнал на включение двигателя дисковода. Выход на нулевую дорожку подтверждается состоянием входного сигнала TR00 который поступает с НГМД. Если сигнал TR00 = 0, это означает, что МГ находится в исходном состоянии. Если сигнал TR00 = 1 (наш случай) микроконтроллер генерирует не более 255 шаговых импульсов STEP. Если после генерации 255 импульсов устанавливается низкий уровень сигнала TR00, то в бит состояния "Ошибка поиска" в регистр состояния записывается единица. Другими словами, физический дисковод на реале никуда головку перемещать не будет, но ВГ-93 отработает 255 шаговых имульсов. А в эмуляторе это не учитывается. После этого:

http://x-bytes.net/pic2.jpg

Далее, чтобы прервать эти шаговые импульсы выполняется код:


ld a,%11010000 - принудительно прерываем выполнение команды
out (#1f),a
ret
Здесь выполняется команда "Принудительное прерывание" 1101i3i2i1i0 - задается для завершения какой-либо выполняемой команды. В отличии от других команд она может быть записана в регистр команд в любой момент. Однако, исполнение команды может определяться состоянием младших битов i0 - i3. Если биты i0 - i3 в состоянии "0" (наш случай), то немедленно прекращается выполнение текущей команды и сигнал подтверждения завершения команды INTRQ не вырабатывается. После этого:

http://x-bytes.net/pic3.jpg

Затем, когда загрузчик пытается загрузить новую часть демо, то turbo loader виснет в цикле при чтении сектора на ошибке "сектор не найден".
Обрати внимание на номер трека и статус на последнем скрине, по идее значения должны быть такими (если я правильно понимаю):


STATUS: #80
TRK: #03
beta: #00

Ну, в общем, как-то так.

ZXMAK
08.04.2014, 13:24
Итак

Спасибо, очень помогло бы расписать что именно не так и как должно быть (например - вот тут делаем то-то, должно получиться то-то, а получается то-то), потому что пока кроме того, что чтото c восстановлением работает неправильно (если я правильно понял), суть проблемы не очень ясна :)

ZXMAK
10.04.2014, 02:21
пока без поддержки звука и джойстиков (видео, клавиатура, мышь) :)

http://savepic.org/5246854.png

Вроде в XNA уже встроен механизм синхронизации, когда окно активно, то кушает ядро на 100%, кактолько убераешь фокус - падает до обычных 5-8%. Причем что интересно, почемуто XNA4 сам вызывает обновление с частотой 50 Гц, как Game.Update, так и Game.Draw. Но фреймы скипает криво - похоже на синхронизацию от звука, даже чуть менее точно, плавные скролы подергиваются раз в несколько секунд.
Код полностью реюзает существующий MainPresenter, для XNA версии написана только реализация интерфейсов IHost (IHostVideo, IHostKeyboard, IHostMouse) и подключен референс на ZXMAK2.exe :)
Синхронизация по видео, т.к. IHostSound пока нету

Неприятная штука, в XNA4 убрали поддержку обычного rgba формата для цвета. Есть только bgra, в итоге каждый кадр приходится конвертить перед рендерингом, что дает дополнительную нагрузку на процессор.

Пока не комиттил. Подумываю о полном переходе на .NET 4.0. Но есть опасения что на каких-то системах он не поддерживается.

ZXMAK
11.04.2014, 23:02
ZXMAK, а можешь сделать сборку под XNA 4.0? А то у меня есть воксельный движок и хотелось бы сделать такое:

http://www.youtube.com/watch?v=h9WhGs2_dM0

Я его прикручивал к какому-то эмулятору на C#, но там звука не было и вообще не задалось.
У меня даже были инишники для Cybernoid, в которых прописывался размер вокселя для каждого цвета.Чтобы объём был.

сделал реализацию хоста для XNA4, со звуком :)
Синхронизация звука правда хромает, периодически можно заметить легкие накладки в звуке, нужно допиливать XnaHostSound, код залит в ТФС, пока релиз не делал, думаю как лучше отвязать UI плагинов от движка, чтобы не делать конфиг с маппингом

Дмитрий
11.04.2014, 23:43
Подумываю о полном переходе на .NET 4.0. Но есть опасения что на каких-то системах он не поддерживается.
XP SP3 поддерживается, о w2k не скажу...

---------- Post added at 22:43 ---------- Previous post was at 22:40 ----------

Действительно, на w2k работает только .Net 3.5.

Titus
12.04.2014, 00:19
Какой смысл в 4.0, если она принципиально ничего интересного к интерфейсу добавить не может, а совместимость XP будет(?) потеряна?

MetalliC
12.04.2014, 01:05
.нет 4.х еще ладно, оно живет и развивается, не совсем понятно решение перейти именно на XNA, учитывая что сами мелкомягкие его дропнули.

ZXMAK
12.04.2014, 02:01
.нет 4.х еще ладно, оно живет и развивается, не совсем понятно решение перейти именно на XNA, учитывая что сами мелкомягкие его дропнули.

переход на дотнет 4 интересует с точки зрения увеличения возможностей. Это LINQ, WPF и т.д.
Кстати, как показалось, синхронизация по видео на 4 фреймворке более точная, возможно просто впечатление.

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

DenisGrachev
13.04.2014, 07:12
сделал реализацию хоста для XNA4, со звуком
Синхронизация звука правда хромает, периодически можно заметить легкие накладки в звуке, нужно допиливать XnaHostSound, код залит в ТФС, пока релиз не делал, думаю как лучше отвязать UI плагинов от движка, чтобы не делать конфиг с маппингом

Здорово! Глянул мельком, я так понял всё равно нужен DX SDK, чтобы скомпилить?


не совсем понятно решение перейти именно на XNA, учитывая что сами мелкомягкие его дропнули.

Да я это попросил, частный случай. Хотя есть MonoGame - открытая реализация XNA 4.0, которая открывает дорогу для Linux,Mac,Andorid,iOs,PS4, PSVita и.т.п. :)

ZXMAK
13.04.2014, 15:27
Здорово! Глянул мельком, я так понял всё равно нужен DX SDK, чтобы скомпилить?


DXSDK не нужен, нужно только XNA4. Но т.к. основной exe сейчас завязан на MDX, то чтоб его скомпилить нужен также DX9 runtime (только для компиляции, для запуска XNA версии он не нужен). В ближайших планах отделить движок в отдельную сборку, чтобы избавиться от лишних зависимостей.
Content Pipeline не используется - заранее откомпиленый XNB грузится из ресурсов. Так что ничего, кроме XNA4 runtime, не нужно

goodboy
13.04.2014, 20:08
проверьте набор тестов (на эмуляцию загрузки TAPфайлов) - говорят на zxmak2 он не проходит целиком

[bETA]mEN
14.04.2014, 00:22
http://i.imgur.com/srvtaPs.png
http://i.imgur.com/Vs0OZvB.png

goodboy
14.04.2014, 09:50
наверно при имитации загрузки процедура изменяет регистры согласно входным данным, а не исходя из параметров реального блока.
впринципе в тесте надуманная ситуация, в реале она вряд-ли встретится.
хотя мне встречались фирменные загрузчики где длина загружаемого блока задаётся завышенной (фактическая длина меньше) обычно эмуль в таком случае считает что блок загружен с ошибкой.

breeze
14.04.2014, 12:18
где длина загружаемого блока задаётся завышенной (фактическая длина меньше)

http://zxbyte.ru/video/kopik_fail.jpg

Да, например в последних модификациях «Церикопика». Там сделано в виде паузы. Загружается блок, потом вылазит заставка, а на фоне слышно, как грузятся нули.

Faster
15.04.2014, 02:43
Спасибо, очень помогло бы расписать что именно не так и как должно быть (например - вот тут делаем то-то, должно получиться то-то, а получается то-то), потому что пока кроме того, что чтото c восстановлением работает неправильно (если я правильно понял), суть проблемы не очень ясна :)
Более досконально протрассировал код лоадера в деме в режиме Delays:


1. Загружаем первую часть мегадемо - все ок!
- CMD: #80, STATUS: #00, TRK: #03, SEC: #0A, DATA: #00, beta: #80, system: #3c (реал/эмулятор)
2. out (#1f),0
- CMD #00, STATUS #00, TRK #03, SEC #0A, DATA #00, beta #80, system #3c (реал)
- CMD #00, STATUS #61, TRK #03, SEC #0A, DATA #00, beta #00, system #3c (эмулятор)
3. out (#1f),#d0
- CMD #d0, STATUS #80, TRK #03, SEC #0A, DATA #00, beta #00, system #3c (реал)
- CMD #d0, STATUS #60, TRK #FE, SEC #0A, DATA #00, beta #80, system #3c (эмулятор)
4. Далее загружаем вторую часть мегадемо
- на реале все ок
- на эмуле при попытке прочитать сектор операция завершается ошибкой #10 - сектор не найден! После чего лоадер виснет в бесконечном цикле...

savelij
15.04.2014, 23:40
проверьте набор тестов (на эмуляцию загрузки TAPфайлов) - говорят на zxmak2 он не проходит целиком

А где можно найти не битый тапок? То что здесь выложено кривое.

типы блоков в образе ленты не соответствуют тем значениям регистра A которые на экран печатаются

---------- Post added at 23:40 ---------- Previous post was at 23:34 ----------

И да еще. Под анрылом тест 6 виснет, на пентеве с эмуляцицей ленты на 6 тесте просто сброс.

Faster
16.04.2014, 11:46
при переходе в трдос у скорпиона несколько необычная процедура для вг93 выполняется, без задержек (nodelay) она зависает...
Речь шла про это (http://zx.pk.ru/showpost.php?p=409948&postcount=17), я так понимаю?

drbars
17.04.2014, 22:47
Когда тестировал свой код на эмуляторах всё было хорошо, но как только загрузил игру в свой фирменный +2 — посыпалась картинка.

Оказалось, что ни один эмулятор не поддерживает особенности работы ULA. Были большие надежды на zxmak2 и EightyOne, но увы.

Суть проблемы: Тырканье регистра I во время прерывания. Биты 7 и 6 были использованы для флагов управления процессами. Оказалось так делать нельзя.

Подпрограмма делает финт - инвертирует бит 3, если установлен бит 6. Потом процедуры графики, потом обратно инвертируем оба бита 6 и 3, при условии что 6 был установлен.



LD A,I
BIT 6,A
RLA
JR Z,$+7
RRA
XOR %00001000 ; Cf=0
LD I,A
CALL C,@proc


; процедуры графики определяют буфер какого экрана восстановить по 3-му биту.



LD A,I
BIT 6,A
JR Z,$+9
XOR %01001000 ; Обратная инверсия бита текущего экрана и сброс 6-го бита
LD (PAGE+1),A
LD I,A


Оказалось вот что:



Регистр "I" в фирменном "СПЕКТРУМЕ" дополнительно участвует в формировании телевизионного сигнала. "ULA" задействует биты6 и 7 регистра "I". При каждом цикле машинных командZ-80 обращается к ячейке памяти, адресуемой регистром "I", выводя его в старшие восемь битов адресной шины, а линия запроса памяти"MREQ" активизируется. "ULA" генерирует прерывания каждый раз, когда необходимо изменить содержимое экрана. Это заставляет Z-80 запустить программу обработки прерываний, при условии, что прерывания подключены.

Когда программа обработки прерываний выполнена, процессор возвращается в точку, в которой он был при прерывании. Если это команды считывания/записи в память между16384 (4000H) и 32767 (7FFFH), что "ULA" проверяет, просматривая две старшие линии адресной шины и линию"MREQ", то"ULA" приостанавливает микро процессор до окончания изменения экрана.

Если старший бит регистра "I" сброшен, а бит6 активизиро ван, то"ULA" может запутаться из-за регенерации динамической памяти. Активизируется линия"MREQ", и регистр "I" помещается в старшие восемь битов адресной шины. Далее"ULA" думает, что процессор производит запись или считывание в эту область ОЗУ, и при попытке это предотвратить, "ULA" пропускает свое собственное обращение для изменения дисплея, что приводит к развалу картинки. Поэтому в регистре "I" не должно содержаться любое число от64 до127 (040H до07FH) включительно, т.e. c двумя старшими битами, установленными вышеописанным образом.

ZXMAK
18.04.2014, 01:57
Когда тестировал свой код на эмуляторах всё было хорошо, но как только загрузил игру в свой фирменный +2 — посыпалась картинка.

Оказалось, что ни один эмулятор не поддерживает особенности работы ULA. Были большие надежды на zxmak2 и EightyOne, но увы.

Оказалось вот что:

Это называется эмуляция снега. Для этого есть ULA snow, правда эффект незначительно отличается от риала, т.к. я толком так и не понял всех деталей, где и как в точности ULA получает байт для отображения в моменты конфликта с процессором.
У ULA на реальном спектруме есть и другие приколы. Например формирование пикселов paper и ink незначительно отличается (незначительно отличается время задержки сигнала, т.к. для ink и paper используются разные схемы), что дает возможность рисовать на риале картинки, которые в эмуляторах не видны. Т.к. пикселы что ink, что paper в эмуляторах одинаковые. Сэмулировать это на обычном дисплее непросто, нужно применять умную фильтрацию изображения :)

Titus
18.04.2014, 02:11
У ULA на реальном спектруме есть и другие приколы. Например формирование пикселов paper и ink незначительно отличается (незначительно отличается время задержки сигнала, т.к. для ink и paper используются разные схемы), что дает возможность рисовать на риале картинки, которые в эмуляторах не видны. Т.к. пикселы что ink, что paper в эмуляторах одинаковые. Сэмулировать это на обычном дисплее непросто, нужно применять умную фильтрацию изображения :)
Это что, значт ширина пикселей inc и paper разная? Или они смещены относительно друг-друга?

ZXMAK
18.04.2014, 02:27
Это что, значт ширина пикселей inc и paper разная? Или они смещены относительно друг-друга?

Разная длительность перехода с ink на paper и обратно, глазом разницу попиксельно не заметишь, но когда смотришь картинку в целом, то на определенных комбинациях заметна разница яркости. С помощью этой разницы можно узоры рисовать, которые не видны в эмуляторах.
Т.е. когда идет чередование пикселов с цветом ink и с цветом paper, то один пиксел будет чуть уже чем другой, хотя общая сумма по длинне одинаковая. В конечном счете яркость пиксела зависит от типа цвета текущего и следующего пикселов...

SoftLight
18.04.2014, 11:52
...т.к. для ink и paper используются разные схемы), что дает возможность рисовать на риале картинки, которые в эмуляторах не видны.

Вот это очень интересно! На вскидку есть какие-то примеры? хочется посмотреть на это

ZXMAK
18.04.2014, 12:41
Вот это очень интересно! На вскидку есть какие-то примеры? хочется посмотреть на это

Есть небольшие демки, если не потерялись, вечером выложу

goodboy
18.04.2014, 13:17
Вот это очень интересно! На вскидку есть какие-то примеры? хочется посмотреть на это
наверно Interlace Demo http://www.worldofspectrum.org/infoseekid.cgi?id=0007483

ZXMAK
19.04.2014, 02:43
наверно Interlace Demo http://www.worldofspectrum.org/infoseekid.cgi?id=0007483

нет, вот набор демок, но под эмулем ничего не увидишь :D

ZXMAK
23.04.2014, 05:00
Экспериментировал с цветовой коррекцией при ресэмплинге из 50Гц в частоту дисплея (75 Гц) и решил потестить ради интереса насколько стабильна синхронизация кадров с разверткой дисплея в Spectaculator, Unreal и ZXMAK2 с новой VBlank Sync...

К удивлению обнаружил что только ZXMAK2 стабильно держит синхронизацию 8-)
На Unreal каждую секунду срыв синхронизации, но срыв стабильный (некорректный ресамплинг?).
На Spectaculator синхронизация чуть лучше, но раз в несколько секунд всеравно наблюдается срыв кадра.

На ZXMAK2 синхронизация держится стабильно, как прибитая гвоздями, не мешает даже перетаскивание окна и разворачивание на весь экран... вот-те и на... Чистый C# код работает в real-time стабильнее чем C++ :D
Правда обнаружился баг - если включена Debug Info (фпс и т.п.), то в некоторых ситуациях (пока еще не понял зависимости) некоторые кадры скипаются...

Тестилось вот на этом снэпшоте (см.аттачмент). На нем очень четко можно заметить срыв синхронизации. Дело в том, что тут каждый кадр цвет экрана меняется. Отобразить в полной мере эффект 50 Гц на дисплее с другой частотой невозможно (нужна коррекция цвета), т.к. какие-то кадры приходится пропускать и это сказывается на том, что какой-то цвет отображается более длительное время, соответственно он начинает преобладать.
Срыв синхронизации хорошо заметен, т.к. если произойдет смещение на кадр, то более длительное время будет отображаться уже другой цвет. Т.е. если усредненный цвет не меняется, значит с синхронизацией все ок, если периодически чередуется более синий и более зеленый - значит идет срыв синхронизации (в момент смены усредненного цвета).

sergio78
10.05.2014, 22:49
можно как нибудь сделать, чтоб работала под 4.5.1 фрамеворком? для виндовс 8.1 он родной, и я не хочу засорять систему доустановкой 3.5, который предлагает эмуль скачивать.

ZXMAK
11.05.2014, 07:23
можно как нибудь сделать, чтоб работала под 4.5.1 фрамеворком? для виндовс 8.1 он родной, и я не хочу засорять систему доустановкой 3.5, который предлагает эмуль скачивать.

фреймворк 3.5 эмулятору не нужен, он использует 2.0, для запуска под XNA4 используется 4.0.
попробуй создать рядом с ZXMAK2.exe текстовый файл ZXMAK2.exe.config с таким содержимым:


<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.5"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>


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

sergio78
11.05.2014, 16:40
[QUOTE=ZXMAK;709953]
попробуй создать рядом с ZXMAK2.exe текстовый файл ZXMAK2.exe.config с таким содержимым:


<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.5"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>


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

ZXMAK
13.05.2014, 14:07
[QUOTE=ZXMAK;709953]
попробуй создать рядом с ZXMAK2.exe текстовый файл ZXMAK2.exe.config с таким содержимым:


<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v4.5"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>


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

Да не нужен 3.5 для эмулятора, попробуй 4.0 указать если у тебя 4.0. Может у тебя каких-то компонентов системных не хватает, вот система и требует их установки. Но если есть 4.0 и DirectX 9, то для эмулятора этого достаточно

sergio78
14.05.2014, 22:22
[QUOTE=sergio78;710045]

Да не нужен 3.5 для эмулятора, попробуй 4.0 указать если у тебя 4.0. Может у тебя каких-то компонентов системных не хватает, вот система и требует их установки. Но если есть 4.0 и DirectX 9, то для эмулятора этого достаточно

я пробовал всё указывать. не запускается всё равно. 4.0 в windows 8.1 нету. в ней изначально 4.5.1 внедрён. доустанавливать зоопарк древних нетов, я не хочу, и говорил уже об этом. потому что вечно после этого что то ломается или глючит в системе. вообще странно, что эмуль капризничает. тот же на нет. написанный keypass 2.0 у меня работает, без проблем, и ничего не просит. а тут непонятные желания. но я уже и анрил и спектракулятор настроил. и пока меня это всё устраивает.

ZXMAK
15.05.2014, 02:47
[QUOTE=ZXMAK;710468]

я пробовал всё указывать. не запускается всё равно. 4.0 в windows 8.1 нету. в ней изначально 4.5.1 внедрён. доустанавливать зоопарк древних нетов, я не хочу, и говорил уже об этом. потому что вечно после этого что то ломается или глючит в системе. вообще странно, что эмуль капризничает. тот же на нет. написанный keypass 2.0 у меня работает, без проблем, и ничего не просит. а тут непонятные желания. но я уже и анрил и спектракулятор настроил. и пока меня это всё устраивает.

дело явно не в эмуляторе, у меня под вин 8 он работает без установки фреймворков.
Может у тебя система повреждена? Ты ничего не удалял из нее? Клинеры и очистители никакие не запускал?

sergio78
15.05.2014, 20:29
Система свежак. не *****сборка. образ оригинальный, профессионал 8.1 с 1 обновлением. правда активирован, kms эмулем. и есть одна беда, памяти пока мало. всего 1 гиг. жаба душит покупать её за 3 цены, от той что была до повышеня. жду когда упадёт, хотя бы в 2 раза. клинерами и всевозиможными чистельщиками, принципиально вообще непользуюсь. потому что это всё лохопрограммы, с 0 пользой, а то ещё и с вредом немалым оказываются они.

palsw
11.10.2014, 02:36
хороший эмулятор.Какие минимальные системные требования?
запускаю эмуляцию спринтера на версии ZXMAK2757 - загрузка cpu 100% даже убить процесс не могу.скачал ZXMAK2762-TEST таже загрузка CPU 100% но дает даже полазить по биосу и загрузить систему но тормоза жуткие.Кнопку "максимальная скорость" нажал - она ухудшает качество эмуляции и должно работать шустрее?

мой комп - intel pentium M 1600 2g озу radeon M 9600 win XP x32

http://i.piccy_.info/i9/801c5dc90e82a4f2d4e287bb3b283063/1412980604/44097/812390/Bezymiannyi_500.jpg (http://piccy_.info/view3/7102764/f9887ee98ee6d862fa665c5fb430cc18/)http://i.piccy_.info/a3/2014-10-10-22-36/i9-7102764/500x247-r/i.gif (http://i.piccy_.info/a3c/2014-10-10-22-36/i9-7102764/500x247-r)

если поставить галку "debug info" загрузка cpu остается 100% но можно запустить демку например 256 и там плавно все и другие пробовал...

ZEman
11.10.2014, 07:01
у меня:

intel Core i5 3570 cpu 3.40 GHz;
16 gb memory;
Nvidia Geforce GTX 760.

никаких тормозов нет, эмулятор просто летает.

palsw
11.10.2014, 13:20
ZEman, ха-ха не спешно.

---------- Post added at 12:20 ---------- Previous post was at 12:20 ----------

ZEman, можно результат теста?

ZEman
11.10.2014, 13:57
как этот тест запускать и что за тест ?

palsw
11.10.2014, 14:09
ZEman, в папке тест

ZEman
11.10.2014, 15:09
вот результ:

http://i63.fastpic.ru/big/2014/1011/36/af0f7576fd837e6b7bf873a8ab5ebf36.jpg

Eltaron
11.10.2014, 15:32
Кнопку "максимальная скорость" нажал - она ухудшает качество эмуляции и должно работать шустрее?
Она перестаёт выдерживать 50 fps. Если и так до 50 не дотягивало, то не изменится ровным счётом ничего.

SAVC
11.10.2014, 23:01
Вообще, классно, эмулятор понравился. Но, не все файлы TZX загружаются, даже скачанные с World Of Spectrum. Хотя в Spectaculator'е нормально работают. Видимо, это из-за того, что в кассетном загрузчике нет паузы между заголовком и data-block. В качестве доказательсятва своих слов, прикрепляю к посту один из не загрузившихся файлов.

goodboy
11.10.2014, 23:07
В качестве доказательсятва своих слов, прикрепляю к посту один из не загрузившихся файлов.
а его надо загружать так - LOAD""CODE
бейсик загрузчика там нет, блок накладывается на системные переменные

ZXMAK
12.10.2014, 15:37
Вообще, классно, эмулятор понравился. Но, не все файлы TZX загружаются, даже скачанные с World Of Spectrum. Хотя в Spectaculator'е нормально работают.

Если образ ленты не загружается, нужно отключить tape traps в окне магнитофона

---------- Post added at 14:37 ---------- Previous post was at 14:33 ----------


хороший эмулятор.Какие минимальные системные требования?
запускаю эмуляцию спринтера на версии ZXMAK2757 - загрузка cpu 100% даже убить процесс не могу.скачал ZXMAK2762-TEST таже загрузка CPU 100% но дает даже полазить по биосу и загрузить систему но тормоза жуткие.Кнопку "максимальная скорость" нажал - она ухудшает качество эмуляции и должно работать шустрее?

мой комп - intel pentium M 1600 2g озу radeon M 9600 win XP

Код ULA для спринтера не оптимизирован и очень прожерлив, а компьютер у вас слабоват

sergio78
14.10.2014, 08:13
Код ULA для спринтера не оптимизирован и очень прожерлив, а компьютер у вас слабоват а возможно эмуль прооптимизировать как то? компьютер по описаниям боле менее нормальный, для эмуляции 8 битного ретрокомпа.

palsw
14.10.2014, 09:40
sergio78, сейчас меряется все i5 да i7 - хотя судя по тесту из папки эмулятора между ними всего в 4 раза прибавки.

sergio78
14.10.2014, 13:45
обидно. неплохой эмулятор, но требования очень высокие. на e-350, или a64 3000, при нативном разрешении монитора 1920 кадров очень мало получается. unreal как то меньше эти процессоры грузит.

Eltaron
14.10.2014, 16:44
a64 3000
Дети, родившиеся в год выхода этого процессора, недавно пошли в 4-й класс.

sergio78
14.10.2014, 22:16
Дети, родившиеся в год выхода этого процессора, недавно пошли в 4-й класс. а куда пошли дети, заставшие zx-spectrum? я конечно всё понимаю, что бывает у людей денег девать некуда, и они не могут терпеть i7, старше 1 года. но у меня волей пк старые, но вполне рабочие и не сбоящие. так же много к ним запчастей, и по этому ничего покупать или менять на новое я не собираюсь ещё долго. я не требую чтобы шлакоигра типа Сыны Рима, или adwanted warfire у меня шли. но видеоплера, браузеры работают, и меня это устраивает.

Eltaron
14.10.2014, 22:34
а куда пошли дети, заставшие zx-spectrum? я конечно всё понимаю, что бывает у людей денег девать некуда, и они не могут терпеть i7, старше 1 года.
Какие i7, у меня на ноутбуке Thurion 64 X2 (2ГГц). ZXMAK2 не тормозит ни в окне, ни в фуллскрине. Там, правда, 1200x800, но дети, родившиеся после покупки ноута, тоже уже школьники. На десктопе Core 2 Duo старенький, да ещё и линукс - и эмуль вынужден работать через Wine и дополнительные уровни эмуляции. 1920 - без проблем.

sergio78
14.10.2014, 23:32
Core 2 Duo старенький,
он заметно быстрее a64. и кастрата е-350 тоже.:biggrin:

Alex Rider
16.10.2014, 12:35
по этому ничего покупать или менять на новое я не собираюсь ещё долго.

sergio78, увы, прошли те времена, когда софт оптимизировался под старое железо. Чересчур оптимизированный софт писать трудно и сильно не хочется, особенно когда оно твое хобби. Я так подозреваю, Unreal Spectrum от TSL у тебя тоже будет тормозить скоро, если уже не тормозит.

Vitamin
16.10.2014, 12:42
увы, прошли те времена, когда софт оптимизировался под старое железо
Есть надежда: рост мобильных устройств со слабыми (относительно десктопа) возможностями. И даже если проц там очень мощный, неоптимизированные программы будут жрать батарею.
Хотя, обычно, оптимизация сводится к *****коду и быдлохакам, а не к пересмотру алгоритмов и архитектуры...

Titus
16.10.2014, 12:45
Хотя, обычно, оптимизация сводится к *****коду и быдлохакам, а не к пересмотру алгоритмов и архитектуры...

Как это *****код может оптимизировать? Не говоря уже о каком-то непонятном быдлохаке?

Vitamin
16.10.2014, 12:50
Как это *****код может оптимизировать? Не говоря уже о каком-то непонятном быдлохаке?
Говнокод ничего не оптимизирует. Он- обычно способ соптимизировать (например, ассемблерные вставки, нарушения инкапсуляции, несопровождаемые фокусы с битами-байтами, платформо- и компилятороспецифичные костыли).

Titus
16.10.2014, 13:00
Говнокод ничего не оптимизирует. Он- обычно способ соптимизировать (например, ассемблерные вставки, нарушения инкапсуляции, несопровождаемые фокусы с битами-байтами, платформо- и компилятороспецифичные костыли).

О, ассемблерные вставки - это рулез. Разумеется, если имеется альтернативная сишная функция.

Vitamin
16.10.2014, 13:31
О, ассемблерные вставки - это рулез. Разумеется, если имеется альтернативная сишная функция.
Ага. Только когда число аппаратных платформ переваливает за 1, у любителей ассемблера резко начинается импотенция.

Titus
16.10.2014, 14:08
Ага. Только когда число аппаратных платформ переваливает за 1, у любителей ассемблера резко начинается импотенция.

это как сможет) индивидуально все)

Vitamin
16.10.2014, 14:20
это как сможет) индивидуально все)
Вот ты сколько раз можешь платформ на ассемблере поддержишь? И какие? Примеры есть?

Titus
16.10.2014, 16:50
Вот ты сколько раз можешь платформ на ассемблере поддержишь? И какие? Примеры есть?

Эм... на ПЦ я этим не занимался, старался даже в эмулях обходиться чистым Си. Да и кросс-платформенные вещи я не пишу.

На микроконтроллерах занимался, но это не в счет.

Eltaron
16.10.2014, 18:21
Вот ты сколько раз можешь платформ на ассемблере поддержишь? И какие? Примеры есть?
В ffmpeg какая-то кучка поддерживается, включая всякие Alpha, PowerPC и avr32. Но там через костыли всё, не унифицированно.
Красивше сделаны dynarec'и в DosBox. Но там только x86/x64/arm/mips.

---------- Post added at 20:21 ---------- Previous post was at 20:18 ----------


На микроконтроллерах занимался, но это не в счет.
Если на одной архитектуре, то легко. А у меня счас есть проект, в котором часть C-исходника с бизнес-логикой шарится между avr и Cortex-M0. Ну нафиг ассемблерные оптимизации, пусть лучше работает медленно, но надежно :) И так #ifdef-ов уже больше, чем хотелось бы...

Titus
16.10.2014, 19:10
Если на одной архитектуре, то легко. А у меня счас есть проект, в котором часть C-исходника с бизнес-логикой шарится между avr и Cortex-M0. Ну нафиг ассемблерные оптимизации, пусть лучше работает медленно, но надежно :) И так #ifdef-ов уже больше, чем хотелось бы...

Я только кортексы. АВР, как морально устаревшие даже не рассматриваю.

sergio78
17.10.2014, 22:59
mpg123-внутри тоже много ассемблера под разные процессорные архитектуры.

Vitamin
17.10.2014, 23:13
В ffmpeg какая-то кучка поддерживается, включая всякие Alpha, PowerPC и avr32. Но там через костыли всё, не унифицированно.
Красивше сделаны dynarec'и в DosBox. Но там только x86/x64/arm/mips.

mpg123-внутри тоже много ассемблера под разные процессорные архитектуры.
А теперь предлагаю посмотреть две вещи:
1) число разработчиков проектов. Их явно больше одного чтоб можно было себе такое позволить.
2) историю этих самых ассемблерных вставок. Многие из них были заменены обычным С/С++ кодом потому что очередной энтузиаст-ассемблерщик забил на поддержку своего выхлопа или пришел к просветлению.

sergio78
18.10.2014, 15:41
в ffmpeg пока никто вроде не забивал. И помощь от ассемблерных оптимизаций там очень существенная. например при кодировке или декодировке h264. если используются только с код, скорость падает чуть ли не в 2 раза. а вот h265 из за того, что пока программистов действительно на его ассемблерные оптимизации не нашлось в рядах разработчиков ffmpeg, очень тормозной у них получается. китайские конкуренты из лентоида, или киберлинка, сумевшие это сделать показывают намного более скоростные результаты. так же по моему шаман из lav, выдрав куски кода из лентоида и прикрутив к исходникам ffmpeg в самый последний момент, в одиночу поднял скорость, но пока неоффициально ещё, только в своей репозитории ffmpeg.

Vitamin
18.10.2014, 19:25
в ffmpeg пока никто вроде не забивал
https://github.com/FFmpeg/FFmpeg/tree/e59ce54412f719e473a2b3f3b60ab717d29e4ecf/libavcodec/bfin
https://github.com/FFmpeg/FFmpeg/tree/e59ce54412f719e473a2b3f3b60ab717d29e4ecf/libavcodec/sh4
https://github.com/FFmpeg/FFmpeg/tree/e59ce54412f719e473a2b3f3b60ab717d29e4ecf/libavcodec/sparc

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

sergio78
18.10.2014, 19:47
в браузерах ещё так же. на той же малине *****блинковый хромиум тормозил ужасно.
умельцы добавили в gtk+ браузер ассемблерные оптимизации, и с малины стало можно пользоваться интернетом, хотя раньше слайдшоу было. в эмуляторах помню только один эмуль первой плейстатион. его разработчиков в панике сони скупило.
когда все поделки тогдашние, да и сёгодняшние тормозят и глючат, тот эмулятор был компактный и работал на 266 пентиуме 2, выдавая 85% совместимость с играми. всё так же благодаря шаманам низкоуровнего языка.

Vitamin
18.10.2014, 19:58
в браузерах ещё так же. на той же малине *****блинковый хромиум тормозил ужасно.
Не согласен. Сам браузер вполне с соответствующей скоростью работал (читай ~200MHz пентиум первый). Вот флеш- да, дико тупил.


умельцы добавили в gtk+ браузер ассемблерные оптимизации, и с малины стало можно пользоваться интернетом, хотя раньше слайдшоу было.
А может, они добавили поддержку аппаратного ускорения а не просто "оптимизации"?


тот эмулятор был компактный и работал на 266 пентиуме 2, выдавая 85% совместимость с играми. всё так же благодаря шаманам низкоуровнего языка.
И где тот эмулятор теперь? А где теперь эмулятор Шалаева, который тоже на асме работал чуть ли не на 286 проце?

Вот история с моралью http://emulate-su.livejournal.com/379428.html

sergio78
18.10.2014, 20:13
Не согласен. Сам браузер вполне с соответствующей скоростью работал (читай ~200MHz пентиум первый). Вот флеш- да, дико тупил.


А может, они добавили поддержку аппаратного ускорения а не просто "оптимизации"?


И где тот эмулятор теперь? А где теперь эмулятор Шалаева, который тоже на асме работал чуть ли не на 286 проце?

Вот история с моралью http://emulate-su.livejournal.com/379428.html неможет, на старых процах и с малым количеством памяти, блинк самый тормозной браузер. у него такая сущность жрать ресурсы немеренном количестве.
Epiphany быстрее, но новый грузить страницы стал быстрее заметно, флеша на малине нет в принципе, так как адоб его под armv6 не собирал. наверное это было html5, оно тоже весьма тормозное. но это точно, что ассемблерные оптимизации для процессоров ARM были внесены основателем проекта RISC OS Open. по поводу эмулятора, я сказал, что сони убило его, купив разработчиков. исходники небыли открыты, никто не продолжил улучшать. по поводу того, что ты сказал, я согласен, увы все программисты в эпоху массового зоопарка мобилок, и интернетов для домохозяек, либо очень заняты, либо просто меркантильны. нет богатых альтруистов, которые вместо просирания жизни в клубах, ставят себе цель написать например engoo quake, и чтоб он был быстрее, и мене прожорливее чем у Кармака в оригинале. так же не один досих пор под малину doom3 не переписал, хотя на xbox1 c 733 мегагерцовым селероном он у кармака на 30 кадрох бегал.
суровая действительность, увы.:v2_dizzy_vodka4:

Vitamin
18.10.2014, 20:35
"Можно потратить полгода, переписывая внутренние циклы на Ассемблере, а можно те же полгода играть на ударных в рок-группе - в обоих случаях ваша программа будет работать быстрее. У программистов на Ассемблере нет толпы поклонниц."

(С) Джоэл Спольски

Вот чувак тему толкает- http://www.gunsmoker.ru/2010/12/blog-post.html

sergio78
18.10.2014, 20:47
ну я и не спорю. поэтому мы сейчас до сих пор на марс не полетели, и не полетим потому что это все коммерчески невыгодно также.

Vitamin
18.10.2014, 20:56
поэтому мы сейчас до сих пор на марс не полетели, и не полетим потому что это все коммерчески невыгодно также.
facepalm.jpg

В твоей вселенной тоже бы не полетели, потому что до сих пор бы вылизывали на ассемблере прошивку для звездолета и ОС для ЦУП. Все на лампах, разумеется.

sergio78
18.10.2014, 21:44
facepalm.jpg

В твоей вселенной тоже бы не полетели, потому что до сих пор бы вылизывали на ассемблере прошивку для звездолета и ОС для ЦУП. Все на лампах, разумеется.
ненужно так. вылизывали кстате очень быстро, и у нас и у американцев. у меня дед на Прогрессе инженером был, и у однокласника старший брат военную академию закончил как раз по программированию. Нагоняли много людей, выделяли деньги, но и жестко спрашивали за результат. а потом наступила эпоха коммерческой перспективности онли, всё порезали, всех распустили например базы для 1c писать. Один из инженеров до сих пор в нашей конторе ожидая пенсии, качественно крутит системные блоки отвёрткой. само оно всегда так катится. как проще, и быстрее.

Eltaron
18.10.2014, 21:53
до сих пор бы вылизывали на ассемблере прошивку
s/вылизывали/просили на форумах вылизать/

Vitamin
18.10.2014, 21:59
Нагоняли много людей, выделяли деньги, но и жестко спрашивали за результат. а потом наступила эпоха коммерческой перспективности онли, всё порезали, всех распустили например базы для 1c писать.
"Выгода любой ценой" и "догнать и перегнать любой ценой" - невелика разница. Плюсы и минусы есть и там и там. Противопоставление отнюдь не делает одну крайность резко хорошей, а другую- резко плохой.

sergio78
18.10.2014, 22:24
я не спорю, но в данном случае зашла речь, про то что для бытовых программ ассемблер "не нужен" Потому что новые железки вагонами, делают роботы. Продовать эти железки любой колхозник может. поэтому, когда цель только заработать денег, конечно происходит так как оно сейчас есть. то есть быстрый кодинг под мультиплатформу. и чем язык проще, тем оно лучше. поэтому сейчас усиленно шланг выпиливают, который код си++ под любую аппаратуру, через специальную прослойку генерирует. и для школьника или домохозяйки на электронный дневник, или утюг с чайником, что то можно будет быстро сделать, или перенезти из ранее сделанного, если оно оказалось популярно в этих кругах. но общий прогресс на самом деле стоит. на игропроме это очень хорошо видно. раньше когда группы программистов, были самостоятельные, у них постоянно появлялись гениальные идеи, в том числе и кодинге. а сейчас коммерческие продукты быстренько, под вспыхнувшую волну интересов потребителя, заруливают издатели. поэтому и все сейчас используют раскрученную солянку движков, вместо того что бы самим что то писать или оптимизировать.

Vitamin
18.10.2014, 23:18
sergio78, нибаись. Энтузиасты-ассемблерщики и бизнесмены-*****кодерщики друг без друга существовать не могут. И ситуация зависит лишь от пропорций тех и других в индустрии.

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

Titus
18.10.2014, 23:31
sergio78, нибаись. Энтузиасты-ассемблерщики и бизнесмены-*****кодерщики друг без друга существовать не могут. И ситуация зависит лишь от пропорций тех и других в индустрии.

Зря ты так) Я тоже обожаю ассемблерные вставки)

Vitamin
18.10.2014, 23:43
Зря ты так) Я тоже обожаю ассемблерные вставки)
Ну смотря как обожаешь. Если для себя-для души, то вперед и с песней. Только может быть очень обидно, спустя какое-то время, за потраченное время и просранные наработки (ибо безвозвратно устарело). Это я на личном опыте.
В случае совместной разработки (тем более коммерческой), я бы за такое бил толстой книгой по голове.

Titus
18.10.2014, 23:47
Ну смотря как обожаешь. Если для себя-для души, то вперед и с песней. Только может быть очень обидно, спустя какое-то время, за потраченное время и просранные наработки (ибо безвозвратно устарело). Это я на личном опыте.
В случае совместной разработки (тем более коммерческой), я бы за такое бил толстой книгой по голове.

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

palsw
19.10.2014, 00:05
зафлудили уже 2 страници спором ,а мулятор кто будет оптимизировать ?

sergio78
19.10.2014, 00:36
зафлудили уже 2 страници спором ,а мулятор кто будет оптимизировать ?
так из флуда сразу увидеть можно, что некому. Зачем человек мучится и страдать бессмысленно будет, если разных эмулей уже полно, да и работает у большинства их не нервируя.

goodboy
19.10.2014, 00:46
на амиге кстати до сих пор энтузиасты переписывают на чистый асм например системные библиотеки,
которые в оригинале были скомпилены с BCPL
https://ru.wikipedia.org/wiki/BCPL
http://aminet.net/package/util/libs/IconLib_46.4

sergio78
19.10.2014, 00:50
sergio78, нибаись. Энтузиасты-ассемблерщики и бизнесмены-*****кодерщики друг без друга существовать не могут. И ситуация зависит лишь от пропорций тех и других в индустрии.

Вот ты сам, честно признайся, много ли ты игр от инди-разработчиков видел и с удовольствием играл? А ведь там не только "солянка движков", но и уникальные разработки. Или все сводится "а вот раньше было лучше"?
я не боюсь. в снарядах и ракетах ещё долго z-80 стоять будет. а в спутниках и ATC i386. поэтому такие низкоуровневые специалисты тоже не исчезнут. по поводу индипродуктов, не совсем верно. это немного не то, как раньше все разработчики игр, что то делали. сейчас програмная база налажена, индиразработчики очень часто чужой готовый девкит используют, либо модят на уже раскрученных продуктах. раньше всё сами делали, под дос. там не 3d ускорителей, ни жирных операционок с тормозными высокоуровневыми api не было ещё. да и жажда лёгкой наживы, или уныния быть гарантированно разогнаным, посе выхода игры, ни у кого почти не было. Кармак впервые, в истории игропрограммистов, от продаж DOOM машину себе смог купить. а до этого по моему им вообще почти не платили. сейчас уже везде, всё по другому. эпоха ширпотреба, так сказать, когда люди накатав примитивную angry bird, или ещё более ничтожную flappy bird внезапно зарабатывают огромные деньги. да и Minecraft, который из за того же примитивизма, на принтер или кофеварку скоро портируют, продался аз за 2.5 миллиарда.

Vitamin
19.10.2014, 01:06
Для себя - раз.
Для работы - два.
Как я уже где-то упоминал на форуме, приходилось делать софт под устройства на кортексах, и там только на асме удавалось прокачать нужное число каналов звукообработки.
Это многое говорит о владельцах фирмы, которые предпочитают сэкономить 3 копейки на железке, но неявно потратить кучу денег на разработке и (еще более неявно) на поддержке этого всего. Проект чисто коммерческий или с госучастием?


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


эпоха ширпотреба, так сказать, когда люди накатав примитивную angry bird, или ещё более ничтожную flappy bird внезапно зарабатывают огромные деньги.
Каждая вещь стоит ровно столько, сколько за нее готовы заплатить.
Кто тебе мешает написать супероптимизированную супер-игру?

Titus
19.10.2014, 01:27
Это многое говорит о владельцах фирмы, которые предпочитают сэкономить 3 копейки на железке, но неявно потратить кучу денег на разработке и (еще более неявно) на поддержке этого всего. Проект чисто коммерческий или с госучастием?


Не суди так узко. Экономия значительная. Месяц дополнительной работы для перевода критичных участков на асм - более, чем себя оправдывают. Проект коммерческий.

sergio78
19.10.2014, 01:33
Каждая вещь стоит ровно столько, сколько за нее готовы заплатить.
Кто тебе мешает написать супероптимизированную супер-игру?
1-не всегда. обычно чаще сильно стоимость завышается. но бывают так же и атракционы невиданно щедрости, даже и от явных жлобов.
2-мешает мой мозг, который недоразвился в этом направлении. у меня с памятью очень плохо, с логическим и математическим мышлением тоже. это неисправимая особенность, поэтому программистом мне не суждено стать. я едва в msvc по проекту собирать научился. и больше наверное уже освоить ничего не смогу, не говоря уже про какие то самостоятельные супероптимизации кода:v2_dizzy_mutant:.

Vitamin
19.10.2014, 02:04
Не суди так узко.
Я писал прошивки для устройств. В том числе и на ассемблере. И как раз после этого проникся отвращением к этому занятию.


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


2-мешает мой мозг, который недоразвился в этом направлении. у меня с памятью очень плохо, с логическим и математическим мышлением тоже. это неисправимая особенность, поэтому программистом мне не суждено стать. я едва в msvc по проекту собирать научился. и больше наверное уже освоить ничего не смогу, не говоря уже про какие то самостоятельные супероптимизации кода.
Ну а почему тогда тебя беспокоит "неоптимизированность" софта?
Если программа/игра реально крутая, но не тянет на твоем железе, то одна мысль будет "жаль, что у меня не идет", а не "почему так много жрет".

sergio78
19.10.2014, 02:34
я уже давно не играю, если честно. системник с fx 6300, и radeon hd 7700 под столом пылиться. работает либо нежрущий e-350, как файлопомойка, или смотрелка фильмов , сериалов, или анимации. либо ковыряюсь в a64, или вообще c via c3, под дос, ну и линус немножко. куплю монитор с 2 hdmi, заброшу эти пк. подключу малину, приставку DVB-T2, ну и торентфайлопомойку на display port оставшийся повешу. а там если эта помойка сдохнет, поменяю на AM1 атлон, если они продаваться ещё тогда будут.

---------- Post added at 02:34 ---------- Previous post was at 02:22 ----------

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

Vitamin
19.10.2014, 02:50
рано или поздно железячники упрутся в предел. да и разработка реального ии без координальных оптимизаций впринципе невозможен.
Ассемблерщики упрутся в предел гораздо раньше. На первой, максимум второй итерации. Ибо изобретение новых алгоритмов весьма затруднено, когда ты оперируешь байтам-битами-регистрами, а не объектами предметной области.

Я не против ассемблера и оптимизации, ни разу. Я против их обожествления и неоправданного применения в ущерб другим целям.

sergio78
19.10.2014, 03:22
Ладно, пусть так и будет. а вообще, похоже сегодня мы двое. кто этой ночью здесь не спит.:v2_dizzy_bye:

Titus
19.10.2014, 07:12
Я писал прошивки для устройств. В том числе и на ассемблере. И как раз после этого проникся отвращением к этому занятию.

А потраченные месяцы на багфиксы, которых можно было бы избежать? А резкое сужение круга кандидатов на сопровождение если разработчик решит внезапно уйти?

То, что тебе что-то не понравилось, это еще не значит, что это не комильфо)
Я писал, мне очень понравилось)

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

---------- Post added at 07:12 ---------- Previous post was at 07:10 ----------


Ассемблерщики упрутся в предел гораздо раньше. На первой, максимум второй итерации. Ибо изобретение новых алгоритмов весьма затруднено, когда ты оперируешь байтам-битами-регистрами, а не объектами предметной области.

С чего бы то им упереться? Как было 30 лет назад, что на асме можно в несколько раз оптимальнее, чем это может компилятор, так это и сейчас. И в будущем, я уверен, тоже самое будет.

Vitamin
19.10.2014, 09:55
То, что тебе что-то не понравилось, это еще не значит, что это не комильфо)
Ну почему же? Очень даже понравилось. Отличный опыт! Только вот абсолютно не нравился увеличенный срок разработки и невозможность портировать результат на другие платформы когда возникла такая необходимость.


Ибо на асме пишутся лишь несколько критичных функций, где все понятно, просто и легко проверяется, лишь в несколько раз быстрее работают.
Хорошо если так.


С чего бы то им упереться? Как было 30 лет назад, что на асме можно в несколько раз оптимальнее, чем это может компилятор, так это и сейчас. И в будущем, я уверен, тоже самое будет.
Если говорить о масштабах "критических процедур", то асмовская оптимизация с использованием аппаратных расширений конечно же будет быстрее. Но в бОльших масштабах код человека всегда будет хуже кода компилятора.

ZXMAK
07.11.2014, 13:28
зафлудили уже 2 страници спором ,а мулятор кто будет оптимизировать ?

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

Кстати zxmak2 на 11" таблетке под win 8.1 вполне шустро бегает, на макс скорости 250 fps дает :)
Если на какомто железе меньше, то что это за железо, если таблетка его уделывает :)