What's new

What is up with my Bubble Memories (Japan) board?

Pr3tty F1y

Student
Joined
Jul 17, 2024
Messages
29
Reaction score
17
Location
USA
So I popped open my Japan-region Bubble Memories cartridge and got a bit of a surprise:

bubblememories.jpg


The cartridge always struck me as a bit weird as the label on top is too wide for the plastic indentation.

I was expecting a more traditional board layout, but this thing looks to be all 27C4001 512kb chips (except for the sound EPROMs which are 27C2001's). I already slapped stickers over the EPROM windows, so no fretting there. However, the Taito security sticker was intact on the on the center screw of the cartridge before opening it (although that doesn't mean someone crafty didn't get in there).

Any thoughts on what this is? Am I wrong and this is what I should have expected?

It looks like the only sets in MAME that have 512kb roms are the prototypes. I'm not thinking that this actually is a prototype. Just maybe the same rom data split over different chips. However, I'll be dumping it to make sure.

I guess this gets around my question about how I was planning to do a Twin Qix conversion. Apparently, given everything is socketed, it will be a bit easier than anticipated.
 
Last edited:
Even weirder. This Japan region cartridge came with a Japan region F3 mother board, but the version of the game's test mode is 2.4O. Date stamp matches the v2.4O in MAME. However the MAME Set is 13.5mb across 13 ROM chips and this dump with 27 ROMs and is only 13.0mb. I've been trying to concatenate/hex search to see which of my roms match the MAME set and I'm not having much luck (but I'm also probably not trying that hard :-D).

v2.40.jpg
 
OK - I can verify that this rom set is bubblem from MAME. It's just split over separate roms and interleaved. When deinterleaved and the separate data chunks are combined, it's a bit perfect match to the known bubblem set. So it's nothing new or special.

However, I'm still totally perplexed by the IC layout on this board. I can't find any other photos of anything that looks like it.
 
That makes sense. There are no Taito logos on the board, but the name Taito does appear twice and there are some D77 pals on the board - so I'm not sure where they would have been sourced from. It looks like an awful lot of effort for a F3 bootleg to have the board labeled and be using (potentially) real stock of D77 pals. (e.g. like would they have a bunch of these empty pcbs on a shelf and need them labeled so that they knew what they were? Or maybe the pcb designer just liked producing an elegant product ;-D). Granted, the use of 32 pin 512kb 27C4001's for everything probably was cheaper at the time than the larger 1mb/2mb 42 pin chips.

There's no indication on the board of when it was manufactured.

However, it was clearly made to mimic real Taito F3 rom boards as the rom sockets are labeled for the following corresponding ICs of the legitimate board:
  • Sprite data:
    • IC4 (split across IC4.0, IC4.1, IC4.2, and IC4.3 sockets)
    • IC8 (split across IC8.0, IC8.1, IC8.2, and IC8.3 sockets)
    • IC12 (split across IC12.0, IC12.1, IC12.2, and IC12.3 sockets)
  • 68K prog code:
    • IC17
    • IC18
    • IC19
    • IC20
  • Audio prog code:
    • IC32
    • IC33
  • Sound data:
    • IC38 (split across IC38.0, IC38.1, IC38.2, and IC38.3 sockets)
    • IC41 (split across IC41.0, IC41.1, IC41.2, and IC41.3 sockets)
  • Tile data:
    • IC43 (split across IC43.0, IC43.1, IC43.2, and IC43.3 sockets)
    • IC45 (split across IC45.0, IC45.1, IC45.2, and IC45.3 sockets)
    • IC47 (split across IC47.0, IC47.1, IC47.2, and IC47.3 sockets)
Of all of the split roms, the non-sound data roms (i.e., sprites and tiles) are from sockets .0 and .2 as alternating bytes as the first chunk of rom data and then sockets .1 and .3 as alternating bytes appeneded to that first chunk to generate the original rom file. For the sound roms for IC38 and IC41, they are assmebled as .0 and .1 as alternating bytes as the first chunk and then .2 and .3 as alternating bytes as the second chunk. So doing the reassembly in that manner produced the original bubblem rom set.

IC43 was unique on this board in that there was only one 512kb 27C4001 rom at IC43.0. I had to create a dummy 512kb file filled with FF so that it could be deinterleaved as IC43.2 to produce the e21-05.rom file. That's why I find this board so weird as the real e21-05.rom alternates every other byte as FF. Maybe it's just an artifact of the hardware/that is how the F3 data is stored, but it still makes me a bit suspect about the origins of this pcb.

Anyway,I'm going to play around and reverse my deinterleaving PowerShell script to see if I can convert some existing F3 sets to run on it :-D
 
Last edited:
In case anyone else runs into this ROM Board variant in the future, I wanted to share that I was able to successfully convert it to a Ray Force (and my Puzzle Bobble 3 -> Ray Force is now a Puzzle Bobble 3 -> Elevator Action II :D mostly because EA2 needs IC39 for sound and I didn't want to fiddle with anything on this weird Bubble Memories ROM board as it does not have IC39 sockets).

Anyway, here's the MAME ROM name to IC socket conversion for Ray Force. All ROMs are 27C4001's except IC32 and IC33 need to be 27C2001's:
IC4 = D66-05
IC8 = D66-04
IC12= D66-03
IC17= D66-25 (or -24 if you're doing a Gunlock)
IC18= D66-21
IC19= D66-18
IC32= D66-23
IC33= D66-22
IC38= D66-01
IC41= D66-02
IC43= D66-08
IC45= D66-07
IC47= D66-06

So IC17 - IC33 don't need to be split into 512kb chunks, but the rest do. Here is the script that I had ChatGPT hastily throw together to split out the ROM data. It doesn't rename it for you, but following my findings in the above post re: the first 1024kb being split into IC#.0 odd bytes and IC#.2 even bytes and the second 1024kb (if there is a second 1024kb) being split into IC#.1 and IC#.3 for the non-sound data and for the IC38-IC41 sound data roms, the first 1024kb gets split into IC#.0 and IC#.1 and the second 1024kb gets split into IC#.2 and IC#.3. I didn't trace the board, look at the PALs/GALs - so there may be other functional ways around how the ROMs are split, but this is what worked for me.

Here's my PS script for splitting the ROMs:
Code:
$InputPath = ""

$OutputDirectory = ""

# Create output directory if it doesn't exist
if (!(Test-Path $OutputDirectory)) {
    New-Item -Path $OutputDirectory -ItemType Directory | Out-Null
}

$InputFiles = Get-ChildItem -Path $InputPath -Filter *.bin

$InputFiles | ForEach-Object {
  
    $InputFile = $_.FullName

    # Constants
    $chunkSize = 1024KB
    $halfChunkSize = 512KB
    $buffer = New-Object byte[] $chunkSize

    # Open the input file
    $fs = [System.IO.File]::OpenRead($InputFile)
    $chunkIndex = 0

    while (($bytesRead = $fs.Read($buffer, 0, $chunkSize)) -gt 0) {
        # Only use the bytes read (in case it's the last partial chunk)
        $actualChunk = $buffer[0..($bytesRead - 1)]

        # Prepare even and odd byte arrays
        $evenBytes = New-Object byte[] ([Math]::Ceiling($bytesRead / 2))
        $oddBytes = New-Object byte[] ([Math]::Floor($bytesRead / 2))

        $evenIdx = 0
        $oddIdx = 0

        for ($i = 0; $i -lt $bytesRead; $i++) {
            if ($i % 2 -eq 0) {
                $evenBytes[$evenIdx++] = $actualChunk[$i]
            } else {
                $oddBytes[$oddIdx++] = $actualChunk[$i]
            }
        }

        # Write out the two files
        $baseName = [System.IO.Path]::GetFileNameWithoutExtension($InputFile)
        $evenFile = Join-Path $OutputDirectory "$baseName.chunk${chunkIndex}_even.bin"
        $oddFile  = Join-Path $OutputDirectory "$baseName.chunk${chunkIndex}_odd.bin"

        [System.IO.File]::WriteAllBytes($evenFile, $evenBytes)
        [System.IO.File]::WriteAllBytes($oddFile, $oddBytes)

        $chunkIndex++
    }

    $fs.Close()

}


#1234 Numeric Order
#0213 Sprite/Tile Order
#0123 Sound Order

Here is what my input directory looks like:
files.jpg


And here is the final product plugged into the board. Some of my ROM chips still have their original ROM name labels from the other board. Sorry! :-D

EDIT: And I see I made one labeling error with that 43.2 label below. It should be 43.0. The 43.2 ROM created by the splitter was all FF just like from Bubble Memories so I really didn't need to add that socket to the board. Oh well. It's there now.

weirdpcb_rayforce.jpg


And we have success:

rayforce_1.jpg



rayforce_2.jpg
 
Last edited:
Back
Top