Просмотр полной версии : ZXMAK2 - Виртуальная машина ZX Spectrum
Страницы :
[
1]
2
3
4
5
6
7
8
9
Плагинный эмулятор - виртуальная машина ZXMAK2! :v2_thumb:
Исходный текст и последний релиз доступен тут: https://github.com/zxmak/ZXMAK2
Ранее эмулятор обновлялся на CodePlex, архив можно скачать тут: http://zxmak2.codeplex.com
Через окно настроек можно задавать конфигурацию - добавлять или удалять любые устройства.
Единственное ограничение - для работы обязательно требуется наличие ULA и Memory. В остальном - полная свобода выбора :v2_dizzy_roll:
Конфигурация машины сохраняется в VMZ файле.
В наличии есть устройства периферии: AY8910, бипер, магнитофон, Kempston и AY мыши, стандартная клавиатура.
Поддерживаются следующие форматы (можно открывать прямо из ZIP файла):
Снэпшоты: RZX, SZX, Z80, SNA, SIT, ZX
Скриншоты: SCR, BMP, JPG, PNG
Образы дисков: UDI, FDI, TD0, TRD, SCL, hobeta, PRO, IMG, QDI
Магнитофон: TAP, TZX, CSW, WAV
Имеется возможность добавлять свои устройства-плагины. Сторонние устройства подгружаются из папки Plugins.
------------------------------------
FAQ:
Q: Эмулятор не запускается, что делать?
A:
1) вначале (!) установить dotnet framework 2.0 : http://www.microsoft.com/download/en/details.aspx?id=19
2) затем (!) установить DirectX 9 (замечу что DirectX 10/11 не включает в себя DirectX 9): http://www.microsoft.com/download/en/details.aspx?id=35
3) если эмулятор всеравно не запускается, рядом с эмулятором появится папка Logs, запакуйте ее содержимое и приложите к отчету об ошибке в этом топике, в сообщении также укажите ошибку которую сообщит система после нажатия кнопки "Сведения" в окошке с ошибкой
4) Если дотнет фреймворк у вас уже был установлен, но эмулятор не запускается, возможно у вас ошибка инсталляции фреймворка. Необходимо удалить все установленные версии dotnet framework начиная со старших версий, выполнить установить заново (шаг 1), остальные фреймворки доустановить при необходимости
Q: Какие кнопки управления?
A: Начиная с версии 239, шорткаты изменились (это связано с тем что функциональные клавиши могут использоваться спектрумом):
Alt+Ctrl+Insert => RESET
Alt+Enter => Полноэкранный/Оконный режим
Pause => Приостановить/Продолжить работу
Alt+Ctrl+F1 => Запустить быстрый бут (из снэпшота boot.zip)
Alt+Ctrl+F8 => Воспроизведение/Пауза магнитофона (если есть)
Q: TRDOS не видит диск
A: если у вас в конфигурации машины присутствует Kempston Joystick, сделайте его приоритет ниже чем Beta Disk, опустив вниз списка устройств
Q: Не удается изменить конфигурацию машины
A: удалите файл конфигурации машины ZXMAK2.VMZ, при запуске будет создана конфигурация по умолчанию
Q: Как подложить свой ROM образ взамен стандартного
A: Эмулятор загружает ROM файлы согласно описанию в файле ~mapping.xml
Вначале эмулятор ищет файл в папке ROMS, если не находит, тогда пытается его найти в архиве ROMS.ZIP.
То-же самое относится к файлу ~mapping.xml. Т.е. если мы хотим подложить свой образ, но не хотим менять ROMS.ZIP, то для этого нужно:
1) создать папку ROMS,
2) скопировать ~mapping.xml в папку ROMS
3) прописать в скопированном файле ~mapping.xml новые имена ROM файлов, которые также скопировать в папку ROMS
4) готово
------------------------------------
ВНИМАНИЕ: В связи с закрытием codeplex, код переехал cюда: https://github.com/zxmak/ZXMAK2
[bETA]mEN
18.09.2011, 16:21
А почему такой ужасный full screen? Изображение просто растягивается до размеров desktop без сохранения пропорций экрана Spectrum'а.
Mad Killer/PG
18.09.2011, 18:55
Просвети неуча в чём разница с эмулем ?
В архиве прилагается пример реализации девайса IO_TEST (исходник, скомилированная DLL и батник для компиляции).
это в каком архиве? в том что приатачен нет такого
Новая версия 211:
- исправлен баг Direct3D устройства
- добавлена опция Keep Proportion для сохранения пропорций при ресайзе
- добавлен интерфейс ISoundRenderer, позволяющий добавлять устройства выводящие звук
- исправлены другие баги
- добавлен девайс Memory - Pentagon 512K
- добавлен девайс Memory - PROFI+ 1024K (+WD93 port activator)
- добавлен девайс Memory - Scorpion 256K (+WD93 port activator)
- добавлен девайс Memory - Scorpion 512K (+WD93 port activator)
- добавлен девайс Memory - ATM1 512K
- добавлен девайс Other - CMOS
:v2_thumb:
mEN;416416']А почему такой ужасный full screen? Изображение просто растягивается до размеров desktop без сохранения пропорций экрана Spectrum'а.
добавил в настройки опцию сохранять пропорции, кстати там баг был - не обновлялось разрешение бэк буфера, в итоге изображение коробилось при ресайзе. :smile:
Просвети неуча в чём разница с эмулем ?
в том что:
1) можно легко комбинировать разные устройства;
2) легко писать писать девайсы устройств для спектрума, т.к. не нужно копаться в коде эмулятора и думать как сюда что-то вклинить
это в каком архиве? в том что приатачен нет такого
извиняюсь, забыл папочку запаковать, смотри версию 211 - добавил :)
Свершилось, вот он плагинный эмулятор - виртуальная машина :v2_thumb:
а можно реализовать видео и аудио рендеринг в отдельной dll, чтоб отвязать основной exe от рефренсов на Microsoft.DirectX.*? Очень хочется на mono портировать.
а можно реализовать видео и аудио рендеринг в отдельной dll, чтоб отвязать основной exe от рефренсов на Microsoft.DirectX.*? Очень хочется на mono портировать.
технически сложного ничего нет, движок на DirectX не завязан. Для примера Test.exe, который я использую как бенчмарк для наблюдения за производительностью после различных изменений в коде. Там вообще нет гуя, все работает в консоли - снэпшоты загружаются и работают периодически сохраняя скриншоты результатов в JPG.
Графику для Mono можно взять из кода ZXMAK.NET, тем более что суть отрисовки почти не поменялась. По графике разница только в том что ZXMAK.NET рисовал в предоставленный видеобуффер, а в ZXMAK2 движок сам держит буффер и наружу сообщает размеры изображения и предоставляет буфер.
Мне сейчас интересно довести до уровня хорошо сделанной программы по крайней мере на одной платформе, поэтому я пока только для DirectX пишу. Еще есть достаточно много задумок не реализованных. В GUI пока бардак, настройки в еще не сохраняются. Из за этого кстати отвалились настройки Beta Disk - галочки не сохраняются и не применяются...
Пока разных девайсов наклепал, чтобы интерфейс шины причесать :)
Хотел с наскоку General Sound девайс реализовать, но застрял на дешифрации портов/памяти... :) Толковой документации маловато
Нарисовал класс наследник ZXMAK2.Engine.Loader.FormatSerializer, объяснился что могу сериализовать и десериализовать, в итоге в File|Open не появился мой формат, эмулятор еще не тянет сериалайзеры из плагинов?? Вообще студия на конструкторе не останавливает
Нарисовал класс наследник ZXMAK2.Engine.Loader.FormatSerializer, объяснился что могу сериализовать и десериализовать, в итоге в File|Open не появился мой формат, эмулятор еще не тянет сериалайзеры из плагинов?? Вообще студия на конструкторе не останавливает
нет, сериалайзеры сами еще не подключаются :) нужно вручную у LoadManager метод AddSerializer добавлять, но к нему из плагина пожалуй непросто будет добраться, т.к. он нигде не светится :biggrin: Нужно будет подумать над этим :)
SoftLight
19.09.2011, 18:07
Под Win7 x64 не запускается, что как бы логично. Так и не понял есть-ли в природе MS.NET Framework 2.0 для 64-битной винды.
Так и не понял есть-ли в природе MS.NET Framework 2.0 для 64-битной винды
есть конечно, иу меня под такой и работает, и NF 2.0 идет в наборе с виндой поставь DirectX 9
Под Win7 x64 не запускается, что как бы логично. Так и не понял есть-ли в природе MS.NET Framework 2.0 для 64-битной винды.
что именно логично? :eek: Код писал и тестил все именно под Win7 x64, все прекрасно работает. Более того, .NET Framework 2 входит в состав Win7 от рождения. Код ошибки где? Если появляется лог файл, то идеально ошибку из лога...
Я думаю проблема скорей всего в том что DirectX 9 не установлен, т.к. в Win7 по дефолту его действительно нет, есть только DirectX 11, поэтому DirectX 9 нужно ставить самому
[bETA]mEN
19.09.2011, 19:14
Под Win7 x64 не запускается
Reporting in: у меня Windows 7 x64, всё запускается.
Так и не понял есть-ли в природе MS.NET Framework 2.0 для 64-битной винды.
http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=029196ed-04eb-471e-8a99-3c61d19a4c5a
SoftLight
19.09.2011, 20:06
что именно логично? :eek: Код писал и тестил все именно под Win7 x64, все прекрасно работает. Более того, .NET Framework 2 входит в состав Win7 от рождения. Код ошибки где? Если появляется лог файл, то идеально ошибку из лога...
Я думаю проблема скорей всего в том что DirectX 9 не установлен, т.к. в Win7 по дефолту его действительно нет, есть только DirectX 11, поэтому DirectX 9 нужно ставить самому
Да может и DirectX, попробую спасибо. Потому что другие приложения .Net работают вроде. А симптомы такие: черный консольный экран который сразу захлопывается - это когда эмулятор запускаю. При этом тестовое приложение работает. Комп на работе завтра еще попробую с DirectX и лог посмотрю.
upd.: Ура! Поставил DirectX9 и все заработало!
Я думаю проблема скорей всего в том что DirectX 9 не установлен, т.к. в Win7 по дефолту его действительно нет, есть только DirectX 11, поэтому DirectX 9 нужно ставить самому
А разве директиксы обратно не совместимы?
9й и 10й лишь частично, некоторых библиотек нет, приходиться доустанавливать
А разве директиксы обратно не совместимы?
до 9 включительно совместимы, а 10 и 11 уже на новой архитектуре построены, сильно поменялись интерфейсы, поэтому они отдельно идут. С Win7 в инсталляцию входит только 11-й, 9-й самому доустанавливать надо
oracleua
19.09.2011, 21:48
А у меня почему то не видятся диски..
Я выбираю образ диска..а он не видеться в тр-дос...и также не сохраняется в настройках..
9й и 10й лишь частично, некоторых библиотек нет, приходиться доустанавливать
что касается Direct3D, то я сказал бы что это совершенно разные интерфейсы. Мне устройство 10 и 11 не понравилось, слишком все под шрейдеры заточено... в итоге всякие партикл-эффекты которые сами по себе живут сделать легче, а вот динамические текстуры к примеру как-то не очень. Может я плохо понял новую идеологию, но все это мне не очень понравилось, как-то синтетикой отдает... Все сводится к тому чтобы управлять заранее загруженными объектами...
Взять тот-же звук, на спектруме, к примеру, звук процессор сам генерил рантайме, а в PC игрушках сейчас все в основном сводится к тому чтобы проиграть заранее загруженный mp3 файл... В этом часто чувствуется разница не в пользу PC с точки зрения живости и интерактивности звука...
---------- Post added at 21:04 ---------- Previous post was at 21:02 ----------
А у меня почему то не видятся диски..
Я выбираю образ диска..а он не видеться в тр-дос...и также не сохраняется в настройках..
это баг, появился после того как стало возможно добавлять/удалять устройства. Настройки устройств не сохраняются, пока сохраняются только типы устройств, в следующей версии исправлю.
Пока открывать все можно через меню File->Open ;)
oracleua
19.09.2011, 22:28
А почему тест просит MS.NET Framework 4.0.30319 ????
С реальной дискетой будет работать??
а в PC игрушках сейчас все в основном сводится к тому чтобы проиграть заранее загруженный mp3 файл...
В XNA4 вернули возможность DirectSound генерить буфер с звуком и воспроизводить, так что есть возможность сделать запускаемым XBOX WP7 Win Zune И планшетах с Win8 на ARM :)
до 9 включительно совместимы, а 10 и 11 уже на новой архитектуре построены, сильно поменялись интерфейсы, поэтому они отдельно идут. С Win7 в инсталляцию входит только 11-й, 9-й самому доустанавливать надо
Подо что же сейчас писать, чтобы сразу заработало у обычного пользователя и на XP, и на семерке? Под 9 или 11 директикс?
[bETA]mEN
20.09.2011, 00:57
Подо что же сейчас писать, чтобы сразу заработало у обычного пользователя и на XP, и на семерке? Под 9 или 11 директикс?
Так DX11 под XP официально нет.
mEN;416824']Так DX11 под XP официально нет.
A директикс 9 под семерку в комплект не входит? Тогда как же работает все то, что под него написано?
[bETA]mEN
20.09.2011, 01:19
A директикс 9 под семерку в комплект не входит? Тогда как же работает все то, что под него написано?
На семёрку можно всё недостающие доставить отдельно. А вот XP уже не поддерживается.
А почему тест просит MS.NET Framework 4.0.30319 ????
в новой версии поменяю на второй :) Вообще есть мысли установить четвертый для всего проекта, но четвертый не у всех установлен, поэтому пока используется второй.
С реальной дискетой будет работать??
нет, а смысл? на PC нет реальной ВГ93, поэтому нужно вычитывать образ дорожки (что не всегда возможно в поностью автоматическом режиме и занимает очень много времени), после чего эмуляция будет производится всеравно также как с образом. Т.е. проще снять образ и работать с ним, после чего сохранить изменения и перевести назад на дискету.
Как сделать свой плагин, который по записи в порт заблокирует ПЗУ и позволит в эту область подставить свое ПЗУ, в железе есть сигнал BLK который во многих клонах (и не клонах тож) воспринимается и по нему блокируется чтение из ПЗУ, сигнал такой же глобальный как NMI INT RES ROMS DOS
В 48 машинах BLK использует тот же BDI и там нет сигнала ROMS (бит выбора 48/128 басик), в 128х без BDI уже юзают установку 64к ПЗУ на мать (ну разве что кроме оригинала куда не лазат с паяльником) и сигнал BLK юзается для блокировки ROM
Свежая версия 212:
- добавлено сохранение конфигурации девайсов
- добавлено сохранение скриншота в PNG формате
- добавлена возможность девайсам добавлять свои сериалайзеры (появятся при открытии меню File->Open и File->Save)
- немного изменился интерфейс девайсов - добавлен BusInit, а BusConnect/BusConnect теперь выполняют роль конструктора/деструктора
- для сохранения конфигурации девайса нужно реализовать интерфейс ZXMAK2.Engine.Interfaces.IConfigurable
---------- Post added at 10:30 ---------- Previous post was at 10:24 ----------
Как сделать свой плагин, который по записи в порт заблокирует ПЗУ и позволит в эту область подставить свое ПЗУ, в железе есть сигнал BLK который во многих клонах (и не клонах тож) воспринимается и по нему блокируется чтение из ПЗУ, сигнал такой же глобальный как NMI INT RES ROMS DOS
В 48 машинах BLK использует тот же BDI и там нет сигнала ROMS (бит выбора 48/128 басик), в 128х без BDI уже юзают установку 64к ПЗУ на мать (ну разве что кроме оригинала куда не лазат с паяльником) и сигнал BLK юзается для блокировки ROM
с текущими реализациями памяти наверно не получится, нужно доработать девайс памяти. Пока можешь сделать свою память, унаследуй от MemoryBase, переопределить SEL_SHADOW - в сеттере вызывай UpdateMapping(). Перегрузи UpdateMapping, из него вызови base.UpdateMapping() после чего при установленном SEL_SHADOW присваивай свою пзу в MapRead0000 и MapWrite0000. С этим сейчас там бардак, будем думать :)
кстати, сериалайзеры теперь добавляются через IBusManager в методе BusInit ;)
mishutka
21.09.2011, 11:18
Александр а можете дать прямую ссылку на исходники - что то я их не нахожу :v2_conf2:
что то я их не нахожу
Так вроде исходники не публиковались, и судя по примеру первой версии исходники если и будут выложены то только после релиза, а так если что то посмотреть надо reflector вполне подходит, обфускатор не натравливают
обновил до 213 версии, значительных изменений нет - исправлено сохранение образов и добавлена поддержка командной строки :)
Так вроде исходники не публиковались, и судя по примеру первой версии исходники если и будут выложены то только после релиза, а так если что то посмотреть надо reflector вполне подходит, обфускатор не натравливают
все так и есть, код не обфусцирован, можно без проблем смотреть :) Исходники ZXMAK2 пока не выкладывались, большая часть кода (это почти весь движок, если не считать BusManager а также модификаций и фиксов необходимых для него) основана на ZXMAK.NET, исходники которого можно скачать по ссылке в моей подписи.
ZEK, а что ты за девайс делаешь?
ZEK, а что ты за девайс делаешь?
1. Менеджер памяти для P1024 v1.4 и KAY 1024 SL4 (для отладки портируемого HeGluk, и хочю железку сделать для возможности нормального запуска cp/m на KAY), вообще нет эмуляторов которые правильно эмулируют менеджер памяти KAY
2. Видеокарту Lethargeek (http://zx.pk.ru/showthread.php?t=1399), хочю добить на десятилетие идеи.
3. SD читалка/писалка по КоЮ, в принципе она есть в рамках первого движка ZXMAK, хочю допилить что бы вместо карты можно было юзать каталог.
4. Контролер клавиатуры Caro с флешем и управлением через чтение порта FE (опять же для порта HeGluk)
5. Проверять разные идейки... типо сопроцессоров на базе AVR, эмуляторы ВГ93, DMA USC
Вообще круто было (розовая мечта, не подкрепленная реальной необходимостью) бы если эмулятор мог на сокете реализовывать протокол gdb, тогда можно было с удобством песюка, компилить софт при помощи sdcc и отлаживать в среде Code:Blocks
Вообще круто было бы если эмулятор мог на сокете реализовывать протокол gdb
точно такая же мысль возникла :)
Ну или просто сделать интерфейс для добавления своего дебагера в систему заместо штатного (в котором, кстати, под wine окно дизассемблера не рендерится почему-то). Для этого же достаточны только возможность установить из плагина брякпоинт + получить доступ к экземпляру Z80CPU и девайсу-менеджеру памяти
1. Менеджер памяти для P1024 v1.4 и KAY 1024 SL4 (для отладки портируемого HeGluk, и хочю железку сделать для возможности нормального запуска cp/m на KAY), вообще нет эмуляторов которые правильно эмулируют менеджер памяти KAY
KAY это не PROFI случайно? В эмуляторе есть девайсы ULA и Memory для PROFI+ 1024, не уверен в том что они правильно реализованы, доков не осталось. Вот как они сейчас работают:
Порт CMR0 #7FFD - дешифрация по (ADDR & 0x8002)==0x0000
Порт CMR1 #DFFD - дешифрация по (ADDR & 0xFFFF)==0xDFFD
1) При сбросе включается shadow ROM, отключается как только чтение инструкции (M1) произойдет из области 0x4000-0xFFFF (такое поведение было реализовано в первом ZXMAK методом подбора, т.к. информация о ральном железе отсутствовала).
2) CMR0 #7FFD аналгогичен пентагону 128
3) CMR1 #DFFD:
sega = CMR1 & 7
norom = (CMR1 & 0x10) != 0;
sco = (PortDFFD & 0x08) != 0;
scr = (PortDFFD & 0x40) != 0;
cpm = (PortDFFD & 0x20) != 0;
ds80 = (PortDFFD & 0x80) != 0;
Сегментация:
protected override void UpdateMapping()
{
m_lock = (Port7FFD & 0x20) != 0;
int ramPage = Port7FFD & 7;
int romPage = (Port7FFD & 0x10) >> 4;
if (SEL_TRDOS) // trdos or 48/128
romPage = 2;
if (SEL_SHADOW)
romPage = 3;
int sega = PortDFFD & 7;
bool norom = (PortDFFD & 0x10) == 0x10;
bool sco = (PortDFFD & 0x08) == 0x08; // selectors RAM gates
bool scr = (PortDFFD & 0x40) == 0x40; // !??CMR0.D3=1??!
bool cpm = (PortDFFD & 0x20) == 0x20;
//bool s80DS = (PortDFFD & 0x80) == 0x80;
if (m_betaDisk != null)
{
m_betaDisk.SEL_PORTS = (!cpm && SEL_SHADOW) | ((Port7FFD & 0x10)==0);
// TODO: 128K? rom has different port mapping:
// #83=CMD
// #A3=TRK
// #C3=SEC
// #E3=DAT
// #3F=SYS
}
ramPage |= sega << 3;
MapRead0000 = norom ? RamPages[0] : RomPages[romPage];
MapRead4000 = sco ? RamPages[ramPage] : RamPages[5];
MapRead8000 = scr ? RamPages[6] : RamPages[2];
MapReadC000 = sco ? RamPages[7] : RamPages[ramPage];
MapWrite0000 = norom ? RamPages[0] : m_trashPage;
MapWrite4000 = MapRead4000;
MapWrite8000 = MapRead8000;
MapWriteC000 = MapReadC000;
}
девайс ULA PROFI+ использует бит ds80 для включения профи видеорежима и бит выбора экрана из #7FFD для выбора страниц видеопамяти:
protected override void UpdateMapping()
{
base.UpdateMapping();
bool polek = (Port7FFD & CMR0_POLEK) != 0;
m_profiMode = (PortDFFD & CMR1_DS80) != 0;
_memoryCpmUlaBw = polek ? Memory.RamPages[0x06] : Memory.RamPages[0x04];
_memoryCpmUlaClr = polek ? Memory.RamPages[0x3A] : Memory.RamPages[0x38];
//_ulaMemory = polek ? Memory.RamPages[7] : Memory.RamPages[5];
}
Можешь это проверить?
CP/M пока не грузится из-за какой-то ошибки эмуляции ВГ93 - не читается сектор каталога диска... (см. #8231 - загрузка сектора в память по адресу #9000, после CALL #81C1 сектор должен быть прочитан, но этого не происходит)
Вообще круто было (розовая мечта, не подкрепленная реальной необходимостью) бы если эмулятор мог на сокете реализовывать протокол gdb, тогда можно было с удобством песюка, компилить софт при помощи sdcc и отлаживать в среде Code:Blocks
хм, не слышал, а где подробности протокола посмотреть?
---------- Post added at 14:44 ---------- Previous post was at 14:32 ----------
точно такая же мысль возникла :)
Ну или просто сделать интерфейс для добавления своего дебагера в систему заместо штатного (в котором, кстати, под wine окно дизассемблера не рендерится почему-то). Для этого же достаточны только возможность установить из плагина брякпоинт + получить доступ к экземпляру Z80CPU и девайсу-менеджеру памяти
доступ к экземпляру Z80CPU у девайсов есть - когда приходит вызов BusInit процессор можно получить через IBusManager.GetMainCpu(), сохранить в локальной переменной и юзать до вызова BusDisconnect. Менеджер памяти через FindDevice находится. С бряками сложней, нужно мусор в основном цикле разгрести, т.к. писалось второпях :)
А насколько сложный там протокол и чем его потестить можно?
А что за проблема с отображением дебагера? Ошибки в логе есть? Панели дизассемблера и данных полностью рисованные, код наспех был скопирован из сишного эмуля и в таком виде так и остался... :)
Black_Cat
21.09.2011, 15:51
KAY это не PROFI случайно?нет
нет
а где для KAY описание портов (маска дешифрации, назначение битов) и сегментации памяти посмотреть можно?
Жалко, что эмуль под .NET. Не охота ставить всякие довески.
Black_Cat
21.09.2011, 17:26
а где для KAY описание портов (маска дешифрации, назначение битов) и сегментации памяти посмотреть можно?
дешифрацияю посмотри злесь: http://zx.clan.su/forum/11-46-1
---------- Post added at 17:26 ---------- Previous post was at 17:18 ----------
назначение битов #7FFD: http://zx.clan.su/forum/7-57-462-16-1257908619
назначение битов #1FFD: http://zx.clan.su/forum/7-57-463-16-1257908706
Жалко, что эмуль под .NET. Не охота ставить всякие довески.
дотнет ставить не нужно (кроме устаревших систем типа XP), он идет вместе с виндой, сейчас весь серьезный софт на дотнете пишется. Та же VMWare гуй на дотнете под винду пишет.
А вот DirectX 9 ставить нужно, без него не запустится
дотнет ставить не нужно (кроме устаревших систем типа XP), он идет вместе с виндой, сейчас весь серьезный софт на дотнете пишется. Та же VMWare гуй на дотнете под винду пишет.
А вот DirectX 9 ставить нужно, без него не запустится
Как ни странно, но я как раз обожаю эту устаревшую винду XP ) И ставлю только ее)
дешифрацияю посмотри злесь: http://zx.clan.su/forum/11-46-1
---------- Post added at 17:26 ---------- Previous post was at 17:18 ----------
назначение битов #7FFD: http://zx.clan.su/forum/7-57-462-16-1257908619
назначение битов #1FFD: http://zx.clan.su/forum/7-57-463-16-1257908706
отличная информация, спасибо! :v2_thumb:
Как ни странно, но я как раз обожаю эту устаревшую винду XP ) И ставлю только ее)
Я себе давно эту штуку поставил, чтобы скрины нарезать с одной программы. Тем более этот net небольшой -
http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7&displaylang=ru
Та же VMWare гуй на дотнете под винду пишет.
Банальный тонкий клиент для ESX/ESXi, а жрет как полноценный workstation.
Как со скоростью работы? Сколько fps эмулятор выжимает (аналог max speed в US)?
Как ни странно, но я как раз обожаю эту устаревшую винду XP ) И ставлю только ее)
ну на вкус и цвет товарищей нет, у меня на работе тоже XP, дома попробовал семерку, по началу не понравилось, часто загружался в XP, через пару месяцев так привык что XP снес нафик и теперь на работе очень не хватает семерки :)
Под XP с дотнет 20 метров весит, ставится без проблем. Удививляюсь как ты до сих пор без него живешь, т.к. очень много софта идет под него.
Я себе давно эту штуку поставил, чтобы скрины нарезать с одной программы. Тем более этот net небольшой -
http://www.microsoft.com/downloads/ru-ru/details.aspx?FamilyID=ab99342f-5d1a-413d-8319-81da479ab0d7&displaylang=ru
Не, не хочу загружать систему всякой бякой пока что.
Банальный тонкий клиент для ESX/ESXi, а жрет как полноценный workstation.
Как со скоростью работы? Сколько fps эмулятор выжимает (аналог max speed в US)?
с эмулятором рядом бенчмарк идет - Test.exe, он тестит производительность движка - цифры показывают время за сколько эмулятор отрендерил 500 кадров.
Последняя версия у меня на машине дает 0.9 сек, т.е. считай 550 FPS.
На самом деле раньше производительность была 0.7 сек, она сильно упала после переписывания девайса памяти под пентагон. В чем причина еще не разбирался. На стареньком одноядерном тазике 1.5 сек, т.е. 330 FPS
Unreal конечно быстрей, кто бы спорил, но я бы не сказал что на много. По загрузке процессора разница раза в два-три, но у дотнета произоводитлеьности вполне достаточно. Учитывая мощности современных процов, заморачиваться на это нет смысла. Тем более что критичный код никто не мешает переписать на си. Пока в этом необходимости нет - скорость достаточная. Зато плюс - удобство, простота.
Под XP с дотнет 20 метров весит, ставится без проблем. Удививляюсь как ты до сих пор без него живешь, т.к. очень много софта идет под него.
Похоже, какой-нить типа 1.x у меня стоит. И всем все хватает. А зачем тебе под 2 писать? Что-то такого нет, чего есть в 2.0?
Не, не хочу загружать систему всякой бякой пока что.
Ой, вот бяка посвежее (4.0) :) - http://www.microsoft.com/downloads/ru-ru/details.aspx?familyid=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=ru
Похоже, какой-нить типа 1.x у меня стоит. И всем все хватает.
1-й это что-то типа блина комом, много недоработок, несовместимостей и проблем с ним. Для него есть сервис пак, но он всех проблем не устраняет. Второй - это уже полноценный вариант. Последующие версии можно в какой-то степени рассматривать как расширения второго.
Мой совет - снести 1 и поставить второй. Первый это мусор, сколько с ним проблем было ты даже не представляешь себе, как вспомню - до сих пор коробит :)
А зачем тебе под 2 писать? Что-то такого нет, чего есть в 2.0?
если не учитывать проблем первого фреймворка, то не хватает прежде всего дженериков (аналог шаблонов в C++), которые появились только во втором фреймворке. Это серьезно влияет на производительность и на удобство работы с коллекциями.
Жалко, что эмуль под .NET. Не охота ставить всякие довески.
Если не плющит, начиная с XP SP3 это вроде как компонент системы, тупо можно доставить из компонентов
У меня он на компе гарантировано оказывался после установки полного комплекта ATI дров, с каталистом
---------- Post added at 17:48 ---------- Previous post was at 17:45 ----------
А зачем тебе под 2 писать? Что-то такого нет, чего есть в 2.0?
Кстати очень адекватное сравнение, почему не сидишь под Win98 чего нет из того что есть в XP?
---------- Post added at 17:51 ---------- Previous post was at 17:48 ----------
Можешь это проверить?
Не, я профи незнаю, как по мне это не спектрум, а cp/m компутер с возможностью эмулить спектрум :)
Кстати очень адекватное сравнение, почему не сидишь под Win98 чего нет из того что есть в XP?
Разумеется есть. Совершенно другое ядро и система в целом.
Кроме того лично я .NET'ом вообще не пользуюсь. А те программы, которые ползьзуются (но я об этом не знаю), им хватает того, что есть в SP3, очевидно.
---------- Post added at 18:53 ---------- Previous post was at 18:52 ----------
если не учитывать проблем первого фреймворка, то не хватает прежде всего дженериков (аналог шаблонов в C++), которые появились только во втором фреймворке. Это серьезно влияет на производительность и на удобство работы с коллекциями.
Я сам по себе не очень люблю плюсы и всякое ООП, в своих программах стараюсь вообще это не использовать, кроме взаимодействия с системой. Пишу почти на чистом си.
У меня он на компе гарантировано оказывался после установки полного комплекта ATI дров, с каталистом[COLOR="Silver"]
кстати да, у ATI дров гуй на дотнете написан, поэтому если в системе стоит ATI карта, то дотнет будет установлен вместе с дровами на видуху :)
Вообще эта тема сильно попахивает холиваром, поэтому обсуждение дотнета vs C++ лучше в отдельную ветку вынести. И сразу могу сказать что C++ эту битву проиграет :D В том числе и по скорости :) У C++ плюс в скорости обработки больших массивов данных, но даже в такой ситуации никто не мешает реализовать эту процедуру на си и вызвать ее из дотнета.
отличная информация, спасибо!
ты там фантазию от реального железа не отличишь. Порты кая лучше в анриле смотреть, надо только будет Дезсофту сноски на косяки эмуляции кая, мож поправит
У C++ плюс в скорости обработки больших массивов данных, но даже в такой ситуации никто не мешает реализовать эту процедуру на си и вызвать ее из дотнета.
Уточни про большие массивы данных)
Разумеется есть. Совершенно другое ядро и система в целом.[COLOR="Silver"]
то-же самое можно сказать и о втором фреймворке по сравнению с первым ;)
Black_Cat
21.09.2011, 19:11
1) При сбросе включается shadow ROM, отключается как только чтение инструкции (M1) произойдет из области 0x4000-0xFFFF (такое поведение было реализовано в первом ZXMAK методом подбора, т.к. информация о ральном железе отсутствовала).не слышал о таком..
Вот те инфа по разбитовке Профи, а дешифрацию возьмёшьв "Путеводителе":
--------------------------------------------------------------------------------
#DFFD/57341 Profi EXPANDED MEMORY PORT
--------------------------------------------------------------------------------
D0 #DEFD(X) D0 CPU3/1 A17'(7,D)
D1 CPU3/1 A18'(7,D)
D2 CPU3/1 A19'(7,D)
D1 #DEFD(X) D3 WinPagSel:(7,D)
0-CPU3 paging, RAM5>CPU1
1-CPU1 paging, RAM7>CPU3
D2 #DEFD(X) D4 1-blkD5#7FFD & RAM0>CPU0(7,D)
D5 Device modify mode:0-ZX,1-CP/M(7,D)
D5|D4#7FFD
D3 #DDFD(X) 0| x IOTRDOS&TRDOSROM or IOZX-on
1| 0 IOTRDOS-on,IOZX&TRDOSROM-off
1| 1 IOZX-on,IOTRDOS&TRDOSROM-off
D4 #DDFD(X)
D6 Scrn mode:0-ZX,1-CP/M(7,D)
D6|D3#7FFD
0| 0 ScrnRAM5>CPU1,RAM2>CPU2
D5 #DDFD(X) 0| 1 ScrnRAM7>CPU1,RAM2>CPU2
1| 0 ScrnRAM4+AtrRAM56>CPU2
1| 1 ScrnRAM6+AtrRAM58>CPU2
D6 #DDFD(X) D7 Video mode:0-ZX,1-CP/M
D7|D5#7FFD
0| x 256x192 ZX(7,D)
1| 0 512x240 CP/M(7,D)
D7 #DDFD(X) 1| 1 512x240 CP/M(7,D)wrShadowPal(D)
--------------------------------------------------------------------------------
Уточни про большие массивы данных)
ну как пример обработка потоков - сжатие, кодирование, то-же микширование аудио буфферов, тут дотнет конечно блекнет, однако еще раз повторю - отлаженный код совсем несложно скомпилить в си и вызывать из дотнета.
---------- Post added at 18:15 ---------- Previous post was at 18:11 ----------
не слышал о таком..
Вот те инфа по разбитовке Профи
ок, если коротко - чем в PROFI управлялось включение shadow rom? той что с загрузчиком CP/M, тестами и т.п.
На беглый взгляд, порт DFFD так и реализован, неясность только с битами D4 и D5...
По поводу gdb на сокете (http://www.embecosm.com/appnotes/ean4/embecosm-howto-rsp-server-ean4-issue-2.pdf)
Code::Blocks умеет по tcp работать с gdb, я давно эту тему мурыжил нюансов не помню, надо перечитать все, но вроде sdcc все что надо для gdb предоставляет
Black_Cat
21.09.2011, 19:24
чем в PROFI управлялось включение shadow rom? той что с загрузчиком CP/M, тестами и т.п.о shadow rom в Профи не слышал, а откуда инфа, что там что-то есть?
о shadow rom в Профи не слышал, а откуда инфа, что там что-то есть?
а это что?
http://s08.radikal.ru/i181/1109/07/046ba73b4bb9.jpg
Black_Cat
21.09.2011, 19:44
Т.е. это меню выскакивает при старте, и размещается в теневой странице.. ладно, попытаю владельцев Профи, чё там за тесты..
Т.е. это меню выскакивает при старте
Если включить это меню. Можно его и проскочить, т.е. начать сразу с TR-Dos или вывалится вообще в бейсик.
чё там за тесты..
Разные. Памяти вроде 2 штуки (быстрый и полный), клавиатуры. CP/M работает только с этого меню.
Black_Cat
21.09.2011, 19:51
Если включить это менючто это значит, разве меню выскакивает не автоматом всегда?
Т.е. это меню выскакивает при старте, и размещается в теневой странице.. ладно, попытаю владельцев Профи, чё там за тесты..
я не уверен что оно на реале при старте запускается, я до него добрался случайно - решил попробовать выполнить код который был образе ПЗУ, потом методом подбора установил что код расчитывает что ПЗУ будет держаться до тех пор пока не произойдет M1 чтение из #4000-#FFFF.
Интересно как оно на самом деле :) Информации по этому к сожалению не нашел...
Black_Cat
21.09.2011, 19:54
я не уверен что оно на реале при старте запускается, я до него добрался случайно - решил попробовать выполнить код который был образе ПЗУ, потом методом подбора установил что код расчитывает что ПЗУ будет держаться до тех пор пока управление не произойдет M1 чтение из #4000-#FFFF.
Интересно как оно на самом деле Информации по этому к сожалению не нашел...ну на Пенте Глюкосервис так же запускается :)
что это значит, разве меню выскакивает не автоматом всегда?
Всегда, если включено. Но можно и выключить. На нижней плате левая кнопка включена, на верхней правая выключена (она будет над средней нижней платы). И вот уже эта менюшка не вылезает, а грузишь прямо TR-Dos.
ну как пример обработка потоков - сжатие, кодирование, то-же микширование аудио буфферов, тут дотнет конечно блекнет, однако еще раз повторю - отлаженный код совсем несложно скомпилить в си и вызывать из дотнета.
Странно, чего же это он меркнет? Я просто с ним не знаком, вот и интересуюсь.
---------- Post added at 19:59 ---------- Previous post was at 19:58 ----------
то-же самое можно сказать и о втором фреймворке по сравнению с первым ;)
За одним исключением - дотнет мне пока особо не нужен, а без винды никуда)
Вообщем расклад клавиш в Профи похоже такой.
Нижняя плата:
Левая кнопка - если отключена, то задействована вся память (вот как раз со всякими тестами). Включил её - тесты отвалились.
Средняя кнопка (не фиксируется) - это ресет.
Правая кнопка - турбо-режим.
Верхняя плата:
Левая кнопка (не фиксируется) - magic.
Правая кнопка - тут я х.з. Если отжата, то диск сам заработает (ничего набирать не надо), если нажата, то вывалишься меню, как на Пентагоне.
Вот я и разыгрываю с этими крайними клавишами, как мне удобнее.
Вообщем расклад клавиш в Профи похоже такой.
Нижняя плата:
Левая кнопка - если отключена, то задействована вся память (вот как раз со всякими тестами). Включил её - тесты отвалились.
Правая кнопка - тут я х.з. Если отжата, то диск сам заработает (ничего набирать не надо), если нажата, то вывалишься меню, как на Пентагоне.
насчет вот этой правой кнопки - что будет если она отжата когда левая на нижней плате отключена? аналогчино что будт если она нажата в такой-же конфигурации?
насчет вот этой правой кнопки - что будет если она отжата когда левая на нижней плате отключена? аналогчино что будт если она нажата в такой-же конфигурации?
Итак. 1 - это левая кнопка на нижней плате. 2 - правая на верхней.
1 - отжата, 2 - нажата - входим в режим тестов
1 - нажата, 2 - нажата - автоматически запускается дисковод (была-бы дискета, он её бы загрузил)
1 - нажата, 2 - отжата - вываливается в меню 128к
1 - отжата, 2 - отжата - то-же самое, меню 128к (хотя вроде должно быть вообще 1982 и т.д.)
Странно, чего же это он меркнет? Я просто с ним не знаком, вот и интересуюсь.
потому что .NET - это тоже сама по себе виртуальная машина. Как Java, только от майкрософта, и не такая кроссплатформенная.
А при работе с массивами там одни только проверки на тип значения и на невыход за границы массива сжирают половину производительности.
Т.е. код получается не особо быстрый, зато писать его одно удовольствие. По мне так C# - самый удобный язык из компилируемых.
1 - нажата, 2 - отжата - вываливается в меню 128к
эта комбинация както нелогично сюда вписывается, по идее тут должно было сбросится в TRDOS...
эта комбинация както нелогично сюда вписывается, по идее тут должно было сбросится в TRDOS...
Атоматом в TR-Dos только если две кнопки нажаты. Это точно.
А при работе с массивами там одни только проверки на тип значения и на невыход за границы массива сжирают половину производительности.
Т.е. код получается не особо быстрый, зато писать его одно удовольствие. По мне так C# - самый удобный язык из компилируемых.
все верно, при обработке больших массивов проверки на выход индекса за пределы массива и т.п. съедают часть производительности. С одной стороны это гарантирует что приложение не закрешится и в случае ошибки проинформирует где и что произошло. Но с другой стороны снижает производительность.
Тем не менее дотнет не везде медленее чем C++, в задачах где требуется активное выделение памяти дотнет будет работать быстрее чем C++ за счет особенностей выделения памяти :) Поэтому оптимальный вариант - писать код на дотнете, а при необходимости выносить критичные к производительности участки в unmanaged код. До последнего дело редко доходит, т.к. мощность процессоров сейчас довольно большая и к тому-же растет...
по идее тут должно было сбросится в TRDOS...
Судя по схеме эта кнопка переключает в какое состояние DOS будет по сбросу, то есть что бы попасть в сервисную страницу надо DOS активным делать.
По поводу gdb на сокете (http://www.embecosm.com/appnotes/ean4/embecosm-howto-rsp-server-ean4-issue-2.pdf)
Code::Blocks умеет по tcp работать с gdb, я давно эту тему мурыжил нюансов не помню, надо перечитать все, но вроде sdcc все что надо для gdb предоставляет
меня в доках на протокол смущают места в духе
"4.7.6.2. Writing All Registers
The register data follows the G as a stream of hexadecimal digits for each register in GDB register order"
То есть подразумевается, что сам gdb имеет представление о том, что за процессор у отлаживаемой стороны. А поддержки z80 в gdb нет.
стал смотреть файл от Black_Cat, ничего не понял.
Например на каждом клоне своя дешифрация порта #7FFD. А в таблице все в кучу перемешано...
Начнем с простого:
1) PROFI+: какие маска/значение используются для дешифрации портов #7FFD и #DFFD на PROFI+?
2) KAY: какие маска/значение используются для дешифрации портов #7FFD и #1FFD?
А поддержки z80 в gdb нет
Ну вроде как есть (https://github.com/legumbre/gdb-z80)
---------- Post added at 22:25 ---------- Previous post was at 21:51 ----------
По поводу эмуляции, допустим берем порт FE
у него должен быть параметр как он дешифрируется, у разных компов по разному, нада еще логика iorqge, к примеру в кае выбор FE каралечный, условия выбора: не выбран AY8910, чтение из порта io, не активен DOS, A0=0, неактивен iorqe
кемстон еще коралечней, там A0=1
Т.е надо что бы можно было задавать порядок отработки делегатов, и ввести сигнал iorqe, который (если используется платформа с этой логикой) должен учитываться обработчиками чтения из портов
Тем не менее дотнет не везде медленее чем C++, в задачах где требуется активное выделение памяти дотнет будет работать быстрее чем C++ за счет особенностей выделения памяти :)
Вот это уж совсем сомнительно.
Вот это уж совсем сомнительно.
.NET при выделении не ищет кусок памяти подходящего размера, а выделяет кусок всегда в конце, так что выделение происходит мгновенно (ну потери на инициализацию, дотнет всегда инициализирует к минимум значением по умолчанию), фрагментация и пустых кусков не возникает, работает сборщик мусора с поколениями, очень оптимизирован, для разных поколений принята своя политика сборки.
.NET при выделении не ищет кусок памяти подходящего размера, а выделяет кусок всегда в конце, так что выделение происходит мгновенно.
И в си все прекрасно выделяется и быстро.
И в си все прекрасно выделяется и быстро.
http://www.rsdn.ru/article/dotnet/GCnet.xml в 4 версии сборщик пережил серьезный пересмотр, но и в этой статье достаточно наглядно
Вот это уж совсем сомнительно.
когда встречаешь чтото впервые всегда сомнительно. Этот момент уже неоднократно обжевывался со всех сторон, можешь на RSDN топик поискать :v2_wink2:
Ну вроде как есть (https://github.com/legumbre/gdb-z80)[COLOR="Silver"]
собралось
и даже qemu-z80 собрался
осталось отснифать детали протокола, и готово!
когда встречаешь чтото впервые всегда сомнительно. Этот момент уже неоднократно обжевывался со всех сторон, можешь на RSDN топик поискать :v2_wink2:
Посмотрим.
Впрочем, для меня постоянное выделение памяти не актуально. Баз данных я не пишу. А все, что надо, выделяется один раз. Или изредка.
По поводу эмуляции, допустим берем порт FE
у него должен быть параметр как он дешифрируется, у разных компов по разному, нада еще логика iorqge, к примеру в кае выбор FE каралечный, условия выбора: не выбран AY8910, чтение из порта io, не активен DOS, A0=0, неактивен iorqe
кемстон еще коралечней, там A0=1
Т.е надо что бы можно было задавать порядок отработки делегатов, и ввести сигнал iorqe, который (если используется платформа с этой логикой) должен учитываться обработчиками чтения из портов
IORQ - это сигнал обращения к портам ввода/вывода и подтверждения запроса не прерывание. Если активен при активном RD или WR, то означает доступ к портам. В противном случае означает подтверждение прерывания в цикле M1. Активный уровень IORQ - 0. Так что тут все в порядке.
А вот условия выбора при неактивном AY и DOS - это конечно сложней. Сейчас приоритет вызова выше у девайсов находящихся в списке ближе к началу. ULA всегда имеет максимальный приоритет, Memory всегда минимальный, остальные сортируются в алфавитном порядке по имени :). Т.е. получается девайсы должны быть завязаны друг на друга, это плохо.
PS: Снижение производительности памяти устранил, заключалась она в вызове UpdateMapping на каждое обращение к памяти из-за установки SEL_TRDOS из BetaDiskInterface. Производительность повысилась на 10%
IORQ - это сигнал обращения к портам ввода/вывода и подтверждения запроса не прерывание.
Не, с некоторых слотовых машинах есть сигнал IORQGE, формируется он так
На первый слот идет IORQ от процессора, если там стоит устройство которое отозвалось на адрес порта оно выставляет в своем слоте сигнал IORQG который блокирует прохождение IORQ во второй слот, и так далее по колву слотов, на данный момент максимальное кво слотов 4, выход с последнего слота идет в мать и там юзается для выбора внутренних устройств. То есть если на слоте отозвалось устройство у которого A0=0 то чтение из порта FE блокируется.
Такое поведение не во всех слотовых машинах, и его нет в неслотовых.
---------- Post added at 06:34 ---------- Previous post was at 06:31 ----------
И еще IBusDevice.BusInit вызывется 2 раза это правильно?
Ситуация такая
Запускаю эмуль, жму Tools->Options
В окне ничего не меняю жму отмена, получаю в логе
Warning 06:54:03.294 device ctor
Warning 06:54:03.426 device bus init
Warning 06:54:03.489 device bus connect
Warning 06:54:07.209 device ctor
Warning 06:54:07.347 device bus init
Warning 06:54:07.547 device bus connect
Warning 06:54:07.554 device bus disconnect
Warning 06:54:13.846 device bus disconnect
Код
public class Device : IBusDevice
{
Log _logger;
public Device()
{
_logger = Logger.GetLogger();
_logger.LogWarning("device ctor");
}
public void BusConnect()
{
_logger.LogWarning("device bus connect");
}
public void BusDisconnect()
{
_logger.LogWarning("device bus disconnect");
}
public void BusInit(IBusManager bmgr)
{
_logger.LogWarning("device bus init");
........
}
...........
}
Cвежая версия 214:
- на 10% улучшена производительность памяти (UpdateMapping)
- новые опции установки размера окна: x3, x4
- мелкие доработки для обработки ошибок в некорректных девайсах
- для удобочитаемости объект UlaPentagonCropped перименован в UlaPentagonCrop (из за этого старый конфиг машины работать не будет - нужно его либо грохнуть, либо добавить новый девайс ULA, после этого не забыть нажать F9 - Run)
- исправлена ошибка эмуляции R в undocumented инструкциях BIT x,(IX+drel) (спасибо [bETA]mEN)
- добавлено устройство-заглушка Kempston Joystick (пока эмулирует только порт, реальный джойстик не читает)
- скорректирована дешифрация портов для устройства CMOS
---------- Post added at 10:25 ---------- Previous post was at 10:21 ----------
Не, с некоторых слотовых машинах есть сигнал IORQGE, формируется он так
На первый слот идет IORQ от процессора, если там стоит устройство которое отозвалось на адрес порта оно выставляет в своем слоте сигнал IORQG который блокирует прохождение IORQ во второй слот, и так далее по колву слотов, на данный момент максимальное кво слотов 4, выход с последнего слота идет в мать и там юзается для выбора внутренних устройств. То есть если на слоте отозвалось устройство у которого A0=0 то чтение из порта FE блокируется.
теперь понял, нужно будет что-то типа приоритетов для девайсов соорудить на базе такой логики. При реализации Kempston Joystick уже столкнулся :)
[/COLOR]И еще IBusDevice.BusInit вызывется 2 раза это правильно?
все правильно, окно настроек создает отдельный BusManager-песочницу, в которой и производит изменения, если все ок, тогда конфиг сериализуется и десериализуется в основном BusManager'е
BusManager-песочницу
А можно в bmrg признак вставить что это песочница?
А можно в bmrg признак вставить что это песочница?
ок, добавлю, чтоб не грузить большие файлы?
чтоб не грузить большие файлы?
ну да, и что бы не хватать по 2 раза unmanaged ресурсы, и не падать на исключительно заблокированых.
Black_Cat
22.09.2011, 14:47
А в таблице все в кучу перемешано...в верху путеводителя по таблице смотришь какой цифрой или буквой обозначен искомый клон, и дальше смотришь дешифрацию для данного клона, который обозначен цифрой в скобках
Cвежая версия 215:
- интерфес девайса изменен, реализована схема IORQGE, девайсы которые выше в списке имеют больший приоритет;
- переписаны объекты памяти и ULA, ULA теперь слушает только порт #FE. Переключение видеостраниц производится в Memory
- в целях оптимизации cpuTact теперь не передается в обработчики шины, кому нужно могут взять из cpu.Tact (+5%)
Свежая версия 216:
- Исправлен тайминг BIT X,(IX+drel), нарушенный при починке этой команды в версии 214. Баг сильно влиял на мультиколор в ZX Time. (спасибо [bETA]mEN)
версию 215 удалил
Свежая версия 217:
- удалена блокировка шины AY'ком, т.к. это блокировало порт PROFI #DFFD
- добавлено сохранение размеров окна в реестр
- небольшие оптимизации памяти
Хочу реализовать ULA для оригинального спектрума с contended memory и snow effect, бордюрный мультиколор работает, а вот аттрибутный никак не хочет :)
Сделал ревизию всему коду Z80 на предмет таймингов, все вроде верно, но аттрибутный мультиколор плывет. Кто-то знает как работает contended memory?
Пробовал анализировать спектакулятор, получается какая-то ерунда, например инструкция ADD A,(IX+0):
- код DD8600,
- время выполнения инструкции 19T (4, 4, 3, 5, 3)
Выполняю ее на такте 14362 (начало contended области судя по поведению), вычисления по шагам:
4T: 14362 + 4 + 6 -> 14372 (задержка 6T на чтении опкода DD)
4T: 14372 + 4 + 4 -> 14380 (задержка 4T на чтении опкода 86)
3T: 14380 + 3 + 4 -> 14387 (задержка 4T на чтении опкода 00)
5T: 14387 + 5 -> 14392 (задержки нет, т.к. IX смотрит на C000, которая не contended)
3T: 14392 + 3 -> 14395 (задержки нет, т.к. к памяти не обращаемся)
в спектакуляторе-же получается 14412! Для такого значения нужны задержки в 7T! Откуда???
Это ошибка тайминга спектакулятора или я не понял идею contended memory?
С опкодом DD00 на такте 14362 вообще бред - в спктакуляторе DD съедает 0 тактов, а 00 целых 18 тактов! Откуда???
2) И еще вопросик - SjAsm позволяет компилить короткие фрагменты, без директив и т.п.? Думаю вставить, чтобы было удобно отлаживать :)
[bETA]mEN
24.09.2011, 21:12
Пробовал анализировать спектакулятор
А зачем реверсить спектакулятор, кода есть эмуляторы с открытым исходным кодом, в которых реализованы "родные" машины. Например fuse http://fuse-emulator.sourceforge.net/#Source
как выяснилось, все немного сложней - задержки добавляются не только при доступе к памяти и IO, но также еще на дополнительных внутренних циклах внутри инструкций
Code::Blocks умеет по tcp работать с gdb, я давно эту тему мурыжил нюансов не помню, надо перечитать все, но вроде sdcc все что надо для gdb предоставляет
Как оказалось не предоставляет. У него какой-то свой формат отладочных символов, совместимый только с собственным отладчиком sdcdb. Причем sdcdb кроме mcs51 больше ничего отлаживать не умеет.
gdb-z80 поддерживает только COFF. Надо конвертилку писать.
---------- Post added at 19:22 ---------- Previous post was at 17:47 ----------
Все, дописал свой z80-gdbserver. Ассемблер позволяет отлаживать в полном объеме (бряки на выполнение, чтение/запись памяти, пошаговое выполнение, чтение регистров). Использует Z80CPU из ZXMAK2.EXE.
http://github.com/atsidaev/z80gdbserver
Всё, что требуется от эмулятора - это реализовать интерфейс
public interface IEmulator
{
Z80CPU GetCPU();
void Pause();
void Run();
void SetBreakpoint(Breakpoint.BreakpointType type, ushort addr);
void RemoveBreakpoint(Breakpoint.BreakpointType type, ushort addr);
event Breakpoint.BreakPointEventHandler OnBreakpoint;
}
так что реализовать его в виде плагина проще простого.
Осталось запилить поддержку отладочной информации sdcc, и можно будет удобно отлаживать любой сишный (а в перспективе и любой, для которого есть компилятор) код.
Свежая версия 220:
- добавлен сдвиг видеотаблиц в базовом классе ULA (если коротко - теперь прерывание всегда начинается с 0-го такта)
- проведена полная ревизия кода Z80 на предмет таймингов доступа к памяти/портам, все приведено к единой системе обработчики шины вызываются теперь в начале цикла записи/чтения. Поэтому нужно прибавлять несколько тактов если нужно знать точное время обращения (запись/чтение идет 3 такта на реальном железе)
- исправлены ошибки последовательнотей таймингов внутри машинных циклов Z80 (тайминги внутри инструкции)
- добавлен калькулятор таймингов, теперь в отладчике отображаются тайминги инструкций (для текущего состояния регисторов)
- UlaScorpion теперь сама отлавливает M1 и INT_M1 события, соответственно лишний флаг в интерфейсе IUlaDevice удален
- применение настроек видео когда выполнение приостановлено
- исправлено сохранение в Z80 snapshot (не сохранялся старший бит регистра R)
- исправлено поведение инструкции HALT (важно для ULA с contended memory)
- исправлен баг отладчика с точкой останова на HALT
- исправлена последовательность вызовов BeginFrame/EndFrame у девайсов (раньше начиналась с EndFrame)
- доработан базовый класс ULA, для лучшей поддержки схем со смещенным INT'ом
- скорректирована дешифрация портов AY8910, теперь работает как в оригинальном Spectrum 128 (0xC002=0xC000 и 0xC002=0x8000)
- скорректирована дешифрация портов Kempston Joystick, теперь работает как в оригинальном Spectrum 128 (0xE0=0x00)
- добавлен девайс ULA для оригинального ZX Spectrum 128, теперь можно смотреть мультиколорные демки заточенные под оригинальный спектрум с contended memory!
Последнее, вобщемто можно считать ключевым моментом всего обновления - теперь эмулируется ULA с contended memory! Повозиться пришлось немало, особенно с задержками для портов, ох и жесткая система - просто капец! Даже не думал что задержки для портов по такой сложной системе строятся :) Порт #FE все еще может давать отклонения в задержке (было замечено занижение на 1T)
Скриншот мультиколорной демки на contended memory :v2_thumb::
http://zx.pk.ru/attachment.php?attachmentid=29451&stc=1&d=1316991324
Верхняя бегущая строка полностью на бордюре! плюс динамичный мультиколор над горой :) И это все на contended memory! Круто... :)
Все, дописал свой z80-gdbserver. Ассемблер позволяет отлаживать в полном объеме (бряки на выполнение, чтение/запись памяти, пошаговое выполнение, чтение регистров). Использует Z80CPU из ZXMAK2.EXE.
http://github.com/atsidaev/z80gdbserver
Всё, что требуется от эмулятора - это реализовать интерфейс
отлично! Окей, добавлю, в эмуляторе вобщемто уже сейчас используется такой интерфейс для отладчика:
public interface IDebuggable
{
void DoReset();
void DoStepInto();
void DoStepOver();
void DoRun();
void DoStop();
byte ReadMemory(ushort addr);
void WriteMemory(ushort addr, byte value);
void AddBreakpoint(ushort addr);
void RemoveBreakpoint(ushort addr);
ushort[] GetBreakpointList();
bool CheckBreakpoint(ushort addr);
void ClearBreakpoints();
event EventHandler UpdateState;
event EventHandler Breakpoint;
bool IsRunning { get; }
Z80CPU CPU { get; }
int GetFrameTact();
int FrameTactCount { get; }
}
осталось его причесать и сделать доступным для плагинов :)
в эмуляторе вобщемто уже сейчас используется такой интерфейс для отладчика
о, так все, что надо уже есть :)
разве что брейкпоинтов на чтение/запись памяти не хватает
о, так все, что надо уже есть :)
разве что брейкпоинтов на чтение/запись памяти не хватает
вот приделал пробную поддержку отладчиков, реализуется как обычный девайс, наследующий интерфейс IJtagDevice. При добавлении такого девайса на шину встроенный отладчик отключается.
Из обработчиков шины делать вызовы к IDebuggable не рекомендуется, т.к. может возникнуть зацикливание с зависанием или переполнением стека :)
реализация IDebuggable сейчас немного глючная, например брейкпоинт на резет во время работы не словит (точнее словит, но тут-же опять запустит выполнение) и дергать сильно резво не рекомендуется - плохая синхронизация потоков, позже допилю :)
Кстати StepOver может выкинуть диалог, если выполнение сильно долго происходит. Нужно будет переписать код чтобы все только на брейкпоинтах работало
Сабж сохранять видео умеет? А поток scr? Скриптование будет?
---------- Post added at 13:59 ---------- Previous post was at 13:52 ----------
А еще жутко не хватает записи видео в GIF.
Сабж сохранять видео умеет? А поток scr?
А еще жутко не хватает записи видео в GIF.
можно сделать девайс который будет производить видеозахват и сохранять в файл, если таковой указан через зарегистрированный девайсом сериалайзер.
Проблем с этим возникнуть не должно, у девайса есть возможность подписаться на событие EndFrame, по которому он может взять у девайса ULA битмапку с кадром. ULA девайсы реализуют метод сохраняющий текущий SCR образ в предоставленный Stream, поэтому с потоком SCR тоже проблем нет.
Скриптование будет?
можно попробовать реализовать с помощью девайса, правда есть проблема с блокировкой устройств на время проигрывания скрипта
Но пока что в планах более приоритетные задачи:
1) исправить обработку contended ports для оригинального ULA Spectrum 128
2) реализовать ULA Spectrum 48
3) отрефакторить реализацию IDebuggable для отладчиков
4) отрефакторить нагромождение кода основной формы и в классе VirtualMachine
5) добавить девайс General Sound
6) добавить встроенный ассемблер
сохранять в файл, если таковой указан через зарегистрированный девайсом сериалайзер.
Проблем с этим возникнуть не должно, у девайса есть возможность подписаться на событие EndFrame
Переведи это все на русский язык?
Все, дописал свой z80-gdbserver. Ассемблер позволяет отлаживать в полном объеме (бряки на выполнение, чтение/запись памяти, пошаговое выполнение, чтение регистров). Использует Z80CPU из ZXMAK2.EXE.
http://github.com/atsidaev/z80gdbserver
начиная текущей версии 220 в Z80CPU есть новые новые обработчики - RDNOMREQ и WRNOMREQ, INTACK_M1 и NMIACK_M1, их наличие обязательно, нужно добавить пустые обработчики иначе будет NullReferenceException.
У меня вопрос - чем можно подключиться к gdb серверу из под Windows? :v2_conf2:
---------- Post added at 15:07 ---------- Previous post was at 15:05 ----------
Переведи это все на русский язык?
для этого нужно реализовать плагин-устройство захвата, который будет делать то что я написал
для этого нужно реализовать плагин-устройство захвата
Как создаются плагины?
начиная текущей версии 220 в Z80CPU есть новые новые обработчики - RDNOMREQ и WRNOMREQ, INTACK_M1 и NMIACK_M1, их наличие обязательно, нужно добавить пустые обработчики иначе будет NullReferenceException.
ну это уже не актуально, раз есть интерфейс к настоящему эмулятору :) прочие дела разгребу и сделаю плагин
У меня вопрос - чем можно подключиться к gdb серверу из под Windows?
попробую клиента под cygwin собрать
[bETA]mEN
27.09.2011, 19:44
Как создаются плагины?
в архиве с эмулятором в папке Plugins есть пример IO_TEST
mEN;418887]в архиве с эмулятором в папке Plugins есть пример IO_TEST
То есть плагины можно писать только на С# и под NET?
То есть плагины можно писать только на С# и под NET?
писать можешь на любом языке компилирующемся в дотнет код, т.е. по сути на любом, хотя на C# имхо будет проще.
Сам плагин только дотнет, но ничего не ограничивает тебя вызывать из плагина любой код, в том числе и на чистом ASMx86.
Microsoft предоставляет бесплатную Visual Studio Express. Она включает фактически все пряники. Включая удобный редактор с highlighting и intellisense и лучший отладчик для дотнет кода
Для компиляции прилагаемого примера наличие VS не требуется, достаточно голой системы Windows Vista/Seven, для XP нужно установить .NET Framework. Если видеокарта ATI, то фреймворк вместе с дровами ставится.
Visual Studio Express
И даром эти гигабайты мусора не нужны.
писать можешь на любом языке компилирующемся в дотнет код, т.е. по сути на любом
Это как? Можно списочек языков?
---------- Post added at 21:51 ---------- Previous post was at 21:48 ----------
Вот у меня есть PureBasic - расскажи как его скомпилировать в ваш расчудестный байт код? И как все это соотносится с DLL? (которая лежит в папке примера)
И даром эти гигабайты мусора не нужны.
Ищи дальше отговорки, хош пародию но 30 метров бери #Develop
И даром эти гигабайты мусора не нужны.Техника в руках дикаря - груда металлолома :)
вот приделал пробную поддержку отладчиков, реализуется как обычный девайс, наследующий интерфейс IJtagDevice. При добавлении такого девайса на шину встроенный отладчик отключается.
портировался - сорцы (https://github.com/atsidaev/z80gdbserver/tree/plugin) бинарник плагина (http://dl.dropbox.com/u/4166599/zx/z80gdbserver.dll)
gdb-z80 под cygwin - http://dl.dropbox.com/u/4166599/zx/gdb-z80.zip
ну и пример работы (http://dl.dropbox.com/u/4166599/zx/example.gif) (ставим бряк на 9С40, ловим его отладчиком, записываем RET в (PC) и радуемся :)
кроме тех команд, что на картинке, работает еще stepi - пошаговое исполнение. Доступ к регистрам через print $de или set $bc=0xFFFF тоже работает.
код пока что специфический - например, Process.Kill() в Detach, решающий все проблемы с не неприбитыми потоками :D сделаю нормальней, как время будет
---------- Post added at 02:56 ---------- Previous post was at 02:46 ----------
Это как? Можно списочек языков?
http://ru.wikipedia.org/wiki/Список_.NET-языков (http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_.NET-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2)
Обновил до 222:
- fix multicolor for Spectrum 128 ULA (SHOCK MEGADEMO, DOE, THERE, etc)
- added tape window
- external debugger support (IJtagDevice)
с contended памятью теперь похоже ок, а вот задержки обращения к портам до конца добить пока не получилось - кое где бывает вылазят лишние.
---------- Post added at 01:15 ---------- Previous post was at 01:14 ----------
Техника в руках дикаря - груда металлолома :)
:D:v2_thumb:
портировался - сорцы (https://github.com/atsidaev/z80gdbserver/tree/plugin) бинарник плагина (http://dl.dropbox.com/u/4166599/zx/z80gdbserver.dll)
public void Attach(IDebuggable dbg)
{
this.emulator = dbg;
dbg.AddBreakpoint(0x9c40);
dbg.Breakpoint += new EventHandler(this.OnBreakpoint);
this.server = new GDBNetworkServer(dbg);
}
:v2_wink2:
public void Attach(IDebuggable dbg)
{
this.emulator = dbg;
dbg.AddBreakpoint(0x9c40);
dbg.Breakpoint += new EventHandler(this.OnBreakpoint);
this.server = new GDBNetworkServer(dbg);
}
:v2_wink2:
лол, забыл убрать :)
--
пофиксил
Обновил до версии 223:
- little fix multicolor on Spectrum 128 ULA
- added SZX serializer, load and save supported (now, this is default snapshot serializer)
- little fix for Machine Setting Dialog
Теперь можно сохранять снэпшоты в SZX. При этом, в отличие от формата Z80, сохраняются флаги HALTED, BLOCKINT, регистр MW и текущий такт кадра, что удобно :)
version 224:
- добавлено быстрое чтение стандартных блоков (tape traps) из стандартного загрузчика пзу 48, остальные блоки читаются как обычно.
- небольшие изменения в IMemoryDevice интерфейсе (добавлены свойства IsRom48, IsRom128)
- улучшена поддержка SZX формата: теперь сохраняется второй регистр управления памятью (порт 1ffd/dffd, в зависимости от модели)
Latest version 230:
- new ULA device - original ZX Spectrum 48 added (now contended memory emulated for both - 48 and 128K spectrum model);
- volume control added for all sound rendering devices (there's new property Volume [allowed range 0...100] in ISoundRenderer interface);
- sanity tests added for ULA 48/128 devices;
contended memory теперь на всех мультиколорных демах эмулируется хорошо :)
Если кто-то найдет мультиколорную дему для оригинального спека с contended memory, которая отображается некорректно, кидайте сюда ссылки ;)
[bETA]mEN
01.10.2011, 01:31
Если кто-то найдет мультиколорную дему для оригинального спека с contended memory, которая отображается некорректно, кидайте сюда ссылки ;)
:v2_dizzy_mutant:
mEN;419822']:v2_dizzy_mutant:
мультиколор в MDA DEMO работает отлично :)
а вот загрузчик сбрасывается, буду смотреть в чем дело
у меня есть кассетная версия с другим загрузчиком, который работает нормально (см. аттачмент)
PS: разобрался в чем дело, у меня стояла слишком большая длительность INT для ULA оригинальных спектрумов (48T), из-за этого в защите загрузчика прерывание срабатывало два раза и приводило к сбросу :)
Загрузчик кстати прикольный, я таких еще не встречал, работает только с оригинальными ROM'ами и только на ULA 128 :)
[bETA]mEN
01.10.2011, 16:57
работает только с оригинальными ROM'ами и только на ULA 128 :)
это как-бы намекает нам, на необходимость возможности выбора ромов :v2_wink2:
Обновил до 231:
- добавлен новый ULA девайс "ZX Spectrum 48 [+Snow]" (c тестовой эмуляцией snow effect, он-же rain effect)
- подрезал немного видимые размеры экрана для фирменных ULA 48/128, в соответствии с описанием таймингов для онных;
- исправлены длительности INT для фирменных ULA (BPS2 loader from MDA DEMO, ulatest3, etc; thangs to [bETA]mEN);
- добавлен звук магнитофона (громкость регулируется через настройки как и для остальных звуковых устройств)
- небольшие изменения в обработке tape traps
- небольшие изменения в Z80CPU & BusManager - добавлено новое событиеBeforeM1. Удобно для реализации traps и т.п. Событие вызывается до RDMEM_M1 и позволяет отловить вызов и подменить PC на новое значение до чтения инструкции.
mEN;419989']это как-бы намекает нам, на необходимость возможности выбора ромов :v2_wink2:
да, уже думаю над этим, пока могу предложить альтернативный ром-пак с фирменными ромами, см. аттачмент :)
а почему в настройках нет выбора типа памяти 48к, только 128к и выше ?
а почему в настройках нет выбора типа памяти 48к, только 128к и выше ?
ну какбы 48К - это тот-же 128К, только с залоченым битом в #7ffd.
Если в менюшке 128 зайти в пункт 48 BASIC, то включится память Spectrum 48К. Поэтому я не стал городить отдельный девайс для 48К :)
Я планирую ввести отдельные ромы для каждого девайса, тогда и добавлю Spectrum 48, от 128 он будет отличаться только другим ромом и отсутствием порта #7ffd для переключения страниц.
да, но я например выбираю ula 48k, мне нужна эмуляция 48к спектрума а стартует эмулятор со 128к менюшки.
в других эмулятрах можно выбрать чтоб стартовало с 48к как положено.
можно это както поправить ?
Doronetty
01.10.2011, 21:28
Я планирую ввести отдельные ромы для каждого девайса, тогда и добавлю Spectrum 48, от 128 он будет отличаться только другим ромом и отсутствием порта #7ffd для переключения страниц.
А Профи+ (АТМ, Скорпион) планируется?! ;)
ну вот, к примеру
http://savepic.su/123868.jpg
если эту демку считать за эталон, то в 128к - все точно попадает, а вот в 48к - как то неаккуратненько, доктор :)
Далее. в прикрепленном файле бут - начинает работать и сбрасывается.
ps - на реале он вообще не работает :)) Кто проверит?
psps- похоже эмуль может архивы читать. Это явно где-то указано или я пропустил?
Спасибо, будем разбираться
Да, он изначально умел из ZIP архивов читать, правда если архив содержит несколько файлов, то читается только первый, без выбора. В дальнейшем добавлю выбор. В ZIP'ах иногда вместе с образом скриншот SCR лежит, в таких случаях бывает загружается SCR вместо самого образа :D
---------- Post added at 20:38 ---------- Previous post was at 20:35 ----------
А Профи+ (АТМ, Скорпион) планируется?! ;)
профи+ давно есть, причем не только память, но и ULA с расширенным видеорежимом. Но из-за ошибки эмуляции ВГ93 загрузка CP/M пока зависает...
Память Скорпиона и ATM тоже есть, ULA есть только для скорпиона но пока без расширенного видеорежима
с бутом сбрасываемым разобрался - он в режиме Пентагона нормально работает.
Кстати в менюшке есть опция View->Size->x1/x2/x3/x4, если ее выбрать после изменения видеорежима, то размер окна подстроится так чтобы пиксели были ровно-квадратные нужного размера ;)
У каждой ULA свое разрешение, поэтому после смены ULA девайса рекомендую выровнять размер окна, чтобы изображение лучше смотрелось :)
Можно включить опцию Smoothing (сглаживание) у девайса Display, тогда пиксели будут смотреться хорошо при любом размере окна, но будут смазаны как на телевизоре (не все такое любят).
[bETA]mEN
01.10.2011, 22:25
смазаны как на телевизоре
No.
http://slack.net/~ant/libs/ntsc.html
кстати зависает довольно часто.
http://savepic.su/98297m.jpg (http://savepic.su/98297.htm)
а вот это совсем не нормально и неожиданно, не должно зависать, в лог чтото пишет?
Если нет, я скину специальную версию с расширенным логированием, нужно это воспроизвести и узнать причину
http://savepic.su/123868.jpg
странно, Spin и Spectaculator точно также ее показывают, может она и на реальном Spectrum 48 тоже так выглядит?
Я знаю еще одну дему в которой тоже на эмуляторах везде ошибка в один байт - Shiny48.
http://zx.pk.ru/attachment.php?attachmentid=29575&d=1317495523
если эту демку считать за эталон, то в 128к - все точно попадает, а вот в 48к - как то неаккуратненько, доктор
Spin и Spectaculator точно также ее показывают, может она и на реальном Spectrum 48 тоже так выглядит?
только что проверил на реале 48кIssue4a - левый столбец сбит
только что проверил на реале 48кIssue4a - левый столбец сбит
а shiny48 можешь проверить?
Я тут немного глубже копнул мануалы и переписал алгоритм рендеринга и генератор видеотаблиц, алгоритм стал более сложный, зато ближе к реальному, скорость как это не парадоксально - немного выросла :)
На фирменных ULA заметного эффекта нет (и до этого хорошо работало), а вот на ULA Scorpion есть эффект - сбой мультиколора в деме Binary Love, присущий всем эмулям, в ZXMAK2 исчез! :) Завтра выложу новую версию
Mad Killer/PG
02.10.2011, 12:06
Так сурёзно взялся,респектище! На Винде 8 будет работать?
обновил до 232:
- серьезные изменения в алгоритме трассировки луча кинескопа, теперь мультиколор эмулируется более точно и более быстро
- улучшена эмуляция Scorpion ULA (исчезли артефакты на правом ухе в деме Binary Love (см. часть с морф-лицом), присутствующие в других эмуляторах);
- исправлен порт #FF для всех фирменных ULA девайсов (ulatest3, ulatest3mod);
---------- Post added at 11:24 ---------- Previous post was at 11:18 ----------
Так сурёзно взялся,респектище! На Винде 8 будет работать?
конечно, есть правда сомнения будет ли DirectX 9 присутствовать на восьмерке. Если нет, то можно под XNA доработать.
сколько не мучился но повесить эмулятор так и не удалось, при переключении в полно-экранный режим тоже никаких вылетов.
походу zebest, это у тебя с компом какието проблемы или виндовс старая используется, эмулятор тут ни при чём.
у меня когда-то давно было чтото подобное обновлял фреймворк.
Занавесить этот эмуль - вообще не проблемма.
при переключении в полноэкранный - вообще сбрасывается.
Может все же в скайпе продолжим?
судя по логам, какая-то проблема с DirectX или драйверами видеокарты, эмулятор падает на попытке сделать Reset у Direct3D.Device. Драйвер сообщает об ошибке "Access Violation Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
Прежде всего нужно убедиться что память в твоем компе работает без ошибок (memtest86+), затем проверить видеокарту на сбойность.
Тут проблема скорей не в эмуляторе, а в железе твоего компа или драйверах. Можно попробовать подкрутить инициализацию Direct3D, чтобы она не падала с твоими драйверами. Но для этого нужно выяснить почему драйвера твоей видеокарты дают ошибку при попытке сделать реинициализацию.
Возможно драйвер видеокарты плохо дружит с многопоточностью.
Когда вылезет такое-же окошко с кнопкой "\/ Сведения", нажми на кнопку Сведения, скопируй текст ошибки и кидай сюда, может что-то прояснится.
---------- Post added at 13:12 ---------- Previous post was at 12:54 ----------
при переключении в полноэкранный - вообще сбрасывается.
Может все же в скайпе продолжим?
сбрасывается комп? Это уже серьезный признак того что с железом что-то не так. Вероятность того что к таким последствиям приведет дотнет приложение (коим эмулятор и является) практически равна нулю.
Я в онлайне заходи.
Зачем эмуль использует Direct3D, а не DirectDraw? Ведь в эмуляторе же нет рисования 3D?
Зачем эмуль использует Direct3D, а не DirectDraw? Ведь в эмуляторе же нет рисования 3D?
DirectDraw устарел, не везде доступен и Microsoft его более не поддерживает, на Vista и Seven могут быть проблемы. Вместо него новый Direct2D, но он доступен только на системах начиная с Windows Seven или Vista SP2. С Direct3D проблем пока нет... :)
Зачем эмуль использует Direct3D, а не DirectDraw? Ведь в эмуляторе же нет рисования 3D?
так ведь DirectDraw заброшен еще начиная чуть ли не с DirectX 7
плюс при выводе 2D через Direct3D используется 3д-ускорение (DirectDraw вообще не ускорен), плюс получаем "бесплатное" масштабирование
плюс получаем "бесплатное" масштабирование
плюс бесплатные фильтры :)
[bETA]mEN
02.10.2011, 15:08
Эксперимента ради попробовал запустить эмулятор на компьютерах под управлением Windows XP Sp3.
на одном получил такое:
http://img411.imageshack_.us/img411/7/17832315.png (http://img411.imageshack_.us/i/17832315.png/)
на другом такое:
http://img153.imageshack_.us/img153/3421/76917036.png (http://img153.imageshack_.us/i/76917036.png/)
обновлял .net и directx - ошибки остались.
так ведь DirectDraw заброшен еще начиная чуть ли не с DirectX 7
плюс при выводе 2D через Direct3D используется 3д-ускорение (DirectDraw вообще не ускорен), плюс получаем "бесплатное" масштабирование
DirectDraw вроде бы использует аппаратные возможности видюхи для перброса и масштабирования 2D-изображений.
mEN;420213']Эксперимента ради попробовал запустить эмулятор на компьютерах под управлением Windows XP Sp3.
на одном получил такое:
[URL=http://img411.imageshack_.us/i/17832315.png/]
у меня на Win XP SP3 работает прекрасно, в сведениях что написано?
рядом с эмулятором должна была папка Logs появиться, что в логах?
Друзья, я же не экстрасенс, по картинке "ошибка" со скрытыми сведениями ничего узнать не могу... ;)
Покажите хотябы лог с описанием ошибки...
---------- Post added at 14:22 ---------- Previous post was at 14:21 ----------
DirectDraw вроде бы использует аппаратные возможности видюхи
он использует устаревшие возможности, возможности современных видеокарт он не использует... Проблема DirectDraw в том что это уже давно мертвая технология... И если софт на ней все еще работает, то это только в целях совместимости. В новых системах у такого софта будут проблемы.
у меня на Win XP SP3 работает прекрасно
Аналогично. Версия 232. Винда лицуха.
он использует устаревшие возможности, возможности современных видеокарт он не использует... Проблема DirectDraw в том что это уже давно мертвая технология... И если софт на ней все еще работает, то это только в целях совместимости. В новых системах у такого софта будут проблемы.
А я, как дурак, все DirectDraw использую) Как начал, свято веря, что DirectDraw - это для 2D, а Direct3D для 3D, и поэтому мне не нужен, так и использую. Даже в голову не приходило, что от него отказались)
Проверил на виртуалке, действительно есть какаято проблема с последним фреймворком - не находит файл sorttbls.nlp, необходимый по всей видмости для работы коллекций. Логгер на таких системах не запускается, т.к. использует коллекции, поэтому лог будет пустым. Почему его не хватает разбираюсь...
PS: как выяснилось есть какая-то ошибка с инсталляцией у Microsoft, лечится переустановкой фреймворков.
Обработку ошибок в следующей версии доработаю
---------- Post added at 16:49 ---------- Previous post was at 15:15 ----------
А я, как дурак, все DirectDraw использую) Как начал, свято веря, что DirectDraw - это для 2D, а Direct3D для 3D, и поэтому мне не нужен, так и использую.
Техника в руках дикаря - груда металлолома :smile:
Техника в руках дикаря - груда металлолома :smile:
Ты намекаешь, что я дикарь? Что Direct3D - металолом? Или на что?)
Ты намекаешь, что я дикарь? Что Direct3D - металолом? Или на что?)
да шучу я, DirectDraw умер и не рекомендован к использованию еще со времен DirectX 7, вот и все. Нравится использовать то что официально закрыто и будет недоступно в новых системах - используй... :v2_wink2:
[bETA]mEN
02.10.2011, 19:01
Друзья, я же не экстрасенс, по картинке "ошибка" со скрытыми сведениями ничего узнать не могу... ;)
разобрался. эти компы - ноутбуки, у которых древняя встроенная интеловская графика и direct3d там скорее не работает, чем работает :v2_dizzy_bomb:
да шучу я, DirectDraw умер и не рекомендован к использованию еще со времен DirectX 7, вот и все. Нравится использовать то что официально закрыто и будет недоступно в новых системах - используй... :v2_wink2:
Да я просто не слежу за новостями. И не подумал даже, что отказались от него)
а shiny48 можешь проверить?
скорее всего тоже будет лажа
note: for best results, choose the appropriate version for your model of Speccy. It was written in an emulator, though, so the timing in the 128k version is slightly wrong on a real speccy. I don't have a clue about the 48k version. It's a one-day party demo, what do you expect?
- gasman
обновил до 233 версии, теперь у каждого девайса Memory свои ромы (все сложены в roms.zip).
Исправлен баг сохранения в SNA снэпшот (спасибо [bETA]mEN)
Плюс улучшена обработка ошибок, чтобы было понятнее что не так :)
---------- Post added at 22:46 ---------- Previous post was at 22:20 ----------
mEN;420280']разобрался. эти компы - ноутбуки, у которых древняя встроенная интеловская графика и direct3d там скорее не работает, чем работает :v2_dizzy_bomb:
можно попробовать сделать версию использующую программный Direct3D вместо аппаратного
[bETA]mEN
03.10.2011, 00:24
можно попробовать сделать версию использующую программный Direct3D вместо аппаратного
нет смысла цепляться за совместимость с устаревшим оборудованием. прах к праху.
обновил до 234:
- load ROM pack according to mapping file
- fix Quorum Memory device
- fix Quorum ULA device
- little changes for IMemoryDevice interface (new properties IsMap48 and Map48 used to detect & save 48K snapshots correctly)
- little refactoring for snapshot serializers;
- improve 48K mode detection for SZX, Z80 and SNA serializers
- improvement for ULA video table calculator (support INT shifts more than 224T)
- fix timings for ULA Leningrad 1 and add even M1 waiting
- fix thread synchronization bug in debugger
Теперь маппинг ROM'ов задается в файле ~mapping.xml внутри ROMS.ZIP, таким образом можно задавать другие rom-файлы в любых комбинациях. Поддерживаются как склееные ROM файлы, так и отдельные. Для склееных можно задавать смещение внутри файла (аттрибут offset)
Alexander Makeev, а можете добавить поддержку такого клона спектрума как Дельта - С ?
это мой самый любимый и первый спектрум.
биос от дельта с в аттаче.
NEO SPECTRUMAN
03.10.2011, 21:40
Alexander Makeev, а можете добавить поддержку такого клона спектрума как Дельта - С ?
это мой самый любимый и первый спектрум.
Всеми руками и ногами ЗА.
Только где доки достать.
биос от дельта с в аттаче.
Проверил точная копия моего.
Alexander Makeev, а можете добавить поддержку такого клона спектрума как Дельта - С ?
это мой самый любимый и первый спектрум.
биос от дельта с в аттаче.
если есть описание портов и таймингов, можно добавить
если есть описание портов и таймингов, можно добавить
Вряд ли есть описание. У Конана была схема, он когда-то присылал. Но не четкая.
Помню еще, что у дельты кажется прерывание начиналось с началом бумаги, или где-то около того.
Вряд ли есть описание. У Конана была схема, он когда-то присылал. Но не четкая.
Помню еще, что у дельты кажется прерывание начиналось с началом бумаги, или где-то около того.
а рабочий экземпляр есть? Сам "биос", т.е. ром файл вполне обычный, если заменить стандартный 48-ой, то работает. Каких то особенностей кроме надписи "(с)1989 Delta" не обнаружил :)
http://zx.pk.ru/attachment.php?attachmentid=29626&stc=1&d=1317673285
По-моему Дельты были разные.
А на счет отличий - у них есть клавиша переключения русского и латинского алфавита, и бейсик изменен тоже соответствующим образом.
[bETA]mEN
04.10.2011, 01:50
Выступлю в роли капитана-очевидности:
http://speccy.info/%D0%94%D0%B5%D0%BB%D1%8C%D1%82%D0%B0-%D0%A1
Схема:
http://ermen.antimusic.ru/temp/Deltas_128_l.gif
Фото:
http://radikal.ru/F/s48.radikal.ru/i120/0910/73/5a108e8e72f4.jpg.html
http://radikal.ru/F/s53.radikal.ru/i142/0910/70/9bfb8bf8af0f.jpg.html
http://radikal.ru/F/i005.radikal.ru/0910/30/66a65734ebf2.jpg.html
http://radikal.ru/F/i033.radikal.ru/0910/aa/bcc37d125394.jpg.html
http://radikal.ru/F/i040.radikal.ru/0910/d4/67e343699116.jpg.html
http://radikal.ru/F/s47.radikal.ru/i116/0910/43/6a87bfb474c9.jpg.html
http://radikal.ru/F/s44.radikal.ru/i106/0910/78/8efdaf8db3bd.jpg.html
http://radikal.ru/F/i005.radikal.ru/0910/b8/5663288cf235.jpg.html
http://radikal.ru/F/s11.radikal.ru/i184/0910/51/ef4239acbf03.jpg.html
Только без прошивки ее ULA, узнать точные тайминги будет не просто.
[bETA]mEN
04.10.2011, 02:37
Только без прошивки ее ULA, узнать точные тайминги будет не просто.
А была ли хоть одна программа точно использующая эти тайминги?
Кстати, мой первый Спектрум был именно Delta-C. Куплен в 1991 году за 1300рублей в магазине примерно на Большой Академической улице, или где-то рядом там. У них на витрине стоял, и крутилась демострация игры Pool. На ней я пробовал делать или скролл на бордюре, или просто стоячую строку. Экспериментируя выясниил, что инт начинается примерно с начала бумаги.
mEN;420647']А была ли хоть одна программа точно использующая эти тайминги?
Была) Мой эффект на бордюре)
---------- Post added at 02:41 ---------- Previous post was at 02:37 ----------
А еще на моей Дельте не грузились такие игры, как Duet, и другие, перенаправлявшие печать то ли на принтер, то ли еще в какой-то другой канал. Точно уже не помню. А была модификация Дельты, на которой это грузилось. Она была у моего приятеля.
---------- Post added at 02:49 ---------- Previous post was at 02:41 ----------
А управляющими кодами для переключения на русский/латинский шрифт служили команды бейсика, закрепленные в оригинальном Спектруме за токенами типа MOVE и ERASE.
Alexander Makeev, а можете добавить поддержку такого клона спектрума как Дельта - С ?
это мой самый любимый и первый спектрум.
биос от дельта с в аттаче.
Этот ром от версии дельты БЕЗ русского языка.
Вот нашел на кассете какой-то набросок на бейсике, который писал для Дельты. Не знаю, работает он или нет, но при листинге точно должны быть русские буквы. А в этом биосе вместо команд переключения языка видны слова MOVE и ERASE.
Так, работает, если в персой строке в бейсике уменьшить n с 10 до количества слов в словаре. Стало быть стихоплет не дописан.
у меня к сожаленью сама дельта не сохранилась, схем тоже нет.
насчёт Русского языка - на клавиатуре была кнопка "рус/лат" но толку от неё не было никакого, по крайней мере на моём экземпляре.
хотя в некоторых программах для дельты Русский язык присутствует.
у меня был экземпляр изготовленный в г. Чебоксары, чёрный корпус, две кнопки пробел снизу, кнопки сами из прозрачного пластика с бумажками-надписями под ними, внутри компа было чтото около 70 микросхем.
ещё помню что дельта работала быстрее чем спектрум (у меня дельта с 48к работала в 2 раза быстрее фирменного спека 48к хотя я ничего не менял в конструкции компьтера).
ещё очень нравился звук из биппера пк, забавная музыка получалась :)
вот такой у меня был, один в один:
ZEman, это Чебоксарская Дельта. У Титуса наверняка была Зеленоградская (в Москве именно они продавались).
Rindex, что-то я не понял, к чему этот пост ?
я как-раз про Чебоксарскую и говорил.
Просто Титус говорил, что программа какая-то работала на другой Дельте, а у него нет. Вполне вероятно, что вот как раз на Чебоксарской.
у меня тоже некоторые игры не хотели идти на дельте, например у меня не шли Intensity и Shanghai karate 2.
а Русский язык можно было получить если загрузить кодовый блок от Demo программы идущей в комплекте с дельтой (самая первая касета).
для этого нужно было войти в графический режим (на дельте кнопка GRAPH или Caps Shift+9).
демо во вложении.
Вот они похоже из-за русского языка не шли. И действительно, для чего его вшили в Дельты? По-моему в других компьютерах (Робик и т.д.) до этого недодумались. Или был ещё советский Спектрум с русским языком, который изготавливали на заводах?
Русский язык можно было получить если загрузить кодовый блок от Demo программы идущей в комплекте с дельтой (самая первая касета).
для этого нужно было войти в графический режим (на дельте кнопка GRAPH или Caps Shift+9).
демо во вложении.
Это не тот русский язык. В дельтах был встроенный русский язык, а это подгружаемый.
так есть рабочий экземпляр дельты или нет?
так есть рабочий экземпляр дельты или нет? у меня есть, на клавиатуру идёт аж 24 провода :v2_conf2:
насчёт оригинального int`a ничего сказать не могу - прежний хозяин понаставил RC цепочек и похоже добавил порт #FF
http://i230.photobucket.com/albums/ee81/ex0l0n/DELTA.jpg
у меня есть, на клавиатуру идёт аж 24 провода :v2_conf2:
насчёт оригинального int`a ничего сказать не могу - прежний хозяин понаставил RC цепочек и похоже добавил порт #FF
запусти этот тест http://zx.pk.ru/attachment.php?attachmentid=29641&d=1317715805 и выложи фотки, а еще лучше видео с детализацией фрагментов на границе бордюра и экрана
это для грубой оценки таймингов
запусти этот тест для грубой оценки таймингов попробую, только быстро не обещаю
Alexander Makeev,
Планируется в Вашем ZXMAK2 эмуляция ATM-Turbo и ATM-Turbo2, с режимои CPM, а так же EVO? И еще бы поддержку *.rzx с записью. Был бы идеальный эмулятор.
Или был ещё советский Спектрум с русским языком, который изготавливали на заводах?
не знаю, насколько он советский (может уже российский), но самое начало 90х - "Кворум-БК04". Кнопки RUS и LAT печатали символы с кодами 0 или 1, и этим переключали язык. Ну и все последующие кворумы тоже так работали.
NEO SPECTRUMAN
04.10.2011, 20:46
так есть рабочий экземпляр дельты или нет?
Есть!!!!!
Может еще и это запустить.
На нем можно увидеть где тормознутая память.
http://opensourcezx.untergrund.net/e_misc-tactmeter_src.html
Есть!!!!!
ну а фотки экрана где? :v2_wink2:
Может еще и это запустить.
На нем можно увидеть где тормознутая память.
http://opensourcezx.untergrund.net/e_misc-tactmeter_src.html
спасибо, полезная штука для сбора информации :)
---------- Post added at 21:08 ---------- Previous post was at 20:55 ----------
Alexander Makeev,
Планируется в Вашем ZXMAK2 эмуляция ATM-Turbo и ATM-Turbo2, с режимои CPM, а так же EVO? И еще бы поддержку *.rzx с записью. Был бы идеальный эмулятор.
где информацию про порты и режимы почитать?
[bETA]mEN
04.10.2011, 23:35
где информацию про порты и режимы почитать?
http://atmturbo.nedopc.com/atmdscr.htm
Doronetty
05.10.2011, 13:14
Да, АТМ - одна из наиболее хорошо документированных машин - спасибо Максагору, собравшему всю инфу!
Вот ВГ'шку бы довести до ума - тогда бы был действительно идеальный эмулятор!!!
NEO SPECTRUMAN
05.10.2011, 19:21
ну а фотки экрана где?
А с фотками небольшая проблемка.
Нормального телевизора под рукой нет. Штатива тоже.
Выложу что есть.
Так как пиксели видно плохо я занизил яркость.
mc test Изображение статично но при каждом запуске бордер смещается по горизонтали. Видно и тут нужно настраиватся на 1й такт INTа.
tact meter показывает непонятно что. Перепробовал кучу эмуляторов, менял настройки времянок (даже на лету) но такого не видел.
Также запустил вот этот тест INT`a
http://zx.pk.ru/showthread.php?t=16957
Также снял полоску в правой части экрана на границе бордюра. Она была изначально. Она висит на протяжении всей работы. Не имею понятия что на неё выводится. Есть ли подобное на других клонах?
Также из несовместимостей помню что сбрасывается игра TRANS A M.
И в EXOLON нет звука.
delta.zip.html (http://narod.ru/disk/27402279001/delta.zip.html)
И в EXOLON нет звука.
при пзу отличном от оригинального 48ого (в нём проверяется один байт) звук идёт на AY
mc test Изображение статично но при каждом запуске бордер смещается по горизонтали. Видно и тут нужно настраиватся на 1й такт INTа.
плохо что черно-белое изображение, цветные квадраты специально были сделаны чтобы можно было точно идентифицировать позицию, но по черной полосе вроде видно.
Уже можно сказать что строка 224T, INT начинается от левого бордюра, как на пентагоне, а не от папира, как на скорпионе и спектруме. WAIT'ов похоже нет, что упрощает задачу.
По фотографиям уже можно попробовать восстановить тайминги, остаются неизвестными длина INT и число тактов в кадре. А судя по результатам тестов именно они явно аномальные.
NEO SPECTRUMAN
05.10.2011, 20:55
при пзу отличном от оригинального 48ого (в нём проверяется один байт) звук идёт на AY
Удостоверился именно так.
А нет ли еще программ для замера числа тактов в кадре.
WAIT'ы всетаки есть, область #4000-#7FFF замедляется WAIT'ами, #8000-#BFFF - не замедляется
Методом подбора и проверки логически возможных вариантов удалось подобрать задержки для #4000-7FFF. Остается вопрос с длительностью INT и числом тактов в кадре. Также судя по всему для ПЗУ тоже могут быть задержки, нужно проверять :)
Вот плагин с исходником ULA для Delta. Ложить в папку Plugins. Кто желает, можно поиграться цифрами. :)
Из-за бага в диалоге настройки в списке выбора этот девайс сразу виден не будет. Нужно добавлять кнопкой Add. После этого девайс будет видет в списке до перезагрузки.
Видимые отличия только в тесте TACTS для области ПЗУ и #8000-BFFF. Область #8000 задержек не имеет это видно по тесту mctest, соответственно похоже еще нужно подобрать задержки для ПЗУ.
Насколько все это верно нужно проверять, сравнивая с реалом :)
Alexander Makeev, а как из IBusDevice правильно отправить немаскируемое прерывание?
Логика там вроде бы такая должна быть:
cpu.NMI = true;
cpu.ExecCycle();
cpu.NMI = false;
,
но в нынешней event-driven модели сбросить флаг NMI "вовремя" ведь никак не выйдет?
--
А, туплю, подписка на NMIACK_M1 же есть :)
Alexander Makeev, а как из IBusDevice правильно отправить немаскируемое прерывание?
Логика там вроде бы такая должна быть:
cpu.NMI = true;
cpu.ExecCycle();
cpu.NMI = false;
,
но в нынешней event-driven модели сбросить флаг NMI "вовремя" ведь никак не выйдет?
--
А, туплю, подписка на NMIACK_M1 же есть :)
да, но это событие вызывается когда процессор подтверждает что увидел сигнал NMI. Чтобы сгенерировать сигнал NMI из устройства можно использовать событие CYCLE_M1, задумывалось что оно будет вызываться ДО обработки цикла M1. Но сейчас есть ошибочка, это событие вызывается после обработки сигналов, а не до. В следующей версии исправлю :)
NEO SPECTRUMAN
06.10.2011, 09:59
Протестил вот такую программу
29717
29718
Всё статмчно
Выкидываю один nop всё статично
Выкидываю ещё один nop бордюр смещается вверх но пройде 52 пикселя останавливается (также в EMUZWIN при времянках 48)
Добавляю один nop всё статично
Добавляю еще один nop бордер смещается вниз но очень медленно.
По моему тут отличие от емуля (кажется смещение намного медленней)
Также наблюдается вот такой эффект. одна половина экрана заполняется плавно (по 2 пикселя наверное) а другая значительно быстрей приблизительно по 8 или больше(В емуле тоже подобный эфект но он не так заметен)
delta2.zip (http://narod.ru/disk/27459578001/delta2.zip.html)
LD A,N по времени видно исполняется 8 тактов
Также прилагаю снапшот с програмкой.
В следующей версии исправлю :)
еще хочется, чтоб parseKeyboardState был вынесен из DirectKeyboard куда-нибудь поближе к IKeyboardDevice, где его можно было б переопределить. И чтоб он принимал на вход не DirectInput-овый KeyboardState, а какой-нибудь промежуточный класс :)
А то сейчас от IKeyboardDevice очень мало пользы - например, расширенную клавиатуру с его помощью не реализовать. Не знаю как в Профи и АТМ, но в Кворуме для опроса дополнительных кнопок клавы выделен отдельный порт, и в CP/M-режиме дополнительные кнопки нужно однозначно отделять от основных - у них свои функции.
Плюс та же кнопка NMI в Кворуме играет важную роль и выведена на клавиатуру.
Ну и кнопки F1..F5 хочется повесить именно на F1..F5 клавиатуры, а они все заняты :)
еще хочется, чтоб parseKeyboardState был вынесен из DirectKeyboard куда-нибудь поближе к IKeyboardDevice, где его можно было б переопределить. И чтоб он принимал на вход не DirectInput-овый KeyboardState, а какой-нибудь промежуточный класс :)
да я уже думал об этом и собирался передавать KeyboardState в IKeyboardDevice. А что за идея с промежуточным классом?
что за идея с промежуточным классом?
Какой-нибудь ZXKeyboardState, несущий все те же функции, что и DirectInput.KeyboardState, но напрямую от него не зависящий. Просто чтоб DirectX-рефренсы не тянуть из ZXMAK2.MDX.* в основной код. Пусть их использование так и будет ограничено вершиной айсберга. Я же все мечтаю о портируемости на mono :)
обновил до 236, клавиатура теперь сканируется внутри KeyboardDevice, мышь - аналогично. Правда кнопки F1, F3, F5, F7, F8, F9 заюзаны гуём эмулятора, добавил проверку, гуй обрабатывает функциональные клавиши только если не нажаты Alt и Ctrl.
Также исправлен миксер звука, раньше громкость устройства зависела от его приоритета :)
В связи с тем что для кворума и аналогичных машин, нужно будет добавить отдельные клавиатуры с поддержкой функциональных клавиш, возикает вопрос - как быть с клавишами для сброса, quick boot, старт/стоп и воспроизведение магнитофона? Которые сейчас назначены на F1, F3, F5, F9,...
---------- Post added at 21:58 ---------- Previous post was at 21:55 ----------
Протестил вот такую программу
29717
29718
Добавляю один nop всё статично
Добавляю еще один nop бордер смещается вниз но очень медленно.
По моему тут отличие от емуля (кажется смещение намного медленней)
ничего не понял, отличие от какого эмуля? EmuZWin?
PS: вопрос модераторам - можно посты по изучению таймингов Delta вынести в отдельную тему? чтобы не путать все в одну кучу
Doronetty
06.10.2011, 23:23
В связи с тем что для кворума и аналогичных машин, нужно будет добавить отдельные клавиатуры с поддержкой функциональных клавиш, возикает вопрос - как быть с клавишами для сброса, quick boot, старт/стоп и воспроизведение магнитофона? Которые сейчас назначены на F1, F3, F5, F9,...
Предлагаю на этот случай сделать клавишу включения/выключения расширенного режима клавиатуры и назначить её на F12 (насколько я знаю, F11 и F12 не были задействованы ни в АТМ, ни в Профи, т.к. подключалась XT клавиатура, этих клавиш не имевшая) - т.е. нажал один раз F12 - клавиатура переходит в расширенный режим, все функциональные клавиши блокируются. Снова нажал F12 - обычный режим, все F1, F3, F5, F9 снова действуют!
NEO SPECTRUMAN
06.10.2011, 23:30
ничего не понял, отличие от какого эмуля? EmuZWin?
Да emuzwin.
Предлагаю на этот случай сделать клавишу включения/выключения расширенного режима клавиатуры и назначить её на F12 (насколько я знаю, F11 и F12 не были задействованы ни в АТМ, ни в Профи, т.к. подключалась XT клавиатура, этих клавиш не имевшая)
ну судя по встроенному тесту Профи, F11 и F12 всетаки используются. Есть вариант сделать клавиатуру доступной только после ее захвата (как мышь, при двойном клике по окну), но подозреваю это будет не очень-то удобно :)
---------- Post added at 22:49 ---------- Previous post was at 22:31 ----------
Да emuzwin.
так, а при чем тут emuzwin, я ведь сделал тестовый ULA плагин для ZXMAK2, с эмуляцией Delta, его и сравнивать нужно... :v2_wink2:
PS: дальнейшее обсуждение эмуляции Delta, предлагаю перенести сюда (http://zx.pk.ru/showthread.php?p=421529#post421529). Просьба модераторов перенести посты про дельту отсюда в тему про Delta, чтобы они тут не потерялись.
---------- Post added 07.10.2011 at 00:30 ---------- Previous post was 06.10.2011 at 22:49 ----------
Обновил до версии 237, небольшие исправления для ВГ93 - команды чтения и позиционирования
В связи с тем что для кворума и аналогичных машин, нужно будет добавить отдельные клавиатуры с поддержкой функциональных клавиш, возикает вопрос - как быть с клавишами для сброса, quick boot, старт/стоп и воспроизведение магнитофона? Которые сейчас назначены на F1, F3, F5, F9,...
Взять идею из того же VMWare - все действия вешать на Ctrl+Alt+буква
сброс - ctrl+alt+R, play/pause пленки - ctrl+alt+P и т.д.
И добавить соответствующие пункты в меню, указав ShortcutKeys, чтоб было где посмотреть, если забудутся
ЗЫ для кворума еще нужна дополнительная цифровая клавиатура, она тоже на другом порту висит и не аналогична Key.D1..Key.D0. И мне еще какой-то кнопки не хватило, забыл :)
Плюс там ВГ93 на других портах висит, но это вроде не проблема, рефлексией до всех необходимых методов добраться легко.
Обновил до 238 - добавил альтернативную дешифрацию портов ВГ93 для Memory PROFI, начала грузиться CP/M :v2_thumb:
http://zx.pk.ru/attachment.php?attachmentid=29752&stc=1&d=1317949287
48 режим. Бордюр, однако....
в 128к - все Ок.
http://www.worldofspectrum.org/infoseekid.cgi?id=0003045
У фирменных Spectrum 48 и Spectrum 128 разные тайминги.
Есть подозрение что на реальном фирменном Spectrum 48 поведение будет аналогичным, проверить наверняка сложно будет, т.к. телевизоры могут сильно обрезать бордюр...
Кто-то может проверить на реале?
эту игру делала серьезная фирма и по ссылке для разных машин разные файлы, если кто не заметил...
во всех эмуляторах есть этот артефакт, поэтому я подозреваю что и на реале он тоже присутствует :v2_wink2:
Есть подозрение что на реальном фирменном Spectrum 48 поведение будет аналогичным, проверить наверняка сложно будет, т.к. телевизоры могут сильно обрезать бордюр...
Кто-то может проверить на реале?
проверил на 48ом - бордюр на телеке действительно обрезан
Выпил еще пива и рассудил логически - если производитель игры сделал, что в 128к бордюр попадает на свои места с точностью до муллиметра, то что мешало разрабам сделать то же самое для 48к машинок? подо что то же они делали?! это же не пионэри демки на коленке клепать. Не?
зы-потом по-делю, сорри
ошибка в расчетах, или просто подогнали как было удобно, на телевизоре этот артефакт не заметишь, т.к. он с большой вероятностью окажется за пределами экрана. Поэтому этот недостаток при тестировании игры на телевизоре даже не заметили.
---------- Post added at 16:45 ---------- Previous post was at 14:48 ----------
есть предположение (судя по коду), что мультиколор для Pentagon смещен на 2-4 пиксела, может кто-то сделать фотографию экрана пентагона на этом тесте MCTEST2 (http://zx.pk.ru/attachment.php?attachmentid=29750&d=1317941524)?
Если парусник нормально рисуется - насколько это правильнайя эмуляция Пентагон-а?
на паруснике не видно отклонений +- пиксел
ну и MCTEST2 на йём же
ps - в чем тест написан?
написан в SjAsm, спасибо, можно левый верхний угол с увеличением?
ну вот это, я так понимаю, отклонение в 1 пиксель надо увидеть?
постой, так это реальный пентагон или эмулятор?
Alexander Makeev, Когда уже увижу на Вашем ZXMAK2 свой любимый ATM-Turbo2? Profi уже заводится. Под ATM2 хоть софта есть довольно много, в том числе и под CP/M. Еще бы неплохо было в FAQ добавить клавиши управления эмулем.
Спасибо Вам за проделанную работу!
p.s. А поддержку rzx не планируете?
Alexander Makeev, Когда уже увижу на Вашем ZXMAK2 свой любимый ATM-Turbo2? Profi уже заводится. Под ATM2 хоть софта есть довольно много, в том числе и под CP/M. Еще бы неплохо было в FAQ добавить клавиши управления эмулем.
Спасибо Вам за проделанную работу!
Есть информация как бит Z на порту #FE эмулировать?
p.s. А поддержку rzx не планируете?
пока нет, а для чего он используется, кроме как прохождение игрушек записывать?
Обновил до 239
Серьезные изменения кнопок управления (скрипя сердцем менял - привык :), но изменения нужны, т.к. кнопки F1-F12 необходимы для спектрума), теперь кнопки следующие:
Alt+Ctrl+Insert - RESET
Alt+Enter - FULLSCREEN (оставил как и раньше, хотя может мешать)
Pause - запуск/останов эмуляции
Alt+Ctrl+F1 - быстрый boot
Alt+Ctrl+F8 - запуск/останов магнитофона
Для стандартной клавиатуры спектрума добавлена поддержка кнопки ESC
Из нововведений, также появилась новая менюшка VM, в нее переехал пункт настройки машины. Настройки рендеринга вынесены из настроек виртуальной машины в менюшку View и теперь сохраняются в реестре, а не в VMZ файле.
В меню VM появился новый пункт - NMI, позволяет сформировать NMI сигнал. Обычно это MAGIC при наличии TRDOS. Для Scorpion этот пункт вызывает Shadow Service Monitor
Исправлена дешифрация портов ВГ93 для Кворума, ВГ93 теперь виден в тесте, но пункт Boot DOS почему-то все еще не работает.
[bETA]mEN
08.10.2011, 16:34
В настройках BDI чудовищно не хватает кнопки eject.
mEN;422218']В настройках BDI чудовищно не хватает кнопки eject.
зачем? Галочку возле драйва снимаешь, вот тебе и eject... :)
[bETA]mEN
08.10.2011, 16:43
зачем? Галочку возле драйва снимаешь, вот тебе и eject... :)
А если мне нужен пустой дисковод?
mEN;422222']А если мне нужен пустой дисковод?
Без галочки дисковод пустой (без дискеты). Если нужна пустая дискета, т.е. новый образ для работы, то достаточно включить галку и стереть путь к файлу (оставить пустую строку в пути).
В любой момент новый образ можно сохранить в файл через меню Save. Если не сохранить, то при выходе эмулятор предложит сохранить образ.
Окно настройки пока глюковатое, его нужно переписать, но для начала нужно чтобы интерфейсы устаканились и обдумать новую структуру окна настроек (есть еще кое-какие идеи).
[bETA]mEN
08.10.2011, 19:13
Без галочки дисковод пустой (без дискеты)
Да, это я стормозил:v2_dizzy_facepalm:. Перепутал с удалением BDI, как устройства.
---------- Post added at 19:13 ---------- Previous post was at 18:27 ----------
странно ведёт себя Omega Commander: http://vtrdos.ru/system/OMEGACOM.ZIP
Закидывает в AY какой-то мусор. В других эмуляторах такого не наблюдается.
mEN;422260']
[/COLOR]странно ведёт себя Omega Commander: http://vtrdos.ru/system/OMEGACOM.ZIP
Закидывает в AY какой-то мусор. В других эмуляторах такого не наблюдается.
через USR 0 не закидывает, очевидно баг. Не любит запускаться из 128 ПЗУ. В Unreal аналогичное поведение.
Для AY сейчас используется дешифрация портов как в оригинальном спектруме (маска #C002), пробовал c пентагоновской дешифрацией (маска #C0FF), не помогло. Выходит баг в командере :)
Alexander Makeev, можете в новой версии добавить эмуляцию орель - бк08?
NEO SPECTRUMAN
08.10.2011, 19:52
По нему хоть что то известно.
Не то что с дельтой.
http://speccy.info/%D0%9E%D1%80%D0%B5%D0%BB%D1%8C-%D0%91%D0%9A08
NEO SPECTRUMAN, да и нет ни одного эмулятора с этим клоном.
NEO SPECTRUMAN
08.10.2011, 20:09
А нельзя ли реализовать подобное.
29794
Желательно чтоб с авто обновлением и возможностью редактирования.
Также хотелось бы иметь возможность отдельно видеть содержимое второго экрана.
NEO SPECTRUMAN
08.10.2011, 20:34
Нашел вот такое.
69888 тактов/кадр
отсутствие задержек при обращении к ОЗУ (аналогично Пентагону)
отсутствие проблем с длительностью сигнала INT (запрос прерывания снимается по сигналу подтверждения прерывания M1/IORQ)
Теневое ОЗУ и альтернативное ПЗУ управляются портом #7F (127):
bit 0 - RN
bit 1 - RC
Сигнал RC=1 включает теневое ОЗУ, независимо от сигнала RN. Когда RC=0, RN выбирает банк ПЗУ: основной и дополнительный. На плате "Орели" есть места под две дополнительные микросхемы 2764 с альтернативной прошивкой, которую можно включать таким образом.
Дешифрация портов у "Орели" производится по 8 битам адреса. Порт бордюра, таким образом, доступен только по одному адресу #FE! Также имеется порт #1F для эмуляции кемпстон-джойстика; вышеупомянутый порт #7F и зарезервированный порт #FF, сигнал выборки которого в схеме компьютера нигде не используется, однако выведен на системный разъем.
Порт #7F - это управление страницами по адресам 0000-3FFF в "Орели". При бит1=1 выбирается теневое ОЗУ, при бит1=0 и бит0=0 - основное ПЗУ, при бит1=0, бит0=1 - альтернативное ПЗУ. Также при записи в порт #7F запоминаются биты 3 и 4 шины данных, но они в схеме нигде не используются, а выведены в инвертированном виде на системный разъем (сигналы DV0 и DV1).
Следует учесть, что в "Орели" запись по адресам 0000-3FFF происходит всегда в теневое ОЗУ, даже если оно в данный момент не подключено. Это позволяет загрузить теневой монитор с кассеты простой командой LOAD "" CODE, однако делает этот монитор уязвимым для программ, которые пашут область ПЗУ.
16 дополнительных клавиш подключаются по двум неиспользованным битам порта FE на чтение
Расширенные кнопки Орели читаются через 7й и 5й бит порта FE, что, вроде бы, не поддерживается ни одним эмулятором (кавычки сидели на одной из таких клавиш). Еще у него была полноценная русификация - в строке бейсика можно было вводить и русские, и латинские символы.
обработчик NMI по адресу 0066
Данные в теневом ОЗУ не теряются после аппаратного сброса клавишей RESET.
Исправлена дешифрация портов ВГ93 для Кворума, ВГ93 теперь виден в тесте, но пункт Boot DOS почему-то все еще не работает.
Это потому, что порт 0x85 в Кворуме - это совсем не то же, что 0xFF в бетадиске.
Надо так
private void busWritePortSYS(ushort addr, byte value, ref bool iorqge)
{
if (iorqge && this.m_dosPort)
{
iorqge = false;
ushort[] decode = new ushort[] { 3, 0, 1, 3 };
ushort drv = decode[value & 3];
this.m_betaDisk.SetReg(WD93REG.SYS, (byte)(((value & ~3) ^ 0x10) | drv));
}
}
(логика взята из кворумского unreal)
Правда, работать все от этого не начинает :) С диска уже пытается начать грузиться, но по логу ВГшки видно, что даже загрузчик из первого сектора прочесть не может. Я сегодня ковырял версию 238 и смог пройти дальше, но я вытащил рефлектором код WD1793 и прямо его правил. Счас попробую найти отличия.
Поведение очень отличается в зависимости от того, включены или нет NoDelays у ВГхи, видимо с таймингами что-то не так.
Но это все фигня, потому что...
ЗАГРУЗИЛОСЬ!!!
Нашел вот такое.
для сравнения тестов, эмулятора орели и реальной орели могу фото тестов сделать .
В общем, было что-то с iorqge. Дальше я уже без исходников не разберусь, конечно, но если закомментить все эти
if (iorqge && this.m_dosPort)
, то работает
ЗЫ не уверен, что
this.m_dosPort = (this.CMR1 & 0x80) == 0;
Этот бит к CP/M не имеет отношения, как мне кажется. Но это надо на реале проверить будет.
---------- Post added 09.10.2011 at 00:09 ---------- Previous post was 08.10.2011 at 22:53 ----------
Дальше я уже без исходников не разберусь
А хотя ничего сложного, это с AY конфликт.
Менял его местами с памятью в менеджере - не помогает.
А хотя ничего сложного, это с AY конфликт.
Менял его местами с памятью в менеджере - не помогает.
у AY нет логики IORQGE (иначе он перехватывает запись в порты PROFI), для проверки его можно просто удалить
---------- Post added at 22:32 ---------- Previous post was at 22:30 ----------
для сравнения тестов, эмулятора орели и реальной орели могу фото тестов сделать .
сделай фото на реале, только выложи в отдельную ветку по эмуляции Орели, а то тут мешанина будет, ничего не найдешь :)
NEO SPECTRUMAN
08.10.2011, 23:34
Также существует расширенный Орель 256К "LSY".
Alexander Makeev, завтра сделаю.
Плагин для кворумской клавы - bin (http://dl.dropbox.com/u/4166599/zx/quorum-keyboard.dll) src (https://github.com/atsidaev/quorum-zxmak2/blob/master/Quorum64/Quorum64Keyboard.cs)
Для полной реализации в KeyboardState не хватает тильды ~, бэкслеша \, NumPad0..NumPad9 и NumPadPeriod
у AY нет логики IORQGE (иначе он перехватывает запись в порты PROFI), для проверки его можно просто удалить
то-то и оно, удаляю - все работает, добавляю - висит
Не знаю с чем связано, может и не с iorqge. Но опять же, убираю проверку iorqge из опроса портов ВГ-шки - все работает даже при добавленном AY
Плагин для кворумской клавы - bin (http://dl.dropbox.com/u/4166599/zx/quorum-keyboard.dll) src (https://github.com/atsidaev/quorum-zxmak2/blob/master/Quorum64/Quorum64Keyboard.cs)
Для полной реализации в KeyboardState не хватает тильды ~, бэкслеша \, NumPad0..NumPad9 и NumPadPeriod
то-то и оно, удаляю - все работает, добавляю - висит
Не знаю с чем связано, может и не с iorqge. Но опять же, убираю проверку iorqge из опроса портов ВГ-шки - все работает даже при добавленном AY
действительно AY мешает, сейчас выложу новую версию, добавил логику в AY, теперь будет проверка - если память Spectrum 48/128, то юзается маска #C002 (как на фирменном). В противном случае юзается маска пентагона #C0FF.
Грузиться грузится, только странное дело - после NMI не хочет ничего грузить даже после сброса, помогает только перезапуск... :o
---------- Post added at 23:44 ---------- Previous post was at 23:30 ----------
Для полной реализации в KeyboardState не хватает тильды ~, бэкслеша \, NumPad0..NumPad9 и NumPadPeriod
ок, добавлю, под NumPadDot подразумевалась NumPadComma?
Tilda - это Grave
Грузиться грузится, только странное дело - после NMI не хочет ничего грузить даже после сброса, помогает только перезапуск...
да, это странно
что-то с переключением страниц явно - я писал плагин для линейной памяти Кворума-64, там NMI отрабатывает как в реале
кстати, нашел еще одну кворумскую CP/M-дискетку, с играми - http://dl.dropbox.com/u/4166599/zx/GAME-10.fdi
---------- Post added at 02:49 ---------- Previous post was at 02:48 ----------
ок, добавлю, под NumPadDot подразумевалась NumPadComma?
Ну это в зависимости от раскладки :) В латинице она точкой работает
обновил до 240 версии, довольно много изменений, ключевые:
- исправлен порт #FF для фирменных ULA Spectrum 48/128 (мерцание спрайтов в игрушке SIDEWIZE)
- добавлена ULA от Дельта-С (beta, какая есть :))
- исправлено NMI для Кворума
- исправлен системный порт ВГ93 для Кворума
- добавлена клавиатура Кворума от Eltaron
- исправлен системный порт ВГ93 для Кворума
Походу надо еще порт FE исправлять для кворума :) Трещит динамик при записи в чётные порты ВГшки.
Там дешифрация не только по A0, но еще и по A3, A4, A7
Но эдак ведь окно доступных устройств скоро вообще до безобразия разрастется, если на каждый чих свой девайс городить :)
Походу надо еще порт FE исправлять для кворума :) Трещит динамик при записи в чётные порты ВГшки.
Там дешифрация не только по A0, но еще и по A3, A4, A7
Но эдак ведь окно доступных устройств скоро вообще до безобразия разрастется, если на каждый чих свой девайс городить :)
это впринципе не страшно, можно в диалоге добавления устройства добавить выбор по категориям.
В клавиатуре кворума похоже какой-то глюк, такое впечатление что какая-то клавиша залипла, плюс кнопка вверх не всегда работает...
Alexander Makeev, есть програмулинка для теста клавиатуры PortDemo.
Alexander Makeev, у кворум и PortDemo видимо несовместимость, срывается загрузка.
это впринципе не страшно, можно в диалоге добавления устройства добавить выбор по категориям.
В клавиатуре кворума похоже какой-то глюк, такое впечатление что какая-то клавиша залипла, плюс кнопка вверх не всегда работает...
на системной дискете (http://dl.dropbox.com/u/4166599/zx/SYS20N2.fdi) есть тест (TQ128), я на нем проверял
работало даже под wine :)
как именно эта залипшая клавиша проявляется?
на системной дискете (http://dl.dropbox.com/u/4166599/zx/SYS20N2.fdi) есть тест (TQ128), я на нем проверял
работало даже под wine :)
как именно эта залипшая клавиша проявляется?
проявляется в том что если грузиться с дискеты с игрушками которую ты выкладывал, то при выборе игры загрузка сама продолжается, как будто кнопка выбора нажата. После загрузки первой игрушки кнопки не работают.
---------- Post added at 18:58 ---------- Previous post was at 18:57 ----------
Alexander Makeev, у кворум и PortDemo видимо несовместимость, срывается загрузка.
галку NoDelay включи для ВГ93
то при выборе игры загрузка сама продолжается, как будто кнопка выбора нажата.
да, но это глюк дискеты скорее всего
потому что с отключенным девайсом клавиатуры такая же фигня
После загрузки первой игрушки кнопки не работают.
а тут я грешу на некорректное переключение страниц памяти
еще есть глюк с последующим зависоном при загрузке диззи с системной дискеты
но когда подключаю вместо устройства памяти свое для Quorum64, игры начинают работать
счас reflector разогреется, попробую разобраться :)
еще третий глюк эмуляции есть - программы sg и sgen на системной дискете не работают - это некий аналог команды sys в мсдосе. Но это явно ВГшка виновата
Alexander Makeev, галку NoDelay включи для ВГ93
У меня не запускается, с другими клонами работает.
У клавиатуры кворум не работают клавиши NumPadComma и NumPadEnter, а также еще три какие-то странные клавиши побозначенные в тесте как "R" и "L" в левом нижнем углу и "b" в правом верхнем углу.
Сверил по коду:
NumPadComma проверяется в scan_7F7E включает бит 0x10;
NumPadEnter вообще нигде не проверяется
В аттачменте исходники девайсов кворума + MemoryBase, стандартная клава и WD1793
[bETA]mEN
09.10.2011, 21:21
public class BeeperQuorum : BeeperDevice
:v2_dizzy_messed:
mEN;422764']:v2_dizzy_messed:
что не так? :)
Обновил до версии 241:
- исправлены баги с эмуляцией недок флагов у Z80,
- добавлено пара биперов для Quorum и Scorpion (специфичная дешифрация портов)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot