// license:BSD-3-Clause // copyright-holders:David Haywood /* Fit of Fighting / The History of Martial Arts / 'BB' */ /* NIX or Novatecnia (both spanish) may have produced these its probably NIX due to some similarities with Pirates Supported Games Rip-off of Fit of Fighting Art of Fighting (neogeo.cpp) The History of Martial Arts Fighter's History (deco32.cpp) 'BB' Untitled Prototype -none, original- 'BB' Prototype isn't a game as such, 'BB' was the label on the prototype board, which appears to have been used simply for testings / practice. There is no 'game' to it, no title screen, simply 3 characters, 1 portrait, 1 background, the characters don't appear to have any moves other than basic walking around. There is also no sound. The lack of Sound, GFX and Gameplay in this 'game' are NOT emulation bugs. There are some unused GFX in the roms, it might be interesting to try and put them together and see what they form. */ /* 68k interrupts (fitfight) lev 1 : 0x64 : 0000 150C - lev 2 : 0x68 : 0000 3676 - lev 3 : 0x6c : 0000 1752 - lev 4 : 0x70 : 0000 1768 - lev 5 : 0x74 : 0000 177e - lev 6 : 0x78 : 0000 1794 - lev 7 : 0x7c : 0000 17aa - todo: fix scrolling sound fix sprite colour problems. should these be considered clones or not since the game has been rewritten, they just use the gfx ... Stephh's notes : 1) 'fitfight' - Gameplay : * The player who beats the other wins a point and the round number is increased. * When there is a draw, nobody scores a point, but the round number is increased. * The level ends when a players reaches the needed number of points or when the round number is > the maximum round number. - Winner : * Player 1 wins if his number of points is >= player 2 number of points. * Player 2 wins if his number of points is > player 1 number of points. - The "winner rule" introduces an ingame bug : when you play with LEFT player against the CPU, you can win a level by only scoring "draws". 2) 'histryma' - Gameplay : * The player who beats the other wins a point. * When there is a draw, both players score a point. * The level ends when a players reaches the needed number of points or when the total of points is >= the maximum number of points. - Winner : * Player 1 wins if his number of points is > player 2 number of points. * Player 2 wins if his number of points is >= player 1 number of points. - The "winner rule" introduces an ingame bug : when you play with RIGHT player against the CPU, you can win a level by only scoring "draws". - The "test mode" isn't correct for the Dip Switches ! */ #include "emu.h" #include "includes/fitfight.h" #include "cpu/m68000/m68000.h" #include "cpu/upd7810/upd7810.h" #include "sound/okim6295.h" #include "screen.h" #include "speaker.h" uint16_t fitfight_state::hotmindff_unk_r() { // won't boot unless things in here change, this is p1/p2 inputs in fitfight return machine().rand(); } uint16_t fitfight_state::fitfight_700000_r() { uint16_t data = m_fof_700000_data; return (data << 2); } uint16_t fitfight_state::histryma_700000_r() { uint16_t data = (m_fof_700000_data & 0x00AA); data |= ((m_fof_700000_data & 0x0055) >> 2); return (data); } uint16_t fitfight_state::bbprot_700000_r() { uint16_t data = 0; data = (m_fof_700000_data & 0x000b); data |= ((m_fof_700000_data & 0x01d0) >> 2); data |= ((m_fof_700000_data & 0x0004) << 6); data |= ((m_fof_700000_data & 0x0020) << 2); return (data); } void fitfight_state::fitfight_700000_w(offs_t offset, uint16_t data, uint16_t mem_mask) { COMBINE_DATA(&m_fof_700000[offset]); // needed for scrolling if (data < 0x0200) // to avoid considering writes of 0x0200 m_fof_700000_data = data; } void fitfight_state::fitfight_main_map(address_map &map) { map(0x000000, 0x0fffff).rom(); map(0x100000, 0x100001).writeonly().share("fof_100000"); //written at scanline 5, allways 1. Used by histryma/fitfight @0x0000ec2c/@0x0000f076 map(0x200000, 0x200001).portr("P1_P2"); map(0x300000, 0x300001).portr("EXTRA"); // for 'histryma' only map(0x400000, 0x400001).portr("SYSTEM_DSW2"); map(0x500000, 0x500001).portr("DSW3_DSW1"); map(0x600000, 0x600001).writeonly().share("fof_600000"); // Is 0x600000 controlling the slave audio CPU? data is 0x1111000zzzzzzzzz (9 sign. bits) // Used by histryma/fitfight: // @0x000031ae/0x00002b3a: 0xF000, once, during POST // 0xe001ae/0xe00096 holds the address (0x600000), 0xe001b2/0xe0009a holds the word to output // @0x00003294/0x00002c1a: word content of 0xe001b2 // @0x000032cc/?: 0xF0dd byte from 0xe001b5, dd seems to be always 0xFD // @0x000036bc/?: 0xF0FD when inserting coin // @0x000037a6/0x000030e6: 0x??dd byte from 0xe08c05, 0xF101 then 0xF001/0xF157 then 0xF057 // map(0x700000, 0x700001).r(FUNC(fitfight_state::xxxx)); /* see init */ map(0x700000, 0x700001).w(FUNC(fitfight_state::fitfight_700000_w)).share("fof_700000"); // kept at 0xe07900/0xe04c56 map(0x800000, 0x800001).ram().share("fof_800000"); //written at scanline 1, allways 0. Used by histryma/fitfight @0x00001d76/@0x00000f6a map(0x900000, 0x900001).ram().share("fof_900000"); //mid tilemap scroll // fitfigth: @0x00002b42,@0x00000f76 // histryma: @0x000031b6,@0x00001d82 map(0xa00000, 0xa00001).ram().share("fof_a00000"); //bak tilemap scroll // fitfight: @0x00002b4a,@0x00000f82 // histryma: @0x000031be,@0x00001d8e map(0xb00000, 0xb03fff).ram(); /* unused layer? */ map(0xb04000, 0xb07fff).ram().w(FUNC(fitfight_state::fof_bak_tileram_w)).share("fof_bak_tileram"); map(0xb08000, 0xb0bfff).ram().w(FUNC(fitfight_state::fof_mid_tileram_w)).share("fof_mid_tileram"); map(0xb0c000, 0xb0ffff).ram().w(FUNC(fitfight_state::fof_txt_tileram_w)).share("fof_txt_tileram"); map(0xb10000, 0xb13fff).ram(); //used by histryma @0x0000b25a map(0xb14000, 0xb17fff).ram(); //used by histryma @0x0000b25a,b270 map(0xb18000, 0xb1bfff).ram(); //used by histryma @0x0000b25a,b270,b286 map(0xc00000, 0xc00fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xd00000, 0xd007ff).ram().share("spriteram"); map(0xe00000, 0xe0ffff).ram(); map(0xff0000, 0xffffff).ram(); // hot mind uses RAM here (mirror?) } void fitfight_state::bbprot_main_map(address_map &map) { map(0x000000, 0x0fffff).rom(); map(0x100000, 0x100001).writeonly().share("fof_100000"); map(0x300000, 0x300001).portr("P1_P2"); map(0x380000, 0x380001).portr("EXTRA"); map(0x400000, 0x400001).portr("SYSTEM_DSW2"); map(0x480000, 0x480001).portr("DSW3_DSW1"); map(0x600000, 0x600001).writeonly().share("fof_600000"); map(0x700000, 0x700001).rw(FUNC(fitfight_state::bbprot_700000_r), FUNC(fitfight_state::fitfight_700000_w)).share("fof_700000"); map(0x800000, 0x800001).writeonly().share("fof_800000"); map(0x900000, 0x900001).writeonly().share("fof_900000"); map(0xa00000, 0xa00001).writeonly().share("fof_a00000"); map(0xb00000, 0xb03fff).nopw(); /* unused layer? */ map(0xb04000, 0xb07fff).ram().w(FUNC(fitfight_state::fof_bak_tileram_w)).share("fof_bak_tileram"); map(0xb08000, 0xb0bfff).ram().w(FUNC(fitfight_state::fof_mid_tileram_w)).share("fof_mid_tileram"); map(0xb0c000, 0xb0ffff).ram().w(FUNC(fitfight_state::fof_txt_tileram_w)).share("fof_txt_tileram"); map(0xc00000, 0xc03fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xd00000, 0xd007ff).ram().share("spriteram"); map(0xe00000, 0xe0ffff).ram(); } /* 7810 (?) sound cpu */ void fitfight_state::snd_mem(address_map &map) { map(0x0000, 0x3fff).rom(); map(0x4000, 0x7fff).bankr("bank1"); /* ??? External ROM */ map(0x8000, 0x87ff).ram(); } uint8_t fitfight_state::snd_porta_r() { //logerror("PA R %s\n",machine().describe_context()); return machine().rand(); } uint8_t fitfight_state::snd_portb_r() { //logerror("PB R %s\n",machine().describe_context()); return machine().rand(); } uint8_t fitfight_state::snd_portc_r() { //logerror("PC R %s\n",machine().describe_context()); return machine().rand(); } void fitfight_state::snd_porta_w(uint8_t data) { //logerror("PA W %x %s\n",data,machine().describe_context()); } void fitfight_state::snd_portb_w(uint8_t data) { //logerror("PB W %x %s\n",data,machine().describe_context()); } void fitfight_state::snd_portc_w(uint8_t data) { //logerror("PC W %x %s\n",data,machine().describe_context()); } // #define PRIORITY_EASINESS_TO_PLAY /* I've put the inputs the same way they can be read in the "test mode" */ static INPUT_PORTS_START( fitfight ) PORT_START("P1_P2") // 0x200000.w /* players inputs -> 0xe022cc.w */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("EXTRA") // 0x300000.w (unused) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM_DSW2") // 0x400000.w /* LSB : system inputs -> 0xe022cf.b */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_COIN4 ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Test" PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Fault" (= "Tilt" ?) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* MSB : SW2 -> 0xe04c26.b (cpl) */ PORT_DIPNAME( 0xf800, 0xf800, "Time" ) PORT_DIPLOCATION("SW2:5,4,3,2,1") PORT_DIPSETTING( 0xf000, "02" ) PORT_DIPSETTING( 0xe800, "05" ) PORT_DIPSETTING( 0xe000, "08" ) PORT_DIPSETTING( 0xd800, "11" ) PORT_DIPSETTING( 0xd000, "14" ) PORT_DIPSETTING( 0xc800, "17" ) PORT_DIPSETTING( 0xc000, "20" ) PORT_DIPSETTING( 0xb800, "23" ) PORT_DIPSETTING( 0xb000, "26" ) PORT_DIPSETTING( 0xa800, "29" ) PORT_DIPSETTING( 0xa000, "32" ) PORT_DIPSETTING( 0x9800, "35" ) PORT_DIPSETTING( 0x9000, "38" ) PORT_DIPSETTING( 0x8800, "41" ) PORT_DIPSETTING( 0x8000, "44" ) PORT_DIPSETTING( 0x7800, "47" ) PORT_DIPSETTING( 0x7000, "50" ) PORT_DIPSETTING( 0x6800, "53" ) PORT_DIPSETTING( 0x6000, "56" ) PORT_DIPSETTING( 0x5800, "59" ) PORT_DIPSETTING( 0x5000, "62" ) PORT_DIPSETTING( 0x4800, "65" ) PORT_DIPSETTING( 0x4000, "68" ) PORT_DIPSETTING( 0x3800, "71" ) PORT_DIPSETTING( 0x3000, "74" ) PORT_DIPSETTING( 0x2800, "77" ) PORT_DIPSETTING( 0x2000, "80" ) PORT_DIPSETTING( 0x1800, "83" ) PORT_DIPSETTING( 0x1000, "86" ) PORT_DIPSETTING( 0x0800, "89" ) PORT_DIPSETTING( 0x0000, "92" ) PORT_DIPSETTING( 0xf800, "99" ) PORT_DIPNAME( 0x0700, 0x0700, "First Credit" ) PORT_DIPLOCATION("SW2:8,7,6") PORT_DIPSETTING( 0x0000, DEF_STR( 8C_1C ) ) PORT_DIPSETTING( 0x0100, DEF_STR( 7C_1C ) ) PORT_DIPSETTING( 0x0200, DEF_STR( 6C_1C ) ) PORT_DIPSETTING( 0x0300, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x0400, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) PORT_START("DSW3_DSW1") // 0x500000.w /* MSB : SW3 -> 0xe04c24.b (cpl) */ PORT_DIPNAME( 0xe000, 0xe000, "Next Credit" ) PORT_DIPLOCATION("SW3:3,2,1") PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x2000, DEF_STR( 3C_2C ) ) PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x8000, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x6000, DEF_STR( 1C_6C ) ) PORT_DIPNAME( 0x1c00, 0x1000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW3:6,5,4") PORT_DIPSETTING( 0x1c00, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x1800, DEF_STR( Easier ) ) PORT_DIPSETTING( 0x1400, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0c00, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW3:7") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) PORT_SERVICE( 0x0100, IP_ACTIVE_LOW ) /* LSB : SW1 -> 0xe04c25.b (cpl) */ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") // To be confirmed PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) PORT_DIPNAME( 0x0070, 0x0060, "Needed Points/Maximum Rounds" ) PORT_DIPLOCATION("SW1:4,3,2") // see notes PORT_DIPSETTING( 0x0070, "Endless" ) PORT_DIPSETTING( 0x0060, "1/2" ) PORT_DIPSETTING( 0x0050, "2/3" ) PORT_DIPSETTING( 0x0040, "2/4" ) PORT_DIPSETTING( 0x0030, "3/5" ) PORT_DIPSETTING( 0x0020, "3/6" ) PORT_DIPSETTING( 0x0010, "4/7" ) PORT_DIPSETTING( 0x0000, "4/8" ) PORT_DIPNAME( 0x0008, 0x0000, "Select All Players" ) PORT_DIPLOCATION("SW1:5") // in a 1 player game PORT_DIPSETTING( 0x0008, DEF_STR( No ) ) // only Ryo and Robert available PORT_DIPSETTING( 0x0000, DEF_STR( Yes ) ) PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW1:6" ) PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW1:7" ) // must be Off during P.O.S.T. ! PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW1:8" ) INPUT_PORTS_END static INPUT_PORTS_START( histryma ) PORT_START("P1_P2") // 0x200000.w /* players inputs -> 0xe02cf2.w and 0xe02cf8.w */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("EXTRA") // 0x300000.w /* LSB : players extra inputs -> 0xe02cf5.b and 0xe02cfb.b */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* MSB : unused */ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM_DSW2") // 0x400000.w /* LSB : system inputs -> 0xe02cf7.b and 0xe02cfd.b */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Test" PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Fault" (= "Tilt" ?) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Test" (duplicated) /* MSB : SW2 -> 0xe05874.b (cpl) */ PORT_DIPNAME( 0xf800, 0x0000, "Time" ) PORT_DIPLOCATION("SW2:5,4,3,2,1") #ifndef PRIORITY_EASINESS_TO_PLAY PORT_DIPSETTING( 0xf800, "15" ) // duplicated setting PORT_DIPSETTING( 0xf000, "15" ) // duplicated setting PORT_DIPSETTING( 0xe800, "15" ) // duplicated setting #endif PORT_DIPSETTING( 0xe000, "15" ) PORT_DIPSETTING( 0xd800, "18" ) PORT_DIPSETTING( 0xd000, "21" ) PORT_DIPSETTING( 0xc800, "24" ) PORT_DIPSETTING( 0xc000, "27" ) PORT_DIPSETTING( 0xb800, "30" ) PORT_DIPSETTING( 0xb000, "33" ) PORT_DIPSETTING( 0xa800, "36" ) PORT_DIPSETTING( 0xa000, "39" ) PORT_DIPSETTING( 0x9800, "42" ) PORT_DIPSETTING( 0x9000, "45" ) PORT_DIPSETTING( 0x8800, "48" ) PORT_DIPSETTING( 0x8000, "51" ) PORT_DIPSETTING( 0x7800, "54" ) PORT_DIPSETTING( 0x7000, "57" ) PORT_DIPSETTING( 0x6800, "60" ) PORT_DIPSETTING( 0x6000, "63" ) PORT_DIPSETTING( 0x5800, "66" ) PORT_DIPSETTING( 0x5000, "69" ) PORT_DIPSETTING( 0x4800, "72" ) PORT_DIPSETTING( 0x4000, "75" ) PORT_DIPSETTING( 0x3800, "78" ) PORT_DIPSETTING( 0x3000, "81" ) PORT_DIPSETTING( 0x2800, "84" ) PORT_DIPSETTING( 0x2000, "87" ) PORT_DIPSETTING( 0x1800, "90" ) PORT_DIPSETTING( 0x1000, "93" ) PORT_DIPSETTING( 0x0800, "96" ) PORT_DIPSETTING( 0x0000, "99" ) PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:8,7,6") PORT_DIPSETTING( 0x0200, DEF_STR( 6C_1C ) ) PORT_DIPSETTING( 0x0300, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x0400, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0100, DEF_STR( 3C_2C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( 4C_3C ) ) PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) PORT_START("DSW3_DSW1") // 0x500000.w /* MSB : SW3 -> 0xe05872.b (cpl) */ PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW3:3,2,1") PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( 3C_4C ) ) PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x8000, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x4000, DEF_STR( 1C_6C ) ) PORT_DIPNAME( 0x1c00, 0x1000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW3:6,5,4") PORT_DIPSETTING( 0x1c00, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x1800, DEF_STR( Easier ) ) PORT_DIPSETTING( 0x1400, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0c00, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Harder ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW3:7") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) PORT_SERVICE_DIPLOC( 0x0100, IP_ACTIVE_LOW, "SW3:8" ) /* LSB : SW1 -> 0xe05873.b (cpl) */ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") // To be confirmed PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) PORT_DIPNAME( 0x0070, 0x0060, "Needed Points/Maximum Points" ) PORT_DIPLOCATION("SW1:4,3,2") // see notes PORT_DIPSETTING( 0x0070, "Endless" ) // ends on a draw PORT_DIPSETTING( 0x0060, "1/2" ) PORT_DIPSETTING( 0x0050, "2/3" ) PORT_DIPSETTING( 0x0040, "2/4" ) PORT_DIPSETTING( 0x0030, "3/5" ) PORT_DIPSETTING( 0x0020, "3/6" ) PORT_DIPSETTING( 0x0010, "4/7" ) PORT_DIPSETTING( 0x0000, "4/8" ) PORT_DIPNAME( 0x0008, 0x0000, "Buttons" ) PORT_DIPLOCATION("SW1:5") // 3 or 6 buttons as default ? PORT_DIPSETTING( 0x0008, "3" ) PORT_DIPSETTING( 0x0000, "6" ) PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW1:6" ) PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW1:7" ) // must be Off during P.O.S.T. ! PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW1:8" ) INPUT_PORTS_END /* Check inputs again when video emulation is better */ /* Surprisingly, the Dip Switches look very similar to the ones from 'histryma' (the only difference being that there is no "Needed Points/Maximum Points" Dip Switch, the value always being set to "2/3") */ static INPUT_PORTS_START( bbprot ) PORT_START("P1_P2") // 0x300000.w /* players inputs -> 0xe0545e.w and 0xe05464.w */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("EXTRA") // 0x380000.w /* LSB : players extra inputs -> 0xe05461.b and 0xe05467.b */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* MSB : unused */ PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SYSTEM_DSW2") // 0x400000.w /* LSB : system inputs -> 0xe05463.b and 0xe05469.b */ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Test" PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Fault" (= "Tilt" ?) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) // "Test" (duplicated) /* MSB : SW2 -> 0xe07e84.b (cpl) */ PORT_DIPNAME( 0xf800, 0x0000, "Time" ) PORT_DIPLOCATION("SW2:5,4,3,2,1") #ifndef PRIORITY_EASINESS_TO_PLAY PORT_DIPSETTING( 0xf800, "15" ) // duplicated setting PORT_DIPSETTING( 0xf000, "15" ) // duplicated setting PORT_DIPSETTING( 0xe800, "15" ) // duplicated setting #endif PORT_DIPSETTING( 0xe000, "15" ) PORT_DIPSETTING( 0xd800, "18" ) PORT_DIPSETTING( 0xd000, "21" ) PORT_DIPSETTING( 0xc800, "24" ) PORT_DIPSETTING( 0xc000, "27" ) PORT_DIPSETTING( 0xb800, "30" ) PORT_DIPSETTING( 0xb000, "33" ) PORT_DIPSETTING( 0xa800, "36" ) PORT_DIPSETTING( 0xa000, "39" ) PORT_DIPSETTING( 0x9800, "42" ) PORT_DIPSETTING( 0x9000, "45" ) PORT_DIPSETTING( 0x8800, "48" ) PORT_DIPSETTING( 0x8000, "51" ) PORT_DIPSETTING( 0x7800, "54" ) PORT_DIPSETTING( 0x7000, "57" ) PORT_DIPSETTING( 0x6800, "60" ) PORT_DIPSETTING( 0x6000, "63" ) PORT_DIPSETTING( 0x5800, "66" ) PORT_DIPSETTING( 0x5000, "69" ) PORT_DIPSETTING( 0x4800, "72" ) PORT_DIPSETTING( 0x4000, "75" ) PORT_DIPSETTING( 0x3800, "78" ) PORT_DIPSETTING( 0x3000, "81" ) PORT_DIPSETTING( 0x2800, "84" ) PORT_DIPSETTING( 0x2000, "87" ) PORT_DIPSETTING( 0x1800, "90" ) PORT_DIPSETTING( 0x1000, "93" ) PORT_DIPSETTING( 0x0800, "96" ) PORT_DIPSETTING( 0x0000, "99" ) PORT_DIPNAME( 0x0700, 0x0700, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:8,7,6") PORT_DIPSETTING( 0x0200, DEF_STR( 6C_1C ) ) PORT_DIPSETTING( 0x0300, DEF_STR( 5C_1C ) ) PORT_DIPSETTING( 0x0400, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0500, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0600, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0100, DEF_STR( 3C_2C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( 4C_3C ) ) PORT_DIPSETTING( 0x0700, DEF_STR( 1C_1C ) ) PORT_START("DSW3_DSW1") // 0x480000.w /* MSB : SW3 -> 0xe07e82.b (cpl) */ PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW3:3,2,1") PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x0000, DEF_STR( 3C_4C ) ) PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) PORT_DIPSETTING( 0x8000, DEF_STR( 1C_4C ) ) PORT_DIPSETTING( 0x6000, DEF_STR( 1C_5C ) ) PORT_DIPSETTING( 0x4000, DEF_STR( 1C_6C ) ) PORT_DIPNAME( 0x1c00, 0x1000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW3:6,5,4") PORT_DIPSETTING( 0x1c00, DEF_STR( Easiest ) ) PORT_DIPSETTING( 0x1800, DEF_STR( Easier ) ) PORT_DIPSETTING( 0x1400, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Normal ) ) PORT_DIPSETTING( 0x0c00, DEF_STR( Medium ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Hard ) ) PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW3:7") PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) PORT_SERVICE_DIPLOC( 0x0100, IP_ACTIVE_LOW, "SW3:8" ) /* LSB : SW1 -> 0xe07e83.b (cpl) */ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW1:1") // To be confirmed PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( On ) ) PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW1:2" ) PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW1:3" ) PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW1:4" ) PORT_DIPNAME( 0x0008, 0x0000, "Buttons" ) PORT_DIPLOCATION("SW1:5") // 3 or 6 buttons as default ? PORT_DIPSETTING( 0x0008, "3" ) PORT_DIPSETTING( 0x0000, "6" ) PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW1:6" ) PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW1:7" ) // must be Off during P.O.S.T. ! PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW1:8" ) INPUT_PORTS_END static const gfx_layout fof_tile_layout = { 8,8, RGN_FRAC(1,4), 4, { 0,RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) }, { 0,1,2,3,4,5,6,7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, 8*8 }; static const gfx_layout fof_sprite_layout = { 16,16, RGN_FRAC(1,4), 4, { 0,RGN_FRAC(1,4),RGN_FRAC(2,4),RGN_FRAC(3,4) }, { 0,1,2,3,4,5,6,7,8*8+0,8*8+1,8*8+2,8*8+3,8*8+4,8*8+5,8*8+6,8*8+7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 16*8+0*8,16*8+1*8,16*8+2*8,16*8+3*8,16*8+4*8,16*8+5*8,16*8+6*8,16*8+7*8 }, 16*16 }; static const gfx_layout bbprot_sprite_layout = { 16,16, RGN_FRAC(1,5), 5, { 0,RGN_FRAC(1,5),RGN_FRAC(2,5),RGN_FRAC(3,5),RGN_FRAC(4,5) }, { 0,1,2,3,4,5,6,7,8*8+0,8*8+1,8*8+2,8*8+3,8*8+4,8*8+5,8*8+6,8*8+7 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 16*8+0*8,16*8+1*8,16*8+2*8,16*8+3*8,16*8+4*8,16*8+5*8,16*8+6*8,16*8+7*8 }, 16*16 }; static GFXDECODE_START( gfx_fitfight ) GFXDECODE_ENTRY( "gfx1", 0, fof_tile_layout, 0x000, 256 ) /* tx tiles */ GFXDECODE_ENTRY( "gfx1", 0, fof_tile_layout, 0x200, 256 ) /* mid tiles */ GFXDECODE_ENTRY( "gfx1", 0, fof_tile_layout, 0x400, 256 ) /* bg tiles */ GFXDECODE_ENTRY( "gfx2", 0, fof_sprite_layout, 0x600, 256 ) /* sprites */ GFXDECODE_END static GFXDECODE_START( gfx_prot ) GFXDECODE_ENTRY( "gfx1", 0, fof_tile_layout, 0x0000, 256 ) /* tx tiles */ GFXDECODE_ENTRY( "gfx1", 0, fof_tile_layout, 0x0800, 256 ) /* mid tiles */ GFXDECODE_ENTRY( "gfx1", 0, fof_tile_layout, 0x1000, 256 ) /* bg tiles */ GFXDECODE_ENTRY( "gfx2", 0, bbprot_sprite_layout,0x1800, 256 ) /* sprites */ GFXDECODE_END void fitfight_state::machine_start() { save_item(NAME(m_fof_700000_data)); } void fitfight_state::machine_reset() { m_fof_700000_data = 0; } void fitfight_state::fitfight(machine_config &config) { M68000(config, m_maincpu, 12000000); m_maincpu->set_addrmap(AS_PROGRAM, &fitfight_state::fitfight_main_map); m_maincpu->set_vblank_int("screen", FUNC(fitfight_state::irq2_line_hold)); upd78c10_device &audiocpu(UPD78C10(config, m_audiocpu, 12000000)); audiocpu.set_addrmap(AS_PROGRAM, &fitfight_state::snd_mem); audiocpu.pa_in_cb().set(FUNC(fitfight_state::snd_porta_r)); audiocpu.pa_out_cb().set(FUNC(fitfight_state::snd_porta_w)); audiocpu.pb_in_cb().set(FUNC(fitfight_state::snd_portb_r)); audiocpu.pb_out_cb().set(FUNC(fitfight_state::snd_portb_w)); audiocpu.pc_in_cb().set(FUNC(fitfight_state::snd_portc_r)); audiocpu.pc_out_cb().set(FUNC(fitfight_state::snd_portc_w)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_fitfight); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(40*8, 32*8); screen.set_visarea(2*8, 39*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(fitfight_state::screen_update_fitfight)); screen.set_palette(m_palette); screen.screen_vblank().set([this] (int state) { if (state) m_audiocpu->pulse_input_line(UPD7810_INTF2, m_audiocpu->minimum_quantum_time()); }); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x800); SPEAKER(config, "mono").front_center(); OKIM6295(config, "oki", 1333333, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); // ~8080Hz ??? TODO: find out the real frequency } void fitfight_state::bbprot(machine_config &config) { M68000(config, m_maincpu, 12000000); m_maincpu->set_addrmap(AS_PROGRAM, &fitfight_state::bbprot_main_map); m_maincpu->set_vblank_int("screen", FUNC(fitfight_state::irq2_line_hold)); GFXDECODE(config, m_gfxdecode, m_palette, gfx_prot); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); screen.set_size(40*8, 32*8); screen.set_visarea(2*8, 39*8-1, 2*8, 30*8-1); screen.set_screen_update(FUNC(fitfight_state::screen_update_fitfight)); screen.set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x2000); SPEAKER(config, "mono").front_center(); OKIM6295(config, "oki", 1333333, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); // ~8080Hz ??? TODO: find out the real frequency } /*** Here's the info about this dump: Name: Fit of Fighting Manufacturer: Unknown (There are chances that was produced by NIX, but it's not possible to verify) Year: Unknown Date Dumped: 16-07-2002 (DD-MM-YYYY) CPU: 68000, possibly at 12mhz SOUND: OKIM6295 GFX: Unknown About the game: This game is a very horrible Art of Fighting rip-off, ripped graphics but reprogrammed from 0, FM music, no zooms, no damage in the fighters faces, poor IA, poor gameplay (you have to execute the special attacks very slowly to get them running!), but incredibly fun to see such a thing :) Hope you enjoy it! ***/ ROM_START( fitfight ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_BYTE( "u138_ff1.bin", 0x000001, 0x080000, CRC(165600fe) SHA1(b1987dbf34abdb6d08bdf7f71b256b62125e6517) ) ROM_LOAD16_BYTE( "u125_ff1.bin", 0x000000, 0x080000, CRC(2f9bdb66) SHA1(4c1ade349f1219d448453b27d4a7517966912ffa) ) ROM_REGION( 0x01c000, "audiocpu", 0 ) /* Sound Program */ ROM_LOAD( "u23_ff1.bin", 0x000000, 0x004000, CRC(e2d6d768) SHA1(233e5501ffda8db48341fa66f16b630544803a89) ) ROM_CONTINUE( 0x010000, 0x00c000 ) ROM_REGION( 0x100000, "oki", 0 ) /* OKI Samples? */ ROM_LOAD( "h7e_ff1.bin", 0x000000, 0x080000, CRC(3e12dfd8) SHA1(8f21abfc6a6aac9ad3fafe97d0279739c7b9fab9) ) //seems to be a merge of 2 0x040000 roms ROM_LOAD( "h18e_ff1.bin", 0x080000, 0x080000, CRC(a7f36dbe) SHA1(206efb7f32d6123ed3e22790ff38dd0a8e1626d7) ) //seems to be a merge of 2 0x040000 roms ROM_REGION( 0x100000, "gfx1", 0 ) /* GFX */ ROM_LOAD( "p1_ff1.bin", 0x0c0000, 0x040000, CRC(542593b3) SHA1(068d9b5dc98a8353462705c64d2d287f270510a9) ) ROM_LOAD( "p2_ff1.bin", 0x080000, 0x040000, CRC(fc517470) SHA1(45f33de393a89301051ec865ba665ad3366e29f7) ) ROM_LOAD( "p4_ff1.bin", 0x040000, 0x040000, CRC(a8754268) SHA1(c03ea06ba79ff799399d17dc0eb86f5a7e2e3f8e) ) ROM_LOAD( "p8_ff1.bin", 0x000000, 0x040000, CRC(bd55182a) SHA1(5253565fc2b73c70d9cbc8dbc9b0a201b21efa91) ) ROM_REGION( 0x400000, "gfx2", 0 ) /* Sprites */ ROM_LOAD( "s1_ff1.bin", 0x300000, 0x080000, CRC(90a57445) SHA1(44a88de1377d685c2bc185187b5ba151d900792d) ) ROM_LOAD( "s1_ff1h.bin", 0x380000, 0x080000, CRC(07e23f95) SHA1(c2af437199f352264e5238547f9d14639cb6f329) ) ROM_LOAD( "s2_ff1.bin", 0x200000, 0x080000, CRC(ee4a972b) SHA1(eb9c30691f1620bb1777ca5b911b11172bbadc53) ) ROM_LOAD( "s2_ff1h.bin", 0x280000, 0x080000, CRC(726add2e) SHA1(404c62b4c60daaaace78641dd77a101fecfef1ad) ) ROM_LOAD( "s4_ff1.bin", 0x100000, 0x080000, CRC(cfdcbdfb) SHA1(4305a67441cbbddeb214a5140446a9b8d04940ff) ) ROM_LOAD( "s4_ff1h.bin", 0x180000, 0x080000, CRC(eecce2d7) SHA1(575e389c51c1528e2245db8c79fff6bc4d17a87d) ) ROM_LOAD( "s8_ff1.bin", 0x000000, 0x080000, CRC(0edf5706) SHA1(481bcc031ea9489c14925510b0d567f858428783) ) ROM_LOAD( "s8_ff1h.bin", 0x080000, 0x080000, CRC(1d00074f) SHA1(d5c6963aee5c47a77a097b0b1e254b1f1bc69a73) ) ROM_END /*** Name: The History of Martial Arts Manufacturer: Unknown, maybe NIX / Novatecnia Year: Unknown Date Dumped: 18-07-2002 (DD-MM-YYYY) CPU: 68000 SOUND: OKIM6295 GFX: Unknown Country: Maybe Spain About the game: This is a Karnov's revenge rip-off like Fit of Fighting with Art of Fighting. Same GFX, but reprogrammed from 0, and with FM music... Another nice bootleg! It was dumped from a faulty board, which doesn't boot, but with intact eproms :) ***/ ROM_START( histryma ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_BYTE( "l_th.bin", 0x000001, 0x080000, CRC(5af9356a) SHA1(f3d797dcc528a3a2a4f0ebbf07d59bd2cc868622) ) ROM_LOAD16_BYTE( "r_th.bin", 0x000000, 0x080000, CRC(1a44b504) SHA1(621d95b67d413da3e8a90c0cde494b2529b92407) ) ROM_REGION( 0x01c000, "audiocpu", 0 ) /* Sound Program */ ROM_LOAD( "y61f.bin", 0x000000, 0x004000, CRC(b588525a) SHA1(b768bd75d6351430f9656289146119e9c0308554) ) ROM_CONTINUE( 0x010000, 0x00c000 ) ROM_REGION( 0x100000, "oki", 0 ) /* OKI Samples? */ ROM_LOAD( "u7_th.bin", 0x000000, 0x080000, CRC(88b41ef5) SHA1(565e2c4554dde79cd2da8b8a181b3378818223cc) ) //seems to be a merge of 2 0x040000 roms ROM_LOAD( "u18_th.bin", 0x080000, 0x080000, CRC(a734cd77) SHA1(3fe4cba6f6d691dfc4775de634e6e39bf4bb08b8) ) //seems to be a merge of 2 0x040000 roms ROM_REGION( 0x100000, "gfx1", 0 ) /* GFX */ ROM_LOAD( "p1_th.bin", 0x0c0000, 0x040000, CRC(501c5336) SHA1(1743221d73d59ba40ddad3f69bc4aa1a51c29962) ) ROM_LOAD( "p2_th.bin", 0x080000, 0x040000, CRC(f50666c7) SHA1(46856e70426388c9704eed94d4dbbbe5674b9be6) ) ROM_LOAD( "p4_th.bin", 0x040000, 0x040000, CRC(c70223cf) SHA1(d3ee1b73a22a0aaab909141b32696c6b48f2b7ee) ) ROM_LOAD( "p8_th.bin", 0x000000, 0x040000, CRC(8104b963) SHA1(ed02c3be16b8e94d9316391fe0f9fcf39679c1de) ) ROM_REGION( 0x400000, "gfx2", 0 ) /* Sprites */ ROM_LOAD( "s1_th.bin", 0x300000, 0x080000, CRC(e9c2d27a) SHA1(f47cc318f4a3db84858b4d302be4063f3bb1b071) ) ROM_LOAD( "s1h_th.bin", 0x380000, 0x080000, CRC(d806c92e) SHA1(4781dd08755cd91f3d09ff418a9d13744d888922) ) ROM_LOAD( "s2_th.bin", 0x200000, 0x080000, CRC(fa011056) SHA1(8f896d248c74faae5f320e0ef1730681fb7af57b) ) ROM_LOAD( "s2h_th.bin", 0x280000, 0x080000, CRC(ef5f2268) SHA1(d2f13e6a393256cba24a70f1f85c7aeec93d0c51) ) ROM_LOAD( "s4_th.bin", 0x100000, 0x080000, CRC(fa80fdec) SHA1(590dd27d727d1910b5935dbcb8f958c435b6077a) ) ROM_LOAD( "s4h_th.bin", 0x180000, 0x080000, CRC(0fd3b43e) SHA1(971e8813e3a3d7735a96f31d557c28b9bbcf91d1) ) ROM_LOAD( "s8_th.bin", 0x000000, 0x080000, CRC(57fd170f) SHA1(2b8cc688de894bbb7d44f9458b3d012a64f79b20) ) ROM_LOAD( "s8h_th.bin", 0x080000, 0x080000, CRC(cd7bd0de) SHA1(2cd0f41e2575e667aa971f2f5716694dee203ab3) ) ROM_END ROM_START( histryma2 ) // only the program ROMs were dumped (no PCB available, only those 2 loose ROMs), so the rest are marked as BAD_DUMP even if they could be correct ROM_REGION( 0x100000, "maincpu", 0 ) ROM_LOAD16_BYTE( "27c4001.5", 0x000001, 0x080000, CRC(9479f8b9) SHA1(576ad1394212ae46c728150a1fe304518360fd69) ) ROM_LOAD16_BYTE( "27c4001.4", 0x000000, 0x080000, CRC(268f3648) SHA1(5defd9cae46384774b919894643a959b414b0d57) ) ROM_REGION( 0x01c000, "audiocpu", 0 ) ROM_LOAD( "y61f.bin", 0x000000, 0x004000, BAD_DUMP CRC(b588525a) SHA1(b768bd75d6351430f9656289146119e9c0308554) ) ROM_CONTINUE( 0x010000, 0x00c000 ) ROM_REGION( 0x100000, "oki", 0 ) // OKI Samples? ROM_LOAD( "u7_th.bin", 0x000000, 0x080000, BAD_DUMP CRC(88b41ef5) SHA1(565e2c4554dde79cd2da8b8a181b3378818223cc) ) //seems to be a merge of 2 0x040000 roms ROM_LOAD( "u18_th.bin", 0x080000, 0x080000, BAD_DUMP CRC(a734cd77) SHA1(3fe4cba6f6d691dfc4775de634e6e39bf4bb08b8) ) //seems to be a merge of 2 0x040000 roms ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD( "p1_th.bin", 0x0c0000, 0x040000, BAD_DUMP CRC(501c5336) SHA1(1743221d73d59ba40ddad3f69bc4aa1a51c29962) ) ROM_LOAD( "p2_th.bin", 0x080000, 0x040000, BAD_DUMP CRC(f50666c7) SHA1(46856e70426388c9704eed94d4dbbbe5674b9be6) ) ROM_LOAD( "p4_th.bin", 0x040000, 0x040000, BAD_DUMP CRC(c70223cf) SHA1(d3ee1b73a22a0aaab909141b32696c6b48f2b7ee) ) ROM_LOAD( "p8_th.bin", 0x000000, 0x040000, BAD_DUMP CRC(8104b963) SHA1(ed02c3be16b8e94d9316391fe0f9fcf39679c1de) ) ROM_REGION( 0x400000, "gfx2", 0 ) // Sprites ROM_LOAD( "s1_th.bin", 0x300000, 0x080000, BAD_DUMP CRC(e9c2d27a) SHA1(f47cc318f4a3db84858b4d302be4063f3bb1b071) ) ROM_LOAD( "s1h_th.bin", 0x380000, 0x080000, BAD_DUMP CRC(d806c92e) SHA1(4781dd08755cd91f3d09ff418a9d13744d888922) ) ROM_LOAD( "s2_th.bin", 0x200000, 0x080000, BAD_DUMP CRC(fa011056) SHA1(8f896d248c74faae5f320e0ef1730681fb7af57b) ) ROM_LOAD( "s2h_th.bin", 0x280000, 0x080000, BAD_DUMP CRC(ef5f2268) SHA1(d2f13e6a393256cba24a70f1f85c7aeec93d0c51) ) ROM_LOAD( "s4_th.bin", 0x100000, 0x080000, BAD_DUMP CRC(fa80fdec) SHA1(590dd27d727d1910b5935dbcb8f958c435b6077a) ) ROM_LOAD( "s4h_th.bin", 0x180000, 0x080000, BAD_DUMP CRC(0fd3b43e) SHA1(971e8813e3a3d7735a96f31d557c28b9bbcf91d1) ) ROM_LOAD( "s8_th.bin", 0x000000, 0x080000, BAD_DUMP CRC(57fd170f) SHA1(2b8cc688de894bbb7d44f9458b3d012a64f79b20) ) ROM_LOAD( "s8h_th.bin", 0x080000, 0x080000, BAD_DUMP CRC(cd7bd0de) SHA1(2cd0f41e2575e667aa971f2f5716694dee203ab3) ) ROM_END /*** Here's the info about this dump: Name: "BB" (Protoype name in some of the EPROM stickers) Manufacturer: Unknown (There are chances that was produced by NIX, but it's not possible to verify, same as Fit of Fighting ) Year: Unknown Date Dumped: 17-07-2002 (DD-MM-YYYY) CPU: 68000, possibly at 12mhz SOUND: OKIM6295 (It is present in the board, but it's not used, this prototype game does not have sound) GFX: Unknown About the game: This is a prototype in VERY early stages of development. Maybe it was coded to gain some experience to be able to make Fit of Fighting bootleg. A lot of missing/random graphics, no sound, no game itself, just jump, move, crouch... :) Badly coded scroll, no screen when you power on the board (just start pushing first button, coin and start to get into a game) or leave it some seconds to see a dramatically lame fight)... Character selection just shows garbage, maybe stage selection shows rubbish, and the game itself is all the time displaying a lot of garbage.. But this is VERY nice! :) The most funny thing about this game is that the three visible fighter characters can be based on some of the NIX workers, but I really can't verify this :) Some of the eproms seem to be two times inserted in different slots of the board, but with a different date wrote on the stickers, those are the ??_DD_MM.bin files. ***/ ROM_START( bbprot ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_BYTE( "l_bb.bin", 0x000001, 0x080000, CRC(2b7b9a9a) SHA1(51088358814cc337af150526ac7fd6216c102299) ) ROM_LOAD16_BYTE( "r_bb.bin", 0x000000, 0x080000, CRC(28480f3e) SHA1(b89533fd01781e1b83c98b0b61a77f554fbdb4f3) ) ROM_REGION( 0x100000, "oki", ROMREGION_ERASEFF ) /* OKI Samples? */ ROM_REGION( 0x200000, "gfx1", 0 ) /* BG GFX */ ROM_LOAD( "p1_29_11.bin", 0x180000, 0x080000, CRC(e7da36c1) SHA1(c7ea40b57088145019c1be3e34ba9e94c60bef78) ) ROM_LOAD( "p2_29_11.bin", 0x100000, 0x080000, CRC(0411e1aa) SHA1(99ae1a45848f8227899989334f3035222bd5da39) ) ROM_LOAD( "p4_29_11.bin", 0x080000, 0x080000, CRC(885942bf) SHA1(d9bde8c12be7d02dde442873e0852c7c85478254) ) ROM_LOAD( "p8_29_11.bin", 0x000000, 0x080000, CRC(44f94575) SHA1(90c1a97e70d312b4475ce2d333e110e027c377b9) ) ROM_REGION( 0x780000, "gfx2", 0 ) /* Sprites */ ROM_LOAD( "s1_21_12.bin", 0x600000, 0x080000, CRC(0b396256) SHA1(6e69641cd012e60618a68386342108d04e826e3c) ) ROM_LOAD( "s1_x.bin", 0x700000, 0x080000, CRC(b95dfbb8) SHA1(b37452900b07bc13bc9d1702ef1ff737ff0f393c) ) ROM_LOAD( "s1_h.bin", 0x680000, 0x080000, CRC(d20b6ac3) SHA1(8b6a5f1da47be456da528ddaaf18e2321261683e) ) ROM_LOAD( "s2_21_12.bin", 0x480000, 0x080000, CRC(46e8b73c) SHA1(f4dc349a2c955659ae44cdaecb422255a71193dc) ) ROM_LOAD( "s2_x.bin", 0x580000, 0x080000, CRC(c90a52e8) SHA1(60e99e2737efd9bc0df52ecafa097d943fb7b9d9) ) ROM_LOAD( "s2_h.bin", 0x500000, 0x080000, CRC(7970be11) SHA1(443ae8208171dee26f5d5f0908f1f35609cd327c) ) ROM_LOAD( "s4_21_12.bin", 0x300000, 0x080000, CRC(f46d47bd) SHA1(4b733e299baa1da3eb962cb04bab1c80453e9f3f) ) ROM_LOAD( "s4_x.bin", 0x400000, 0x080000, CRC(0fe4325d) SHA1(3fed50df1c42288ce44e54ff869a2be323fff4a8) ) ROM_LOAD( "s4_h.bin", 0x380000, 0x080000, CRC(32a0bbb2) SHA1(b6ec622257c80237c9c8c99d04f0a166de64ab55) ) ROM_LOAD( "s8_21_12.bin", 0x180000, 0x080000, CRC(f810567c) SHA1(b5aba9e3a22437f93a4aeaee55967fc7bd28af4b) ) ROM_LOAD( "s8_x.bin", 0x280000, 0x080000, CRC(6ec466ea) SHA1(2ba5a04d78242a3911b914247614b6ef7c1f6317) ) ROM_LOAD( "s8_h.bin", 0x200000, 0x080000, CRC(a425cc5b) SHA1(3e195e0e90481799256ce2020a09288555bdefd1) ) ROM_LOAD( "s16_21_1.bin", 0x000000, 0x080000, CRC(023c1e63) SHA1(4d082261c355bb010f6b829e7d08ba88d9b677fc) ) ROM_LOAD( "s16_x_mc.bin", 0x100000, 0x080000, CRC(1ad5447f) SHA1(65f542c91358fe460b3ad3c7ef435505aa95b3e6) ) ROM_LOAD( "s16_h_mc.bin", 0x080000, 0x080000, CRC(3b9091de) SHA1(b426dab6361f5d48519dc9de146e1b2270af6c8b) ) ROM_END ROM_START( hotmindff ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_BYTE( "21.u138", 0x000001, 0x020000, CRC(00d9ba73) SHA1(5f33f7e9b9446cdc380e6236381d86c46f55ede7) ) ROM_LOAD16_BYTE( "20.u125", 0x000000, 0x020000, CRC(8a7b2cc2) SHA1(031255cff4764dd61f5418be8090310193aa2e59) ) ROM_REGION( 0x01c000, "audiocpu", 0 ) /* Sound Program */ ROM_LOAD( "22.u23", 0x000000, 0x004000, CRC(ca0327a2) SHA1(b725f625860dae4723e0ed4a6c7c29a2b1a3d15f) ) ROM_CONTINUE( 0x010000, 0x00c000 ) ROM_REGION( 0x100000, "oki", 0 ) /* OKI Samples? */ ROM_LOAD( "19.u18", 0x000000, 0x040000, CRC(296d71da) SHA1(49735012691a9e65c4da6132428f7a9149504fd3) ) ROM_REGION( 0x100000, "gfx1", 0 ) /* GFX */ ROM_LOAD( "29.bin", 0x000000, 0x020000, CRC(cd4cab01) SHA1(90165f57adbfd7d85eaccfe794d347ed795dfba1) ) ROM_LOAD( "30.bin", 0x040000, 0x020000, CRC(33f991b5) SHA1(8fddb5a3c78e73eb2a741aa970ff2c650a847317) ) ROM_LOAD( "25.bin", 0x080000, 0x020000, CRC(21e7c729) SHA1(bf2a89ab54ef362bfee9fdcb7623d0f092559793) ) ROM_LOAD( "26.bin", 0x0c0000, 0x020000, CRC(5802e7d0) SHA1(6a6661c753b31492295813952fc559e5189aae9f) ) ROM_REGION( 0x400000, "gfx2", 0 ) /* Sprites */ ROM_LOAD( "23.bin", 0x000000, 0x020000, CRC(4d2c79ed) SHA1(df7004b11f5bcd51f7629fa1cc907976d9b8c8dc) ) ROM_LOAD( "24.bin", 0x100000, 0x020000, CRC(f43618d0) SHA1(7c383582ebcab713f2d8e6b4c73fc0415465d62d) ) ROM_LOAD( "27.bin", 0x200000, 0x020000, CRC(9cee7e50) SHA1(3e131b4acf35b58d511f7313425d002e939a7ff9) ) ROM_LOAD( "28.bin", 0x300000, 0x020000, CRC(059c7bcf) SHA1(b9d8b1e1482baeede750a54749834c68c2d0cfef) ) ROM_END /* INIT */ void fitfight_state::init_fitfight() { // uint16_t *mem16 = (uint16_t *)memregion("maincpu")->base(); // mem16[0x0165B2/2] = 0x4e71; // for now so it boots m_maincpu->space(AS_PROGRAM).install_read_handler(0x700000, 0x700001, read16smo_delegate(*this, FUNC(fitfight_state::fitfight_700000_r))); m_bbprot_kludge = 0; } void fitfight_state::init_histryma() { // uint16_t *mem16 = (uint16_t *)memregion("maincpu")->base(); // mem16[0x017FDC/2] = 0x4e71; // for now so it boots m_maincpu->space(AS_PROGRAM).install_read_handler(0x700000, 0x700001, read16smo_delegate(*this, FUNC(fitfight_state::histryma_700000_r))); m_bbprot_kludge = 0; } void fitfight_state::init_bbprot() { m_bbprot_kludge = 1; } void fitfight_state::init_hotmindff() { m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x200001, read16smo_delegate(*this, FUNC(fitfight_state::hotmindff_unk_r))); init_fitfight(); } /* GAME */ GAME( 199?, fitfight, 0, fitfight, fitfight, fitfight_state, init_fitfight, ROT0, "bootleg", "Fit of Fighting", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 199?, histryma, 0, fitfight, histryma, fitfight_state, init_histryma, ROT0, "bootleg", "The History of Martial Arts (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 199?, histryma2, histryma, fitfight, histryma, fitfight_state, init_histryma, ROT0, "bootleg", "The History of Martial Arts (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 199?, bbprot, 0, bbprot, bbprot, fitfight_state, init_bbprot, ROT0, "", "unknown fighting game 'BB' (prototype)", MACHINE_IS_INCOMPLETE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 199?, hotmindff, hotmind, fitfight, fitfight, fitfight_state, init_hotmindff, ROT0, "Playmark", "Hot Mind (Fit of Fighting hardware)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // need to fix scroll offsets + inputs