Author Topic: Mahjong Final Romance 2 Fix ;)  (Read 20868 times)

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
Mahjong Final Romance 2 Fix ;)
« on: January 08, 2006, 07:09:49 AM »
Update:
Added Japanese text (Probably not 100%, but close:
Quote
アイドル麻雀
ファイナル
ロマンス
Changed Game name a little (added Idol)
Changed description of patch
Changed to "CD Conversion / Hack" instead of "Hack"


Code: [Select]
// Idol Mah jong Final Romance 2 (CD Conversion / Hack)

static struct BurnRomInfo fr2chRomDesc[] = {
{ "098-p1ch.bin",  0x100000, 0xA2527A5F, 1 | BRF_ESS | BRF_PRG }, //  0 68K code

{ "098-s1ch.bin",  0x020000,  0x764AC7AA, 2 | BRF_GRA },   //  1 Text data

{ "098-c1ch.bin",  0x300000, 0x29BF9AF0, 3 | BRF_GRA },   //  2 Sprite data
{ "098-c2ch.bin",  0x300000, 0x3CF46F63, 3 | BRF_GRA },   //  3

{ "098-m1ch.bin",  0x010000,  0xA455FA31, 4 | BRF_ESS | BRF_PRG }, //  4 Z80 code

{ "098-v1ch.bin",  0x100000, 0x92E175F0, 5 | BRF_SND },   //  5 Sound data
};

STDROMPICKEXT(fr2ch, fr2ch, neogeo);
STD_ROM_FN(fr2ch);

void fr2ch_fix()
{
// Patch out jsr - 0xC0056A
*((unsigned short*)(Neo68KROM + 0x1BF2)) = 0x4E71;
*((unsigned short*)(Neo68KROM + 0x1BF4)) = 0x4E71;
*((unsigned short*)(Neo68KROM + 0x1BF6)) = 0x4E71;
}

static int fr2chInit()
{
pNeoInitCallback = fr2ch_fix;
return NeoInit();
}

struct BurnDriver BurnDrvfr2ch = {
"fr2ch", NULL, "neogeo", "1995",
"Idol Mah jong Final Romance 2\0", "CD Conversion / Hack", "Video Systems", "Neo Geo",
L"\u30A2\u30A4\u30C9\u30EB\u96C0\u9EBB\u30D5\u30A1\u30A4\u30CA\u30EB\u30ED\u30DE\u30F3\u30B9\0", NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO,
NULL, fr2chRomInfo, fr2chRomName, neogeoInputInfo, neogeoDIPInfo,
fr2chInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
nNeoScreenWidth, 224, 4, 3
};


Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
Re: Mahjong Final Romance 2 Fix ;)
« Reply #1 on: January 08, 2006, 08:21:53 AM »
Looks like I cannot test it :(  . I thought I had the roms though .


Edit , I found it But mine was named fr2cd . .  Thanks IQ for this patch :)
« Last Edit: January 08, 2006, 09:39:38 AM by James33 »
IQ Forum Member

Offline KaNyErO

  • Member
  • ***
  • Posts: 142
  • Karma: +4/-0
Re: Mahjong Final Romance 2 Fix ;)
« Reply #2 on: January 08, 2006, 09:55:13 AM »
lol, i think i would never play this conversion. If im not wrong there are some bugs remaining:

-Credits counter: basically it reads the numbers from the begining of the s1 rom instead of where they are stored
-Wrong name in dip swiches: its identified as power spikes 2
- Music (could this be fixed? i dont think so).

Other things that should be fixed:
- C roms shouldnt be 3 mb each one, and there should be as many C roms as SPR files in the cd version
- The same for other files
- The description of the game, should include "CD Conversion / Hack" instead of just hack

Thanks iq :D
« Last Edit: January 08, 2006, 10:17:50 AM by KaNyErO »

Offline neo04

  • Jr. Member
  • **
  • Posts: 90
  • Karma: +1/-0
Re: Mahjong Final Romance 2 Fix ;)
« Reply #3 on: January 08, 2006, 11:10:33 AM »
thx iq!

