Code:
MAMEInfo.dat entries for:
bublbobl.cpp
bublbobl
----
0.35b3 [Marcelo de G. Malheiros]
0.27 [Chris Moore, Nicola Salmoria, Oliver White]
TODO:
- The Bubble Bobble MCU is actually an MC6801U4, which has additional features like internal timers (similar to the HD63701). I've just mapped the I/O ports since that's the only thing required for normal operation, but the program does use some of the additional features in its special "test" mode.
- tokio: Doesn't work due to missing MC68705 MCU protection emulation.
- tokio: Sound support is probably incomplete. There are a couple of unknown accesses done by the CPU, including to the YM2203 I/O ports. At the very least, there should be some filters.
NOTES:
- The coin inputs are handled by a custom called PC030. It would be responsible of handling the coin counters.
- There is a weird dip switch in Bubble Bobble (SWB #7). When it is on, the game takes the player score and the level number (increased by 1) and writes them, byte by byte, to $F7FE and $F7FF ($F7FF receives the same data but with the bit order reversed). After doing that, it sometimes hangs because it expects the value at $F7FF to change. This is done by routines $0F26 (player 1) and $0F74 (player 2). Frankly I don't know what this could be. The schematics don't show anything special there. A debug feature seems unlikely - why care about the score? Could it be provision for some kind of externally controlled redemption scheme?
- "Attract Sound" in Tokio is a very relative term - it just plays a very short sound every four rounds of demo play.
WIP:
- 0.182: Added machine\taito68705interface.cpp/h.
- 0.142u3: Angelo Salese removed deprecat.h dependancy and updated irqs accordingly for Bubble Bobble.
- 0.125u5: Added includes\bublbobl.h.
- 0.35b3: Merged tokio.c with bublbobl.c driver.
- 0.34b4: Added tokio.c driver and vidhrdw\tokio.c.
- 0.31: Removed sndhrdw\bublbobl.c.
- 0.29: Added sndhrdw\bublbobl.c.
- 0.27: Added bublbobl.c driver, machine\bublbobl.c and vidhrdw\bublbobl.c (Marcelo de G. Malheiros, Fredrik Sjostedt, Victor Trucco).
----
0.94u3 [Tormod Tjaberg]
0.27 [Chris Moore, Oliver White]
Artwork available
NOTE:
- The sequel to Bubble Bobble is Rainbow Island.
Bugs:
- bublbobl and clones: YM2203 registers don't clear in some cases when saving/restoring. kazblox (ID 05984)
WIP:
- 0.182: Replaced M68705 CPU4 with MC68705P3 in clone Bubble Bobble (bootleg with 68705).
- 0.171: Jose Jorge Fuentes added clone Super Bobble Bobble (bootleg, set 4).
- 0.167: caius added clone Super Bubble Bobble (bootleg). David Haywood added clones Bubble Bobble ('bootleg redux' hack for Bobble Bobble PCB), Bubble Bobble (for Bobble Bobble PCB), Bubble Bobble: Lost Cave V1.0, Bubble Bobble: Lost Cave V1.1, Bubble Bobble: Lost Cave V1.2 and Bubble Bobble: Lost Cave V1.2 (for Bobble Bobble PCB). These 'Bubble Bobble redux' and 'Lost Cave' sets are being used rather widely on Bubble Bobble PCBs these days, especially the redux / lost cave set for bootleg PCBs as they restore proper monster behavior etc. to the game, there are multiple reports of them being used on location etc. makes sense to support them.
- 0.155: darq fixed clone Super Bobble Bobble (bootleg, set 1), promoted from GAME_NOT_WORKING. Changed description of clones (set 1) to 'Bobble Bobble (bootleg of Bubble Bobble)', (set 2) to 'Super Bobble Bobble (bootleg, set 1)', 'Super Bobble Bobble (set 1)' to 'Super Bobble Bobble (bootleg, set 2)' and 'Super Bobble Bobble (set 2)' to 'Super Bobble Bobble (bootleg, set 3)'. Renamed (boblbobl2) to (sboblbobl), (sboblboa) to (sboblbobla) and (sboblbob) to (sboblboblb).
- 0.148: Robbbert fixed cocktail mode in Bubble Bobble driver.
- 0.147u2: hap changed description to 'Bubble Bobble (Japan, Ver 0.1)' and clones 'Bobble Bobble' to 'Bobble Bobble (set 1)', (US) to 'Bubble Bobble (US, Ver 1.0)', (US with mode select) to 'Bubble Bobble (US, Ver 5.1)' and (older) to 'Bubble Bobble (Japan, Ver 0.0)'. Fixed clone Bobble Bobble (set 2) romload typos.
- 0.145u5: ANY and The Dumping Union added clone Bobble Bobble (set 2).
- 0.141u1: M6801 changes [Curt Coder]: Added operating mode enum. Fixed port writes. Implemented SCI status follower bits. Implemented port 3 strobed mode. Fixed port writes some more.
- 6th June 2010: Corrado Tomaselli dumped Bubble Bobble (Korea 1986). Kold666 thinks that the Korean company manufacturing and assembling PCB for Taito had a license to sell them in Korea. All customs are Taito originals, but the general assembly is bootleg style. Maybe this is the "mother" of all Bubble Bobble bootlegs.
- 0.135u2: Fabio Priuli added save state support to Bubble Bobble driver.
- 0.133u2: Briah Troha added PCB locations to the rom names for clone Dream Land / Super Dream Land (bootleg of Bubble Bobble).
- 0.133u1: Sean Clough and David Haywood added clone Dream Land / Super Dream Land (bootleg of Bubble Bobble). Renamed (bublbob1) to (bublbobl1), (bublbobr) to (bublboblr) and (bubbobr1) to (bublboblr1).
- 0.130u2: Mamesick emulated CPU1 (slave) <-> AUDIOCPU communications and AUDIOCPU reset at startup in Bubble Bobble, previously this was disabled.
- 0.129u3: Phil Bennett changed VSync to 59.185606 Hz in Bubble Bobble and clones.
- 0.128u4: Nicola Salmoria and David Haywood removed ROM banking kludges from Bubble Bobble.
- 9th July 2008: Mr. Do - Made the Bubble Bobble homebrew bezel a little more "bubbly" in the frame area.
- 0.122u7: Changed M6801 CPU4 clock speed to 4MHz.
- 0.121: Vas Crabb updated the DIP locations in Bubble Bobble.
- 0.119u4: David Haywood added clone Super Bobble Bobble (set 1). Changed description of clone 'Super Bobble Bobble' to 'Super Bobble Bobble (set 2)'.
- 0.111u5: David Haywood added clone Bubble Bobble (bootleg with 68705).
- 12th November 2006: Mr. Do - Bubble Bobble artwork has been "optimized" by Ad_Enuff; much smaller file size (up to 80%) with no loss in quality.
- 10th September 2006: Mr. Do - Added instruction cards for Bubble Bobble.
- 0.107u3: Trinity and Nicola Salmoria added support for real Bubble Bobble MCU. Added M6801 (1MHz) CPU4 and TAITO JPH1011P MCU rom (a78-01.17).
- 5th August 2006: Nicola Salmoria - As you'd probably noticed, the pics in the previous post are of the Bubble Bobble custom MCU. Despite being one of the most popular games of all times, and having been in MAME for many years, the emulation of this game has never been perfect due to the lack of the original ROM for the MCU. For some time, we had been using a 68705 program found in a bootleg board, believing it had been extracted from the original. However, monster behaviour was wrong and there were other problems, like the wrong behaviour of the clock item. After some study of the program and of the game schematics, it became clear that the original MCU is not a 68705 at all (the pinout doesn't match) but looked more like a 68701. The 68705 program had been written from scratch by the bootleggers using black box reverse engineering techniques, by running the original MCU and logging all its reads and writes from memory. Indeed, the 68705 program does a lot of reads from memory without doing anything with them--simply because the original MCU would read that memory and do some unknown action with it. Eventually, the useless 68705 program was replaced by simulation code inside the emulator, which greatly improved the emulation accuracy. Monster behaviour was improved, the clock item behaviour fixed. However, there were still some unknown things, like how the randomisation of the EXTEND bubbles really worked. At last, thanks to excellent work by Trinity, the original MCU ROM has been extracted. This required removing the cover from the chip, taking photographs of it under a microscope, and manually decoding the contents of the ROM bit by bit. The photo shown in the previous post confirms that it's in the 6801 class, not a 68701 however as it was conjectured, but a 6801U4. With this ROM, we finally have the final piece of the puzzle for a 100% guaranteed perfect emulation. Checking the original MCU program was very interesting. It was designed to provide many protection features that were eventually not used by the game, like: * Process coin inputs and update the credit counter * Handle the number of remaining lives for both players * Handle the current round number * Handle variable speed incrementing for four variables and * Return values from a 1280 bytes table of seemingly random data. The reasons why those features were not used are probably various. Some of them were probably awkward to use because they require to one one frame for the MCU to process the data, others weren't flexible enough like the coin input processing that wouldn't allow for coinage settings different from the ones hardcoded in the MCU (though versions of Bubble Bobble with different coinage settings don't seem to have been made anyway).
So, how close was the simulation to the real thing? Very close; "too good", actually. Let's see why. The clock item behaviour was spot on, but off by one frame (the simulation made the counter expire one frame too late). The EXTEND randomisation simply doesn't exist in the original MCU. While the simulation code used a RNG to provide truly random letters, the original MCU simply increases the counter every frame. This seriously affects the game, making the EXTEND letters predictable. Since a new bubble enters the screen exactly 128 frames after the previous one, and the remainder of 128 / 6 is 2, this means that if you get consecutive letters each one will be 2 places after the previous one. So if you get 3 letters you can get either E, T, N or X, E, D. After that they will repeat. There are exceptions, though: if you create a new bubble in exactly the same frame when a new bubble should enter the screen, the bubble is delayed by one frame. So by timing the fire button exactly right you can change the bubble order. In theory you could get all 6 letters in a single level--let me know if you manage to do that! Also, new bubbles will not appear if there are already 16 bubbles on the screen, so that will change the order as well. The last, and most important, thing that the MCU does is compare the player coordinates with the monsters. The results are returned as flags indicating whether each coordinate is >, =, or <, and the absolute difference. This was done correctly in the simulation code, however there appears to be a bug in the original MCU. The code there attempts to check if the player collided with a moster and set a flag and indicate which monster in that case, but it just doesn't work. It would set the flag even if the player's Y coordinate matches one monster and the X coordinate matches a different monster! This isn't much of a problem since the main program just ignores the flag--the collision detection is done correctly by the second Z80. However, the MCU also completely stops processing the monster coordinates as soon as it finds a monster whose X coordinate is within 8 pixels of the player. So e.g. if you have a monster right above you three platforms up, and that monster is the first in the list, the other monsters could stop following you. This is a very subtle effect that's completely unnoticeable from what I can tell, though in theory it exists.
- 0.106u12: MASH added plds ($0, 200, 400 - pal16r4.u36, pal16l8.u38 and pal16l8.u4) to clone Bobble Bobble.
- 6th June 2006: Guru - Bobble Bobble (Taito 1986) bootleg arrived from Korea today. Thanks to GP-Lee.
- 24th February 2006: Nicola Salmoria - The emulation of Bubble Bobble is already virtually perfect, but there is still a doubt about the clock item. Currently, when you pick it up the enemies stop but the bubbles continue moving. It would make sense if the bubbles stopped moving too, and this idea is corroborated by the way variables are set up in the MCU shared RAM. The MCU would be responsible for stopping the bubbles and make them start again when the clock effect ends. What we need is to verify the behaviour on an original board. Bootlegs don't count (the clock behaviour is definitely wrong in them), nor do other emulator or ports count. Only the original board matters. Can anyone help?
- 0.101u3: Fixed cpu1 rom ($0) length to 32kb.
- 0.94u3: Tormod Tjaberg added Bubble Bobble (newer set). Renamed (bublbobl) to (bublbob1).
- 0.93u1: Nicola Salmoria fixed input (dipswitches etc.) in Bubble Bobble. Added 'ROM Type' dipswitch and removed 'Service Mode'.
- 0.90: Bubble Bobble driver update [Nicola Salmoria]: Removed the 68705 CPU emulation, since that's not what the original used. Simulated the 68701 MCU (enemy movement should now be correct). Fixed clock item behaviour (now enemies start moving again after 10 seconds). Supported coin lockout. Emulated the boblbobl protection device, getting rid of the ROM patches.
- 0.88u7: Cleanups in BubbleBobble driver [Curt Coder]. Changed VSync to 59Hz.
- 0.78u3: David Haywood fixed clone Bobble Bobble from crashing in 0.78u2.
- 0.77u2: Added YM2203 (3MHz), YM3526 (3MHz), MSM6295 (8000 Hz).
- 0.55: Fixed MAMETesters bug bublbobl054red.
- 0.37b4: Changed Z80 CPU3 clock speed to 3MHz. Added prom (video timing). Changed cpu1 rom address to $10000. Changed description of clones (US set 1) to 'Bubble Bobble (US with mode select)' and (US set 2) to 'Bubble Bobble (US)'. Fixed rom names.
- 0.36RC1: Added clone Bubble Bobble (US set 2). Changed description of clone (US) to 'Bubble Bobble (US set 1)'.
- 0.35b11: Brad Oliver added clone Bubble Bobble (US).
- 17th April 1999: Brad Oliver added another Bubble Bobble romset.
- 0.35b6: Replaced M6805 CPU4 with M68705.
- 0.35b5: Changed M6805 CPU4 clock speed to 2MHz.
- 0.35b3: Support for the ORIGINAL version of Bubble Bobble, with 68705 code from a pirate board. Wizards *do* throw stones in this version [Nicola Salmoria]. Also fixed big sprites in Tokio, and unified it with Bubble Bobble. Added M6805 (1.5 MHz) CPU4. The original version is the only one where wizards throw stones. The protection feature which randomizes the EXTEND letters in the original version is not emulated properly. Nicola fixed also big sprites in Tokio and unified it with Bubble Bobble.
- 0.34RC2: Fixed YM2203/YM3526 clock speeds to 3MHz.
- 0.34b8: Changed YM-3812 sound to YM-3526.
- 0.34b2: The music in Bubble Bobble seems to stay in sync now [Tatsuyuki Satoh].
- 0.33b6: Changed description of clones 'Bobble Bobble (bootleg Bubble Bobble)' to 'Bobble Bobble' and 'Bobble Bobble (bootleg Bubble Bobble, alternate version)' to 'Super Bobble Bobble'.
- 0.33b1: Known issues: In Bobble Bobble (bootleg Bubble Bobble), service mode works only if Language is set to Japanese. This is probably a "feature" of the bootleg.
- 0.31: Nicola Salmoria added music to Bubble Bobble (Sound Blaster needed). Known issues: Sound is not perfect yet, it gets out of sync soon and eventually die.
- 0.30: Nicola Salmoria added partial emulated sound in Bubble Bobble (only the YM2203 chip, therefore only some sound effects - no music).
- 0.29: Brad Oliver added clone Bobble Bobble (bootleg Bubble Bobble, alternate version). Bubble Bobble doesn't work in this release. Use Bobble Bobble or Super Bobble Bobble instead, they work much better than Bubble Bobble ever did. Changed description of clone 'Bobble Bobble' to 'Bobble Bobble (bootleg Bubble Bobble)'.
- 0.28: New osd_modify_pen() function, proposed by Aaron Giles. It allows drivers to dynamically modify the palette. WARNING: Since this feature can severely reduce performance on some systems, it must only be used when necessary - that is, when the emulated game dynamically modifies the palette. The other games should continue to use the static palette as before. Many games already use this feature (e.g. Crystal Castles, the Gottlieb games, Tapper, Bubble Bobble, and many others). There's also osd_get_pen(), which is used by usrintf.c to dynamically pick the pens used to render menus.
- 0.27: Chris Moore added 'Bubble Bobble' (Taito 1986) and clone Bobble Bobble. Sound effect codes from Oliver White. Drivers are now allowed to modify the RAM and ROM pointers to implement bank switching [Nicola Salmoria]. Bubble Bobble uses this. Be careful: When using this feature, you cannot use the standard MRA_RAM and MWA_RAM memory hooks to access RAM. Control: Arrows = Move around, ALT =Jump and CTRL = Fire. Known issues: The original version doesn't seem to behave correctly, probably due to the copy protection. Use the bootleg instead. The colors are accurate, but the color space is downgraded from 4x4x4 to 3x3x2.
- 14th July 1997: Virtu-Al dumped Bobble Bobble and Super Bobble Bobble (set 2).
PLAY INSTRUCTIONS:
- Trap enemies inside bubbles.
- Burst bubbles with your horns or fins.
- Higher points are scored when bursting several bubbles at the same time.
- You can jump over bubbles.
- One stage cleared when all enemies are destroyed.
LEVELS: 100 (+ 3 secret rooms)
Other Emulators:
* CottAGE
* FB Alpha
* JEmu2
* Raine
Recommended Games (Platform 2):
Space Panic
Joust
Williams Multigame (Joust)
Joust 2 - Survival of the Fittest
Monster Bash
Chack'n Pop
Mario Bros.
Mario Bros. (PlayChoice-10)
Bomb Jack
Vs. Mighty Bomb Jack
Bombjack Twin
Eeekk!
Zwackery
Bogey Manor
The FairyLand Story
TeddyBoy Blues
Bubble Bobble
Bubble Bobble II
Bubble Memories: The Story Of Bubble Bobble III
Rainbow Islands
Parasol Stars - The Story of Bubble Bobble III (Tourvision PCE bootleg)
Don Doko Don
Rod-Land
Snow Bros. - Nick & Tom
Puzzle King (PacMan 2, Tetris, HyperMan 2, Snow Bros.)
Snow Bros. 2 - With New Elves / Otenki Paradise
Snow Brothers 3 - Magical Adventure
The Berlin Wall
Tumble Pop
Dark Tower
Diet Go Go
Funky Jet
Pang Pom's
Saboten Bombers
Jump Kids
Little Robin
Gun Master
Joe & Mac Returns
Metal Saver
Pack'n Bang Bang
Pang Pang
Come Back Toto
Fancy World - Earth of Crisis
Miss Bubble II
Toppy & Rappy
Ultra Balloon
Bomb Kick
Raccoon World
Bang Bang Busters
Dream World
Dynamite Bomber
Head Panic
Nightmare in the Dark
Penguin Brothers
Tang Tang
Jumping Pop
Toy Land Adventure
Zupapa!
Super Bubble 2003
Tower & Shaft
Romset: 549 kb / 18 files / 171.2 zip
----