Сообщения без ответов | Активные темы Текущее время: 27 апр 2024, 23:44



Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
 Как создать эмулятор? 

Нужно оно кому-то?
Да 89%  89%  [ 25 ]
Нет 11%  11%  [ 3 ]
Всего голосов : 28

 Как создать эмулятор? 
Автор Сообщение
Сообщение 29 ноя 2010, 20:01
Профиль

Зарегистрирован:
14 ноя 2007, 11:19
Сообщения: 370
Собственно вопрос ко всем участникам форума, есть ли интерес у кого-то узнать, что да как, в этом не простом (впрочем кому-то напротив простом) деле? Если есть желающие то просьба отписаться, возможно предложить свои идеи? Если возникнет интерес, то можно разобрать любой "открытый" эмулятор или не без моей помощи конечно с нуля по шагам написать скелет простого эмулятора, самой простой системой мне всегда казалось и до сих пор кажется PSX, но можно выбрать и любую другую систему, но слишком сложную выбирать смысла нет ибо тогда навороты и "извороты" будут понятны далеко не всем. В общем выражаем свои идеи и исходя из Ваших ответов, я решу стоит ли развивать данную тему.


Сообщение 29 ноя 2010, 20:46
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Ничего себе PSX простая система :)
Мне было бы интересно почитать, "просто так". Хоть я и представляю, как устроена приставка и эмулятор.
Вообще говоря, имхо, если человек задаётся вопросом "как написать эмулятор?", это значит, что ему рано писать эмулятор. Скорей всего, он даже не знает элементарных вещей, не знает, как устроены отдельные узлы и не умеет грамотно проектировать программы. Постепенно он сам придёт к ответу. В двух словах это всё не объяснить.

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 29 ноя 2010, 20:53
Профиль

Зарегистрирован:
14 ноя 2007, 11:19
Сообщения: 370
Некоторым нужно помочь просто, я не родился программистом, я даже не учился профессионально этому, но я захотел и вот я знаю то, что знаю, а мне в начале не помешала бы помощь, но увы её не было и пришлось все искать и изучать самому.


Сообщение 29 ноя 2010, 21:03
Профиль WWW
Основатель сайта
Аватара пользователя

Зарегистрирован:
21 июл 2007, 15:40
Сообщения: 2234
Откуда: Москва
Лично я до сих пор имею довольно поверхностное представление о внутреннем устройстве эмуляторов, т.к. желание поиграть всегда пересиливало желание разобраться в этом деле. Кроме того, создание эмулятора всегда представлялось мне делом довольно сложным, ведь тут нужно не только хорошо программировать, но и знать архитектуру приставки и т.д.
Так что для общего развития с удовольствием узнал бы поподробнее об этом, тем более из уст русского автора. ^_^


Сообщение 29 ноя 2010, 21:08
Профиль

Зарегистрирован:
18 янв 2009, 14:20
Сообщения: 805
И я с интересом почитаю, если будет красиво и полно, несмотря на то что имею опыт. И идея с PSX мне тоже нравится. :-D


Сообщение 29 ноя 2010, 21:35
Профиль
Аватара пользователя

Зарегистрирован:
15 сен 2008, 16:22
Сообщения: 407
Откуда: Neo Arcadia
Это действительно интересно и полезно. Даже в случае если бы на форуме никто не интересовался подобным(что я говорю? на эму-раше никто не интересуется тем как создают эмуляторы? невозможно!) это было бы ценной информацией для тех кто искал бы её. Ничего против PSX не имею, а если это ещё и как-то сможет отразиться на эмуляции оной(например edgbla улучшит свои плагины), то всецело за.


Сообщение 30 ноя 2010, 14:50
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
И мне очень интересно - особенно NES. Заодно и реализовал бы давнюю задумку:
Хочется сделать денди-режим в оригинальном нинтендуляторе.
Я пробовал это сделать, но единственное, что смог - это заменить DPCM и Noise PAL-таблицы на NTSC-таблицы
(решена проблема с несоответствием тона DPCM и остальных каналов).
Частоту CPU и тайминги не осилил - а это одна из наиважнейших вещей
С нестопией в этом плане все понятно. Частоты, тайминги - все значения расписаны, стоит только заменить на нужные.

Если кто-нибудь из наших поможет - будет здорово.
Помимо нестопии и нинтендулятора, думаю FCEUX с новым PPU подойдет на эту роль.
FCEU не подходит (по словам Санча), т.к. эмуляцияя PPU не тактово-точная.

Также интересует качественная эмуляция звуковых чипов, хотя бы самых простых PSG (SN76489AN, 2A03, AY-3-8910)

