dambustruk: MAME ROM Information.
Dambusters (c) 1981 SWR [South West Research].
- TECHNICAL -
Main CPU : Z80 (@ 3.072 Mhz)
Sound Chips : Samples
Screen orientation : Vertical
Video resolution : 224 x 256 pixels
Screen refresh : 60.00 Hz
Palette colors : 106
Players : 1
Buttons : 3
- SOURCES -
0.92 [Tomasz Slanina, Norbert Kehrer]
- [possible] If you go too far without dying, background becomes complete garbage. Emulation bug or bad ROM? Source (ID 04042)
- 0.136u3: Stephane Humbert fixed dipswitches and inputs (after verification of the Z80 code) for Dambusters and clones. Added dipswitches 'Coin Counters' and 'Disable Background Collision (Cheat)'.
- 0.133u2: Created discrete sound emulation for galaxian [Couriersud]: Changed all audio related AM_WRITE to AM_DEV_WRITE. Moved discrete sound related pieces such as initialization into audio/galaxian.h. Split some memory maps into sound related and not sound related parts. Added possibility in discrete.h to select hardware (galaxian/moon cresta) at compile time. This leads to slightly different volume levels. Hit sound (explosion) has been hacked to increase volume. Currently, we can not accurately model the switch/opamp filter circuit. Rewrote timer code so that the pitch timer is only used when it produces audible results. Replaced Samples sound with Discrete.
- 0.133u1: hap switched Galaxian LFO sound to use the long-disabled NEW_LFO. It's not entirely fixed, but it's closer. Renamed (dambusta) to (dambustra) and (dambust) to (dambustruk).
- 0.132u1: N. Garnier, D. Beneke, J. Leyda, A. Costin, W. Belk and Smitdogg added clone Dambusters (US, set 2). Angelo Salese fixed PROM hook-up in Dambusters. Fixed rom names and added proms ($0, 0 - color and unknown/timing?) in Dambusters (US, set 1).
- 14th June 2009: Smitdogg - Kale got the proms hooked up in the driver.
- 13th June 2009: Smitdogg - Thanks to N. Garnier, D. Beneke, J. Leyda, A. Costin and W. Belk, we got Dambusters to dump the color prom (7603). It turns out it uses 2 proms and that this is an alt US set, although the code differences in the roms are extremely minor.
- 0.131u1: MooglyGuy merged memory maps in Dambusters.
- 0.126u4: Fabio Priuli added DIP locations to Dambusters.
- 0.113u2: Changed VSync to 60.606061 Hz.
- 8th August 2006: Norbert Kehrer - I get interesting feedback from Guru and especially from Chris Hardy (see above). A friend of Chris owns a Dambusters machine and gave him a list which chips are actually on the daughter board. I immediately compared his list with my guesses and all guesses were correct (except for one chip, where I thought it was a NAND gate but which was an AND gate in reality).
- 0.107u3: Norbert Kehrer fixed Dambusters - Game now playable. Changed description to 'Dambusters (US)' and clone to 'Dambusters (UK)'. Changed Z80 CPU1 clock speed to 3072000 Hz, AY8910 to Samples sound and VSync to 60.606060 Hz. Added 1 player, 4-way Joystick with 3x buttons and 2x coin slots. Added dipswitches 'Clear Swear Words', 'Service Mode', '2nd Coin Counter', 'Coinage', 'Lives', 'Game Test Mode' and 'Union Jack'.
- 6th August 2006: Norbert Kehrer - Today I submitted my third MAME driver. It is for the rare British arcade game Dambusters. The arcade game "Dambusters" was made in 1981 by South West Research Ltd. (SWR) from Bristol/England. The game story is based on a WW II raid by the Royal Air Force. The player's mission is to fly the "Lancaster bomber" from England to Germany and destroy some dams there. Anti-aircraft fire from ship and shore batteries, defender airplanes, flaks, barrage balloons, and a special technique required to throw the dam bombs make this a difficult task. The game is a side scroller similar to Scramble. In the attract mode there is a big Union Jack, which can be turned off by a dipswitch, if the machine is set up in sensitive areas (Germany?). An interesting aspect is, that in the high score list (Roll of Honour ;-) there are no swear words allowed. The program does not accept entries like f**k or s**t. Additionally, in the case some unrecognized offensive word makes it to the Roll of Honour, the operator can delete all the names in the high score table with a special key switch. The names of the game developers are then put into the list instead. The game exists in a version for the UK and one for the USA. The UK set differs in some minor aspects from the US set (see screen shots below). In the USA the game seems to have been licensed to Game-A-Tron (GAT). The hardware is Galaxian-like with a daughter board containing RAM, ROMs, modifications to the Galaxian-design, and some encryption tricks. On August 6, 2006 I finished my MAME driver for Dambusters. This is my third driver (after Super Tank and Mad Alien). The emulation was difficult because of the encryption of some ROMs and because I have never seen the actual game, nor have I seen any screen photos. Fortunately, I had the schematics. I could derive a lot from them, but the schematics of the infamous daughter board show only a rough wiring of the chips, and there are no descriptions of the used ICs. Probably, to make reveres-engineering harder. There is still one problem with the MAME driver. There is one ROM missing in the available dumps. It is the color palette ROM, which has 32 bytes. I manually assembled a file called "dambustr.clr", which is only my wild (and certainly wrong) guess of the contents of this ROM. Could someone please dump the ROM and add it to the ROM set. Based on my reverse-engineering work on the Dambusters schematics I am rather sure, that this ROM is a chip on the daugther board called "IC4" in the schematics and probably also on the actual PCB. It is connected to socket "SK1" and is probably a 82LS123 or a 74188 32x8 bit PROM. If a dump is not possible, the ROM could be reconstructed from screen photos. If someone has a working game, please send me some screen shots by email (http://web.utanet.at/nkehrer/email.html) or reconstruct the ROM by yourself. The format can be seen from the MAME source code.
- June, July and August 2006: Norbert Kehrer - With the early-stage MAME driver I see that there are writes to memory locations $8000 and $8001. What is this? Could it be some kind of sound? I try to map it to the LFO simulation in the Galaxian driver. But probably, it has nothing to do with sound. There seems to be nothing like that in the Galaxian hardware. The Dambusters schematics will have to be analyzed to figure out how the machine really works. Dambusters is a Galaxian derivative, so I also get schematics of Galaxians and of Moon Cresta (a Galaxian clone) to compare them to the Dambusters schematics. The main board is almost the same as Galaxians but there is a strange daughter board that seems to be responsible for the different behavior. Unfortunately, the schematics of the daughter board are not exact. There are no chip descriptions on it, just sequential numbers. Probably SWR did this to make reverse-engineering harder for competitors. But the daughter board is important, so I take my TTL handbooks and check, which pins are connected on the chips, and try to derive from that which types of IC it could be. I make a lot of assumptions and hypotheses on the functions of the circuitry on the daughter board, which sometimes turned out wrong later. But with this method I can guess all the chip types on the board. And more and more of the functions implemented on the daughter board are revealed. I now see, that $8000 and $8001 are responsible for some additional video capabilites of Dambusters. The switch between the two character sets is done with them, and the background can be split into two areas with different colors. The background can also have priority over the foreground. But this priority is reversed again for screen rows with color codes 4 to 7. Weird design, and this is only done for some nice effects in the attract mode. This process of analyzing the schematics and guessing the workings of the daughter board took me a rather long time. But it was a nice work, which I did on our terrace in July 2006, which was extraordinarily warm and sunny here in Austria. In parallel, I coded my findings into my MAME driver and at last the game seemed to be running correctly. It is clear now, that there are two ROMs missing in the dumps. One is responsible for the encryption of the program ROMs. This is not really a big problem, because this is implemeted in the MAME driver directly. But the second one is the palette ROM. To have at least correct colors in the service mode I hand-assembled this 32 byte ROM accordingly. But all the colors not tested in service mode are wild guesses and certainly wrong. I am hoping for some feedback or even a dump of these ROMs after the release of my MAME driver. For this release I think the time has now come.
- 26th June 2006: Norbert Kehrer - The "rest" is not as easy as I thought. The first problem is, that the attract mode is OK, but the game itself crashes. I go back to the disassemblies to find, that the order of the ROMs in memory is still wrong, and that only certain ROMs seem to have the bitswap. I just try out different combinations of locating ROMs in the address space and different combinations of applying my bitswap and the 8 byte block swap on the ROMs. After a lot of guessing, I can also make the game code run. It is a side scroller like Scramble! Is it Scramble hardware (which is also Galaxian-like)? Still not clear. The game has 2 character sets (text and graphics). How is the switch between them done? I turn on the text characters for the moment to be able to read the texts. I play around with the service mode the game has built in. In this mode it is easy to find out exactly where the controls are mapped in memory. Except for the switch to delete swear words from the "Roll of Honour", which is not tested in Dambuster's service mode. The colors are still completely wrong, as I decided to use the Galaxian palette ROM dump for the moment. But in the real game, is there a palette RAM, or are there palette ROMs missing??
- 23rd June 2006: Norbert Kehrer - After more than two years I am back on my Dambusters driver again. I check the ROM file disassemblies again. The code still does not really make sense. I set up and try many assumptions on the machine and the code. Example: There is an output port which somehow does a memory bankswitch (there seem to be some "out" commands in the code, and in the schematics the Z80 OUT pin is connected). Then, I find out that the ROM, that I first thought is at $5000 should be at $1000. This ROM must also be encrypted somehow, and not only by the simple swap of 8 byte blocks I already know from my early work on the game. I download the Z80 disassembly of the ROM to Excel and group the call commands together to find frequently called subroutines and analyze them in detail. I put up the hypothesis that some commands are OK and make sense, while others are nonsense (encrypted somehow). The nonsense commands do not appear in regular intervals. I cannot find any pattern in the locations at which the nonsense commands appear. I am near to giving up again. Now I have the idea to try to guess how the code with correct commands would logically continue at a location where wrong commands start. Then, I see, that the bitswap is actually done for each byte of the ROM, but in very many cases bits 1 and 4 are the same, and so the result of the bitswap is the same number as the original byte. This must be the key to the encryption method. I quickly code the bitswap into the MAME driver and start the game up again. And, wow, it is running !!! First, the Union Jack! Then, the scrolling title text on the bottom of the screen. Attract mode is running! No sound, no controls implemented, wrong graphics, but for the first time the game is running. Now, I am sure, that I can do the rest easily and go to bed after implementing the dipswitch to turn the Union Jack on and off.
- 0.92: Tomasz Slanina added Dambusters (set 1) (South West Research 1981) and clone (set 2). Skeleton driver, does nothing useful yet.
- 6th March 2004: Norbert Kehrer - I decide to start with the analysis of the schematics. I can see that it is a Galaxian-like board. $f001, $f004, $f006 and $f007 are the same as Galaxian's $7001, $7004 etc. The ROM code at $0000 could be in file db-1 but also in db-11a. Maybe the machine boots with db-5 and can then bankswitch to db-11a. Maybe in service mode it boots with db-5. Completely open ??? I continue with the Java emulator and visualize the memory area, which I think is the video RAM. There are some activities visible, but they do not really make sense. Interrupts, input ports, a.s.o. are completely unclear. I switch back to the MAME level and insert my findings from the Java emu there.
- 3rd March 2004: Norbert Kehrer - The ROMs must be encryted, at least they are mixed up somehow. I use the ROM files containing ASCII texts to find out how they should be ordered to make the ASCII texts meaningful strings. First I put one file together in correct order manually (8 byte groups are swapped in the ROM files). I write a Java program to automatically generate the correct order of the 8 byte blocks for the other files. Then I disassemble the now descrambled files. Looks much better, but not really OK for many places. I try to find out the address space locations of the ROM files by analyzing the Z80 code in the files after doing the descrambling. Not really clear and easy.
- 28th February 2004: Norbert Kehrer - The Java experiments do not yield any success. I make disassemblies of the program ROM files, and try to deduce from them at which addresses the ROMs might reside. No success, as the ROMS do not seem to contain any meaningful Z80 programs.
- 27th February 2004: Norbert Kehrer - I manage to correctly set up the graphics in the MAME driver. Now I go back to the Java level to explore the game program. I use my Java Arcade Emulator JAE as the base. My PC is from 2000, so a single game emulator in Java has a much faster prototyping cycle than a MAME driver (recompiling MAME after one single little change takes a minute or so). With a modern PC I would do this job directly in MAME, of course.
- 22nd February 2004: Norbert Kehrer - Found out that ROM files db-1 to db-4 contain the graphics data. db-1 and db-2 are 512 characters with 8x8 pixels in two separate bitplanes. db-3 and db-4 are 128 sprites with 16x16 pixels in two separate bitplanes. Doing the decoding from scratch in Java is too much boring work, so I start with a MAME driver. First I copied a simple Z80 game (Solomon) and throw everything out except for the graphics decoding.
- 2nd February 2004: Norbert Kehrer - Wrote a Java program to emit the graphics of the game. I get the Dambusters manual containing the schematics from the internet (from the cool KLOV site).
- 14th December 1999: Dumped Dambusters by South West Research Ltd. (UK) 1981. The game has an additional battery backed RAM that not only contains the usual NV statistics but also game play parameters. The RAM was originally loaded at the factory. If the battery runs out then the owner must "contact the factory" according to the manual. The game runs with bad RAM but can become unplayable.
LEVELS: 1 (endless)
* FB Alpha
Recommended Games (Airforce):
Prehistoric Isle in 1930
Prehistoric Isle 2
Carrier Air Wing
US AAF Mustang
Koutetsu Yousai Strahl
Romset: 49 kb / 14 files / 26.9 zip
MAME XML Output:
|    ||<game name="dambustruk" sourcefile="dambustr.c" cloneof="dambustr" romof="dambustr">|
|    ||    ||<description>Dambusters (UK)</description>|
|    ||    ||<year>1981</year>|
|    ||    ||<manufacturer>South West Research</manufacturer>|
|    ||    ||<rom name="db8.pr8" merge="db8a.pr8" size="4096" crc="fd041ff4" sha1="8d27da7bf0c655633711b960cbc23950c8a371ae" region="maincpu" offset="4000"/>|
|    ||    ||<rom name="db6p.bin" size="4096" crc="35dcee01" sha1="2c23c727d9b38322a6d0548dfe6a2a254f3530af" region="maincpu" offset="5000"/>|
|    ||    ||<rom name="db7.pr7" merge="db7a.pr7" size="4096" crc="675b1f5e" sha1="6a386212a640fb467b6956a4dc5a68476af1cf97" region="maincpu" offset="6000"/>|
|    ||    ||<rom name="db5.pr5" merge="db5a.pr5" size="4096" crc="75659ecc" sha1="b61254fb12f3999607abd88d1cc649dcfbf0384c" region="maincpu" offset="7000"/>|
|    ||    ||<rom name="db11.bin" size="4096" crc="9e6b34fe" sha1="5cf47f5a5280ac53490240df220edf6178e87f4f" region="user1" offset="0"/>|
|    ||    ||<rom name="db9.pr9" merge="db9a.pr9" size="4096" crc="57164563" sha1="8471d0660f39511d0afa3cdd63a1e84b0ea80fd0" region="user1" offset="1000"/>|
|    ||    ||<rom name="db10p.bin" size="4096" crc="c129c57b" sha1="c25abd7ee97b71941d9fa6acd0d92c116f1ff408" region="user1" offset="2000"/>|
|    ||    ||<rom name="db12.bin" size="4096" crc="ea4c65f5" sha1="cb761e0543cacd6b437c6e88615f97df83245a34" region="user1" offset="3000"/>|
|    ||    ||<rom name="db3.pr3" merge="db3a.pr3" size="4096" crc="9e9a9710" sha1="a9f67a05a2882b9f6f3378cc73e90539de4b8ca4" region="gfx1" offset="0"/>|
|    ||    ||<rom name="db1ap.pr1" merge="db1a.pr1" size="4096" crc="4cb964cd" sha1="1c90b14deb201a64b8ed4378b022e9e4574aed94" region="gfx1" offset="1000"/>|
|    ||    ||<rom name="db4.pr3" merge="db4a.pr3" size="4096" crc="d9d2df33" sha1="97057fe33c146898755b556558ff707b9f4551ec" region="gfx1" offset="2000"/>|
|    ||    ||<rom name="db2.pr2" merge="db2a.pr2" size="4096" crc="0a0a6af5" sha1="ecd2a6696ce9154f030c830ccb45690787881a73" region="gfx1" offset="3000"/>|
|    ||    ||<rom name="mi-7603-5.ic4" merge="mi-7603-5.ic4" size="32" crc="f131f92f" sha1="8b0f623d2ea09b5612dde0f330c5e473a7d72e06" region="proms" offset="0"/>|
|    ||    ||<rom name="mi-7603-5.ic3" merge="mi-7603-5.ic3" size="32" crc="e2a54c47" sha1="1e08f8e3d0ae0efb2d178ab11ec2bddaeb6d7478" region="unk_prom" offset="0"/>|
|    ||    ||<chip type="cpu" tag="maincpu" name="Z80" clock="3072000"/>|
|    ||    ||<chip type="audio" tag="mono" name="Speaker"/>|
|    ||    ||<chip type="audio" tag="discrete" name="DISCRETE"/>|
|    ||    ||<display tag="screen" type="raster" rotate="90" width="256" height="224" refresh="60.606061" pixclock="3971878" htotal="256" hbend="0" hbstart="256" vtotal="256" vbend="16" vbstart="240" />|
|    ||    ||<sound channels="1"/>|
|    ||    ||<input players="1" buttons="3" coins="2" service="yes">|
|    ||    ||    ||<control type="joy" ways="4"/>|
|    ||    ||</input>|
|    ||    ||<dipswitch name="Coin Counters" tag="IN1" mask="64">|
|    ||    ||    ||<dipvalue name="1" value="0"/>|
|    ||    ||    ||<dipvalue name="2" value="64" default="yes"/>|
|    ||    ||</dipswitch>|
|    ||    ||<dipswitch name="Coinage" tag="IN1" mask="128">|
|    ||    ||    ||<dipvalue name="1 Coin/1 Credit" value="128" default="yes"/>|
|    ||    ||    ||<dipvalue name="1 Coin/2 Credits" value="0"/>|
|    ||    ||    ||<dipvalue name="A 1/1 B 1/6" value="128" default="yes"/>|
|    ||    ||    ||<dipvalue name="A 1/2 B 1/12" value="0"/>|
|    ||    ||</dipswitch>|
|    ||    ||<dipswitch name="Lives" tag="DSW" mask="3">|
|    ||    ||    ||<dipvalue name="3" value="0" default="yes"/>|
|    ||    ||    ||<dipvalue name="4" value="2"/>|
|    ||    ||    ||<dipvalue name="5" value="1"/>|
|    ||    ||    ||<dipvalue name="6" value="3"/>|
|    ||    ||</dipswitch>|
|    ||    ||<dipswitch name="Disable Background Collision (Cheat)" tag="DSW" mask="4">|
|    ||    ||    ||<dipvalue name="Off" value="0" default="yes"/>|
|    ||    ||    ||<dipvalue name="On" value="4"/>|
|    ||    ||</dipswitch>|
|    ||    ||<dipswitch name="Union Jack Flag" tag="DSW" mask="8">|
|    ||    ||    ||<dipvalue name="Off" value="8"/>|
|    ||    ||    ||<dipvalue name="On" value="0" default="yes"/>|
|    ||    ||</dipswitch>|
|    ||    ||<driver status="good" emulation="good" color="good" sound="good" graphic="good" savestate="unsupported" palettesize="106"/>|