crystalct / RetroArch_PSX_CE

50 stars 7 forks source link

dinotpic ROM issue #11

Open drtanzil opened 7 months ago

drtanzil commented 7 months ago

dinotpic ROM (Cadillacs and Dinosaurs Turbo (bootleg set 2) running using RetroArch_PSX_CE does not has any sound. using FB Neo Core Game background /Sky is black. However RetroArch on PC does not has this issue. PC runs on FBneo 1.0.0.3 core.

crystalct commented 7 months ago

Cadillacs and Dinosaurs Turbo (bootleg set 2 (with PIC16c57), 930201 etc) [Bootleg, No sound] AKA dinopic4.zip ?

drtanzil commented 7 months ago

No, not dinopic4.zip. For FBA NEO its- dinotpic.zip For EKMAME its dinohb.zip

Im sharing a FBA map for dinotpic -

static struct BurnRomInfo DinotpicRomDesc[] = {
    { "cd-d.800",           0x100000, 0x2a7b2915, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_NO_BYTESWAP },
    { "cd-e.800",           0x100000, 0xe8370226, BRF_ESS | BRF_PRG | CPS1_68K_PROGRAM_NO_BYTESWAP },

    { "cd-a.160",           0x200000, 0x7e4f9fb3, BRF_GRA | CPS1_TILES },
    { "cd-b.160",           0x200000, 0x89532d85, BRF_GRA | CPS1_TILES },

    { "cd_q.5k",            0x020000, 0x605fdb0b, BRF_PRG | CPS1_Z80_PROGRAM },

    { "cd-q1.1k",           0x080000, 0x60927775, BRF_SND | CPS1_QSOUND_SAMPLES },
    { "cd-q2.2k",           0x080000, 0x770f4c47, BRF_SND | CPS1_QSOUND_SAMPLES },
    { "cd-q3.3k",           0x080000, 0x2f273ffc, BRF_SND | CPS1_QSOUND_SAMPLES },
    { "cd-q4.4k",           0x080000, 0x2c67821d, BRF_SND | CPS1_QSOUND_SAMPLES },

    A_BOARD_QSOUND_PLDS

    { "cd63b.1a",           0x000117, 0xef72e902, BRF_OPT },    // b-board PLDs
    { "iob1.12d",           0x000117, 0x3abc0700, BRF_OPT },
    { "bprg1.11d",          0x000117, 0x31793da7, BRF_OPT },
    { "ioc1.ic1",           0x000104, 0xa399772d, BRF_OPT },    // c-board PLDs
    { "d7l1.7l",            0x000117, 0x27b7410d, BRF_OPT },    // d-board PLDs
    { "d8l1.8l",            0x000117, 0x539fc7da, BRF_OPT },
    { "d9k2.9k",            0x000117, 0xcd85a156, BRF_OPT },
    { "d10f1.10f",          0x000117, 0x6619c494, BRF_OPT },
};

The rom runs 100% on EKMAME emulator with all hacks (There its called dinohb.zip) I have a snippet of dinohb - Got from: https://neo-source.com/index.php?topic=564.msg4835#msg4835

for dinohb- sound = OK, Graphics = OK, Player change using Start Button = OK.

// Turbo (Bootleg + Hack) World

static struct BurnRomInfo dinohbRomDesc[] = {
    { "cd-d.800",     0x100000, 0x2A7B2915, BRF_ESS | BRF_PRG }, // 0
    { "cd-e.800",     0x100000, 0xE8370226, BRF_ESS | BRF_PRG }, // 1

    { "cd-a.160",     0x200000, 0x7e4F9FB3, BRF_GRA },           // 2
    { "cd-b.160",     0x200000, 0x89532d85, BRF_GRA },           // 3

    { "cd_q.rom",     0x020000, 0x605fdb0b, BRF_SND },           // 4

    { "cd_q1.rom",    0x080000, 0x60927775, BRF_SND },           // 5
    { "cd_q2.rom",    0x080000, 0x770f4c47, BRF_SND },           // 6
    { "cd_q3.rom",    0x080000, 0x2f273ffc, BRF_SND },           // 7
    { "cd_q4.rom",    0x080000, 0x2c67821d, BRF_SND },           // 8
};

STD_ROM_PICK(dinohb); STD_ROM_FN(dinohb);

static int dinohbInit()
{
  int nRet=0; unsigned char *pqs=NULL;
  Cps=1; Cps1Qs=1;
  nCpsRomLen= 4*0x080000;
  nCpsCodeLen=0; // not encrypted
  nCpsGfxLen= 8*0x080000;
  nCpsZRomLen= 2*0x020000;
  nCpsQSamLen= 4*0x080000;
  nRet=CpsInit(); if (nRet!=0) return 1;

  // Load program roms
  nRet=BurnLoadRom(CpsRom+0x000000,0,1); if (nRet!=0) return 1;
  nRet=BurnLoadRom(CpsRom+0x100000,1,1); if (nRet!=0) return 1;

// Hack Fixes
      // Fix draw scroll
      *((unsigned short*)(CpsRom + 0x006C2)) = 0xFFC0;

      // Fix gfx
      *((unsigned short*)(CpsRom + 0x006CC)) = 0x0080;
      *((unsigned short*)(CpsRom + 0x006CE)) = 0x010C;
      *((unsigned short*)(CpsRom + 0x006DE)) = 0x0080;
      *((unsigned short*)(CpsRom + 0x006E0)) = 0x0110;
      *((unsigned short*)(CpsRom + 0x006F0)) = 0x0080;
      *((unsigned short*)(CpsRom + 0x006F2)) = 0x0114;
      *((unsigned short*)(CpsRom + 0x00704)) = 0x0080;
      *((unsigned short*)(CpsRom + 0x00706)) = 0x010E;
      *((unsigned short*)(CpsRom + 0x00718)) = 0x0080;
      *((unsigned short*)(CpsRom + 0x0071A)) = 0x0112;
      *((unsigned short*)(CpsRom + 0x0072C)) = 0x0080;
      *((unsigned short*)(CpsRom + 0x0072E)) = 0x0116;

      // Fix screen transitions
      *((unsigned short*)(CpsRom + 0x00B28)) = 0x7000;
      *((unsigned short*)(CpsRom + 0x00B2A)) = 0x7200;
      *((unsigned short*)(CpsRom + 0x00B2C)) = 0x343C;
      *((unsigned short*)(CpsRom + 0x00B32)) = 0x20C1;

      // Fix sound
      *((unsigned short*)(CpsRom + 0x00666)) = 0x00F1;
      *((unsigned short*)(CpsRom + 0x00668)) = 0x8002;
      *((unsigned short*)(CpsRom + 0xAAA6C)) = 0x00D8;
//

  // Load graphics roms
  CpsLoadTilesHack160(CpsGfx, 2);

  nCpsLcReg=0x4a; // Layer control register is at 0x4a
  CpsLayEn[1]=0x16;
  CpsLayEn[2]=0x16;
  CpsLayEn[3]=0x16;

  // Protection enable code by KEV
  CpsMProt[0]=0x00;
  CpsMProt[1]=0x00;
  CpsMProt[2]=0x00;
  CpsMProt[3]=0x00;

  // Board ID improvments by KEV. 0x00,0x0000
  CpsBID[0]=0x00;
  CpsBID[1]=0x00;
  CpsBID[2]=0x00;

  MaskAddr[0]=0x4c;
  MaskAddr[1]=0x4e;
  MaskAddr[2]=0x40;
  MaskAddr[3]=0x42;

  nRet=BurnLoadRom(CpsZRom,4,1);
  dino_decode();

  pqs=(unsigned char *)CpsQSam;
  nRet=BurnLoadRom(pqs         ,5,1);
  nRet=BurnLoadRom(pqs+0x080000,6,1);
  nRet=BurnLoadRom(pqs+0x100000,7,1);
  nRet=BurnLoadRom(pqs+0x180000,8,1);

  nRet=CpsRunInit(); if (nRet!=0) return 1;
  // Ready to go
  return 0;
}

struct BurnDriver BurnDrvCpsdinohb = {
    "dinohb", "dino", NULL, "1993",
    "Cadillacs and Dinosaurs - Turbo - 97 the second generation of dino\0", "", "Capcom", "CPS1",
    NULL, NULL, NULL, NULL,
    BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG,3,HARDWARE_CAPCOM_CPS1_QSOUND,
    NULL,dinohbRomInfo,dinohbRomName,DrvInputInfo, dinoDIPInfo,
    dinohbInit,DrvExit,Cps1Frame,CpsRedraw,CpsAreaScan,
    &CpsRecalcPal,384,224,4,3
};

P.S- This rom is widely popular on asia as Arcade machines there played this ROM.

drtanzil commented 7 months ago

@crystalct : Is it the right place to notify this issue?

crystalct commented 7 months ago

Yes and no.... the sources to be modified are those on the github libretro fbneo core... once the problem has been solved (big endian issue) on the original sources I could recompile them for PS3. You should open the issue there.

drtanzil commented 7 months ago

@crystalct : I have downloaded FBNeo from git & compiled it on my PC today. There is no audio & GFX (Black sky) issue on there for dinotpic ROM. Requesting you to compile with latest FBneo core.

crystalct commented 7 months ago

A PC has a little endian CPU. PS3 has a BIG endian CPU. It's a Big Endian Issue.

drtanzil commented 7 months ago

I see. But there might be a fix. This rom also runs on Android device which is big endian cpu (not sure) using fba4droid emulator. Sound, GFX & hack all works okay. Fba4droid is not open sourced, dont know how they solved this.

drtanzil commented 7 months ago

Thanks @crystalct . I posted and got reply from barbudreadmon: Big-endian (ps3) compatibility should be fixed with 728246d

crystalct commented 7 months ago

Android ARM is not Big Endian CPU

drtanzil commented 7 months ago

Thanks @crystalct. As per your advice i posted on FbNeo git They have updated d_cps1.cpp on their git with big-endian fix. They said-

Big-endian (ps3) compatibility should be fixed with 728246d

here is my orginal post

Now how to get it fixed on PS3 ?

Im sharing my PS3 Black Sky Issue for dinotpic PS3

barbudreadmon commented 7 months ago

@crystalct oh, i thought you weren't active anymore, we didn't get a reply the last few times we tried to ping you about big-endian issues

drtanzil commented 7 months ago

Great to see @crystalct and @barbudreadmon together on the post! I was relaying one's request to another, acting as a realy, ha ha!

crystalct commented 7 months ago

Sorry, but my free time is almost zero... :-P

drtanzil commented 7 months ago

@crystalct @barbudreadmon Both of you have done a great work! Spending lots of time & effort to keep alive the nostalgia of Arcade era. Requesting to keep up the good work and also requesting to recompile the original core for PS3.

crystalct commented 7 months ago

I should have completely updated the FBneo sources, but the last time I tried to do so, the compiled core had become so large that the PS3's limited RAM became insufficient. I just added changes from 728246d, but it wasn't enough, there must be more or I have to do a complete update for the light version of the FBneo core for the PS3

drtanzil commented 7 months ago

@crystalct : Thanks! CPS games alone can be an excellent PS3 release. You are also the author of FBNeoRLPlus: https://github.com/crystalct/FBNeoRLPlus

Is it possible to release by that git?

drtanzil commented 7 months ago

@crystalct : The FbNeo team updated the git with some gameplay fix for dinotpic rom. Please include that marvelous fix if possible.

crystalct commented 7 months ago

@barbudreadmon I tried to compile LIGHT=1 but driverlist.h contains all the DRVs making it impossible to link the .a file How do i generate driverlist.h for light compilation?

crystalct commented 7 months ago

opsss... make generate-files

crystalct commented 7 months ago

@barbudreadmon this: void __fastcall DinopicLayerWrite(UINT32 a, UINT16 d) { if (a == 0x800222) { ((UINT16)(CpsReg + 0x06)) = d;

should be: void __fastcall DinopicLayerWrite(UINT32 a, UINT16 d) { if (a == 0x800222) { ((UINT16)(CpsReg + 0x06)) = BURN_ENDIAN_SWAP_INT16(d);

@drtanzil I tested dinotpic on my windows retroarch and there isn't sound....

drtanzil commented 7 months ago

@crystalct : Sound works okay on windows RetroArch. Im sharing my Windows Screen to reveal the version.

Might be a ROM file issue? I'm also sharing dinotpic.zip ROM file from my Google Drive Link.

Sound also works okay on Android phone for this ROM. Android RetroArch APK link here

Screenshot_9

drtanzil commented 7 months ago

@barbudreadmon and @dinkc64 made significant contributions to this ROM yesterday. They dumped the game memory from EKMAME and traced the missing hack for Player change. Afterward, they patched the game on FBN and completed the missing controls. The version of dinotpic currently available on the FBNeo git repository represents the original gameplay of the 90s bootleg.

dinkc64 commented 7 months ago

got that layer patch in, thanks :)

barbudreadmon commented 7 months ago

I tried to compile LIGHT=1

@crystalct this is meant for nds and removes A LOT of drivers, i don't think you want to use that for ps3

crystalct commented 7 months ago

I tried to compile LIGHT=1

@crystalct this is meant for nds and removes A LOT of drivers, i don't think you want to use that for ps3

It's an alternative and additional core just for capcom e few others.... unfortunately recompiling Retroarch and FBNeo with the current sources became a panic.

drtanzil commented 7 months ago

Meanwhile, I'm regularly playing the standard "Dino" ROM on my PS3, and it works flawlessly. Playing retro games from the couch with a PS3 gamepad brings a whole new level of satisfaction and relaxation. I'm eagerly anticipating the "Dinotpic" to start working!

11

IMG_20240220_170714

crystalct commented 7 months ago

Unfortunately, with the old FBneo (and retroarch) sources I was only able to get the background to work, but not the sound. Unfortunately for the sound it seems that we need to update FBneo completely to the current state, which also involves updating retroarch....

drtanzil commented 7 months ago

That's fantastic news! It's reassuring to hear that some improvements have been made. For RetroArch PS3, this ROM had four issues:

  1. The sky appearing black (Wonderful to hear it's been fixed!)
  2. Player change not working. This issue has been addressed by @dinkc64 in commit d4a475a.
  3. The third button (C) or square not functioning. This issue has been resolved by @barbudreadmon in commits b8cb61e and 3ce5ee4.
  4. And the sound issue.

I'm quite certain that you'll come up with fixes for all the issues. The level of work you've done is fantastic!

crystalct commented 7 months ago

@barbudreadmon and @dinkc64 I recompiled sources and Dinotpic start in balck screen, but if i change Dipswitch QSound from On to OFF and restart core, Dinotpic starts, but with no sound. Any clue?

barbudreadmon commented 7 months ago

You are testing with a fully updated source code, right ?

Do you have visuals if you remove the non-LSB_FIRST codepaths in DinotpicPatchCallback & Jurassic99PatchCallback ? Maybe we actually shouldn't big-endianize the rom patch ?

Having no sound when the qsound dips is off is apparently normal (@taoenwen might be able to explain a bit more about this).

crystalct commented 7 months ago

The weird thing is the black screen when QSound is enabled.... DinotpicPatchCallback & Jurassic99PatchCallback have LSB_FIRST....

crystalct commented 7 months ago

Bingo!!!! Using the code from LSB_FIRST, there is sound

crystalct commented 7 months ago

Both DinotpicPatchCallback & Jurassic99PatchCallback don't need #ifdef LSB_FIRST

taoenwen commented 7 months ago

taoenwen might be able to explain a bit more about this.

@barbudreadmon In fact, the current dipsw has QSound enabled by default.

barbudreadmon commented 7 months ago

Both DinotpicPatchCallback & Jurassic99PatchCallback don't need #ifdef LSB_FIRST

Ok, it solves both the gfx and sound issues ?

barbudreadmon commented 7 months ago

@taoenwen indeed but what is the purpose of disabling qsound for that romset ? as far as i can tell, the sound just stops working if you do this

taoenwen commented 7 months ago

None of the audio in these sets was emulated, I just added QSound support. At first it was set to off based on conservatism, but then I decided that since it was off I might as well not add support, so I turned on the audio. The addition of QSound can be considered a Hack, a temporary solution until the sets are emulated.

crystalct commented 7 months ago

Both DinotpicPatchCallback & Jurassic99PatchCallback don't need #ifdef LSB_FIRST

Ok, it solves both the gfx and sound issues ?

Yes

crystalct commented 7 months ago

@drtanzil update FBNEO LIGHT core from Retroarch PSX CE menu and then you can play at Dinotpic, but only with light core version.

drtanzil commented 7 months ago

Thank you! Thank you so much, @crystalct ! I can't express how happy I am to finally have it working on the PS3! Thanks again!

Before reaching out here, I wasn't sure if I would even get a response or if anyone would understand what was missing. But I'm incredibly fortunate to have encountered legendary individuals like @dinkc64 , @barbudreadmon , @taoenwen , and yourself, who reconstructed the bootleg and restored the original gameplay, preventing it from disappearing forever.

You guys are truly legendary! The depth of knowledge you possess for these retro machines is extraordinary. I sincerely thank you all again for the incredible work!

everything works perfectly on PS3! Flawless!

55

66

dinkc64 commented 7 months ago

drtanzil, thanks, I also appreciate that you came around and gave us the idea to fix it, and that you shared your nice arcade nostalgia story :)

Keep in mind it doesn't always work out like this, sometimes we just cant fix things, but, in this case things worked out nicely

best regards,