Проблема в том, что я не знаю ни языков, ни архитектуры микропроцессорных систем.
Только совсем в общих чертах со времен института помню (АЛУ, аккумулятор и т.д.).
Даже с какого боку подступить, непонятно.
"Как работает эмулятор" - слабо представляю, наподобие перевода системы команд одного микропроцессора в другую в реальном времени.
Как эмулировать систему целиком (множество чипов), включая ввод и вывод - не знаю.
Интересно разобраться и в так называемой "тактово-точной" эмуляции. Какие нужны знания для реализации подобного:
Достаточно полная эмуляция некоторой аппаратной платформы требует предельной точности, до уровня отдельных тактовых циклов, недокументированных особенностей и даже ошибок реализации. Это особенно важно для таких моделей классических домашних машин, как Commodore 64, ZX-Spectrum, программное обеспечение которых сильно зависит от программистских решений.

В общем, "школота" полная. Но я с удовольствием поддерживаю предложение Wind'a

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 30 ноя 2010, 15:26
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Качаем эту книжку, читаем сначала NES раздел, затем читаем в конце сабжевый раздел. Много думаем. Делаем выводы и принимаемся за работу. О результатах докладываем тут.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 30 ноя 2010, 15:44
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Вот это книжечка. Даже не подозревал о её существовании. Спасибо, будем курить вдумчиво.

_________________
Nestopia 1.37/1.40 Fixed


Сообщение 30 ноя 2010, 18:34
Профиль

Зарегистрирован:
14 ноя 2007, 11:19
Сообщения: 370
Ну для «затравочки» решил черкнуть, немного для начала:
Много лет назад я уже писал немного о эмуляции проца, трансляции памяти и т.п., вроде даже на форуме те статьи есть, но я решил немного повторится и написать все с начала:
Итак, собственно эмуляция что это такое, если верить русскоязычной WIKI то это -«воспроизведение программными или аппаратными средствами либо их комбинацией работы других программ или устройств». Коротко и лаконично, но в большинстве своем мало понятно, а скорей совсем не ясно. У меня определения собственного впрочем нет, так что будем раскрывать данное понятие по шагам:
Начнем, для начала представим себе абстрактную «систему», а точнее рассмотрим основные модули которые обычно присутствуют (хотя могут и отсутствовать все же) в любой «системе»: Процессор основа всего, устройство видео\аудио вывода, ну и собственно устройство ввода (клавиатура, джойстик, мышка и много чего еще).
Эмуляция любой системы начинается с эмуляции процессора. Как же работает процессор с точки зрения программиста, а тут все довольно просто, в стародавние времена, каждый мало-мальский человек называющий себя программистом умел писать на «ассемблере» (увы для нынешнего поколения это уже незнакомое слово), так вот ассемблер представлял не что иное как мнемоническое представление команд процессора, т.е. если программист писал «add eax, edx», то он хотел, не что иное как прибавить к значению содержащемуся в регистре процессора eax, значение регистра edx. Компилятор, ассемблируя исходный код, просто вместо мнемоник подставлял в выходной файл машинное представление каждой из встреченных в коде команды.
При запуске конечного файла, данные загружались в оперативную память и указатель на код устанавливался в точку входа написанного кода. Процессор в свою очередь начинал считывать данные из оперативной памяти декодировать команды и исполнять, так вот эмулируя процессор необходим делать абсолютно тоже самое, т.е. считать команду из оперативной памяти, декодировать её и соответственно исполнить её, затем также считать следующую и проделать тоже самое и так постоянно читать и исполнять, более подробно как это делается напишу позже.


Сообщение 30 ноя 2010, 19:27
Может быть не стоило начинать описание прямо в опросе? Раз дело начато, значит опрос сделал своё дело.


Сообщение 30 ноя 2010, 19:39
Профиль

Зарегистрирован:
14 ноя 2007, 11:19
Сообщения: 370
Ну опрос добавлен для выяснения настроений, а там если будет нужно отдельную тему выделить не проблема или даже целый раздел форума


Сообщение 01 дек 2010, 04:04
Профиль

Зарегистрирован:
09 авг 2007, 11:23
Сообщения: 525
Тогда уж и Capcom ZN 1/2 заэмулить:)

_________________
Применение ArtMoney в эмуляторных играх


Сообщение 01 дек 2010, 05:18
Профиль

Зарегистрирован:
14 ноя 2007, 11:19
Сообщения: 370
Помнится оно на железе PSX так что совсем не проблема


Сообщение 01 дек 2010, 12:11
Профиль

Зарегистрирован:
09 авг 2007, 11:23
Сообщения: 525
Если что, книга из поста HWM есть тут http://tv-games.ru/media/view/consoles.html

_________________
Применение ArtMoney в эмуляторных играх


Сообщение 01 дек 2010, 12:28
Профиль

Зарегистрирован:
30 окт 2007, 00:53
Сообщения: 75
iddqd писал(а):
Тогда уж и Capcom ZN 1/2 заэмулить:)

Ну вообще-то уж не один ZN а всё PSX-based лучше.


Сообщение 01 дек 2010, 13:02
Профиль

Зарегистрирован:
04 ноя 2010, 18:55
Сообщения: 29
Хорошая тема, заодно и эмулятор будет :D


Сообщение 01 дек 2010, 14:30
Профиль WWW
Основатель сайта
Аватара пользователя

Зарегистрирован:
21 июл 2007, 15:40
Сообщения: 2234
Откуда: Москва
iddqd писал(а):
Тогда уж и Capcom ZN 1/2 заэмулить:)

А чего его эмулировать, если есть ZiNc? Или речь о другом оборудовании идёт?


Сообщение 01 дек 2010, 14:41
Профиль

Зарегистрирован:
09 авг 2007, 11:23
Сообщения: 525
//Eevon, думаю, лишним не будет.

_________________
Применение ArtMoney в эмуляторных играх


Сообщение 04 дек 2010, 13:32
Профиль

Зарегистрирован:
14 ноя 2007, 11:19
Сообщения: 370
Итак, после недолго затишья продолжим:
Как я и писал выше сегодня я постараюсь рассказать Вам, что же из себе представляет эмуляция процессора, различают два способа эмуляции: «интерпретация», «динамическая рекомпиляция», некоторые еще выделяют так называемую «статическую рекомпиляцию», но я не представляю как можно заставить работать данный вид эмуляции в жизни, впрочем утверждалось, что некий «сorn» эмулятор Nintendo 64 использовал именно этот способ эмуляции, но учитывая что сырцы не были никогда открыты, поверь в это я не могу, а поэтому о ней рассказывать смысла не вижу.
Итак, что же есть такое интерпретация кода процессора?
Собственно, я в двух словах написал ранее, так что просто повторюсь, считываем команду процессора из памяти, декодируем ее и сразу исполняем.
Чем же хорош это способ? А все просто, реализовать данный метод эмуляции крайне просто и не трудозатратно, минимум ошибок, считается более аккуратным способом эмуляции, но с этим утверждением я не согласен, но у этого метода есть очень большой минус, скорость эмуляции даже очень быстрых системах, крайне низка.
Поэтому и был придуман другой способ эмуляции, «динамическая рекомпиляция»:
В чем отличия от первого? А отличие, в том что создается как бы кеш декодированных инструкций, т.е. мы также считываем команду за командой, также ее декодируем, НО, вместо того чтобы ее исполнить, мы пишем в буфер код, который равнозначен тому, что должна исполнить данная команда, причем с применением всяческих оптимизаций, вплоть до того, что кол-во команд становится даже меньше чем было в изначальном коде, более подробно о данных оптимизациях расскажу в последующем. Собственно весь код бьется на блоки, после компляции очередного блока его исполняем.

Ну и хочу привести немного кода и заодно сказать почему же PSX самая простая для эмуляции система, а все потому что у данной системы в основе лежит MIPS R3000A, этот процессор настолько прост, что проще не бывает, собственно в качестве примера приведу код из PCSX:
Я убрал лишне чтобы не засорять:

Код:
void execute() {
   u32 code = *(u32 *)PSXM(psxRegs.pc); /* собственно считывание очередной инструкции */

   psxRegs.pc += 4; /* увеличиваем указатель на код на размер инструкции */

   psxBSC[psxRegs.code >> 26](); /* ну и самое главное стадия декодирования, переход на ф-ию считанной нами инструкции */
}


В качестве примера эмуляции инструкции:

Код:
void psxADDI()    
{
if (!_Rt_) return; /* проверка не производит ли команда запись в R0, дело в том что данный регистр зареверзирован и всегда возвращает ноль, т.е. читать его можно, но нельзя его изменять */
_rRt_ = _u32(_rRs_) + _Imm_ ; /* собственно исполнение команды, суть запись в номер регистра который закодирован в _rRt_, результата сложения регистра закодированного в _rRs_ с некой константой закодированной в _Imm_
}


Итак, поступаем с каждой известной командой.


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 30 ]  На страницу 1, 2  След.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 44


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB