| Эмуляция > Эмуляторы консолей 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-х концах, т.к. простые пользователи ПО исходя из данного принципа могут "тупо" чего-то требовать, просить устранить незначительные или вообще отсутствующие недостатки, повторяться не по одному разу и т.п., они ведь Вам ничего не должны :) Это лирика, тут я полностью на стороне разработчиков... |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |