Home News Forum                            
 

Play your favorite classic games and more with the GameEx front end. Read more.

bubsys: MAME ROM Information.


MAME Info:


Bubble System BIOS (Konami 1985)


BIOS:

400b03.8g (audiocpu $0 - 8k)

400a1.2b (k007232 $0 - 256)

400a2.1b (k007232 $100 - 256)

sram1.ic1 (sram $0 - 8k)

sram2.ic3 (sram $2000 - 8k)


NOTES:

- A 68000/Z80-based arcade system PCB with an additional Bubble Memory Cassette containing the game data which can be changed easily. The data in the Bubble Cassette can be corrupted if subjected to magnetic interference. The bottom PCB appears to be exactly the same as used on Nemesis hardware.

- The boot sequence is: On power up, displays a blue screen containing some junk pixels and speech says: "Presented By Konami", then "Getting Ready..... Fifty" and "Getting Ready..... Forty Nine" etc, until about 30, then the screen displays some orange text 'WARMING UP NOW' on a black background and numbers that count down from 99 to 0, and below that text 'PRESENTED BY KONAMI". A tune also plays while the numbers count down. When the counter reaches 0 the game boots.


WIP:

- 17th July 2011: Charles MacDonald - Back in 2007 Guru and I did some experiments with a Konami Bubble System board. The system has a 68000 with 128K of work RAM implemented as DRAM, and the first 4K is replaced with two 2Kx8 SRAM chips. The SRAM is shared with a unknown MCU (64-pin SDIP) that can halt the 68000 and read/write SRAM as needed. The MCU directly interfaces with the bubble memory. There are dedicated hardware registers at $40000 for the 68K to make sector read/write requests, and the MCU uses $F00-$F7F in shared RAM as a sector buffer for these requests. After a power-up reset the MCU writes the vector table and a boot program into shared RAM for the 68000 to execute. Guru replaced the SRAM with NVRAM so we could get the boot program before it was overwritten by the game program. It does the following: * Wait for a fixed period of time. * Kick the watchdog. * Copy MCU-supplied data from 14C to D00. I think this is the bad sector bitmap and is 304 bytes. That's 2432 bits for each 128-byte sector, or 304K total. Sectors are actually 132 bytes each, with 128 bytes of usable data. The BIOS strips the excess data out after the MCU has read a raw sector into RAM. * If offset $78000 contains $5555, jump to $78002. This corresponds to external EPROM attached to the daughterboard connector, presumably for development. * Read bubble memory sectors $001, $001, $801. This data isn't used, so these are probably dummy reads to prepare the bubble memory for later access. Bit 11 of the sector number may have a special purpose here (e.g. sectors $001 and $801 are the same). * Read eight sectors from sector $181 onwards to RAM at $10000, converting each raw 132-byte sector to a 128-byte sector. * Jump to $10000 where the first 1K of the game program loaded from bubble memory resides. This is the higher area of work RAM that isn't shared with the MCU. From this point the game is running, and it will continue to load more sectors into memory and perform game specific operations. It has a simple BIOS in the low 4K of work RAM where trap #0 reads a sector and trap #1 writes a sector. I don't know if games commonly write data such as high scores back to the bubble memory however, or if the sector buffer for a sector write operation has to be in the raw format or not. Now for the sake of preservation and emulation our goal is to read all of the bubble memory data for each game. In order to do this a trojan has to be executed by the 68000 to talk to the MCU and request sectors to read. As the 68000 program code is either loaded from bubble memory or copied from the MCU internal ROM, there is no easy way to run our own code. Replacing the SRAM with ROM (in our case, write-disabled NVRAM) prevented the MCU from starting up correctly as it expects to read and write data when booting, so the only remaining option is to use the daughterboard connector. A custom PCB could be attached to it with the identifying signature and 68000 code that would get executed directly. Some additional hardware like more NVRAM or a USB interface could be added to the board for saving sectors as they are read. Or, another option would be to replace the 68000 with a Fluke module and break execution once the startup program passes control to the program loaded from bubble memory, then overwrite RAM at that address with a trojan. At some point we probably want to get the MCU decapped, identified, and read for the sake of accuracy. The bubble memory games are quite rare and expensive so it's been hard to find people with access to working boards who want to risk doing something like this. In the meantime it's probably sufficient to just dump the bubble memory and simulate the MCU for emulation.

- 0.143u1: Guru and Angelo Salese added Bubble System BIOS (Konami 1985).

- 21st January 2008: Guru - I've been working with Charles on the Bubble system I have here and we've managed to find the missing 68000 loader code. It appears it's in a MCU (a custom Konami chip) in shared RAM (put there by the MCU, which we have partly extracted) and then pulls the data out of the bubble memory IC's one bit at a time. Yes that's right, we've got part of the bubble memory now (about 4k of it). Still a alot of work to do though before we get it all. So the above item is very on-topic with regards to my current WIP work.


Romset: 25 kb / 5 files / 11.5 zip




MAME XML Output:

       <game name="bubsys" sourcefile="nemesis.c" isbios="yes">
              <description>Bubble System BIOS</description>
              <year>1985</year>
              <manufacturer>Konami</manufacturer>
              <rom name="mcu" size="4096" status="nodump" region="mcu" offset="0"/>
              <rom name="400b03.8g" size="8192" crc="85c2afc5" sha1="387842d02d50d0d78a27270e7267af19555b9e63" region="audiocpu" offset="0"/>
              <rom name="400a1.2b" size="256" crc="5827b1e8" sha1="fa8cf5f868cfb08bce203baaebb6c4055ee2a000" region="k007232" offset="0"/>
              <rom name="400a2.1b" size="256" crc="2f44f970" sha1="7ab46f9d5d587665782cefc623b8de0124a6d38a" region="k007232" offset="100"/>
              <rom name="sram1.ic1" size="8192" crc="45fc9453" sha1="eeb4ff2c2c9d3b6ea9d0f0e8fd4873f2cce2cff9" region="sram" offset="0"/>
              <rom name="sram2.ic3" size="8192" crc="dda768be" sha1="e98bae3ccf63eb67193346e9c40257a3ddb88e59" region="sram" offset="2000"/>
              <chip type="cpu" tag="maincpu" name="68000" clock="9216000"/>
              <chip type="cpu" tag="audiocpu" name="Z80" clock="3579545"/>
              <chip type="audio" tag="mono" name="Speaker"/>
              <chip type="audio" tag="ay1" name="AY-3-8910A" clock="1789772"/>
              <chip type="audio" tag="ay2" name="AY-3-8910A" clock="1789772"/>
              <chip type="audio" tag="k007232" name="K005289" clock="1789772"/>
              <chip type="audio" tag="vlm" name="VLM5030" clock="3579545"/>
              <display tag="screen" type="raster" rotate="0" width="256" height="224" refresh="60.606061" />
              <sound channels="1"/>
              <input players="2" buttons="3" coins="2">
                     <control type="joy" ways="8"/>
              </input>
              <dipswitch name="Coin A" tag="DSW0" mask="15">
                     <dipvalue name="4 Coins/1 Credit" value="2"/>
                     <dipvalue name="3 Coins/1 Credit" value="5"/>
                     <dipvalue name="2 Coins/1 Credit" value="8"/>
                     <dipvalue name="3 Coins/2 Credits" value="4"/>
                     <dipvalue name="4 Coins/3 Credits" value="1"/>
                     <dipvalue name="1 Coin/1 Credit" value="15" default="yes"/>
                     <dipvalue name="3 Coins/4 Credits" value="3"/>
                     <dipvalue name="2 Coins/3 Credits" value="7"/>
                     <dipvalue name="1 Coin/2 Credits" value="14"/>
                     <dipvalue name="2 Coins/5 Credits" value="6"/>
                     <dipvalue name="1 Coin/3 Credits" value="13"/>
                     <dipvalue name="1 Coin/4 Credits" value="12"/>
                     <dipvalue name="1 Coin/5 Credits" value="11"/>
                     <dipvalue name="1 Coin/6 Credits" value="10"/>
                     <dipvalue name="1 Coin/7 Credits" value="9"/>
                     <dipvalue name="Free Play" value="0"/>
              </dipswitch>
              <dipswitch name="Coin B" tag="DSW0" mask="240">
                     <dipvalue name="4 Coins/1 Credit" value="32"/>
                     <dipvalue name="3 Coins/1 Credit" value="80"/>
                     <dipvalue name="2 Coins/1 Credit" value="128"/>
                     <dipvalue name="3 Coins/2 Credits" value="64"/>
                     <dipvalue name="4 Coins/3 Credits" value="16"/>
                     <dipvalue name="1 Coin/1 Credit" value="240" default="yes"/>
                     <dipvalue name="3 Coins/4 Credits" value="48"/>
                     <dipvalue name="2 Coins/3 Credits" value="112"/>
                     <dipvalue name="1 Coin/2 Credits" value="224"/>
                     <dipvalue name="2 Coins/5 Credits" value="96"/>
                     <dipvalue name="1 Coin/3 Credits" value="208"/>
                     <dipvalue name="1 Coin/4 Credits" value="192"/>
                     <dipvalue name="1 Coin/5 Credits" value="176"/>
                     <dipvalue name="1 Coin/6 Credits" value="160"/>
                     <dipvalue name="1 Coin/7 Credits" value="144"/>
                     <dipvalue name="None" value="0"/>
              </dipswitch>
              <dipswitch name="Lives" tag="DSW1" mask="3">
                     <dipvalue name="3" value="3" default="yes"/>
                     <dipvalue name="4" value="2"/>
                     <dipvalue name="5" value="1"/>
                     <dipvalue name="7" value="0"/>
              </dipswitch>
              <dipswitch name="Cabinet" tag="DSW1" mask="4">
                     <dipvalue name="Upright" value="0" default="yes"/>
                     <dipvalue name="Cocktail" value="4"/>
              </dipswitch>
              <dipswitch name="Bonus Life" tag="DSW1" mask="24">
                     <dipvalue name="50k and every 100k" value="24" default="yes"/>
                     <dipvalue name="30k" value="16"/>
                     <dipvalue name="50k" value="8"/>
                     <dipvalue name="100k" value="0"/>
              </dipswitch>
              <dipswitch name="Difficulty" tag="DSW1" mask="96">
                     <dipvalue name="Easy" value="96" default="yes"/>
                     <dipvalue name="Medium" value="64"/>
                     <dipvalue name="Hard" value="32"/>
                     <dipvalue name="Hardest" value="0"/>
              </dipswitch>
              <dipswitch name="Demo Sounds" tag="DSW1" mask="128">
                     <dipvalue name="Off" value="128"/>
                     <dipvalue name="On" value="0" default="yes"/>
              </dipswitch>
              <dipswitch name="Flip Screen" tag="TEST" mask="1">
                     <dipvalue name="Off" value="1" default="yes"/>
                     <dipvalue name="On" value="0"/>
              </dipswitch>
              <dipswitch name="Upright Controls" tag="TEST" mask="2">
                     <dipvalue name="Single" value="2" default="yes"/>
                     <dipvalue name="Dual" value="0"/>
              </dipswitch>
              <dipswitch name="Service Mode" tag="TEST" mask="4">
                     <dipvalue name="Off" value="4" default="yes"/>
                     <dipvalue name="On" value="0"/>
              </dipswitch>
              <driver status="preliminary" emulation="preliminary" color="good" sound="good" graphic="good" savestate="unsupported" palettesize="2048"/>
       </game>
 
 


emumovies.com      Retro bytes Portal           Bookmark and Share

 
Developed by: Spesoft  Headsoft     Terms of use     Privacy    Advertise