не работает.
Вид для печати
не работает.
хм.. какой вредный баг :)
Обнаружилась еще одна ошибка, джойстик вычитывался как мыша. Исправил.
Исправленный вариант:
https://drive.google.com/file/d/14Qh...ew?usp=sharing
ага, заработало.
а как лог выглядит с работающим джойстиком можно глянуть? (интересует последовательность инициализации и вызовов)
- - - Добавлено - - -
Подчистил код, собрал билд с последними изменениями 2.9.3.5:
https://drive.google.com/file/d/1_qk...ew?usp=sharing
Добавлен второй екзешник ZXMAK2-32.exe, он служит для принудительного запуска процесса в 32-битном режиме на 64 битной системе.
Можно использовать для сравнения работы в разных режимах или для теста работы в 32-битном режиме на 64 битной машине.
Для ZXMAK2.exe разрядность автоматически выбирается системой - на x64 системах он запустится в 64 битном режиме, а на x86 системах в 32 битном режиме.
Этот билд более не зависит от Managed DirectX, так что ставить его уже не нужно. Достаточно обычного DirectX.
Протестите пожалуйста джойстик в обоих режимах - в 32 и 64, т.к. некоторые ошибки могут проявляться только в одном из режимов.
В каком режиме работает процесс можно проверить в Task Manager. Возле 32 битных на 64 битной машине будет стоять отметка *32
ZXMAK, я в основном выставляю в настройках эмулятора ULA и Rom set = Delta C.
заметил одну неприятную особенность курсор как-то быстро и дёрганно мигает, так не должно быть.
джойстик работает великолепно, хотя управлять с помощью стика не очень удобно.
ZEman, могу поправить, если подскажете с какой частотой он мигал в оригинале
Тут weiv написал небольшой тест, который проверяет особенность прерываний на реальном Z80.
http://zx-pk.ru/threads/27033-prokho...l=1#post970613
И судя по нему, те эмуляторы, которые эмулируют IFF2, не всегда это делают корректно.
В ZXMAK2 и Спектакуляторе эмуляция IFF2 присутствует, но тест ldartst2.zip они не проходят.
Хотелось бы попросить владельцев реального железа проверить как ведут себя реальные спектрумы.
Особенно интересует вариант с родным Z80.
на 64/32 контроллер работает, но в логе про joy нет упоминаний.
и почему если joy=none из порта (#001f) читается 0 ?
в версии 2.9.3.5 я удалил лишние логи, в ней логируются только ошибки.
Проверять логи джойстика нужно на этой версии:
http://zx-pk.ru/threads/16830-zxmak2...l=1#post971647
none - это значит никакой джойстик не подключен. Т.е. порт есть, а джойстика в нём нет.
ZXMAK, рад бы, да у меня нету спектрума уже несколько лет, только через эмули могу запускать.
Код:[20:10:56.851][ZXVM][DEBUG] [joy.CaptureHostDevice] SetDataFormat: [HRESULT] 0x00000000 D3D_OK
[20:10:56.852][ZXVM][DEBUG] [joy.CaptureHostDevice] SetCooperativeLevel: [HRESULT] 0x00000000 D3D_OK
[20:10:56.852][ZXVM][DEBUG] [joy.CaptureHostDevice] Acquire: [HRESULT] 0x00000000 D3D_OK
[20:10:56.853][ZXVM][DEBUG] [joy.ActivateDevice] Acquire: [HRESULT] 0x00000001 S_FALSE
[20:11:13.523][1 ][DEBUG] [joy.DeactivateDevice] Unacquire: [HRESULT] 0x00000000 D3D_OK
[20:11:13.533][ZXVM][DEBUG] [joy.ActivateDevice] Acquire: [HRESULT] 0x00000000 D3D_OK
[20:11:17.461][ZXVM][DEBUG] [joy.DeactivateDevice] Unacquire: [HRESULT] 0x00000000 D3D_OK
[20:11:19.509][6 ][DEBUG] Direct3D: dispose Device, threadId=6
goodboy, дешифрация джойстика делается по маске 0xE0. Выборка происходит при нулях.
Настройка дешифрации портов для джойстика почему-то не прикручена. Видимо пропустил.
Для других устройств дешифрацию можно подредактировать в vmz файле, где хранится конфигурация машины.
Надо будет прикрутить и для джойстика.
А какая дешифрация для джойстика корректная для оригинальных 48к, 128к и пентагона?
ещё бы копирайт поправить с:
Copyright 2001 - 2015 Alex Makeev
на:
Copyright 2001 - 2018 Alex Makeev
;)
Вот новая версия 2.9.3.6:
https://drive.google.com/file/d/18MZ...ew?usp=sharing
- добавлен код настройки дешифрации портов, многие устройства теперь сохраняют и загружают настройки дешифрации портов в конфигурации. Их можно править текстовым редактором в vmz файле).
- covoxPentagon, CovoxScorpion и CovoxProfi удалены, вместо них добавлены более универсальные CovoxMono и CovoxStereo (настраивается вручную в vmz файле)
- исправлен баг с мерцанием всплывающего меню Wizard окна Settings при первом нажатии
- подчищен код DirectX
- обновил год в окне about :)
Немного о настройках дешифрации портов. Устройства сохраняют их в виде следующих аттрибутов:
- "noDos": если true, то порт открывается только при отключенном DOS пзу
- "mask" или "maskXXXX", где XXXX - это название порта (если их несколько) - это маска выборки. Единички в двоичном представлении указывают на биты адреса, которые учавствуют в выборке
- "port" или "portXXXX" - это собственно адрес порта
Все просто:
"n" - значит данная адресная линия не участвует в дешифрации вообще - эти сигналы на дешифрацию просто не идут (а значит, могут быть любыми) и ни на что не влияют.
"X" - значит, что эти значения могут изменяться в соответствии с желаниями программиста, выполняя определенные функции. Т.е. в самой дешифрации они не участвуют, но в рамках работы "сдешифрированного порта" выполняют дополнительные функции. Так, если брать порт #FE", то сброс адреса A3 устанавливает цвет бордюра в Bright 1, комбинация значений A7 и A6 выбирает тип графического режима, а A5=0 отключает ПЗУ для работы CP/M.
Аналогично следует трактовать данные символы применительно к другим портам, если такое встретится. Есть ли еще такое в АТМ1 не помню, но в АТМ2(+) такое встречается во многих портах, в частности, в портах диспетчера памяти и системном порту, где помимо шины данных для передачи параметров подобным образом участвует и шина адреса.
Похоже это не так. Благодаря zebest обнаружилось, что с дешифрацией только по A5=0 на модели 48к early фейлится тест из аттачмента.
Если поставить дешифрацию по A7=A6=A5=0, то весь тест проходит без ошибок.
Я поспешил поставить дешифрацию для кемпстон джойстика только по А5, для исправления, нужно после выбора модели в vmz файле подредактировать маску порта - поставить ее равной 0xE0:
Или исправить конфигурацию 48к модели в файле machines.config, тогда при выборе модели сразу правильная будет загружаться:Код:<Device type="ZXMAK2.Hardware.General.KempstonJoystick, ZXMAK2.Hardware" noDos="True" mask="0xE0" port="31" hostId="" />
с маской 0xE0 для кемпстон джойстика тест проходит без проблем:Код:<Bus name="ZX Spectrum 48" modelId="Sinclair48">
<Device type="ZXMAK2.Hardware.Spectrum.UlaSpectrum48" />
<Device type="ZXMAK2.Hardware.General.BetaDiskInterface" />
<Device type="ZXMAK2.Hardware.General.AY8910" frequency="1773400" maskAddr="0xC002" maskData="0xC002" portAddr="0xFFFD" portData="0xBFFD" />
<Device type="ZXMAK2.Hardware.General.BeeperDevice" bitEar="4" bitMic="3" />
<Device type="ZXMAK2.Hardware.General.TapeDevice" />
<Device type="ZXMAK2.Hardware.General.KeyboardDevice" />
<Device type="ZXMAK2.Hardware.General.KempstonJoystick" noDos="true" mask="0xE0" port="0x1f" />
<Device type="ZXMAK2.Hardware.General.Debugger" />
<Device type="ZXMAK2.Hardware.Spectrum.MemorySpectrum48" />
</Bus>
https://i.imgur.com/fgO5O7w.png
небольшое обновление - версия 2.9.3.7:
https://drive.google.com/file/d/1h_J...ew?usp=sharing
версия 2.9.3.7 light (минимизированная, удален код под XNA платформу и отладчик Adlers):
https://drive.google.com/file/d/1dnk...ew?usp=sharing
исходный код 2.9.3.7 (включая библиотеки aforge и обновлённый ZXMAK2.Media):
https://drive.google.com/file/d/1z8g...ew?usp=sharing
В этой версии в основном мелкие исправления. Включая исправление для дешифрации джойстик порта Spectrum 48k.
Сравнил скорость, по сравнению с версиями выложенными на codeplex, скорость увеличилась примерно на 20-40%.
Неплохо получилось.
Просьба проверить как работает джойстик. И не зависает ли процесс при закрытии эмулятора после использования джойстика.
В старых версиях на MDX был такой баг, эта версия включает его исправление.
Еще было бы интересно узнать, как работает на ARM процессорах (на планшетах с ARM процессором).
джойстики хорошо работают, ничего не зависает.
есть правда одно но.
у меня на джойстике управление ставится на аналоговый стик - а хотелось бы чтоб на крестовине было, а то играть жутко неудобно.
ну и также нужна опция чтоб управление могло передаваться на стрелки и какую-нибудь клавишу (тяжело играть на 6,7,8,9,0).
JoyToKey? Или не винда?
Перенёс эмулятор на github: https://github.com/zxmak/ZXMAK2 :)
Вставляю 4 диска в 4 дисковода. С A - все загружается и работает в дальнейшем, при попытке выбрать другой дисковод (B-D) - No Disk! То есть, само устройство есть, а вот диска в нем не видит. Печально это.
Rubts0FF, хм... действительно есть такой баг, раньше работало
Исправление для этого бага добавлено на гитхабе, в следующем релизе всё должно работать.
Зарелизил исправленную версию 2.9.3.8: https://github.com/zxmak/ZXMAK2/releases/tag/v2.9.3.8
- Исправлена поддержка работы с несколькими дисководами
- Добавлена поддержка загрузки Intel HEX файлов в память (полезно, если компилятор выдает на выходе Intel HEX)
О! Оперативно, спасибо. И .., раз пошла такая .., я с пожеланиями, в который раз ищу альтернативу эмулятора Шалаева, ну очень мне в нем удобно, но на нынешних компьютерах он совершенно немой, ни тебе бип, ни тем более ау. Кандидат вроде бы просматривается, но к пожеланиям. Клавиатура, можно ли сделать, может я просто не знаю как, что бы PGDN, PGUP работали и CapsLock работал как CapsLock, а TAB мог бы быть CS+SS. Лучший вариант что бы каждый мог себе все, ну пусть не все, кнопки переопределить.
И хорошо бы сохранять диски/образы при записи на диск, изменилось содержимое диска - изменилось содержимое файла .trd.
А пока буду обживать дальше.
Так, спасибо я уже говорил.
можно, в файле Keyboard.config задаётся соответствие кнопок спектрума кнопкам компа.
Там просто - в Condition указаывается одна кнопка, любой из сработавших Condition приведет к нажатию кнопки.
А MultiCondition - это срабатывание кнопки только когда все условия внутри MultiCondition срабатывают.
Например чтобы нажималась спектрум кнопка 1 при нажатии на Tab ИЛИ на левый шифт, нужно такое условие прописать:
все упоминания Tab и "LeftShift" в других спектрум кнопках желательно удалить, чтобы они тоже не срабатывали.Код:<KeyBinding Key="D1">
<Condition Key="Tab"/>
<Condition Key="LeftShift"/>
</KeyBinding>
А если нужно чтобы спектрум кнопка 1 нажималась при нажатии на Tab И левый шифт, то так:
Код:<KeyBinding Key="D1">
<MultiCondition>
<Condition Key="Tab"/>
<Condition Key="LeftShift"/>
</MultiCondition>
</KeyBinding>
так оно и так сохраняется - при закрытии эмулятора, смене диска или конфигурации.Цитата:
И хорошо бы сохранять диски/образы при записи на диск, изменилось содержимое диска - изменилось содержимое файла .trd.
- Это да, но во первых просит подтверждения, а во вторых, и это самое главное, закрытие бывает аварийное, не обязательно глюки самого эмулятора, windows или просто выключили свет. Когда играешь в игру - тоже конечно жалко, но с другой стороны лишний повод поиграть еще. Когда пишешь программу ... .
Насчет клавиатуры - спасибо, буду пробовать.
Для этого галочка Read Only есть. Для большей надёжности можно октрывать образы из zip архивов.
Запись в файлы находящиеся в zip архиве специально не реализована, чтобы была возможность надёжно предохранить образы от записи.
Поэтому при открытии образа из zip архива, галочка Read Only всегда включена и отключить её нельзя
О боже, зачем? Хранить здоровенные бинари в гите - это примерно самое худшее, что можно сделать с гитом. Объем репозитория будет расти на десятки мегабайт при каждом обновлении версий библиотек. Собственно, в том числе для того nuget и придумали, во времена svn/tfs такой проблемы не стояло.
Он не битый, там всё компилируется. Артефакты были только в файловой системе, а в сам проект были включены только нужные файлы.
Я обновил репо, почистив его и включив туда последние изменения из zxmak/ZXMAK2. Не знаю, правда, есть ли смысл его дальше поддерживать, учитывая, что появился официальный репозиторий. Но 1031 коммит, однако. Хотя бы из любви к истории можно.
Eltaron, библиотеки ни разу не обновлялись. Смысла прикручивать nuget, который замедляет компиляцию скачиванием множества ненужных файлов не вижу. Были какие-то проблемы при сборке, подозрения упали на nuget и я его удалил. Ошибка тогда оказалась в скрипте сборки, которая каким-то образом вылазила боком на nuget-е (глюки MSBuild). Но возвращать nuget не стал, без nuget собирать приятней.
Прошу прощения за баян, но читка форума не перенесло понимание.
Вопрос про кнопку включения турбо режима "Maximum Speed".
Как я понял схема реализации турбо режима не позволят отобразить быстродействие в тестах, у меня они вообще не реагируют на эту кнопку.
Какая скорость сейчас стоит для "Profi 5.х"? Можно ли (и как) её настраивать?
Планируется ли поддержка иных музыкальных плат, кроме ковакс? В частности GS.
А так же меня интересует эмуляция "Profi 5.06".
Чем отличаются ZXMAK2 или ZXMAK.NET? Что лучше выбрать для Profi?
Не долгий опыт общения с ZXMAK2, вызвал исключительно положительные эмоции. Спасибо за труд!