Home News Forum                            

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

kbash: MAME ROM Information.


Knuckle Bash (c) 1993 Toaplan.

3 wacky characters go after the Bulls and others who would dare threaten the peace of the city!


Game ID : TP-023

Main CPU : 68000 (@ 16 Mhz)

Sound Chips : YM2151 (@ 3.375 Mhz), OKI6295 (@ 7.575 Khz)

Control per player: 8-way joystick

Buttons per player: 3


Released in May 1993.

Licensed to Atari Games for European and North American distribution.


* Hidden Functions : If the 'Invulnerability dip switch' is enabled, you are invulnerable but you may also 'Pause' the game with P2 Start and restart with P1 Start.


1. Knuckle Bash (1993)

2. Knuckle Bash 2 (1999)


Designer : Junya Inoue


Game's rom.

MAME Info:

0.36RC1 [Quench]


- 0.141u4: Alex Jackson corrected Knuckle Bash rom names, thanks to information from Charles MacDonald.

- 0.141u1: Alex Jackson found a lot more Knuckle Bash opcodes by matching code with Batsugun. Corrected m68k and v25 address maps for Knuckle Bash.

- 0.135u1: David Haywood cleaned up Toaplan2 V25 support. Added V25 (16 MHz) CPU2 to Knuckle Bash.

- 1st June 2008: Charles MacDonald - V25 research: There are a number of instructions which delay interrupt and exception processing, allowing one more instruction to be executed before the interrupt is taken. For the prefixes, this prevents an interrupt from being taken after the prefix byte has been fetched but before the instruction it applies to has been executed. Likewise for segment register loads, if an interrupt occurred after SS was changed, SP would be invalid. By delaying interrupts the following types of sequences become uninterruptible. It seems less important to have DS and ES register loads delay interrupts as well, I did not expect this behavior. I have been looking at the MCU code for other games and it seems that they use similar, if not identical instruction encodings, despite using differently labeled MCUs. V-Five in particular seems to match the Knuckle Bash opcodes quite closely, and when/if I can get Knuckle Bash decrypted, I'll see how much of V-Five can be decrypted.

- 12th April 2008: Charles MacDonald - I recently acquired a Toaplan "Knuckle Bash" PCB. It's a fairly impressive system, based around a custom graphics chip which displays three tiled background layers and two 512x512 12-bit framebuffers for double buffered sprites. It has a 68HC000 running at 16 MHz that handles all the game related tasks, and a V25S MCU that manages inputs, sound effects, and music playback. The music for this game is quite good and definitely a notch above the rest. A lot of other Toaplan games use the same graphics chip, so I'm intending to run tests on it and get all the timing and other details worked out. The V25S microcontroller is a 80186 clone manufactured by NEC. Unlike the V25 it has no usable internal ROM and no 8080 emulation mode, the latter of which has been modified to add a new 'secure' operating mode. In secure mode a lookup table translates opcodes fetched from memory with their V25S equivalents. This allows the opcode-to-instruction mapping to be changed as the customer (Toaplan) sees fit, making the program code unusable unless the table contents are known. Luckily operands and data are not encrypted, and examination of the operands such as the ModR/M byte can reveal what category of instructions a particular opcode might fit in to. NEC intended for the V25S to be used as a drop-in replacement for the V25, to accomplish this it uses one of the unused V25 pins as a mode select input. When tied high or floating (due to an internal pull-up resistor) the CPU runs in normal mode, where the lookup table is bypassed and opcodes are processed normally. When tied low, the CPU is in secure mode and the lookup table is utilized. This pin is sampled during a reset, interrupt, or exception, and bit 15 of the PSW can be modified through select instructions to change the operating mode regardless of the pin state as well. These features allow a V25S to start in normal mode and selectively execute encrypted programs while still interacting with a unencrypted BIOS, operating system, and device drivers, or vice-versa. I modified the Knuckle Bash board to start the V25S in normal mode, and developed a program that sets the MCU to a known state and enters secure mode with the instruction trap feature enabled. This forces just one encrypted instruction to be executed before control is passed back to my unencrypted code, at which point the potentially modified state of the MCU is saved and examined. The behavior of all encrypted opcodes (except BRKS which sets up an unrecoverable state) can therefore be examined. I can see things like what data was pushed or popped from the stack, which registers were loaded, exchanged, or modified, and which instructions triggered an I/O or floating point exception. A lot of information can be gathered about the encrypted instructions, which narrows down or completely identifies which unencrypted instructions they map to. Best of all this technique should work for any V25S based system, such as the other Toaplan games. I'm looking forward to trying it on my Golden Axe 2 security board to see how effective it is after finishing with Knuckle Bash, though right now it's too early to give any indication of progress. Toaplan did an excellent job with the protection. The program ROM is filled with valid Z80 code and garbage data to throw off statistical analysis of the ROM, such as observing the frequency of occurence for particular bytes and byte sequences. The MCU has no manufacturer marking and has ambiguous names printed on it like "NITRO" and "DASH". Furthermore, the lookup table maps many opcodes to the same instructions so certain easily identifiable instructions can simply never be executed, increasing the number of potential matches any encrypted instruction might have. If this technique is applicable to the V35S, we'll have to see what Irem did with their games.

- 0.88: Changed MSM6295 clock speed to 7575 Hz.

- 11th May 2003: Guru - Knuckle Bash (Toaplan) arrived from Randy.

- 0.37b10: Changed OKI6295 clock speed to 20454 Hz.

- 0.37b9: Changed OKI6295 clock speed to 20000 Hz.

- 0.37b6: Changed YM3812 clock speed to 3375000 Hz.

- 0.36RC1: Quench added Knuckle Bash (Toaplan 1993). Working, but no sound. MCU dump exists, but it needs investigation.

- 12th January 2000: Quench sent a driver for some later Toaplan games such as Teki Paki, Ghox, Dogyuun, Knuckle Bash, Pipi & Bibis / Whoopee!! and Snow Bros 2.


Other Emulators:

* FB Alpha

* Raine

Recommended Games (Heroes Fighter):

Knuckle Joe

My Hero



Trojan (PlayChoice-10)


Black Panther

Double Dragon

Double Dragon II

Double Dragon 3

Double Dragon (PlayChoice-10)

Double Dragon (Neo-Geo)

Ginga NinkyouDen



Shinobi (Mega-Tech)

Shinobi / FZ-2006

The Revenge of Shinobi (Mega-Tech)

Shinobi III (Mega Play)

Bad Dudes vs. Dragonninja

Shadow Warriors


Crime Fighters


Final Fight

Gang Wars

Last Battle (Mega-Tech)

Ninja Gaiden (PlayChoice-10)

Ninja Gaiden Episode II (PlayChoice-10)

Ninja Gaiden Episode III (PlayChoice-10)

Shadow Dancer

Shadow Dancer (Mega-Tech)

Tough Turf

The Combatribes

Crude Buster


Mug Smashers

64th. Street

Brute Force

Burning Fight

Captain Commando

D. D. Crew

Karate Blazers

Riot City

Streets of Rage (Mega-Tech)

Streets of Rage II (Mega Play)


B.Rap Boys

Big Fight

Guardians of the 'Hood


Silent Dragon

Thunder Hoop

TH Strikes Back

Undercover Cops

Cadillacs and Dinosaurs

Denjin Makai

Knuckle Bash

Knuckle Bash 2

Ninja Baseball Batman

The Punisher

Violent Storm

Zero Team

Pretty Soldier Sailor Moon

Black Touch '96

Final Fight 2 (SNES bootleg)

Ghost Chaser Densei (SNES bootleg)

Iron (SNES bootleg)


Sonic Blast Man 2 Special Turbo

Gaia Crusaders

Vamp 1/2

Jue Zhan Tian Huang

Thunder Heroes

Demolish Fist

Romset: 8992 kb / 7 files / 3.13 zip

MAME XML Output:

       <game name="kbash" sourcefile="toaplan2.c">
              <description>Knuckle Bash</description>
              <rom name="tp023_01.bin" size="524288" crc="2965f81d" sha1="46f2df30fa92c80ba5a37f75e756424e15534784" region="maincpu" offset="0"/>
              <rom name="tp023_02.bin" size="32768" crc="4cd882a1" sha1="7199a5c384918f775f0815e09c46b2a58141814a" region="audiocpu" offset="0"/>
              <rom name="tp023_3.bin" size="2097152" crc="32ad508b" sha1="e473489beaf649d3e5236770eb043327e309850c" region="gfx1" offset="0"/>
              <rom name="tp023_5.bin" size="2097152" crc="b84c90eb" sha1="17a1531d884d9a9696d1b25d65f9155f02396e0e" region="gfx1" offset="200000"/>
              <rom name="tp023_4.bin" size="2097152" crc="e493c077" sha1="0edcfb70483ad07206695d9283031b85cd198a36" region="gfx1" offset="400000"/>
              <rom name="tp023_6.bin" size="2097152" crc="9084b50a" sha1="03b58278619524d2f09a4b1c152d5e057e792a56" region="gfx1" offset="600000"/>
              <rom name="tp023_7.bin" size="262144" crc="3732318f" sha1="f0768459f5ad2dee53d408a0a5ae3a314864e667" region="oki" offset="0"/>
              <chip type="cpu" tag="maincpu" name="68000" clock="16000000"/>
              <chip type="cpu" tag="audiocpu" name="V25" clock="16000000"/>
              <chip type="audio" tag="mono" name="Speaker"/>
              <chip type="audio" tag="ymsnd" name="YM2151" clock="3375000"/>
              <chip type="audio" tag="oki" name="OKI6295" clock="1000000"/>
              <display tag="screen" type="raster" rotate="0" width="320" height="240" refresh="60.000000" pixclock="6791040" htotal="432" hbend="0" hbstart="320" vtotal="262" vbend="0" vbstart="240" />
              <sound channels="1"/>
              <input players="2" buttons="3" coins="2" tilt="yes">
                     <control type="joy" ways="8"/>
              <dipswitch name="Test Switch" tag="SYS" mask="4">
                     <dipvalue name="Off" value="0" default="yes"/>
                     <dipvalue name="On" value="4"/>
              <dipswitch name="Continue Price" tag="DSWA" mask="1">
                     <dipvalue name="Normal" value="0" default="yes"/>
                     <dipvalue name="Discount" value="1"/>
              <dipswitch name="Flip Screen" tag="DSWA" mask="2">
                     <dipvalue name="Off" value="0" default="yes"/>
                     <dipvalue name="On" value="2"/>
              <dipswitch name="Service Mode" tag="DSWA" mask="4">
                     <dipvalue name="Off" value="0" default="yes"/>
                     <dipvalue name="On" value="4"/>
              <dipswitch name="Demo Sounds" tag="DSWA" mask="8">
                     <dipvalue name="Off" value="8"/>
                     <dipvalue name="On" value="0" default="yes"/>
              <dipswitch name="Coin A" tag="DSWA" mask="48">
                     <dipvalue name="4 Coins/1 Credit" value="48"/>
                     <dipvalue name="3 Coins/1 Credit" value="32"/>
                     <dipvalue name="2 Coins/1 Credit" value="32"/>
                     <dipvalue name="2 Coins/1 Credit" value="16"/>
                     <dipvalue name="1 Coin/1 Credit" value="0" default="yes"/>
                     <dipvalue name="2 Coins/3 Credits" value="48"/>
                     <dipvalue name="1 Coin/2 Credits" value="16"/>
              <dipswitch name="Coin B" tag="DSWA" mask="192">
                     <dipvalue name="2 Coins/1 Credit" value="128"/>
                     <dipvalue name="1 Coin/1 Credit" value="0" default="yes"/>
                     <dipvalue name="2 Coins/3 Credits" value="192"/>
                     <dipvalue name="1 Coin/2 Credits" value="64"/>
                     <dipvalue name="1 Coin/2 Credits" value="0" default="yes"/>
                     <dipvalue name="1 Coin/3 Credits" value="64"/>
                     <dipvalue name="1 Coin/4 Credits" value="128"/>
                     <dipvalue name="1 Coin/6 Credits" value="192"/>
              <dipswitch name="Difficulty" tag="DSWB" mask="3">
                     <dipvalue name="Easy" value="1"/>
                     <dipvalue name="Normal" value="0" default="yes"/>
                     <dipvalue name="Hard" value="2"/>
                     <dipvalue name="Very Hard" value="3"/>
              <dipswitch name="Bonus Life" tag="DSWB" mask="12">
                     <dipvalue name="None" value="12"/>
                     <dipvalue name="200k only" value="8"/>
                     <dipvalue name="100k only" value="4"/>
                     <dipvalue name="100k and 400k" value="0" default="yes"/>
              <dipswitch name="Lives" tag="DSWB" mask="48">
                     <dipvalue name="1" value="48"/>
                     <dipvalue name="2" value="0" default="yes"/>
                     <dipvalue name="3" value="32"/>
                     <dipvalue name="4" value="16"/>
              <dipswitch name="Invulnerability (Cheat)" tag="DSWB" mask="64">
                     <dipvalue name="Off" value="0" default="yes"/>
                     <dipvalue name="On" value="64"/>
              <dipswitch name="Allow Continue" tag="DSWB" mask="128">
                     <dipvalue name="No" value="128"/>
                     <dipvalue name="Yes" value="0" default="yes"/>
              <dipswitch name="Region" tag="JMPR" mask="240">
                     <dipvalue name="Europe, USA (Atari Games)" value="32" default="yes"/>
                     <dipvalue name="USA, Europe (Atari Games)" value="16"/>
                     <dipvalue name="Japan" value="0"/>
                     <dipvalue name="Korea" value="48"/>
                     <dipvalue name="Hong Kong" value="64"/>
                     <dipvalue name="Taiwan" value="80"/>
                     <dipvalue name="Southeast Asia" value="96"/>
                     <dipvalue name="USA" value="144"/>
                     <dipvalue name="Europe" value="160"/>
              <driver status="good" emulation="good" color="good" sound="good" graphic="good" savestate="supported" palettesize="65536"/>

emumovies.com      Retro bytes Portal           Bookmark and Share

Developed by: Spesoft  Headsoft     Terms of use     Privacy    Advertise