Quote
Wrong name in dip swiches: its identified as power spikes 2
i think its like that on neocd

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
Re: Mahjong Final Romance 2 Fix ;)
« Reply #4 on: January 08, 2006, 01:34:34 PM »
lol, i think i would never play this conversion. If im not wrong there are some bugs remaining:

-Credits counter: basically it reads the numbers from the begining of the s1 rom instead of where they are stored
It's a neogeo cd game... It's not meant to be played in MVS mode, It looks perfect in AES mode.
Quote
-Wrong name in dip swiches: its identified as power spikes 2
That's an easy fix, just open the rom in winhex and make the modifications.
Though Neo is right, the game by default has this oddity.
Quote
- Music (could this be fixed? i dont think so).
Nah, I'd have to re-build the M & V, and that's not really something  know how to do...

Quote
Other things that should be fixed:
- C roms shouldnt be 3 mb each one, and there should be as many C roms as SPR files in the cd version
- The same for other files
I'm not sure why that matters, it's just a hack anyway.
Quote
- The description of the game, should include "CD Conversion / Hack" instead of just hack
True.
Quote
Thanks iq :D

No problem. ;) I remember reading the readme for this rom and seeing your name in it.


Offline KingHanco

  • Sr. Member
  • ****
  • Posts: 401
  • Karma: +0/-4
  • "Special " Member
Re: Mahjong Final Romance 2 Fix ;)
« Reply #5 on: January 08, 2006, 08:50:06 PM »
What there is playable roms to play that without the neocd...

I wonder why that I never seen or actually play it yet...

Edit: Everymine the extrasrc_095.zip have the Mame driver as well.
« Last Edit: January 08, 2006, 09:05:27 PM by KingHanco »

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
Re: Mahjong Final Romance 2 Fix ;)
« Reply #6 on: January 09, 2006, 12:03:32 AM »
What there is playable roms to play that without the neocd...

I wonder why that I never seen or actually play it yet...

Edit: Everymine the extrasrc_095.zip have the Mame driver as well.

??????????????? HUH????



Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
Re: Mahjong Final Romance 2 Fix ;)
« Reply #7 on: January 09, 2006, 01:05:37 AM »
Is this game the same as fromanc2 which already works in mame?

"Mahjong Final Romance 2" is neo cd version which was converted .
IQ Forum Member

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
Re: Mahjong Final Romance 2 Fix ;)
« Reply #8 on: January 09, 2006, 01:27:17 AM »
Well, techincally it is the same as fromanc2, but on completely different hardware.

from maws
Quote
- PORTS -

* Consoles :
Sega Saturn (1995)
SNK Neo-Geo CD (1995)
Panasonic 3DO (1996, "Idol Mahjong Final Romance 2 - Final Edition")
http://www.mameworld.net/maws/romset/fromanc2


Offline KingHanco

  • Sr. Member
  • ****
  • Posts: 401
  • Karma: +0/-4
  • "Special " Member
Re: Mahjong Final Romance 2 Fix ;)
« Reply #9 on: January 09, 2006, 01:34:57 AM »
Hmmm... It works on Mame32, but it keep on resetting over and over again after NeoGeo screen. I wonder what the problem is... :confused:

I will show you the Mame driver.

Code: [Select]
ROM_START( fr2cd )
ROM_REGION( 0x100000, REGION_CPU1, 0 )
ROM_LOAD16_WORD_SWAP( "098-p1.bin", 0x000000, 0x100000, CRC(a2527a5f) )

NEO_SFIX_128K( "098-s1.bin", CRC(764ac7aa) )

NEO_BIOS_SOUND_64K( "098-m1.bin", CRC(a455fa31) )

ROM_REGION( 0x0100000, REGION_SOUND1, 0 )
ROM_LOAD( "098-v1.bin", 0x000000, 0x100000, CRC(92e175f0) )

NO_DELTAT_REGION

ROM_REGION( 0x600000, REGION_GFX3, 0 )
ROM_LOAD16_BYTE( "098-c1.bin", 0x0000000, 0x300000, CRC(29bf9af0) )
ROM_LOAD16_BYTE( "098-c2.bin", 0x0000001, 0x300000, CRC(3cf46f63) )
ROM_END

GAMEB( 1995, fr2cd,   neogeo,   neogeo, neogeo, neogeo,  neogeo,   ROT0, "Video System Co.", "Mahjong Final Romance 2 (CD Conversion / Hack)", 0 )
« Last Edit: January 09, 2006, 01:39:47 AM by KingHanco »

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
Re: Mahjong Final Romance 2 Fix ;)
« Reply #10 on: January 09, 2006, 01:58:28 AM »
LMAO.  The answer you're looking for is in this very thread. 
You should really attempt to read a thread before you reply to it ;)


Offline KingHanco

  • Sr. Member
  • ****
  • Posts: 401
  • Karma: +0/-4
  • "Special " Member
Re: Mahjong Final Romance 2 Fix ;)
« Reply #11 on: January 09, 2006, 02:05:29 AM »
LMAO.  The answer you're looking for is in this very thread. 
You should really attempt to read a thread before you reply to it ;)

How can I convered this into Mame?

Code: [Select]
void fr2ch_fix()
{
// Patch out bios call.. 0xC0056A
*((unsigned short*)(Neo68KROM + 0x1BF2)) = 0x4E71;
*((unsigned short*)(Neo68KROM + 0x1BF4)) = 0x4E71;
*((unsigned short*)(Neo68KROM + 0x1BF6)) = 0x4E71;
}

static int fr2chInit()
{
pNeoInitCallback = fr2ch_fix;
return NeoInit();
}

I don't know how even to start it out from FBA. I wish there is a tool to convered into Mame.

Code: [Select]
static void fr2cd_fix( void )
{
        *((unsigned short*)(Neo68KROM + 0x1BF2)) = 0x4E71; ?
        *((unsigned short*)(Neo68KROM + 0x1BF4)) = 0x4E71; ?
        *((unsigned short*)(Neo68KROM + 0x1BF6)) = 0x4E71; ?
}
}

DRIVER_INIT ( fr2cd )
{
        fr2cd_fix();
init_neogeo();
}

Is this right?
« Last Edit: January 09, 2006, 02:13:32 AM by KingHanco »

Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
Re: Mahjong Final Romance 2 Fix ;)
« Reply #12 on: January 09, 2006, 03:25:48 AM »
How can I convered this into Mame?

Code: [Select]
void fr2ch_fix()
{
// Patch out bios call.. 0xC0056A
*((unsigned short*)(Neo68KROM + 0x1BF2)) = 0x4E71;
*((unsigned short*)(Neo68KROM + 0x1BF4)) = 0x4E71;
*((unsigned short*)(Neo68KROM + 0x1BF6)) = 0x4E71;
}

static int fr2chInit()
{
pNeoInitCallback = fr2ch_fix;
return NeoInit();
}

I don't know how even to start it out from FBA. I wish there is a tool to convered into Mame.

Code: [Select]
static void fr2cd_fix( void )
{
        *((unsigned short*)(Neo68KROM + 0x1BF2)) = 0x4E71; ?
        *((unsigned short*)(Neo68KROM + 0x1BF4)) = 0x4E71; ?
        *((unsigned short*)(Neo68KROM + 0x1BF6)) = 0x4E71; ?
}
}

DRIVER_INIT ( fr2cd )
{
        fr2cd_fix();
init_neogeo();
}

Is this right?


This section is for FBA If you want Mame help please ask in the correct section .


I have the code like this .

Code: [Select]
void install_fr2ch_fix(void)
{
// Patch out bios call.. 0xC0056A
*((unsigned short*)(memory_region( REGION_CPU1 ) + 0x1BF2)) = 0x4E71;
*((unsigned short*)(memory_region( REGION_CPU1 ) + 0x1BF4)) = 0x4E71;
*((unsigned short*)(memory_region( REGION_CPU1 ) + 0x1BF6)) = 0x4E71;
}
IQ Forum Member

Offline James33

  • Expert
  • *****
  • Posts: 532
  • Karma: +3/-0
  • The Mame Man
    • Emulation Zone
Re: Mahjong Final Romance 2 Fix ;)
« Reply #13 on: January 09, 2006, 06:46:13 AM »
I found the right roms at last thanks to James's unintentional hint. But I won't add the driver just yet as I'm working on fixing some things in MESS right now. Keep up the good work IQ.

MESS  lol  have fun with that  : :biggrin:
IQ Forum Member

Offline iq_132

  • Administrator
  • *****
  • Posts: 3724
  • Karma: +411/-0
  • Definitely not Dink!
    • NeoSource
Re: Mahjong Final Romance 2 Fix ;)
« Reply #14 on: August 12, 2006, 01:34:58 PM »
I'm sure many of you have this set for fr2ch.  It's the original, broken mvs->cd conversion, however...

Code: [Select]
static struct BurnRomInfo fr2chRomDesc[] = {
{ "098-p1ch.bin",  0x100000, 0xA2527A5F, 1 | BRF_ESS | BRF_PRG }, //  0 68K code

{ "098-s1ch.bin",  0x020000,  0x764AC7AA, 2 | BRF_GRA },   //  1 Text data

{ "098-c1ch.bin",  0x300000, 0x29BF9AF0, 3 | BRF_GRA },   //  2 Sprite data
{ "098-c2ch.bin",  0x300000, 0x3CF46F63, 3 | BRF_GRA },   //  3

{ "098-m1ch.bin",  0x010000,  0xA455FA31, 4 | BRF_ESS | BRF_PRG }, //  4 Z80 code

{ "098-v1ch.bin",  0x100000, 0x92E175F0, 5 | BRF_SND },   //  5 Sound data
};

If you look at the p1, it doesn't particularly need to be 1mb in size, the original p data is ~512k
Also, the Cx, like kanyero mentioned, should not be 3mb, but more like 1mb/c.  However, this was not the only problem with these cx roms.  The person that made this conversion didn't take in account that the neogeo cd has 1mb sprite banks (4 of them, actually), so 4mb of sprite data can be stored at one time.
So the person copied + pasted the spr roms together without dummying them up to 1mb first.  This should not affect the regular game at all, but I noticed a cheat in the uni-bios for "Unlock album mode." So I tried this and went into the photo album (which is nothing but softcore anime porn) and realized that the albums were completely broken.

Code: [Select]
cheat "Unlock Photo Album"
default 1
0 "Disabled"
1 "Enabled", 0, 0x101ED7, 0x09

So I decided to re-port the cx, dummying them with FF data and then copy + pasting them together.  This produced some good results, except that the last 2 cx are outside the boundry of what the neo-cd can deal with (4mb). 

This is the set I ended up with:

Code: [Select]
static struct BurnRomInfo fr2chRomDesc[] = {
{ "098-p1ch.bin",   0x080000, 0x9AA8CEE0, 1 | BRF_ESS | BRF_PRG }, //  0 68K Code

{ "098-s1ch.bin",   0x020000, 0x764ac7aa, 2 | BRF_GRA },    //  1 Text data

{ "098-c1ch.bin",   0x100000, 0x6158CF4A, 3 | BRF_GRA },    //  2 Sprite data
{ "098-c2ch.bin",   0x100000, 0x93A809A3, 3 | BRF_GRA },    //  3
{ "098-c3ch.bin",   0x100000, 0xFAFA3381, 3 | BRF_GRA },    //  4
{ "098-c4ch.bin",   0x100000, 0x9895E23F, 3 | BRF_GRA },    //  5
// swap these in dynamically
{ "098-c5ch.bin",   0x100000, 0xEEAAA818, 3 | BRF_GRA },    //  6
{ "098-c6ch.bin",   0x100000, 0xF3D9A190, 3 | BRF_GRA },    //  7

{ "098-m1ch.bin",   0x010000, 0xA455FA31, 4 | BRF_ESS | BRF_PRG }, //  8 Z80 code

{ "098-v1ch.bin",   0x100000, 0x92E175F0, 5 | BRF_SND },    //  9 Sound data
};

