Эмуляция > Эмуляторы консолей 6 поколения и выше
PCSX2: Эмулятор Sony PS2 (продолжение)
<< < (357/1167) > >>
lob:

Вся необходимая информация находится под спойлером ниже: 1. Основная информация:

* Официальный сайт и версии эмулятора - здесь
* Биосы можно скачать - здесь
* Официальный список совместимости - здесь
* Свежие ревизии эмулятора с плагинами - здесь и тут
* Pack'и самых последних ревизий различных эмуляторов - здесь
* Настройки для игр - здесь и тут
* Об изменениях можно узнать - здесь (на английском)
* Руководство по настройке эмулятора - здесь
2. Библиотеки и утилиты:

* Microsoft Visual C++ 2008 SP1 Redistributable - здесь (х86) и тут (х64)
* Microsoft Visual C++ 2010 Redistributable - здесь
* Обновление DirectX (June 2010) - здесь
* Библиотеки для OpenGL-плагинов  - здесь
* Утилита для переноса сейвов на карту памяти - MYMC
* Программа для хранения настроек эмулятора  - PS2Launcher
3. Патчи и хекс коды для запуска игр в широкоэкранном режиме:

*
* Постоянно обновляемый архив патчей (более 500 игр) здесь
* Хекс коды для запуска игр в широкоэкранном режиме тут4. Дополнительные ссылки:

* Исправляют различные баги либо ускоряют процесс эмуляции. Могут давать побочные эффекты.
...В стадии разработки...
Silver 746:

--- Цитата: gared от 20 Май 2010, 19:40:44 ---комрады я дико извиняюсь за офтоп, но может ктонить вкурсе есть ли на соньке 2 игра Род Реш или типа того что был на сеге??

--- Конец цитаты ---

Думаю что нет.

На PS1 и 3DO Road Rash есть.
EdHell:

--- Цитата: gared ---есть ли на соньке 2 игра Род Реш или типа того что был на сеге??
--- Конец цитаты ---
Должна была быть Road Rash: New Generation, но ее отменили, а вообще мотогонок очень много, к похожим на Раш можно пожалуй отнести Jacked.
wasilisk78:

--- Цитата: Silver 746 ---Зачем это печатать на форуме Emu-Land?
--- Конец цитаты ---
Как зачем. Самое то место. Пусть пишет. Человек, похоже, разбирается. Может и толк из этого будет. Не всё же читать по 1001 разу, одни и те же вопросы. = )
Kos:

--- Цитата: MarcusFenix от 20 Май 2010, 09:25:19 ---Пожалуста подскажите что надо сделать чтобы в Final Fantasy X в роликах небыло белых полосок а то ролик меньше чем на половину виден, пробовал на ревизии PCSX2 r2986 и ранее, копался в настройках так и не решил эту проблему, пробовал плагины и ZeroGS и GSdx!

--- Конец цитаты ---
Попробуй на более старых ревах! Играю в неё сейчас на 2819 реве и таких проблем нет.
sanyaprog:
wasilisk78, полностью согласен. Последние 3 страницы читаю тему с удовольствием, DH хорошо веселит ;)

P.S. Главное чтобы ушел живым отсюда, остальное все фигня)
Silver 746:

--- Цитата: DH от 20 Май 2010, 16:38:53 ---GS.cpp
#include "PrecompiledHeader.h"
#include "Common.h"

#include <list>

#include "GS.h"
#include "Gif.h"
#include "Counters.h"

using namespace Threading;
using namespace R5900;

u32 CSRw;

__aligned16 u8 g_RealGSMem[0x2000];
extern int m_nCounters[];

void gsOnModeChanged( Fixed100 framerate, u32 newTickrate )
{
   GetMTGS().SendSimplePacket( GS_RINGTYPE_MODECHANGE, framerate.Raw, newTickrate, 0 );
}

static bool      gsIsInterlaced   = false;
GS_RegionMode   gsRegionMode   = Region_NTSC;


void gsSetRegionMode( GS_RegionMode region )
{
   if( gsRegionMode == region ) return;

   gsRegionMode = region;
   UpdateVSyncRate();
}


// Make sure framelimiter options are in sync with the plugin's capabilities.
void gsInit()
{
   memzero(g_RealGSMem);
}

void gsReset()
{
   GetMTGS().ResetGS();

   UpdateVSyncRate();
   GSTransferStatus = (STOPPED_MODE<<4) | (STOPPED_MODE<<2) | STOPPED_MODE;
   memzero(g_RealGSMem);

   GSCSRr = 0x551B4000;   // Set the FINISH bit to 1 for now
   GSIMR = 0x7f00;
   gifRegs->stat.reset();
   gifRegs->ctrl.reset();
   gifRegs->mode.reset();
}

void gsGIFReset()
{
   gifRegs->stat.reset();
   gifRegs->ctrl.reset();
   gifRegs->mode.reset();
}

void gsCSRwrite(u32 value)
{
   if (value & 0x200) { // resetGS

      // perform a soft reset -- which is a clearing of all GIFpaths -- and fall back to doing
      // a full reset if the plugin doesn't support soft resets.

      if( GSgifSoftReset != NULL )
      {
         GIFPath_Clear( GIF_PATH_1 );
         GIFPath_Clear( GIF_PATH_2 );
         GIFPath_Clear( GIF_PATH_3 );
      }
      else
      {
         GetMTGS().SendSimplePacket( GS_RINGTYPE_RESET, 0, 0, 0 ); /* в перезагрузку надо кинуть чтобы от мелких багов в текстурах избавится */
      }

      CSRw |= 0x1f;
      GSCSRr = 0x551B4000;   // Set the FINISH bit to 1 - GS is always at a finish state as we don't have a FIFO(saqib)
      GSIMR = 0x7F00; //This is bits 14-8 thats all that should be 1
   }
   else if( value & 0x100 ) // FLUSH
   {
      // Our emulated GS has no FIFO, but if it did, it would flush it here...
      //Console.WriteLn("GS_CSR FLUSH GS fifo: %x (CSRr=%x)", value, GSCSRr);
   }
   else
   {
      CSRw |= value & 0x1f;
      GetMTGS().SendSimplePacket( GS_RINGTYPE_WRITECSR, CSRw, 0, 0 );
      GSCSRr = ((GSCSRr&~value)&0x1f)|(GSCSRr&~0x1f);
   }

}

static void IMRwrite(u32 value)
{
   GSIMR = (value & 0x1f00)|0x6000;

   if((GSCSRr & 0x1f) & (~(GSIMR >> 8) & 0x1f))
   {
      gsIrq();
   }
   // don't update mtgs mem
}

__forceinline void gsWrite8(u32 mem, u8 value)
{
   switch (mem)
   {
      case GS_CSR: // GS_CSR
         gsCSRwrite((CSRw & ~0x000000ff) | value); break;
      case GS_CSR + 1: // GS_CSR
         gsCSRwrite((CSRw & ~0x0000ff00) | (value <<  8)); break;
      case GS_CSR + 2: // GS_CSR
         gsCSRwrite((CSRw & ~0x00ff0000) | (value << 16)); break;
      case GS_CSR + 3: // GS_CSR
         gsCSRwrite((CSRw & ~0xff000000) | (value << 24)); break;
      default:
         *PS2GS_BASE(mem) = value;
         GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE8, mem&0x13ff, value, 0);
   }
   GIF_LOG("GS write 8 at %8.8lx with data %8.8lx", mem, value);
}
/* u8 вывод используется только в TOXIC */
__forceinline void _gsSMODEwrite( u32 mem, u32 value )
{
   switch (mem)
   {
      case GS_SMODE1:
         gsSetRegionMode( ((value & 0x6000) == 0x6000) ? Region_PAL : Region_NTSC );
      break;

      case GS_SMODE2:
         gsIsInterlaced = (value & 0x1);
      break;
   }
}

//////////////////////////////////////////////////////////////////////////
// GS Write 16 bit

__forceinline void gsWrite16(u32 mem, u16 value)
{
   GIF_LOG("GS write 16 at %8.8lx with data %8.8lx", mem, value);

   _gsSMODEwrite( mem, value );

   switch (mem)
   {
      case GS_CSR:
         gsCSRwrite( (CSRw&0xffff0000) | value);
      return; // do not write to MTGS memory

      case GS_CSR+2:
         gsCSRwrite( (CSRw&0xffff) | ((u32)value<<16));
      return; // do not write to MTGS memory

      case GS_IMR:
         IMRwrite(value);
      return; // do not write to MTGS memory
   }

   *(u16*)PS2GS_BASE(mem) = value;
   GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE16, mem&0x13ff, value, 0);
} /*u16 ввывод зачем?*/

//////////////////////////////////////////////////////////////////////////
// GS Write 32 bit

__forceinline void gsWrite32(u32 mem, u32 value)
{
   jASSUME( (mem & 3) == 0 );
   GIF_LOG("GS write 32 at %8.8lx with data %8.8lx", mem, value);

   _gsSMODEwrite( mem, value );

   switch (mem)
   {
      case GS_CSR:
         gsCSRwrite(value);
      return;

      case GS_IMR:
         IMRwrite(value);
      return;
   }

   *(u32*)PS2GS_BASE(mem) = value;
   GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE32, mem&0x13ff, value, 0);
}
/*u32 ввывод зачем?*/
//////////////////////////////////////////////////////////////////////////
// GS Write 64 bit

void __fastcall gsWrite64_page_00( u32 mem, const mem64_t* value )
{
   gsWrite64_generic( mem, value );
   _gsSMODEwrite( mem, (u32)value[0] );
}

void __fastcall gsWrite64_page_01( u32 mem, const mem64_t* value )
{
   GIF_LOG("GS Write64 at %8.8lx with data %8.8x_%8.8x", mem, (u32*)value[1], (u32*)value[0]);

   switch( mem )
   {
      case GS_CSR:
         gsCSRwrite((u32)value[0]); /*не мешало бы зделать гибкое сохранение*/
      return;

      case GS_IMR:
         IMRwrite((u32)value[0]); /*не мешало бы зделать гибкое сохранение*/
      return;
   }

   gsWrite64_generic( mem, value ); /*не мешало бы зделать гибкое сохранение*/
}

void __fastcall gsWrite64_generic( u32 mem, const mem64_t* value )
{
   const u32* const srcval32 = (u32*)value;
   GIF_LOG("GS Write64 at %8.8lx with data %8.8x_%8.8x", mem, srcval32[1], srcval32[0]);

   *(u64*)PS2GS_BASE(mem) = *value;
   GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE64, mem&0x13ff, srcval32[0], srcval32[1]);
}

//////////////////////////////////////////////////////////////////////////
// GS Write 128 bit

void __fastcall gsWrite128_page_00( u32 mem, const mem128_t* value )
{
   gsWrite128_generic( mem, value );
   _gsSMODEwrite( mem, (u32)value[0] );
}

void __fastcall gsWrite128_page_01( u32 mem, const mem128_t* value )
{
   switch( mem )
   {
      case GS_CSR:
         gsCSRwrite((u32)value[0]);
      return;

      case GS_IMR:
         IMRwrite((u32)value[0]);
      return;
   }

   gsWrite128_generic( mem, value );
}

void __fastcall gsWrite128_generic( u32 mem, const mem128_t* value )
{
   const u32* const srcval32 = (u32*)value;

   GIF_LOG("GS Write128 at %8.8lx with data %8.8x_%8.8x_%8.8x_%8.8x", mem,
      srcval32[3], srcval32[2], srcval32[1], srcval32[0]);

   const uint masked_mem = mem & 0x13ff;
   u64* writeTo = (u64*)(&g_RealGSMem[masked_mem]);

   writeTo[0] = value[0];
   writeTo[1] = value[1];

   GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE64, masked_mem, srcval32[0], srcval32[1]);
   GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE64, masked_mem+8, srcval32[2], srcval32[3]);
}
/*u128 ввывод зачем?*/

__forceinline u8 gsRead8(u32 mem)
{
   GIF_LOG("GS read 8 from %8.8lx  value: %8.8lx", mem, *(u8*)PS2GS_BASE(mem));
   return *(u8*)PS2GS_BASE(mem);
}

__forceinline u16 gsRead16(u32 mem)
{
   GIF_LOG("GS read 16 from %8.8lx  value: %8.8lx", mem, *(u16*)PS2GS_BASE(mem));
   return *(u16*)PS2GS_BASE(mem);
}

__forceinline u32 gsRead32(u32 mem)
{
   GIF_LOG("GS read 32 from %8.8lx  value: %8.8lx", mem, *(u32*)PS2GS_BASE(mem));
   return *(u32*)PS2GS_BASE(mem);
}

__forceinline u64 gsRead64(u32 mem)
{
   // fixme - PS2GS_BASE(mem+4) = (g_RealGSMem+(mem + 4 & 0x13ff))
   GIF_LOG("GS read 64 from %8.8lx  value: %8.8lx_%8.8lx", mem, *(u32*)PS2GS_BASE(mem+4), *(u32*)PS2GS_BASE(mem) );
   return *(u64*)PS2GS_BASE(mem);
}

void gsIrq() {
   hwIntcIrq(INTC_GS);
}

// --------------------------------------------------------------------------------------
//  gsFrameSkip
// --------------------------------------------------------------------------------------
// This function regulates the frameskipping status of the GS.  Our new frameskipper for
// 0.9.7 is a very simple logic pattern compared to the old mess.  The goal now is to provide
// the most compatible and efficient frameskip, instead of doing the adaptive logic of
// 0.9.6.  This is almost a necessity because of how many games treat the GS: they upload
// great amounts of data while rendering 2 frames at a time (using double buffering), and
// then use a simple pageswap to display the contents of the second frame for that vsync.
//  (this approach is mostly seen on interlace games; progressive games less so)
// The result is that any skip pattern besides a fully consistent 2on,2off would reuslt in
// tons of missing geometry, rendering frameskip useless.
//
// So instead we use a simple "always skipping" or "never skipping" logic.
//
// EE vs MTGS:
//   This function does not regulate frame limiting, meaning it does no stalling. Stalling
//   functions are performed by the EE, which itself uses thread sleep logic to avoid spin
//   waiting as much as possible (maximizes CPU resource availability for the GS).

__forceinline void gsFrameSkip()
{

   if( !EmuConfig.GS.FrameSkipEnable ) return;

   static int consec_skipped = 0;
   static int consec_drawn = 0;
   static bool isSkipping = false;

   GSsetFrameSkip( isSkipping );

   if( isSkipping )
   {
      ++consec_skipped;
      if( consec_skipped >= EmuConfig.GS.FramesToSkip )
      {
         consec_skipped = 0;
         isSkipping = false;
      }
   }
   else
   {
      ++consec_drawn;
      if( consec_drawn >= EmuConfig.GS.FramesToDraw )
      {
         consec_drawn = 0;
         isSkipping = true;
      }
   }
}

void gsPostVsyncEnd()
{
   *(u32*)(PS2MEM_GS+0x1000) ^= 0x2000; // swap the vsync field
   GetMTGS().PostVsyncEnd();
}

void _gs_ResetFrameskip()
{
   GSsetFrameSkip( 0 );
}

// Disables the GS Frameskip at runtime without any racy mess...
void gsResetFrameSkip()
{
   GetMTGS().SendSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0);
}

void SaveStateBase::gsFreeze()
{
   FreezeMem(PS2MEM_GS, 0x2000);
   Freeze(CSRw);
   gifPathFreeze();
}

--- Конец цитаты ---

Сообщил программисту rama, сказал всё как было, скопировал весь код с пометками в ЛС сообщение.

Contrary to popular belief, the Emotion Engine is not a 128-bit processor as it does not process a single 128-bit value, but a group of four 32-bit values that are stored in one 128-bit register.

И вот на заметку, в принципе консоль не считается 128 битной, 32бита сложить 4 раза = 128бит


--- Цитата: wasilisk78 от 20 Май 2010, 22:47:18 ---Как зачем. Самое то место. Пусть пишет. Человек, похоже, разбирается. Может и толк из этого будет. Не всё же читать по 1001 разу, одни и те же вопросы. = )

--- Конец цитаты ---

DH возможно прав...
Rockman Z:
Почему окно с созданием новой картой памяти закрыто? Тоесть.Захожу в опцию еmulation settings, во вкладку memory cards.Там ничего нельзя изменить.Не новую карту памяти создать, не старую поменять.Как убрать этот косяк? Ревизия 2661.
Timrael:
Народ помогите вот такая у меня проблема в Final Fantasy X, запускаю в ролике и даже как начинаю играть, не прорисовываются все текстуры, как это исправить? Использую PCSX2 0.9.6, графический плагин GSdx v0.1.15 CSS4.1, системные конфигурации Intel Core 2 Duo E7600, GTX 260, 2gb оперативы.
Заранее спасибо
Voron:
Русская версия? Если да, то глюк руссификации. У меня такое было в 0.9.6. При этом английская шла без проблем. В более поздних версиях PCSX2 проблемма была профиксена.
Timrael:
да русская. У меня есть 0.9.7, но он не хочет почему-то эмулировать, вот такое выдаёт.

HellCar:

--- Цитата: Timrael от 21 Май 2010, 10:28:18 ---Народ помогите вот такая у меня проблема в Final Fantasy X, запускаю в ролике и даже как начинаю играть, не прорисовываются все текстуры, как это исправить? Использую PCSX2 0.9.6, графический плагин GSdx v0.1.15 CSS4.1, системные конфигурации Intel Core 2 Duo E7600, GTX 260, 2gb оперативы.
Заранее спасибо

--- Конец цитаты ---

Timrael.   Поставь любую из последних ревизий и будет тебе счастье. Скачать:http://www.emucr.com/search/label/PS2/
Timrael:
хм, скачал последний Pcsx2-r3053, тоже самое что и в предыдущим сообщении, он просто не эмулирует игры.
P.S. настройки я оставляю все те же, единственное меняю управление пда.
HellCar:

--- Цитата: Timrael от 21 Май 2010, 11:12:55 ---хм, скачал последний Pcsx2-r3053, тоже самое что и в предыдущим сообщении, он просто не эмулирует игры.
P.S. настройки я оставляю все те же, единственное меняю управление пда.

--- Конец цитаты ---


Могу скинуть на мыло свою сборку 3052. FFX на ней идёт просто отлично ( OS - Win7 x64 )
Timrael:
ок давай Timrael@mail.ru спасибо заранее, кстати забыл добавить у меня XP
HellCar:

--- Цитата: Timrael от 21 Май 2010, 12:01:59 ---ок давай Timrael@mail.ru спасибо заранее, кстати забыл добавить у меня XP

--- Конец цитаты ---

Уже отправил,пробуй.
Timrael:
Во спасибо, всё щас работает отлично, и понял почему у меня не эмулировал, всё дело в биосе у тебя японский 1 версии, а я использовал Евро 2 версии, из за этого не запускал игры щас поменял в своей ревизии биосы всё работает на ура))
HellCar:

--- Цитата: Timrael от 21 Май 2010, 12:27:50 ---Во спасибо, всё щас работает отлично, и понял почему у меня не эмулировал, всё дело в биосе у тебя японский 1 версии, а я использовал Евро 2 версии, из за этого не запускал игры щас поменял в своей ревизии биосы всё работает на ура))

--- Конец цитаты ---

Вот и ладушки )))
Kein:

--- Цитата: DH от 20 Май 2010, 16:38:53 ---GS.cpp
--- Конец цитаты ---
Не успел, тебе уже оветили :<

Anyway, касательно этого:

--- Цитата ---ага, а может ты знаеш их лично, или знаеш хотябы адрес по которому они открыто разговаривают с пользоватилями?
--- Конец цитаты ---

Да, я знаю, есть IRC-канал девелоперов, где они готовы дать ответы на те вопросы, на которые в силах ответить. Альсо, вот спец-секция для таких вопросов, задай его там, Jake, rama или refraction ответят.
WounTW:
Как запустить SpongeBob : Revenge of the Flying Dutchman? Просто на загрузке застревает.
strjaz:
Kein, как там дела с патчами обстоят для неработающих игр?
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии