farmerbb / RED-Project

ROM Extraction Documentation Project
209 stars 10 forks source link

SEGA 3D Classics on 3DS #180

Open kjetil-f opened 1 month ago

kjetil-f commented 1 month ago

Is it possible to extract ROMs from 3D classics on 3DS, or are they straight up ports?

aceofstax commented 1 month ago

Yes, Sega 3D Classics contains ROMs. Here is what I was able to find:

- FZ1_NEW_OPLL_OB.BIN ("New"? Fantasy Zone)
- FZ1_OLD_OPLL_OB.BIN ("Old"? Fantasy Zone)
- PuyoPuyo2x.ccf (fbneo "light" rom?)

These are the no-intro expected filenames, with the original unpacked filenames underneath. As for the other three, these are the unpacked original filenames (See edit at end of post). PuyoPuyo2x.ccf should have a ROM in it, but I can't make out what the other two are supposed to be as of yet.

I basically took hints from other guides on extracting ROMs from 3DS titles in figuring out how to get these. If you give me a few days to locate my 3DS, I can provide specifics.

EDIT: Post updated with full listing of roms I was able to find.

All of these originally came in a .m file and upon decompression, the filenames dropped the .m extension. Checking those unpacked files against no-intro dats will get them recognized. It's just the FZ1 and PuyoPuyo2 files I'm unsure about.

kjetil-f commented 1 month ago

Excellent! If you can, that would be great. That's what this place is for.

It seems like you have figured out the basics of how to extract Master System and Genesis ROMs.

About Puyo Puyo 2. I think it is the arcade version. I know Sega released a lot of arcade games under the 3D Classics line. So would be interesting to see if they were possible to extract as well.

aceofstax commented 1 month ago

I've been wanting to find it for my own reasons (other rom extracting), but it may not be somewhere convenient right now.

That said, I decided to check around digitally for any traces of the extraction process. And yes, the Sonic games are playable too, I just apparently moved those files somewhere else. So here is the original file listing. If you find these files in GodMode9, you're on the right track:

AlteredBeast_3D_130419.SGD.m AlteredBeast_JP_3D_130419.SGD.m FantasyZone2_J.SMS.m FZ1_NEW_OPLL_OB.BIN.m FZ1_OLD_OPLL_OB.BIN.m MazeWalker_patch.sms.m PuyoPuyo2x.ccf.m Sonic1.SGD.m Sonic1_USA.SGD.m Sonic2.SGD.m Sonic2_USA.SGD.m

Seems pretty clear that FZ1 is Fantasy Zone, but the difference between the two files I can't comment on. Running in RetroArch I get a Mark III logo flash on screen, but I don't believe any other content loaded. As for Puyo Puyo 2, I'll try running it in some arcade emulators and see what I find.

As for tools to use on this, I used mdfTools. It comes with mdfCompressor.exe, mdfDecompressor.exe and Zlib.portable.dll. Obviously you'll want to decompress, and the resulting files will have the same name without the .m extension.

This is the only place I was able to find mdfTools in a quick search, but I'd imagine using the right algorithm with MArchiveBatchTool would also extract these. I also used mdfTools for Collection of Mana, but I don't recall getting the tool on the site linked.

I will update this post if I figure out which seed (algorithm?) to use. I also plan to update the list of games included in the previous post after a little bit of tinkering.

EDIT: MArchiveBatchTool will work, it just spits out some errors with the command I used. But the resulting decompressed file is a ROM recognized by no-intro.

.\MArchiveBatchTool.exe fullunpack --keep .\AlteredBeast_3D_130419.SGD.m zlib 25G/xpvTbsb+6 64

Repeat as necessary for each rom included in this collection. This also should work for Collection of Mana, which is currently not listed on RED-Project Wiki, nor by game-extraction-toolbox. As I mentioned, I used mdfTools originally to get the rom files from Collection of Mana.

RealRelativeEase commented 1 month ago

I can confirm that the mdfTools extraction method works for 3D Streets of Rage / Bare Knuckle 1&2 as well, you'll get BK1_20130611.BIN, BK2U_20150218.GEN and BK2J_20150218.GEN. None of these are a match for the entries in the No-Intro database, I think this is part of the reason: sor1

I've only got the Rev A ROM from Steam to compare the ROM sourced from my 3DS with, but other than that, there are additional differences between them besides this line.

Both mdfTools and MArchiveBatchTool weren't able to extract the Mega Drive ROMs from SVC Streets of Rage on XBLA, though.

Since I also bought 3D Space Harrier back then, I decided to give that one a try as well. I suppose that the files for the arcade version are somewhere in romfs\system\raw, but I don't know how to extract them. I read that M2 included the Game Gear version of Space Harrier in their PS2 release: https://web.archive.org/web/20160919053355/http://blogs.sega.com/2013/11/25/sega-3d-classics-space-harrier-3d-interview-with-developer-m2/ (You should give this interview a read in any event, since it provides a lot of insight into how M2 works and how much care they put into their releases.)

There's a file named dammy.GG.m in the "rom" folder, but it's not a working ROM and only 1KB in size. Did 3D Space Harrier include a playable Game Gear ROM or is this just a leftover from M2's work on the PS2 version?

RealRelativeEase commented 3 weeks ago

I've been missing the forest for the trees, the multiplayer has been dummied out in the Mega Drive ROM extracted from 3D Streets of Rage / Bare Knuckle.

BK1_20130611-241027-141204

aceofstax commented 3 weeks ago

Both mdfTools and MArchiveBatchTool weren't able to extract the Mega Drive ROMs from SVC Streets of Rage on XBLA, though.

That doesn't surprise me. I spent some time looking at SVC titles of my own. I don't know for certain but I think it's more likely they're stored differently on 360 than just not being there. I'm very rusty on my X360 stuff, but before RGH hacks all people could do was tinker with the files on the removable HDD. Utils may be a bit outdated, but I think it was 7 years without unsigned code lol.

If you aren't using it already, Velocity is a good multi platform X360 tool for extracting game files. For file decryption and decompression you'll likely need other utils. Search online for the magic bytes of the files you want to identify and you may get somewhere.

Since I also bought 3D Space Harrier back then, I decided to give that one a try as well. I suppose that the files for the arcade version are somewhere in romfs\system\raw, but I don't know how to extract them. I read that M2 included the Game Gear version of Space Harrier in their PS2 release

There's a file named dammy.GG.m in the "rom" folder, but it's not a working ROM and only 1KB in size. Did 3D Space Harrier include a playable Game Gear ROM or is this just a leftover from M2's work on the PS2 version? It's possible the file just wasn't processed correctly. I ran into something similar extracting .qd files from Japanese Smash Bros for Wii.

Plombo's original vcromclaim NES extraction script would output some tiny file, because some of the files are actually Famicom Disk System games. So while searching for the "NES" header, it found "NES" near the end of the file containing the .qd roms and output something that couldn't be used. For all NES and FC/FDS purposes, I have to use two different commits of JanErikGunnar's fork.

There's quite possibly something in vcromclaim that could be used for getting something useful. A lot of non-VC titles can be extracted like official VC titles. But I'd also try MArchiveBatchTool if you haven't already. It's also possible it's some leftover file. Check No-Intro for info on different dumps of Space Harrier. If this version has been dumped, there may be a comment on what tool to use there.

I've been missing the forest for the trees, the multiplayer has been dummied out in the Mega Drive ROM extracted from 3D Streets of Rage / Bare Knuckle.

Heh. I don't blame you. Both faster and easier to find differences in a hex editor than it is to play the title itself. Makes me wonder if speedrunners note the specific version of the game/rom they do their runs in. You'd think someone that familiar with a particular game could cite rom differences on the spot.

kjetil-f commented 3 weeks ago

There's quite possibly something in vcromclaim that could be used for getting something useful. A lot of non-VC titles can be extracted like official VC titles. But I'd also try MArchiveBatchTool if you haven't already. It's also possible it's some leftover file. Check No-Intro for info on different dumps of Space Harrier. If this version has been dumped, there may be a comment on what tool to use there.

I can confirm that JanErikGunnar's fork of vcromclaim can extract a working Space Harrier arcade ROM from the Wii. Maybe the 3DS version of the same game are packaged in a similar way?

aceofstax commented 3 weeks ago

I can confirm that JanErikGunnar's fork of vcromclaim can extract a working Space Harrier arcade ROM from the Wii. Maybe the 3DS version of the same game are packaged in a similar way?

I would imagine so. And actually, because you mentioned it... I just looked at that fork of vcromclaim again and apparently the only .ccf archive it supports is for the Space Harrier rom. If it doesn't work, then it may just be a different version of Space Harrier. See the if/else statement here.

Anyway, you were right about Puyo Puyo 2. It's most likely an arcade rom, there's just no code in vcromclaim to handle more than Space Harrier at the moment.

EDIT: This repo seems interesting. CCF Tools, and was made for Wii VC extraction.

EDIT 2: Extracting PuyoPuyo2x.ccf with CCF Tools (ccfex.exe) output a couple files, but I know next to nothing about arcade roms. So here are the filenames with crc32 checksum.

cpu.bin = 4a6d76d6 (1024 KiB)
pcm.bin = 9dc30cbf (3050 KiB)

Tried running these on a Miyoo device and got an error telling me to read this page to build a fbneo romset.

You can download the dat files for the latest version of the core from the dats directory. Note that some devices (Nintendo 3DS) are running a "light" build with fewer supported games due to memory limitation, the dat files for that build are available from the light subdirectory.

I was expecting more than two files, but that may explain what I got out of 3D Classics' Puyo Puyo 2. So arcade roms from 3DS are "light" roms?

kjetil-f commented 3 weeks ago

Not an arcade ROM expert myself, but traditionally there are a lot of files zipped up to a single zip-file, and that zip-file is the one you use with your emulator. And to make life harder, the game is often very sensitive to what version of MAME or FinalBurn Alpha you are using. Maybe even name sensitive?

Maybe it's possible to zip the cpu.bin and pcm.bin into a PuyoPuyo2x.zip and use it on an emulator, but my very uneducated guess, is that those two bin files need do be extracted into smaller parts before they all get zipped together.

RealRelativeEase commented 3 weeks ago

There's a file named dammy.GG.m in the "rom" folder, but it's not a working ROM and only 1KB in size. Did 3D Space Harrier include a playable Game Gear ROM or is this just a leftover from M2's work on the PS2 version?

It's possible the file just wasn't processed correctly. I ran into something similar extracting .qd files from Japanese Smash Bros for Wii.

The file is already 1KB in size when examined in GodMode9, even before it's been run through mdfTools. So I guess it's either stored somewhere else or they might have decided against including the Game Gear version.

You can download the dat files for the latest version of the core from the dats directory. Note that some devices (Nintendo 3DS) are running a "light" build with fewer supported games due to memory limitation, the dat files for that build are available from the light subdirectory.

I was expecting more than two files, but that may explain what I got out of 3D Classics' Puyo Puyo 2. So arcade roms from 3DS are "light" roms?

I don't think this is in reference to arcade ROMs extracted from 3DS titles, rather than the 3DS version of FB Neo not being compatible with more demanding games due to the hardware's lack of processing power for emulation.

While I don't think the original Puyo Puyo 2 arcade hardware used PCM sound, it's often the case with official re-releases using emulation. Like kjetil-f said, arcade ROMs require the correct files and the correct version of the game to run in an emulator. These are the files required for a ROM of Puyo Puyo 2, according to Arcade Italia: puyo

These files could potentially be extracted from either .bin file that you ended up with, usually by cutting and or merging the corresponding bytes from the files. But I don't know how to identify those and how to build a working ROM.

aceofstax commented 3 weeks ago

Something weird I noticed after typing my replies: I opened cpu.bin in a hex editor and found "SEGA MEGA DRIVE" near the top of the file. I checked No-Intro for 'Puyo' and found "Puyo Puyo Tsuu" (tsuu is just japanese pronouciation of "two"). The dumps listed there have serial numbers to go with most of the dumps, but none match the number in this file. Serial number of this rom is "T-35013-01", but I haven't gotten it to load in an emulator yet. It actually could be a Mega Drive rom, unless they casually drop text like that in arcade roms. But this cpu.bin file is the exact same file length (2097152) as a Puyo Puyo Tsuu MD rom too.

.ccf extension is why I thought it was an arcade rom to begin with, but the hex editor threw me for a loop. If it's not an arcade rom, then CCF Tools isn't coded with non-arcade roms in mind. If it is an arcade rom, I'm curious if Sega converts MD titles to arcade and leaves references to MD intact. I loaded it with three different retroarch cores and no luck. It runs, but black screen and no audio. There was an fps counter though, lol.

@kjetil-f

Not an arcade ROM expert myself, but traditionally there are a lot of files zipped up to a single zip-file, and that zip-file is the one you use with your emulator.

That's kind of what I thought. Amazon Prime Gaming gave out a ton of arcade stuff, including SNK 40th Collection. I don't recall which titles/collections, but many games had at least 4 or 5 .bin files. So seeing just two is a little unexpected. One way or another I'll have to learn.

Maybe it's possible to zip the cpu.bin and pcm.bin into a PuyoPuyo2x.zip and use it on an emulator, but my very uneducated guess, is that those two bin files need do be extracted into smaller parts before they all get zipped together.

I did try that, and it was the .zip file that was launchable on the Miyoo device. That's when I got the error telling me to build a fbneo romset. If the files aren't good in their current form, seems like ClrMamePro could help fix that. I may try

@RealRelativeEase

The file is already 1KB in size when examined in GodMode9, even before it's been run through mdfTools. So I guess it's either stored somewhere else or they might have decided against including the Game Gear version.

I'd agree with that logic. I still can't find my 3DS, but I looked up a guide for dumping VC titles, as I used general techniques for those to find roms in other titles. GBA VC roms are peculiar in that they're stored in exefs of the title as opposed to romfs. That said, although we're not talking about GBA, it could be worth checking exefs and try to ID and extract anything found there.

I don't think this is in reference to arcade ROMs extracted from 3DS titles, rather than the 3DS version of FB Neo not being compatible with more demanding games due to the hardware's lack of processing power for emulation.

Yeah, I could see it go either way. If people have extracted arcade titles from 3DS already elsewhere on the net, then that's neat. Given how complicated arcade roms are compared to consoles, it would be nice if I could find something to point me in the right direction.

These files could potentially be extracted from either .bin file that you ended up with, usually by cutting and or merging the corresponding bytes from the files. But I don't know how to identify those and how to build a working ROM.

Same, so I'm going to try to learn how to use ClrMamePro so I have a better idea of what I'm doing. It didn't recognize the files I had, so it's either user error or they're just not recognized. I have no idea if I have other Sega arcade roms, but if I do and they get recognized by ClrMamePro (or even just playable), I can probably problem solve from there.

kjetil-f commented 3 weeks ago

Something weird I noticed after typing my replies: I opened cpu.bin in a hex editor and found "SEGA MEGA DRIVE" near the top of the file. I checked No-Intro for 'Puyo' and found "Puyo Puyo Tsuu" (tsuu is just japanese pronouciation of "two"). The dumps listed there have serial numbers to go with most of the dumps, but none match the number in this file. Serial number of this rom is "T-35013-01", but I haven't gotten it to load in an emulator yet. It actually could be a Mega Drive rom, unless they casually drop text like that in arcade roms. But this cpu.bin file is the exact same file length (2097152) as a Puyo Puyo Tsuu MD rom too.

.ccf extension is why I thought it was an arcade rom to begin with, but the hex editor threw me for a loop. If it's not an arcade rom, then CCF Tools isn't coded with non-arcade roms in mind. If it is an arcade rom, I'm curious if Sega converts MD titles to arcade and leaves references to MD intact. I loaded it with three different retroarch cores and no luck. It runs, but black screen and no audio. There was an fps counter though, lol.

I know that Sega released Mega Drive based arcade hardware like Mega-Tech or Mega Play. So maybe this game is actually more or less an Mega Drive game, and that's why you don't get the usual arcade file structure. On a quick YouTube comparison these games seems more or less identical. The 3DS version seems to have updated the "Insert Coin(s)" and "Credit" to "Push X button" and "Free Play" but the Mega Drive version doesn't seem to have neither.

aceofstax commented 2 weeks ago

I know that Sega released Mega Drive based arcade hardware like Mega-Tech or Mega Play. So maybe this game is actually more or less an Mega Drive game, and that's why you don't get the usual arcade file structure. On a quick YouTube comparison these games seems more or less identical. The 3DS version seems to have updated the "Insert Coin(s)" and "Credit" to "Push X button" and "Free Play" but the Mega Drive version doesn't seem to have neither.

That helps, and probably explains why I haven't been getting matching CRCs or any luck with ClrMamePro.

I took a second look at the FBA datfiles and noticed a few things:

  1. "FinalBurn Neo (ClrMame Pro XML, Arcade only).dat" has the same file info as RealRelativeEase shared.
    <game name="puyopuy2" sourcefile="sega/d_segac2.cpp">
        <description>Puyo Puyo 2 (Japan)</description>
        <year>1994</year>
        <manufacturer>Compile (Sega license)</manufacturer>
        <rom name="epr-17241.ic32" size="524288" crc="1cad1149"/>
        <rom name="epr-17240.ic31" size="524288" crc="beecf96d"/>
        <rom name="epr-17239.ic4" size="524288" crc="020ff6ef"/>
        <video type="raster" orientation="horizontal" width="320" height="224" aspectx="4" aspecty="3"/>
        <driver status="good"/>
    </game>
  2. There's a "FinalBurn Neo (ClrMame Pro XML, Megadrive only).dat", lol
    <game name="puyopuy2a" cloneof="puyopuy2" romof="puyopuy2" sourcefile="megadrive/d_megadrive.cpp">
        <description>Puyo Puyo 2 (Japan)</description>
        <year>1994</year>
        <manufacturer>Compile</manufacturer>
        <rom name="puyo puyo 2 (jpn).bin" size="2097152" crc="51ad7797"/>
        <video type="raster" orientation="horizontal" width="320" height="224" aspectx="4" aspecty="3"/>
        <driver status="good"/>
    </game>
    <game name="puyopuy2" sourcefile="megadrive/d_megadrive.cpp">
        <description>Puyo Puyo 2 (Japan, v1.1)</description>
        <year>1994</year>
        <manufacturer>Compile</manufacturer>
        <rom name="puyo puyo 2 (jpn) (v1.1).bin" size="2097152" crc="25b7b2aa"/>
        <video type="raster" orientation="horizontal" width="320" height="224" aspectx="4" aspecty="3"/>
        <driver status="good"/>
    </game>

Whether this is the specialized arcade hardware you mentioned or the actual game console, I thought it was worth considering. Given that there are the subtle differences in the rom that you noted, this probably explains why I can't get a matching CRC. But I've been playing around with the files and trying to find something that works.

Something I noticed about cpu.bin is, if you slice it into two 524288 (decimal) length blocks, it seems to cut it cleanly like it was meant to be two different files (both end with a block of FF bytes). So this may be modified versions of two files in the Arcade only datfile.

Kinda grasping at straws at this point, but the last thing I can think of trying is editing the datfiles to add an entry for the files I have and see what happens. Arcade datfile uses "d_segac2.cpp" and Megadrive datfile uses "d_megadrive.cpp". I would imagine this makes a huge difference when testing the rom.

Another thing: Nintendo Switch also has a version of Puyo Puyo 2 released. If I can get it cheap, I'll look into comparing with that. Wikipedia has a small section on both the 3DS version and the Switch version. Switch version is definitely arcade.

If anyone else has access to the Sega 3D Classics PuyoPuyo2x.ccf file and wants to help, please do. I'm just a noob who likes to tinker.

RealRelativeEase commented 1 week ago

Something I noticed about cpu.bin is, if you slice it into two 524288 (decimal) length blocks, it seems to cut it cleanly like it was meant to be two different files (both end with a block of FF bytes). So this may be modified versions of two files in the Arcade only datfile.

It might be two of the .bin files required for the arcade ROM? Doesn't really solve the issue on how to obtain the third file, though.

aceofstax commented 1 day ago

It might be two of the .bin files required for the arcade ROM? Doesn't really solve the issue on how to obtain the third file, though.

Yeah, that's where I was hoping ClrMamePro would come in. I'm still trying to grasp the nature of arcade roms, but it seems clear that ClrMamePro slices files it recognizes into different playable formats. Still, it has to recognize the rom via the provided datfile.

In the meantime, I tried out an idea I got from gex-toolbox and ran Binwalk on the cpu.bin and pcm.bin.

I played around with it a little, and this command was one I used: binwalk -B -e cpu.bin pcm.bin

Binwalk did not detect anything embedded in cpu.bin, but it did find a MySQL isam v2 archive in pcm.bin.

Target File: pcm.bin
MD5 Checksum: c04016144307af2bc90fca5eac374866
Signatures: 411
DECIMAL       HEXADECIMAL     DESCRIPTION
----------------------------------------------------------------------------
1585056       0x182FA0        MySQL ISAM compressed data file Version 2

"myisamchk" is supposed to be able to handle these files. I did attempt to use that too, but not knowing much about the filetype, I literally selected from the offset it appears (in pcm.bin) to the end of the file. Copied that, saved to a new file and tried to extract with myisamchk. I got an error message telling me it wasn't an isam archive.

$ myisamchk -o --create-missing-keys pcmbin.myi
myisamchk: error: 'pcmbin.myi' is not a MyISAM-table

Binwalk identifies it as containing an isam v2, and so does UniExtract 2. But I still haven't found a way to extract it using either tool.

Funny thing about cpu.bin. Kali says it's a "Genesis rom" in the file manager lol. I think I already tested it with a Genesis emu though and no result.

So the other thing I have yet to try is to get the CRC32 hash of the cpu.bin, add it to the "FinalBurn Neo (ClrMame Pro XML, Megadrive only).dat", and load that in an emulator. Those entries are single file roms, so we'll see what happens.