Here's the original driver I had for it, it fixed the crashes from the game trying to go to an invalid sub in the bios and a few other misc things -- does it look familar (someone leaked some code and someone else took credit it for it ;) Thanks mame32plus :p.

Code: [Select]
void fr2ch_fixes()
{
// change jsr to C004DA (rts)
*((unsigned short*)(Neo68KROM + 0x01AF8)) = 0x04DA; // C00552 (Not used?)
*((unsigned short*)(Neo68KROM + 0x01BF6)) = 0x04DA; // C0056A (fixes crash)
*((unsigned short*)(Neo68KROM + 0x01ED8)) = 0x04DA; // C00570 (Not used?)
*((unsigned short*)(Neo68KROM + 0x1C384)) = 0x04DA; // C00552 (fixes crash)

// 0x001C06 - this routine can cause a loop/freeze
*((unsigned short*)(Neo68KROM + 0x01C06)) = 0x4E75;

// can cause bugs
// Move text for credit + coin info (Thanks to Kanyero)
memcpy (NeoTextROM + 0x20000, NeoTextROM + 0x20600, 0x140);

// Patch out neogeo intro (Moving S causes garbage)
*((unsigned short*)(Neo68KROM + 0x00112)) = 0x0180;
*((unsigned short*)(Neo68KROM + 0x00114)) = 0x0100;

// optional
// Hack in the proper identification (see setup menu [F2])
unsigned char data[16] = {
0x49, 0x46, 0x41, 0x4E, 0x20, 0x4C, 0x4F, 0x52,
0x41, 0x4D, 0x43, 0x4E, 0x20, 0x45, 0x20, 0x32
};

for (int i = 0; i < 0x10; i++)
Neo68KROM[0x3A6 + i] = Neo68KROM[0x61E + i] = Neo68KROM[0x896 + i] = data[i];
}

However, this still doesn't fix the second part of the album mode (as you may have noticed if you tried the cheat.)

I wasn't sure quite how to fix it (since I don't know much 68k stuff), so I hacked in a quick fix for it, which really does seem to do the job.
It patches in a jump to 0x80000 (just past the 512k p1 -- since fba dummies it to 1mb), and patches in a write to 0x200002.  When that address is written to, I have the last two cx roms swapped.  This fixes the album mode. :)  Kind of a dirty hack, but it works, I guess.

Code: [Select]
// Idol Mah jong Final Romance 2 (CD Conversion / Hack)

static struct BurnRomInfo fr2chRomDesc[] = {
{ "098-p1ch.bin",   0x080000, 0x9AA8CEE0, 1 | BRF_ESS | BRF_PRG }, //  0 68K Code

{ "098-s1ch.bin",   0x020000, 0x764ac7aa, 2 | BRF_GRA },    //  1 Text data

{ "098-c1ch.bin",   0x100000, 0x6158CF4A, 3 | BRF_GRA },    //  2 Sprite data
{ "098-c2ch.bin",   0x100000, 0x93A809A3, 3 | BRF_GRA },    //  3
{ "098-c3ch.bin",   0x100000, 0xFAFA3381, 3 | BRF_GRA },    //  4
{ "098-c4ch.bin",   0x100000, 0x9895E23F, 3 | BRF_GRA },    //  5
// swap these in dynamically
{ "098-c5ch.bin",   0x100000, 0xEEAAA818, 3 | BRF_GRA },    //  6
{ "098-c6ch.bin",   0x100000, 0xF3D9A190, 3 | BRF_GRA },    //  7

{ "098-m1ch.bin",   0x010000, 0xA455FA31, 4 | BRF_ESS | BRF_PRG }, //  8 Z80 code

{ "098-v1ch.bin",   0x100000, 0x92E175F0, 5 | BRF_SND },    //  9 Sound data
};

STDROMPICKEXT(fr2ch, fr2ch, neogeo);
STD_ROM_FN(fr2ch);

void fr2ch_fixes()
{
// change jsr to C004DA (rts)
*((unsigned short*)(Neo68KROM + 0x01AF8)) = 0x04DA; // C00552 (Not used?)
*((unsigned short*)(Neo68KROM + 0x01BF6)) = 0x04DA; // C0056A (fixes crash)
*((unsigned short*)(Neo68KROM + 0x01ED8)) = 0x04DA; // C00570 (Not used?)
*((unsigned short*)(Neo68KROM + 0x1C384)) = 0x04DA; // C00552 (fixes crash)

// 0x001C06 - this routine can cause a loop/freeze
*((unsigned short*)(Neo68KROM + 0x01C06)) = 0x4E75;

// can cause bugs
// Move text for credit + coin info (Thanks to Kanyero)
memcpy (NeoTextROM + 0x20000, NeoTextROM + 0x20600, 0x140);

// Patch out neogeo intro (Moving S causes garbage)
*((unsigned short*)(Neo68KROM + 0x00112)) = 0x0180;
*((unsigned short*)(Neo68KROM + 0x00114)) = 0x0100;

// optional
// Hack in the proper identification (see setup menu [F2])
unsigned char data[16] = {
0x49, 0x46, 0x41, 0x4E, 0x20, 0x4C, 0x4F, 0x52,
0x41, 0x4D, 0x43, 0x4E, 0x20, 0x45, 0x20, 0x32
};

for (int i = 0; i < 0x10; i++)
Neo68KROM[0x3A6 + i] = Neo68KROM[0x61E + i] = Neo68KROM[0x896 + i] = data[i];

for (int i = 0; i < 0x20; i+=4)
*((unsigned short*)(Neo68KROM + 0x40 + i + 2)) = 0x0426;

// Album Fix (Very Hacky)
*((unsigned short*)(Neo68KROM + 0x1C382)) = 0x0008; // C00552
*((unsigned short*)(Neo68KROM + 0x1C384)) = 0x0000;
*((unsigned short*)(Neo68KROM + 0x80000)) = 0x33FC;
*((unsigned short*)(Neo68KROM + 0x80002)) = 0x0001;
*((unsigned short*)(Neo68KROM + 0x80004)) = 0x0020;
*((unsigned short*)(Neo68KROM + 0x80006)) = 0x0002;
*((unsigned short*)(Neo68KROM + 0x80008)) = 0x4E75;
}

// Album fix
void __fastcall fr2ch_swap_cx_romsw(unsigned int sekAddress, unsigned short)
{
if (sekAddress == 0x200002) {
for (int i = 0; i < 0x200000; i++) {
int n = NeoSpriteROM[0x200000 + i];
NeoSpriteROM[0x200000 + i] = NeoSpriteROM[0x400000 + i];
NeoSpriteROM[0x400000 + i] = n;
}
}
}

static int fr2chInit()
{
pNeoInitCallback = fr2ch_fixes;

int nRet = NeoInit();
if (nRet == 0) {
SekMapHandler(4,  0x200000, 0x2FFFFF, SM_WRITE);
SekSetWriteWordHandler(4,   fr2ch_swap_cx_romsw);
}

return nRet;
}

struct BurnDriver BurnDrvfr2ch = {
"fr2ch", NULL, "neogeo", "1995",
"Idol Mah jong Final Romance 2\0", "CD Conversion / Hack", "Video Systems", "Neo Geo",
L"\u30A2\u30A4\u30C9\u30EB\u96C0\u9EBB\u30D5\u30A1\u30A4\u30CA\u30EB\u30ED\u30DE\u30F3\u30B9\0", NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_SNK_NEOGEO,
NULL, fr2chRomInfo, fr2chRomName, neogeoInputInfo, neogeoDIPInfo,
fr2chInit, NeoExit, NeoFrame, NeoRender, NeoScan, &NeoRecalcPalette,
nNeoScreenWidth, 224, 4, 3
};


Take that XiaoFang! :P