ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Версия 2.0.1 alpha
- добавлен отладчик;
- опять переработан основной цикл и отрисовка (painting);
- добавлен полноэкранный режим;
- добавлены кнопки управления F5 (пауза), F7 (перемотка магинтофона на начало), F9 (продолжить работу), Alt+Enter (полноэкранный режим);
В архив также вкладываю бенчмарк производительности движка, просьба запустить его на слабых машинах и выложить результаты с указанием конфигурации машины (процессор, частота, ОС)
Открыт прием заявок на фичи![]()
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
возможность расширять плагинами:
как минимум возможность работать через порты и подставлять в свое ПЗУ (для устройств не завязаных на видео и звук можно обойтись к привязкам эмулируемого времени)
как максимум делать свою отрисовку, менеджеры памяти, читать блокировать "набортные устройства", расширять дебагер своими данными.
к этому и идет, правда есть опасения что если раскидать дешифрацию портов/памяти по плагинам, то может заметно пострадать быстродействие
свою отрисовку - пожалуй что проблем нет, для этого нужно реализовать интерфейс IUla, предоставляющий видеобуфер в формате 32 битного цвета и его размеры. Вопрос пока только в перехвате вывода в порты (который понадобится для нестандартных видеорежимов), реализация обработки портов может негативно повлиять на производительность.
насчет остального, не совсем ясно, если можно - поподробней что под этим понимается:
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Тут мысль есть. Выглядит примерно так
Делаем табличку на 64к делегатов и при регистрации порта чтения передаем строку (например для регистрации порта FE клавиатуры строка будет выглядеть так "xxxx_xxxx_xxxx_xxx0" где в строке могут быть x бит не имеет значения для дешифрации; 0,1 конкретное значение бита при дешифрации _ для визуального удобства) по этим строкам можно заполнить табличку делегатов и не будет влиять на скорость работы зарегистрирован один порт на чтение или 200, для записи сложнее по идее несколько устройств могут одновременно откликнуться на запись в порт, тут надо подумать, думаю можно сделать 4 таблички и обрабатывать их каскадом в реальности (в железе) не могу представить себе ситуации что бы больше 2х устройств откликнулось на запись по одному адресу.
ну тут вопрос еще есть с лучом развертки, как по мне правильная отрисовка не совсем тривиальная задача, в идеале было бы нарисовать какой нить базовый класс и классы хелперы что бы как то стандартизировать и упростить их реализацию, но тут тебе виднее как оно должно быть как всегда упирается все в компромиссы между быстро и удобно.
Под менеджером памяти подразумевается - плагин который к примеру позволит использовать память по стандарту пентагона 1024 или там пентевы, опять же как я вижу есть 4 ссылки на массивы по 16кил (страницы), для каждой четверти адресного пространства, плагин регистрирует порты на запись, заказывет у эмулятора что ему надо к примеру 32 страницы по 16 кил, отдает ссылки на страницы с которых будет браться картинка (ну простейший вариант на 5 и 7 страницы) и будет по записи в порт изменять ссылки того что подключено к адресному пространству.
Под "читать блокировать набортные устройства", блокировку набортных устройств отчасти можно решить табличкой делегатов на 64к адресов с битовой строкой как описывал выше, под читать это имел ввиду что бы можно было по какому то идентификатору прочитать к примеру значение порта 7FFD или там значение флага TR-DOS (хотя чтение портов опять же можно решить с регистрацией в плагине функции реагирующую на запись к примеру по маске "xxxx_xxxx_xxxx_xx0x"), тут додумать надо, можно взяться пописать плагины и тогда уже точно сложатся функциональные требования.
Под расширением дебагера, добавить возможность выводить где нить (к примеру в области окна там где выводится текущий такт и значения флагов IFF1 IFF2 свои значения, добавлю к примеру порт 1FFD и очень неплохо видеть его значение в дебагере, или к примеру добавлю флаг SHADOW_ROM который будет показывать что нахожусь в теневом ПЗУ, в общем позволить регистрировать там подписчики на вывод значений bool, byte, short, string)
Надеюсь не много набредил
---------- Post added at 00:17 ---------- Previous post was at 00:16 ----------
Тут мысль есть. Выглядит примерно так
Делаем табличку на 64к делегатов и при регистрации порта чтения передаем строку (например для регистрации порта FE клавиатуры строка будет выглядеть так "xxxx_xxxx_xxxx_xxx0" где в строке могут быть x бит не имеет значения для дешифрации; 0,1 конкретное значение бита при дешифрации _ для визуального удобства) по этим строкам можно заполнить табличку делегатов и не будет влиять на скорость работы зарегистрирован один порт на чтение или 200, для записи сложнее по идее несколько устройств могут одновременно откликнуться на запись в порт, тут надо подумать, думаю можно сделать 4 таблички и обрабатывать их каскадом в реальности (в железе) не могу представить себе ситуации что бы больше 2х устройств откликнулось на запись по одному адресу.
ну тут вопрос еще есть с лучом развертки, как по мне правильная отрисовка не совсем тривиальная задача, в идеале было бы нарисовать какой нить базовый класс и классы хелперы что бы как то стандартизировать и упростить их реализацию, но тут тебе виднее как оно должно быть как всегда упирается все в компромиссы между быстро и удобно.
Под менеджером памяти подразумевается - плагин который к примеру позволит использовать память по стандарту пентагона 1024 или там пентевы, опять же как я вижу есть 4 ссылки на массивы по 16кил (страницы), для каждой четверти адресного пространства, плагин регистрирует порты на запись, заказывет у эмулятора что ему надо к примеру 32 страницы по 16 кил, отдает ссылки на страницы с которых будет браться картинка (ну простейший вариант на 5 и 7 страницы) и будет по записи в порт изменять ссылки того что подключено к адресному пространству.
Под "читать блокировать набортные устройства", блокировку набортных устройств отчасти можно решить табличкой делегатов на 64к адресов с битовой строкой как описывал выше, под читать это имел ввиду что бы можно было по какому то идентификатору прочитать к примеру значение порта 7FFD или там значение флага TR-DOS (хотя чтение портов опять же можно решить с регистрацией в плагине функции реагирующую на запись к примеру по маске "xxxx_xxxx_xxxx_xx0x"), тут додумать надо, можно взяться пописать плагины и тогда уже точно сложатся функциональные требования.
Под расширением дебагера, добавить возможность выводить где нить (к примеру в области окна там где выводится текущий такт и значения флагов IFF1 IFF2 свои значения, добавлю к примеру порт 1FFD и очень неплохо видеть его значение в дебагере, или к примеру добавлю флаг SHADOW_ROM который будет показывать что нахожусь в теневом ПЗУ, в общем позволить регистрировать там подписчики на вывод значений bool, byte, short, string)
Надеюсь не много набредил![]()
Немного о бенчмарке Test.exe, бенчмарк измеряет время эмуляции 500 кадров (10 секунд) заложенных в exe снэпшотов. После выполнения 500 кадров состояние сохраняется в снэпшот на диск для возможности проверки корректности эмуляции.
Следует отметить что из-за особенностей сохранения Z80 снэпшотов (не сохраняется состояние HALT), результирующий снэпшот videoTest.z80 будет нерабочий, чтобы сделать его рабочим нужно после загрузки уменьшить PC на единицу. Может кто-то знает где в Z80 можно сохранить состояние HALT?
---------- Post added at 01:57 ---------- Previous post was at 01:35 ----------
хорошая идея![]()
Последний раз редактировалось ZXMAK; 09.09.2011 в 02:38.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
плэйлист сделай http://zx.pk.ru/showthread.php?t=16726
Не совсем так.
Если зарегистрировано несколько делегатов на запись (а это обычная ситуация, например SounDrive и BDI висят на одних и тех же портах), то здесь нюансом может быть блокирование дальнейшей записи устройством. Например, тот же BDI может решить, что порт предназначается ему и не разрешить передавать его следующему делегату. Т.е. возникает проблема порядка, которую надо решать конфигурациями.
Если зарегистрировано несколько делегатов на чтение- вот это уже плохо, ибо конфликт на шине.
Тут может быть такое же решение как и в железе - приоритеты, тобиш логика IOQGE
если откликнулось устройство которое сидит раньше в цепочке (к примеру в первом слоте слотовых машин) IORQGE то остальные идут лесом.
Вот теперь я вспомнил где конкретно надо логика блокировки "набортных устройств", то есть работать с устройствами пересекающиеся с BDI это исключение из правил а не практика.
В то же время есть вполне законное право что бы несколько устройств отреагировало на запись в один порт, так можно сделать в железе без каких либо доработок было бы отлично если бы была бы такая возможность в эмуляторе, тогда можно макетировать всякие внешние видяхи (которым надо слушать на запись порты 7FFD и FE). Как вариант можно конечно предоставить функции которые позволят в любой момент прочитать 7FFD и FE, но это не совсем честное макетирование получится.
В общем все мои хотелки это то что я в какой то мере делал на предыдущем zxmak для отладки железяк, но там как по мне не совсем удобно надо создавать платформу и в неё всовывать железку, тобиш нельзя железку потестиь с Profi Kay Pentagon, это надо везде полазить.
---------- Post added at 10:02 ---------- Previous post was at 08:42 ----------
Бажка с востановление контекста графического устройства, видать обрабатывается только состояние DeviceNoReset или как то так, а на DeviceLost вываливает исключение (ноут усыпил с включеным эмулятором, после пробуждения красный крест вместо картинки)
О, из этой версии я понял, что значит "VMWARE Workstation для Speccy"
Да, отличная идея!
А исходники-то будут?
еще под Wine если скрыть окно, а потом показать обратно, то практически всегда сурфейс отваливается, видео больше не обновляется и звук останавливается. Меню при этом работает нормально.
Последний раз редактировалось Eltaron; 09.09.2011 в 12:35.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)