Войти
Life EngineФорум

Мой эмулятор NES:: что-то уже получается : ) (комментарии) (3 стр)

Страницы: 1 2 3 4 5 Следующая »
#30
20:31, 4 окт. 2011

Bizunow
> Кстати! Есть идея для тех, кто хочет потренироваться именно в рекомпиляции
> исполняемых файлов! Короче, вспомним про чип-8. Там всего то 35 команд, кто
> хорошо знает ассемблер тому не составит труда транслировать эти команды в х86
> ассемблер )
тут основная проблема не в рекомпиляции команд CPU, а внаверно, невозможности рекомпиляции игры "Х"  без знания её архитектуры на целевое железо, так вот например NES игры зачастую жёстко завязаны на тайминги прерываний, V-Blank, H-Blank и много много чего.  Каким образом это можно рекомпилировать??  Придётся _всёравно_ повторять работу системы - получаем эмулятор ).  рекомпилировать можно частично - отдельно работу каждой из частей железа.  А синхронизировать уже как в обычном эмуляторе.    Если бы всё было так просто - давно были бы статические рекомпиляторы NES игр : )  Но где они?  Нет _ни одного_


#31
21:01, 4 окт. 2011

.L
>я какбэ в курсе что такое JIT )))
А х**е уже вторую страницу мне мозг выносиш?

>там динамическая рекомпилляция кода, НЕ интерпретация,практически тоже самое.
Ты хоть исходники смотрел?

// Rt = Rs + Im signed [exception on overflow]
void ADDI()
{
        s64 result = _add32_Overflow( cpuRegs.GPR.r[_Rs_].SD[0], _Imm_ );
        if (!_Rt_) return;
        cpuRegs.GPR.r[_Rt_].SD[0] = result;
}


// Rt = Rs + Im signed !!! [overflow ignored]
// This instruction is effectively identical to ADDI.  It is not a true unsigned operation,
// but rather it is a signed operation that ignores overflows.
void ADDIU()
{
        if (!_Rt_) return;
        cpuRegs.GPR.r[_Rt_].SD[0] = cpuRegs.GPR.r[_Rs_].SL[0] + _Imm_;
}


// Rt = Rs + Im [exception on overflow]
// This is the full 64 bit version of ADDI.  Overflow occurs at 64 bits instead
// of at 32 bits.
void DADDI()
{
        s64 result = _add64_Overflow( cpuRegs.GPR.r[_Rs_].SD[0], _Imm_ );
        if (!_Rt_) return;
        cpuRegs.GPR.r[_Rt_].SD[0] = result;
}


// Rt = Rs + Im [overflow ignored]
// This instruction is effectively identical to DADDI.  It is not a true unsigned operation,
// but rather it is a signed operation that ignores overflows.
void DADDIU()
{
        if (!_Rt_) return;
        cpuRegs.GPR.r[_Rt_].UD[0] = cpuRegs.GPR.r[_Rs_].SD[0] + _Imm_;
}
void ANDI()     { if (!_Rt_) return; cpuRegs.GPR.r[_Rt_].UD[0] = cpuRegs.GPR.r[_Rs_].UD[0] & (u64)_ImmU_; } // Rt = Rs And Im (zero-extended)
void ORI()          { if (!_Rt_) return; cpuRegs.GPR.r[_Rt_].UD[0] = cpuRegs.GPR.r[_Rs_].UD[0] | (u64)_ImmU_; } // Rt = Rs Or  Im (zero-extended)
void XORI()     { if (!_Rt_) return; cpuRegs.GPR.r[_Rt_].UD[0] = cpuRegs.GPR.r[_Rs_].UD[0] ^ (u64)_ImmU_; } // Rt = Rs Xor Im (zero-extended)
void SLTI()     { if (!_Rt_) return; cpuRegs.GPR.r[_Rt_].UD[0] = (cpuRegs.GPR.r[_Rs_].SD[0] < (s64)(_Imm_)) ? 1 : 0; } // Rt = Rs < Im (signed)
void SLTIU()    { if (!_Rt_) return; cpuRegs.GPR.r[_Rt_].UD[0] = (cpuRegs.GPR.r[_Rs_].UD[0] < (u64)(_Imm_)) ? 1 : 0; } // Rt = Rs < Im (unsigned)

Если это не интерпритация, то я бэтмен, полюбому!

>так покажи класс ) Эмулируй же!!
А причём здесь я? Я не говориш что я могу написать лучше, я лиш сказал что PCSX2 далеко не ириска...

#32
21:12, 4 окт. 2011

.L, насколько я знаю, в чип-8 нет такой жесткой привязки к железу к в денди. Глянь на англоязычной вики статью про чип-8, мож что еще интересного скажешь?

#33
1:17, 5 окт. 2011

.L
Кстати время быстро тикает в Супер Марио, в остальных не смотрел.

#34
4:39, 5 окт. 2011

Усе, работает ^_^

#35
7:22, 5 окт. 2011

Wine 1.2.3. Полёт нормальный. Как заметил Nergal, всё немного быстро, но птеродактиля за яйца я всё-таки ухватил :)
Без OpenAL ругнулось, но запустилось.
В процессе игры вылетело пару сообщений

READ MEMORY 8  FOR IO IS NOT IMPLEMENTED!!!!
Жаль мой любимый Tom & Jerry не поддерживается.

#36
12:01, 5 окт. 2011

Nergal
> Кстати время быстро тикает в Супер Марио, в остальных не смотрел.
есть несколько видов марио - с быстрой музыкой и с медленной 9если ты по ней судишь)  А вообще может быстро тикает, потомучто я захардкодил всё на NTSC )

Igor'
> Ты хоть исходники смотрел?
да, КЭП

Igor'
> А х**е уже вторую страницу мне мозг выносиш?
Я тебе? Может наоборот всё? : )


Запускаю эмулятор:

хмм, что же это в логе??

Reserving memory for recompilers...
  SuperVU0 Recompiler Cache        @ 0x0E800000 -> 0x0F000000 [8mb]
  SuperVU1 Recompiler Cache        @ 0x0F000000 -> 0x0F800000 [8mb]
  Micro VU0 Recompiler Cache       @ 0x3C000000 -> 0x40000000 [64mb]
  Micro VU1 Recompiler Cache       @ 0x40000000 -> 0x44000000 [64mb]
  R5900-32 Recompiler Cache        @ 0x30000000 -> 0x34000000 [64mb]
  R3000A Recompiler Cache          @ 0x34000000 -> 0x36000000 [32mb]
  VIF0 Unpack Recompiler Cache     @ 0x36000000 -> 0x36800000 [8mb]
  VIF1 Unpack Recompiler Cache     @ 0x38000000 -> 0x38800000 [8mb]

Recompiler Cache  O___O  Прикинь, да!  Вот дуракии, написали интерпретатор а память под кеш рекомпилятора выделили!

Открываем проектег ^__^  Идём по "папкам":  pcsx2->System->Ps2->EmotionEngine->EE->Dynarec  Что это за файлики такие? с префиксом i : ) А ты посмотри, посмотри...

>Если это не интерпритация, то я бэтмен, полюбому!
Кэп не намекает а уже дико кричит, что в эмуляторе есть как интерпретация так и рекомпиляция давным давно и можно юзать любое из них, но с интерпретацией игры вообще не играбельные, и что копирование тобой кода интерпретатора не отменяет наличие рекомпилятора : )

#37
12:02, 5 окт. 2011

Dimich
> Без OpenAL ругнулось, но запустилось.
надо же о_О

Dimich
> Жаль мой любимый Tom & Jerry не поддерживается.
скоро будет : )

#38
16:13, 5 окт. 2011

хе-хе... что-то последнее время мода на эмуляторы денди. Вот и x0000 занялся этим делом.

#39
16:26, 5 окт. 2011

MarkoPolo
И ты начинай : )

#40
18:56, 5 окт. 2011

Это не мое. (= Эмулировать что-то старое не хочется, а для чего-то нового ни навыка, ни мозгов не хватит.

#41
19:29, 5 окт. 2011

А мне вот всегда что-то старенькое нравилось, хоть и не олд-фаг. С удовольствием сейчас бы в тетрис поиграл, жаль только нет под рукой...

#42
7:53, 6 окт. 2011

.L
>Recompiler Cache O___O Прикинь, да!
Ещё бы он работал без кеша, ещё бы он занимался сразу рекомпиляцией и интерпритацией, это был бы всё, финиш...
Не ты всётаки посмотри исходники...

#43
8:33, 6 окт. 2011

лучше ты посмотри ) а потом подумай - возможно ли с учетом адской архитектуры PS2 сделать лучше ;)  И если ответишь "да" - какие будут предложения? :)) конкретные.

#44
8:34, 6 окт. 2011

.L
>лучше ты посмотри ) а потом подумай - возможно ли с учетом адской архитектуры PS2 сделать лучше ;) И если ответишь "да" - какие будут предложения? :)) конкретные.
ок, слив засчитан.

Страницы: 1 2 3 4 5 Следующая »
Life EngineФорум

Тема в архиве.