Эмуляция > Эмуляторы консолей 6 поколения и выше
NullDC - Эмулятор Sega Dreamcast (продолжение)
<< < (141/258) > >>
Tetsujin:
Новые сборки у меня не позволяют монтировать многие образы игр - "ошибка загрузки образа" при запуске. При этом эти же образы прекрасно работают на 1.0.3 и также хорошо работали на ранних версиях сборок 1.0.4, точно не припомню последнюю рабочую версию. Бивис и флеш везде использовал и от 1.0.3 и заменял на другие, с ними всё также работало. А сейчас скачал кучу новых сборок - от r78 до оптимизированной r110, в последней уже вшит бивис с флешем, но ошибка одна и таже, как при кривом образе, запустился Шенми с GDI и с CDI/MDS - грузится меню (с музыкой больше глюков нет), но новую игру начать нельзя - раздаётся звук, как при попытке загрузить игру в отсутствие сейвов.
Это чем-то лечится? Перепробовал биосы и флеши других регионов, но толку нет.

UPD: Скачал r71 - там всё прекрасно работает, а на r72 и старше получаю свою ошибку. Исправления в r72 такие: "imgreader rewrite, part 1, Only gdis work for now", т.е. далее r72 поддерживается только GDI ?? Но на примере GDI Шенми в последней сборке r110 можно сказать, что и там оно не работает нормально - начать новую игру нельзя, к тому же тот же Шенми загрузился и с CDI и с MDS.
Silver 746:
На новой r110 многие игры стали работать лучше, особенно серия Sonic Adventure, в командной строке пропали почти все замечания о ошибочной записи памяти.

Wind:
LOL, вот что я называю реальный LOL, когда человек говорит и сам не понимает, что он сказал, я вот чес слово под стол закотился со смеху...
~Scorpion-:

--- Цитата: Silver 746 от 14 Декабрь 2010, 18:06:06 ---На новой r110 многие игры стали работать лучше, особенно серия Sonic Adventure, в командной строке пропали почти все замечания о ошибочной записи памяти.



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

Так в коде были вырублены все эти системы оповещения об ошибках, я так понял, чтоб глаза не мозолили. А то то, что сообщений об ошибках нет, ещё не значит, что они исправлены  ;)
Silver 746:
Я говорю про ошибочное обращение к памяти, в старых ревах было много замечаний, так или иначе по каким либо причинам игра функционирует не полностью, не может добавить всю музыку в список (Sound Test) не позволяет выбирать темы оформлении, итд...

Все эти мелкие ошибки связаны с памятью.

В новой реве всего одно замечание с обращением памяти - Error in dc\mem\sh4_internal_reg.cpp:RegSRead:87
Wind:
Жги дальше, реально смешно же...
wolfer:
Wind, не все же эмуляторы разрабатывают, зачем над человеком стебаться  :)
CaH4e3:
но почему-то все эксперты лол
MetalliC:
wolfer, дык, например, GTScorpion эмуляторы не разрабатывает, но смысл понял, и написал
а некоторые местные не способны даже прочитать чего им пишут ;)
Silver 746:
в новой реве было много изменений в памяти.

...         
28   28      //   much empty space
29   29      
30   30      
31   +   
31   32      //0x005F6800   SB_C2DSTAT   RW   ch2-DMA destination address
32   33       u32 SB_C2DSTAT = 0;
33   34      //0x005F6804   SB_C2DLEN   RW   ch2-DMA length
...         
327   328      u32 sb_ReadMem(u32 addr,u32 sz)
328   329      {
329   330         u32 offset = addr-SB_BASE;
331   +      register u32 rflags;
332   +      RegisterStruct* reg;
330   333      #ifdef TRACE
331   334         if (offset & 3/*(size-1)*/) //4 is min allign size
332   335         {
...         
335   338      #endif
336   339      
337   340         offset>>=2;
341   +      reg = &sb_regs[offset];
342   +      rflags = reg->flags;
338   343      
339   344      #ifdef TRACE
340      -      if (sb_regs[offset].flags & sz)
345   +      if (rflags & sz)
341   346         {
342   347      #endif
343      -         if (sb_regs[offset].flags & REG_READ_DATA )
344      -         {
345      -            if (sz==4)
346      -               return  *sb_regs[offset].data32;
347      -            else if (sz==2)
348      -               return  *sb_regs[offset].data16;
349      -            else
350      -               return  *sb_regs[offset].data8;
348   +         #ifdef SB_MAP_UNKNOWN_REGS
349   +         if(reg->unk)
350   +            log("Read from unk-mapped SB reg : addr=%x\n",addr);
351   +         #endif
352   +   
353   +         if (rflags & REG_READ_DATA )
354   +         {
355   +            switch(sz)
356   +            {
357   +               case 2:
358   +                  return *reg->data16;
359   +   
360   +               case 4:
361   +                  return *reg->data32;
362   +   
363   +               default:
364   +                  return *reg->data8;
365   +            }
351   366            }
352   367            else
353   368            {
354      -            if (sb_regs[offset].readFunction)
355      -               return sb_regs[offset].readFunction();
369   +            if (reg->readFunction)
370   +               return reg->readFunction();
356   371               else
357   372               {
358      -               if (!(sb_regs[offset].flags& REG_NOT_IMPL))
359      -                  EMUERROR("ERROR [readed write olny register]");
373   +               if (!(rflags& REG_NOT_IMPL))
374   +                  EMUERROR("ERROR [readed write olny register]\n");
360   375               }
361   376            }
362   377      #ifdef TRACE
363   378         }
364   379         else
365   380         {
366      -         if (!(sb_regs[offset].flags& REG_NOT_IMPL))
381   +         if (!(rflags& REG_NOT_IMPL))
367   382               EMUERROR("ERROR [wrong size read on register]");
368   383         }
369   384      #endif
370      -      if ((sb_regs[offset].flags& REG_NOT_IMPL))
371      -         EMUERROR2("Read from System Control Regs , not  implemented , addr=%x",addr);
385   +      if ((rflags& REG_NOT_IMPL))
386   +         EMUERROR2("Read from System Control Regs , not  implemented , addr=%x\n",addr);
387   +   
372   388         return 0;
373   389      }
374   390      
375   391      void sb_WriteMem(u32 addr,u32 data,u32 sz)
376   392      {
377   393         u32 offset = addr-SB_BASE;
394   +      register u32 rflags;
395   +      RegisterStruct* reg;
378   396      #ifdef TRACE
379   397         if (offset & 3/*(size-1)*/) //4 is min allign size
380   398         {
381   399            EMUERROR("unallinged System bus register write");
382   400         }
383   401      #endif
384      -   offset>>=2;
402   +   
403   +      offset>>=2;
404   +      reg = &sb_regs[offset];
405   +      rflags = reg->flags;
406   +   
385   407      #ifdef TRACE
386      -      if (sb_regs[offset].flags & sz)
408   +      if (rflags & sz)
387   409         {
388   410      #endif
389      -         if (sb_regs[offset].flags & REG_WRITE_DATA)
390      -         {
391      -            if (sz==4)
392      -               *sb_regs[offset].data32=data;
393      -            else if (sz==2)
394      -               *sb_regs[offset].data16=(u16)data;
395      -            else
396      -               *sb_regs[offset].data8=(u8)data;
411   +         #ifdef SB_MAP_UNKNOWN_REGS
412   +         if(reg->unk)
413   +            log("Write to unk-mapped SB reg : addr=%x,data=%x\n",addr,data);
414   +         #endif
415   +   
416   +         if (rflags & REG_WRITE_DATA)
417   +         {
418   +            switch(sz)
419   +            {
420   +               case 2:
421   +                  *reg->data16=(u16)data;
422   +               return;
423   +   
424   +               case 4:
425   +                  *reg->data32=data;
426   +               return;
427   +   
428   +               default:
429   +                  *reg->data8=(u8)data;
430   +               return;
431   +            }
432   +   
397   433               return;
398   434            }
399   435            else
400   436            {
401      -            if (sb_regs[offset].flags & REG_CONST)
402      -               EMUERROR("Error [Write to read olny register , const]");
437   +            if (rflags & REG_CONST)
438   +               EMUERROR("Error [Write to read olny register , const]\n");
403   439               else
404   440               {
405      -               if (sb_regs[offset].writeFunction)
406      -               {
407      -                  sb_regs[offset].writeFunction(data);
441   +               if (reg->writeFunction)
442   +               {
443   +                  reg->writeFunction(data);
408   444                     return;
409   445                  }
410   446                  else
411   447                  {
412      -                  if (!(sb_regs[offset].flags& REG_NOT_IMPL))
448   +                  if (!(rflags & REG_NOT_IMPL))
413   449                        EMUERROR("ERROR [Write to read olny register]");
414   450                  }
415   451               }
...         
418   454         }
419   455         else
420   456         {
421      -         if (!(sb_regs[offset].flags& REG_NOT_IMPL))
457   +         if (!(rflags & REG_NOT_IMPL))
422   458               EMUERROR4("ERROR :wrong size write on register ; offset=%x , data=%x,sz=%d",offset,data,sz);
423   459         }
424   460      #endif
425      -      if ((sb_regs[offset].flags& REG_NOT_IMPL))
426      -         EMUERROR3("Write to System Control Regs , not  implemented , addr=%x,data=%x",addr,data);
461   +      if ((rflags & REG_NOT_IMPL))
462   +         EMUERROR3("Write to System Control Regs , not  implemented , addr=%x,data=%x\n",addr,data);
427   463      }
428   464      
429   465      u32 SB_FFST_rc;
...         
445   481               log("SOFT RESET REQUEST FAILED\n");
446   482         }
447   483      }
484   +   
485   +   #ifdef SB_MAP_UNKNOWN_REGS
486   +   static u32 sb_unk[256] = {0};
487   +   static u32 sb_unk_ptr = 0;
488   +   
489   +   void sb_implement_unk(u32 loc,u32 base,const u32 size = 4)
490   +   {
491   +      base = (loc - base) >> 2;
492   +   
493   +      if(base >= 0x540)
494   +      {
495   +         log("sb_implement_unk : base(%u) out of range\n",base);
496   +         return;
497   +      }
498   +   
499   +      switch(size)
500   +      {
501   +         case 2:
502   +            sb_regs[base].flags=REG_16BIT_READWRITE | REG_READ_DATA | REG_WRITE_DATA;
503   +            sb_regs[base].data16=(u16*)(sb_unk + (sb_unk_ptr++));
504   +         break;
505   +   
506   +         case 4:
507   +            sb_regs[base].flags=REG_32BIT_READWRITE | REG_READ_DATA | REG_WRITE_DATA;
508   +            sb_regs[base].data32=(u32*)(sb_unk + (sb_unk_ptr++));
509   +         break;
510   +   
511   +         default:
512   +            sb_regs[base].flags=REG_8BIT_READWRITE | REG_READ_DATA | REG_WRITE_DATA;
513   +            sb_regs[base].data8=(u8*)(sb_unk + (sb_unk_ptr++));
514   +         break;
515   +      }
516   +   
517   +      sb_regs[base].readFunction=0;
518   +      sb_regs[base].writeFunction=0;
519   +      sb_regs[base].unk = 1;
520   +   }
521   +   #endif
522   +   
448   523      void sb_Init()
449   524      {
450   525         sb_regs.Zero();
451   526      
452   527         for (u32 i=0;i<sb_regs.Size;i++)
453   528         {
454   529            sb_regs.flags=REG_NOT_IMPL;
455      -      }
530   +   
531   +         #ifdef SB_MAP_UNKNOWN_REGS
532   +         sb_regs.unk = 0;
533   +         #endif
534   +      }
535   +   
536   +      #ifdef SB_MAP_UNKNOWN_REGS
537   +      {
538   +         //Unknown regs
539   +         sb_unk_ptr = 0;
540   +   
541   +         sb_implement_unk(0x005f68a4,SB_BASE);
542   +         sb_implement_unk(0x005f68ac,SB_BASE);
543   +         sb_implement_unk(0x005f68a0,SB_BASE);
544   +         sb_implement_unk(0x005f74a0,SB_BASE);
545   +         sb_implement_unk(0x005f74a4,SB_BASE);
546   +         sb_implement_unk(0x005f74a8,SB_BASE);
547   +         sb_implement_unk(0x005f74ac,SB_BASE);
548   +         sb_implement_unk(0x005f74b0,SB_BASE);
549   +         sb_implement_unk(0x005f74b4,SB_BASE);
550   +         sb_implement_unk(0x005f74e4,SB_BASE);
551   +         sb_implement_unk(0x005f78a0,SB_BASE);
552   +         sb_implement_unk(0x005f78a4,SB_BASE);
553   +         sb_implement_unk(0x005f78a8,SB_BASE);
554   +         sb_implement_unk(0x005f78ac,SB_BASE);
555   +         sb_implement_unk(0x005f78b0,SB_BASE);
556   +         sb_implement_unk(0x005f78b4,SB_BASE);
557   +         sb_implement_unk(0x005f78b8,SB_BASE);
558   +   
559   +         sb_implement_unk(0x005f6b80,SB_BASE);
560   +         sb_implement_unk(0x005f6b8c,SB_BASE);
561   +      }
562   +      #endif
456   563      
457   564         sb_regs[((SB_C2DSTAT_addr-SB_BASE))>>2].flags=REG_32BIT_READWRITE | REG_READ_DATA | REG_WRITE_DATA;
458   565         sb_regs[((SB_C2DSTAT_addr-SB_BASE))>>2].readFunction=0;
...         
CaH4e3:
но ты не умеешь их читать и вообще не понимаешь для чего эти изменения и что они на самом деле "исправляют"
wolfer:

--- Цитата: CaH4e3 от 14 Декабрь 2010, 18:59:09 ---но почему-то все эксперты лол

--- Конец цитаты ---
Ну чтоб стать экспертом в том, что поправили в новых ревизиях эмулятора, нужно смотреть изменения в сорцах нула и быть в теме, имхо. А Вы эксперт, кто ж спорит;)

MetalliC, после такого и я понял, что кто-то не прав:)
CaH4e3:
Ну так сначала надо смотреть и быть в теме, а потом говорить... а пока лучше жевать лол хотя ради смеху то конечно можно, все будет веселей поржать
Silver 746:
Хе, Sonic Adventure 2 все равно добавляет музыку в список через зад.  :lol:
wolfer:

--- Цитата: CaH4e3 от 14 Декабрь 2010, 19:17:21 ---Ну так сначала надо смотреть и быть в теме, а потом говорить...
--- Конец цитаты ---
Я полностью согласен, хотя это рядовому эмуляторщику и не нужно, имхо.

--- Цитата: CaH4e3 от 14 Декабрь 2010, 19:17:21 ---а пока лучше жевать лол

--- Конец цитаты ---
Сильно сказано :)
CaH4e3:
блин, ты следишь за моей мыслью то? никого не волнует кому что надо. каждый решает сам что ему и сколько надо. эмуляторщик он или не эмуляторщик. это вообще вопрос спорный, "что нужно эмуляторщику, чтобы быть эмуляторщиком". мы говорим о том, что надо говорить о том, о чем ты уже понимаешь, о том, что у тебя уже есть...
Silver 746:
Весело, что еще могу сказать.

Эту незначительную ошибку возможно пофиксят лет через 20, проблема не мешает завершить игру на 100%, как только проблему устранят, я потеряю интерес к игре.  :)
MetalliC:
Silver 746,
[21:15] <@drk> but keep in mind that stuff thats not according to spec will get removed in the long run ;)
[21:15] <@drk> (the dc spec)
[21:15] <@drk> even if they end up braking games
[21:17] <@drk> documented code comes much much before game compat
[21:17] <@drk> (docuemtned as: folowing the documentation)
Silver 746:

--- Цитата: MetalliC от 14 Декабрь 2010, 19:53:38 ---Silver 746,
[21:15] <@drk> but keep in mind that stuff thats not according to spec will get removed in the long run ;)
[21:15] <@drk> (the dc spec)
[21:15] <@drk> even if they end up braking games
[21:17] <@drk> documented code comes much much before game compat
[21:17] <@drk> (docuemtned as: folowing the documentation)

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

У деда мороза грамматика хромает, неудивительно что Nulldc считает 1, 3, 5, 7 вместо 1, 2, 3, 4, 5, 6, 7, примерно так и плей лист музыки заполняется в игре.  :lol:
wolfer:

--- Цитата: CaH4e3 от 14 Декабрь 2010, 19:28:06 ---блин, ты следишь за моей мыслью то? ... мы говорим о том, что надо говорить о том, о чем ты уже понимаешь, о том, что у тебя уже есть...
--- Конец цитаты ---
Именно с этим и согласился


--- Цитата: CaH4e3 от 14 Декабрь 2010, 19:28:06 ---никого не волнует кому что надо. каждый решает сам что ему и сколько надо. эмуляторщик он или не эмуляторщик. это вообще вопрос спорный, "что нужно эмуляторщику, чтобы быть эмуляторщиком".
--- Конец цитаты ---
Что касается "никого не волнует...", то это палка о 2-х концах, т.к. простые пользователи ПО исходя из данного принципа могут "тупо" чего-то требовать, просить устранить незначительные или вообще отсутствующие недостатки, повторяться не по одному разу и т.п., они ведь Вам ничего не должны :) Это лирика, тут я полностью на стороне разработчиков...
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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