PDA

Просмотр полной версии : эмуль на плагинах



boo_boo
27.10.2006, 16:15
..пришла в голову неоригинальная мысль zx-эмуля, сделанного на плагинах, то есть -- гибкая архитектура, альтернативные модули для всякой там переферии... глянул на описание плагин-интерфейса шалаевского эмуля, понял, что там все слишком завязано на конкретную архитектуру, которую можно расширять, а вот изменить практически невозможно. описалово плагин-системы emuzwin не нашел, равно как и его сайта на ринет.ру. что-то в жизни прошло мимо меня О__о

вообщем, предлагаю разработать простую и гибкую архитектуру для плагинного эмуля. пока на словах, а там, глядишь, и напишется что ;)

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

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

Vladimir Kladov
28.10.2006, 03:11
Сайт вчера переехал на kolmck.net. Все файлы переброшены, в корне редирект оставлен.

boo_boo
28.10.2006, 03:55
о, спасибо :)
ага, наколько понял, в emuzwin плагины -- только для работы с имаджами.

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

Vladimir Kladov
28.10.2006, 04:10
неправильно понял. Есть плагины вывода, включая звук и изображение на каждом кадре. Но вывод ориентирован именно на звук и изображение. Для ввода не помню, чтобы как-то что-то делал. Но можно и добавить. Вопрос ы том, что <B>это никому не нужно</B>. В том смысле, что мне же самому эти плагины и делать. Так мне тогда проще внутрь ядра все запихать.

ram_scan
15.01.2007, 21:05
Такой эмулятор уже есть. Называется MESS http://www.mess.org/. Опенсорцный. Монстр просто афугительный. Эмулирует около сотни платформ на данный момент. В том числе и табун спекки железа (SamCoupe тоже). Насколько качественно - не знаю. Я баловался с ним как с C-64 эмулятором заради просвещения что это за машина такая.

Но он именно полностью абстрактный. Ядро и паровоз плагинов описывающих архитектуру.

boo_boo
15.01.2007, 22:57
Такой эмулятор уже есть. Называется MESS http://www.mess.org/. Опенсорцный. Монстр просто афугительный. Эмулирует около сотни платформ на данный момент. В том числе и табун спекки железа (SamCoupe тоже). Насколько качественно - не знаю. Я баловался с ним как с C-64 эмулятором заради просвещения что это за машина такая.
Но он именно полностью абстрактный. Ядро и паровоз плагинов описывающих архитектуру.в mess плагины? собирал его, сорцы глядел... ИМХО никакой он не абстрактный, просто куча отдельных эмулей, юзающих общий фреймворк видео/звука/управления и эмуляторы процессоров.
разве там можно, к примеру, присобачить к имеющейся эмуляции спектрума трдос, не корежа сорцы, а только добавив свои?

deathsoft
16.01.2007, 01:42
А какой смысл в плагинах, если проект opensource? Плагины делаются в тех проектах, где сорцы закрыты, чтобы программу с закрытыми сорцами можно было расширять за счет бинарных модулей. А если проект опенсорц, тогда просто добавляется очередной модуль (.c/.cpp файл) в проект и все, дальше проект перекомпиливается.

boo_boo
16.01.2007, 04:15
А какой смысл в плагинах, если проект opensource? Плагины делаются в тех проектах, где сорцы закрыты, чтобы программу с закрытыми сорцами можно было расширять за счет бинарных модулей. А если проект опенсорц, тогда просто добавляется очередной модуль (.c/.cpp файл) в проект и все, дальше проект перекомпиливается. если взять практически любой эмуль, и попытаться что-то к нему приделать, то придется сперва перелопатить все исходники чтобы вьехать что к чему, потом воткнуть там и сям свой код, потом отлаживать, фигея от всяких побочных эффектов... а результат или отсылать автору, в надежде, что он примет патч (а любой вменяемый автор в этом случае переправит код под себя, усложняя этим дальнейшее развитие патча), или поддерживать самому, синхронизируясь с каждой новой версией O__o
так что по крайней мере какой-то, пусть не всеобьемлющий, документированный способ наращивания функционала без вмешательства в сорцы -- вещь очень полезная, автор ядра и писатели плагинов могут существовать сами по себе (как это, например, с эмулятором Шалаева было).
другое дело, возни много с проектированием такого API -- на 1й взгляд нефиг делать, дать плагинам доступ к сигналам процессора и всё. но если к примеру приспичит написать нестандартный видеорежим, юзающий определенные страницы расширенной памяти, плагин должен еще быть в курсе модели памяти и тп...
грустно это. сейчас пишу простенький эмуль, стараясь по максимуму абстрагировать код разных девайсов друг от друга, а потом видно будет, насколько сложно добавить поддержку плагинов.

хотя... судя по комментам в этой ветке, никому оно не надо, а сам я и в сорцах могу покопаться, так что идея задвигается в долгий ящик и идет лесом ;)

elf/2
16.01.2007, 11:29
судя по комментам в этой ветке, никому оно не надо, а сам я и в сорцах могу покопаться, так что идея задвигается в долгий ящик и идет лесом
жалко :(

прелесть плагинового подхода в том что даже такой непрограммист как я может чего-нибудь привернуть. а исходники того же unreal'а я ни за какие коврижки не осилю

deathsoft
16.01.2007, 12:06
отя... судя по комментам в этой ветке, никому оно не надо, а сам я и в сорцах могу покопаться, так что идея задвигается в долгий ящик и идет лесом
А зря, лучше сделать один эмуль, которые поддерживает все что нужно, чем плодить 10 штук, где один чтото одно поддерживает, а другой чтото другое. В этом плане было бы логичнее развивать unreal (т.к. SMT на него забил (он сам в этом признался в ветке форума про свой эмуль)). Никто не мешает перелопатить сорцы унреала т.к. тебе угодно, ибо автор его все равно не поддерживает.

Vladimir Kladov
16.01.2007, 15:29
я бы понял, если бы в unreal'е все было упихано в один длинный-предлинный текстовой файл без конца и края. Но там ведь есть модульность. Все разбито по разделам. Вот тебе звук, а вот тебе эмуляция тр-доса. Отдельно эмуляция ядра, и отдельно формирование видеосигнала. Не осилишь, да? А свой написать - осилишь? И сколько лет тебе понадобится? А выход из этого будет - какой? Потом придет час, ты научишься осиливать такие проекты за нефиг делать, клепать их как горячие пирожки, и обнаружится, что помимо этого у тебя еще 10 проектов, и по крайней мере 2 из них (но не эмуль) - первоочереднее и важнократнее. И тогда ты как SMT скажешь, да я забил. Или как я скажешь: а мне некогда. Подождите с годик...

Маленькое имхо: разберитесь все-таки с унрилом, там все просто. Проще только вообще ничего не делать.

elf/2
16.01.2007, 16:57
...Все разбито по разделам. Вот тебе звук, а вот тебе эмуляция тр-доса. Отдельно эмуляция ядра, и отдельно формирование видеосигнала. Не осилишь, да? А свой написать - осилишь? И сколько лет тебе понадобится? А выход из этого будет - какой? Потом придет час, ты научишься осиливать такие проекты за нефиг делать, клепать их как горячие пирожки, и обнаружится, что помимо этого у тебя еще 10 проектов...

это для монстров вроде тебя, boo_boo или самого SMT все просто :) сесть, за пол-часа понять что где лежит и поправить пару строчек кода. и главное потом это саппортить много лет.

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

а вот если boo_boo сделает разумное апи и несколько примеров плагинчиков, то такие как я могут хоть как то помочь с дальнейшем развитием

deathsoft
16.01.2007, 17:29
Маленькое имхо: разберитесь все-таки с унрилом, там все просто. Проще только вообще ничего не делать.
Абсолютно поддерживаю, все сделано в виде оддельных файлов, а то что все они инклюдаются в один главный файл - так это чтобы не зависить от global intermodule optimization. В исходниках можно разобраться за один вечер, мне нужно было сделать, чтобы magik правильно работал на скорпионе (SMT меня тогда мягко послал подальше, сказав - делай сам), я это сделал элементарно за 15 минут, хотя сорцы до этого вообще в глаза не видел. Там сорцов то "кот наплакал", это не сорцы виндовс нт, где их сотни мегабайт.

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

boo_boo
16.01.2007, 18:05
Маленькое имхо: разберитесь все-таки с унрилом, там все просто. Проще только вообще ничего не делать. мне столько раз по работе приходилось чужие сорцы лопатить, что дурно уже от этого дела :rolleyes:
а если по существу, то
1) анрил модульным назвать никак нельзя (разве что в сравнении с эмулями типа zx32), только звук в последних версиях вынесен отдельно
2) написан он на смеси С и С++, причем под win32/visualC (это только кажется, что С везде один, а ВГ-шку я с неделю портировал под юних)

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

Vladimir Kladov
16.01.2007, 21:19
ИМХО: в С/С++ понятие модуля отсутствует. Там есть классы и namespaces а это совсем не модули. Но я под модульностью понимаю разбивку на части, которая соответствует представлению о модульности. Содержимое части предназначено для выполнения каких-то связных задач, или собирает воедино какие-то группы кода, которые можно объединить в категория и сказать одной фразой - для того-то. В этом смысле модульность в унриле есть, и она не зависит от языка. И вообще модуль - это внеязыковое понятие, при чем тут С и С++. И на Паскале можно такое накорячить, по разным юнитам разбросать один модуль, и а несколько модулей в одном модуле перемешать. Это только от стиля программирования зависит. У SMT стиль отличный. Еще бы была нормальная оболочка для С/++, чтобы было удобнее находить по имени описание этого имени, а то приходится поиском по файлам рыться. В этом смысле сишникам тежелей, чем нам, Паскалистам, тот же MSVC лажается в большинстве случаев, не может указать, что откуда растёт.

deathsoft
16.01.2007, 23:07
тот же MSVC лажается в большинстве случаев
Ну, вот эта прога решает все эти проблемы http://www.wholetomato.com/.
В ней можно посмотреть откуда какая функция вызывается и переходить на объявления и реализацию лубой функции/макроса.

deathsoft
16.01.2007, 23:08
Еще бы была нормальная оболочка для С/++, чтобы было удобнее находить по имени описание этого имени, а то приходится поиском по файлам рыться
Есть соответвующие плагины к FARу. А также всякие редакторы типа Ultraedit/UltraeditStudio которые поддерживают ctags.

boo_boo
16.01.2007, 23:57
ИМХО: в С/С++ понятие модуля отсутствует. Там есть классы и namespaces а это совсем не модули. Но я под модульностью понимаю разбивку на части, которая соответствует представлению о модульности. Содержимое части предназначено для выполнения каких-то связных задач, или собирает воедино какие-то группы кода, которые можно объединить в категория и сказать одной фразой - для того-то. В этом смысле модульность в унриле есть, и она не зависит от языка. И вообще модуль - это внеязыковое понятие, при чем тут С и С++. И на Паскале можно такое накорячить, по разным юнитам разбросать один модуль, и а несколько модулей в одном модуле перемешать. Это только от стиля программирования зависит. У SMT стиль отличный. Еще бы была нормальная оболочка для С/++, чтобы было удобнее находить по имени описание этого имени, а то приходится поиском по файлам рыться. В этом смысле сишникам тежелей, чем нам, Паскалистам, тот же MSVC лажается в большинстве случаев, не может указать, что откуда растёт. C и C++ не при чем, это я просто к тому, что в анриле винегрет из двух языков, которые подразумевают совершенно разный подход к написанию программ.
ИМХО модуль -- это вещь в себе, которую можно пользовать через набор абстрактных интерфейсов, не вникая, что происходит внутри.
можно классы считать модулями, но тогда должна быть инкапсуляция, а в анриле куча псевдо-классов (псевдо, тк ни инкапсуляция ни наследование в анриле не используются, то есть классы юзаются как способ визуально обьединить ф-ии и данные), связанных друг с другом как напрямую (вплоть до обращения к полям данных), так и через кучу глобальных переменных.
так что насчет отличного стиля SMT в плане модульности не могу согласиться...
но вот подход к оптимизации у него действительно отличный, и алгоритмы реализованы классно, мне до такого как до звезды небесной :rolleyes:

MSVC-шная оболочка кошмар, но сторонних программ для рефакторинга туча. только ИМХО код с хорошо спроектированными интерфейсами (структурный или обьектный -- не суть) тем и хорош, что в нем и так можно разобраться.

Q-Master
17.01.2007, 09:40
мне столько раз по работе приходилось чужие сорцы лопатить, что дурно уже от этого дела :rolleyes:
а если по существу, то
2) написан он на смеси С и С++, причем под win32/visualC (это только кажется, что С везде один, а ВГ-шку я с неделю портировал под юних)


Смесь С и С++ это не так страшно. Страшнее сплошная заточка под х86 и little-endian. Вот тут как-раз всю башку сломишь разбираться где надо поворачивать байты, а где нет. :v2_crazy: