Previous 199869 Revisions Next

r19353 Thursday 6th December, 2012 at 08:22:04 UTC by Robbbert
sf2mdt : fixed video and sound [Barry Harris]
- moved sf2mdt and sf2mdta to fcrash.c (from cps1.c)
- emulated the Z80, YM2151 + 2xMSM5205 sound
- implemented the correct irq line
- hooked up the input and dip switch reads
- hooked up the scroll and layer enable register writes
- allowed use of separate bootleg sprite ram in the driver
[src/mame/drivers]cps1.c fcrash.c
[src/mame/includes]cps1.h

trunk/src/mame/drivers/cps1.c
r19352r19353
31773177   MCFG_EEPROM_ADD("eeprom", qsound_eeprom_interface)
31783178MACHINE_CONFIG_END
31793179
3180/* incomplete */
3181static ADDRESS_MAP_START( sf2mdt_z80map, AS_PROGRAM, 8, cps_state )
3182   AM_RANGE(0x0000, 0xcfff) AM_ROM
3183   AM_RANGE(0xd000, 0xd7ff) AM_RAM
3184ADDRESS_MAP_END
3185
3186static void m5205_int1(device_t *device)
3187{
3188//  msm5205_data_w(device, sample_buffer1 & 0x0F);
3189//  sample_buffer1 >>= 4;
3190//  sample_select1 ^= 1;
3191//  if (sample_select1 == 0)
3192//      machine.device("audiocpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
3193}
3194
3195static void m5205_int2(device_t *device)
3196{
3197//  msm5205_data_w(device, sample_buffer2 & 0x0F);
3198//  sample_buffer2 >>= 4;
3199//  sample_select2 ^= 1;
3200}
3201
3202static const msm5205_interface msm5205_interface1 =
3203{
3204   m5205_int1,   /* interrupt function */
3205   MSM5205_S96_4B      /* 4KHz 4-bit */
3206};
3207
3208static const msm5205_interface msm5205_interface2 =
3209{
3210   m5205_int2,   /* interrupt function */
3211   MSM5205_S96_4B      /* 4KHz 4-bit */
3212};
3213
3214static MACHINE_CONFIG_START( sf2mdt, cps_state )
3215
3216   /* basic machine hardware */
3217   MCFG_CPU_ADD("maincpu", M68000, 12000000)
3218   MCFG_CPU_PROGRAM_MAP(main_map)
3219   MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state,  cps1_interrupt)
3220
3221   MCFG_CPU_ADD("audiocpu", Z80, 3579545)
3222   MCFG_CPU_PROGRAM_MAP(sf2mdt_z80map)
3223
3224   MCFG_MACHINE_START_OVERRIDE(cps_state,common)
3225
3226   /* video hardware */
3227   MCFG_SCREEN_ADD("screen", RASTER)
3228   MCFG_SCREEN_REFRESH_RATE(60)
3229   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
3230   MCFG_SCREEN_SIZE(64*8, 32*8)
3231   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 )
3232   MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_cps1)
3233   MCFG_SCREEN_VBLANK_DRIVER(cps_state, screen_eof_cps1)
3234
3235   MCFG_GFXDECODE(cps1)
3236   MCFG_PALETTE_LENGTH(0xc00)
3237
3238   MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
3239
3240   /* sound hardware */
3241   MCFG_SPEAKER_STANDARD_MONO("mono")
3242
3243   MCFG_YM2151_ADD("2151", 3579545)
3244   MCFG_YM2151_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
3245   MCFG_SOUND_ROUTE(0, "mono", 0.35)
3246   MCFG_SOUND_ROUTE(1, "mono", 0.35)
3247
3248   /* has 2x MSM5205 instead of OKI6295 */
3249   MCFG_SOUND_ADD("msm1", MSM5205, 24000000/64)   /* ? */
3250   MCFG_SOUND_CONFIG(msm5205_interface1)
3251   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
3252
3253   MCFG_SOUND_ADD("msm2", MSM5205, 24000000/64)   /* ? */
3254   MCFG_SOUND_CONFIG(msm5205_interface2)
3255   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
3256MACHINE_CONFIG_END
3257
32583180/*
32593181
32603182CPU:
r19352r19353
33033225   MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state,  cps1_interrupt)
33043226
33053227   MCFG_CPU_ADD("audiocpu", Z80, 29821000 / 8)
3306   MCFG_CPU_PROGRAM_MAP(sf2mdt_z80map)
3228//   MCFG_CPU_PROGRAM_MAP(sf2mdt_z80map)
33073229
33083230   MCFG_MACHINE_START_OVERRIDE(cps_state,common)
33093231
r19352r19353
33313253
33323254   /* has 2x MSM5205 instead of OKI6295 */
33333255   MCFG_SOUND_ADD("msm1", MSM5205, 24000000/64)   /* ? */
3334   MCFG_SOUND_CONFIG(msm5205_interface1)
3256//   MCFG_SOUND_CONFIG(msm5205_interface1)
33353257   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
33363258
33373259   MCFG_SOUND_ADD("msm2", MSM5205, 24000000/64)   /* ? */
3338   MCFG_SOUND_CONFIG(msm5205_interface2)
3260//   MCFG_SOUND_CONFIG(msm5205_interface2)
33393261   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
33403262MACHINE_CONFIG_END
33413263
r19352r19353
87118633   ROM_LOAD( "s92_19.bin",    0x20000, 0x20000, CRC(beade53f) SHA1(277c397dc12752719ec6b47d2224750bd1c07f79) )
87128634ROM_END
87138635
8714/*
8715CPU
8716
87171x MC68000P12 (main)
87181x TPC1020AFN-084C (main)
87191x Z0840006PSC-Z80CPU (sound)
87201x YM2151 (sound)
87211x YM3012 (sound)
87222x M5205 (sound)
87232x LM324N (sound)
87241x TDA2003 (sound)
87251x oscillator 24.000000MHz
87261x oscillator 30.000MHz
8727ROMs
8728
872914x AM27C040 (1,3,6,7,8,9,10,11,12,13,14,15,16,17)
87303x TMS27C010A (2,4,5)
87313x PAL 16S20 (ic7,ic72, ic80) (read protected, not dumped)
87323x GAL20V8A (ic120, ic121, ic169) (read protected, not dumped)
8733
8734Note
8735
87361x JAMMA edge connector
87371x trimmer (volume)
87383x 8x2 switches dip
8739*/
8740
8741ROM_START( sf2mdt )
8742   ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
8743   ROM_LOAD16_BYTE( "3.ic172",   0x000000, 0x80000, CRC(5301b41f) SHA1(6855a57b21e8c5d74e5cb18f9ce6af650d7fb422) )
8744   ROM_LOAD16_BYTE( "1.ic171",   0x000001, 0x80000, CRC(c1c803f6) SHA1(9fe18ae2553a63d8e4dcc20bafd5a4634f8b93c4) )
8745   ROM_LOAD16_BYTE( "4.ic176",   0x100000, 0x20000, CRC(1073b7b6) SHA1(81ca1eab65ceac69520584bb23a684ccb9d92f89) )
8746   ROM_LOAD16_BYTE( "2.ic175",   0x100001, 0x20000, CRC(924c6ce2) SHA1(676a912652bd75da5087f0c7eae047b7681a993c) )
8747
8748   ROM_REGION( 0x600000, "gfx", 0 ) /* rearranged in init */
8749   ROMX_LOAD( "7.ic90",    0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) , ROM_GROUPWORD | ROM_SKIP(6) )
8750   ROMX_LOAD( "10.ic88",   0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) , ROM_GROUPWORD | ROM_SKIP(6) )
8751   ROMX_LOAD( "13.ic89",   0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) , ROM_GROUPWORD | ROM_SKIP(6) )
8752   ROMX_LOAD( "16.ic87",   0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) , ROM_GROUPWORD | ROM_SKIP(6) )
8753   ROMX_LOAD( "6.ic91",    0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) , ROM_GROUPWORD | ROM_SKIP(6) )
8754   ROMX_LOAD( "9.ic93",    0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) , ROM_GROUPWORD | ROM_SKIP(6) )
8755   ROMX_LOAD( "12.ic92",   0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) , ROM_GROUPWORD | ROM_SKIP(6) )
8756   ROMX_LOAD( "15.ic94",   0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) , ROM_GROUPWORD | ROM_SKIP(6) )
8757   ROMX_LOAD( "8.ic86",    0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) , ROM_GROUPWORD | ROM_SKIP(6) )
8758   ROMX_LOAD( "11.ic84",   0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) , ROM_GROUPWORD | ROM_SKIP(6) )
8759   ROMX_LOAD( "14.ic85",   0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) , ROM_GROUPWORD | ROM_SKIP(6) )
8760   ROMX_LOAD( "17.ic83",   0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) , ROM_GROUPWORD | ROM_SKIP(6) )
8761
8762   ROM_REGION( 0x28000, "audiocpu", 0 ) /* Sound program + samples  */
8763   ROM_LOAD( "5.ic26",    0x00000, 0x08000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
8764   ROM_CONTINUE(              0x10000, 0x18000 )
8765ROM_END
8766
8767ROM_START( sf2mdta )
8768/* unconfirmed if working on real hardware, pf4 is a bad dump (bad pin) */
8769   ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
8770   ROM_LOAD16_BYTE( "3.mdta", 0x000000, 0x80000, CRC(9f544ef4) SHA1(f784809e59a5fcabd6d15d3f1c36250a5528c9f8) )
8771   ROM_LOAD16_BYTE( "5.mdta", 0x000001, 0x80000, CRC(d76d6621) SHA1(aa9cea9ddace212a7b3c535b8f6e3fbc50da1f94) )
8772   ROM_LOAD16_BYTE( "2.mdta", 0x100000, 0x20000, CRC(74844192) SHA1(99cd546c78cce7f632007af454d8a55eddb6b19b) )
8773   ROM_LOAD16_BYTE( "4.mdta", 0x100001, 0x20000, CRC(bd98ff15) SHA1(ed902d949b0b5c5beaaea78a4b418ffa6db9e1df) )
8774
8775   ROM_REGION( 0x600000, "gfx", 0 )
8776   ROMX_LOAD( "pf4 sh058.ic89", 0x000000, 0x80000, BAD_DUMP CRC(40fdf624) SHA1(cb928602744bf36e6851527f00d90da29de751e6), ROM_GROUPWORD | ROM_SKIP(6) )
8777   ROM_CONTINUE(                0x000002, 0x80000)
8778   ROMX_LOAD( "pf7 sh072.ic92", 0x000004, 0x80000, CRC(fb78022e) SHA1(b8974387056dd52db96b01cc4648edc814398c7e), ROM_GROUPWORD | ROM_SKIP(6) )
8779   ROM_CONTINUE(                0x000006, 0x80000)
8780   ROMX_LOAD( "pf5 sh036.ic90", 0x200000, 0x80000, CRC(0a6be48b) SHA1(b7e72c94d4e3eb4a6bba6608d9b9a093c8901ad9), ROM_GROUPWORD | ROM_SKIP(6) )
8781   ROM_CONTINUE(                0x200002, 0x80000)
8782   ROMX_LOAD( "pf8 sh074.ic93", 0x200004, 0x80000, CRC(6258c7cf) SHA1(4cd7519245c0aa816934a43e6743160f715d7dc2), ROM_GROUPWORD | ROM_SKIP(6) )
8783   ROM_CONTINUE(                0x200006, 0x80000)
8784   ROMX_LOAD( "pf6 sh070.ic88", 0x400000, 0x80000, CRC(9b5b09d7) SHA1(698a6aab41e495bd0c37a19aee16a84f04d15797), ROM_GROUPWORD | ROM_SKIP(6) )
8785   ROM_CONTINUE(                0x400002, 0x80000)
8786   ROMX_LOAD( "pf9 sh001.ic91", 0x400004, 0x80000, CRC(9f25090e) SHA1(12ff0431ef6550db446985c8914ac7d78eec6b6d), ROM_GROUPWORD | ROM_SKIP(6) )
8787   ROM_CONTINUE(                0x400006, 0x80000)
8788
8789   ROM_REGION( 0x28000, "audiocpu", 0 ) /* Sound program + samples  */
8790   ROM_LOAD( "1.ic28", 0x00000, 0x08000, CRC(d5bee9cc) SHA1(e638cb5ce7a22c18b60296a7defe8b03418da56c) )
8791   ROM_CONTINUE(       0x10000, 0x18000 )
8792ROM_END
8793
87948636/* B-Board 89625B-1 */
87958637ROM_START( cworld2j )
87968638   ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
r19352r19353
1109210934   DRIVER_INIT_CALL(pang3b);
1109310935}
1109410936
11095READ16_MEMBER(cps_state::sf2mdt_r)
11096{
11097   return 0xffff;
11098}
11099
11100DRIVER_INIT_MEMBER(cps_state,sf2mdt)
11101{
11102   int i;
11103   UINT32 gfx_size = machine().root_device().memregion( "gfx" )->bytes();
11104   UINT8 *rom = machine().root_device().memregion( "gfx" )->base();
11105   UINT8 tmp;
11106
11107   for( i = 0; i < gfx_size; i += 8 )
11108   {
11109      tmp = rom[i + 1];
11110      rom[i + 1] = rom[i + 4];
11111      rom[i + 4] = tmp;
11112      tmp = rom[i + 3];
11113      rom[i + 3] = rom[i + 6];
11114      rom[i + 6] = tmp;
11115   }
11116   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x70c01a, 0x70c01b, read16_delegate(FUNC(cps_state::sf2mdt_r),this));
11117   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x70c01c, 0x70c01d, read16_delegate(FUNC(cps_state::sf2mdt_r),this));
11118   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x70c01e, 0x70c01f, read16_delegate(FUNC(cps_state::sf2mdt_r),this));
11119   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x70c010, 0x70c011, read16_delegate(FUNC(cps_state::sf2mdt_r),this));
11120   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x70c018, 0x70c019, read16_delegate(FUNC(cps_state::sf2mdt_r),this));
11121
11122   DRIVER_INIT_CALL(cps1);
11123}
11124
1112510937DRIVER_INIT_MEMBER(cps_state,dinohunt)
1112610938{
1112710939   // is this shared with the new sound hw?
r19352r19353
1125311065GAME( 1992, sf2m8,       sf2ce,    cps1_12MHz, sf2hack,  cps_state,   sf2hack,  ROT0,   "bootleg", "Street Fighter II': Champion Edition (M8, bootleg)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_SUPPORTS_SAVE )
1125411066GAME( 1992, sf2yyc,      sf2ce,    cps1_12MHz, sf2hack,  cps_state,   sf2hack,  ROT0,   "bootleg", "Street Fighter II': Champion Edition (YYC, bootleg)", GAME_SUPPORTS_SAVE )            // 920313 - based on World version
1125511067GAME( 1992, sf2koryu,    sf2ce,    cps1_12MHz, sf2hack,  cps_state,   sf2hack,  ROT0,   "bootleg", "Street Fighter II': Champion Edition (Xiang Long, Chinese bootleg)", GAME_SUPPORTS_SAVE )      // 811102 !!! - based on World version
11256GAME( 1992, sf2mdt,      sf2ce,    sf2mdt,     sf2hack,  cps_state,   sf2mdt,   ROT0,   "bootleg", "Street Fighter II': Magic Delta Turbo (bootleg, set 1)", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )   // 920313 - based on (heavily modified) World version
11257GAME( 1992, sf2mdta,     sf2ce,    sf2mdt,     sf2hack,  cps_state,   sf2mdt,   ROT0,   "bootleg", "Street Fighter II': Magic Delta Turbo (bootleg, set 2)", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )   // 920313 - based on World version
1125811068GAME( 1992, cworld2j,    0,        cps1_12MHz, cworld2j, cps_state,   cps1,     ROT0,   "Capcom", "Adventure Quiz Capcom World 2 (Japan 920611)", GAME_SUPPORTS_SAVE )
1125911069GAME( 1992, varth,       0,        cps1_12MHz, varth,    cps_state,   cps1,     ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920714)", GAME_SUPPORTS_SAVE )   // "ETC"    // 12MHz verified
1126011070GAME( 1992, varthr1,     varth,    cps1_12MHz, varth,    cps_state,   cps1,     ROT270, "Capcom", "Varth: Operation Thunderstorm (World 920612)", GAME_SUPPORTS_SAVE )   // "ETC"
trunk/src/mame/drivers/fcrash.c
r19352r19353
5959WRITE16_MEMBER(cps_state::cawingbl_soundlatch_w)
6060{
6161   cps_state *state = space.machine().driver_data<cps_state>();
62
62   
6363   if (ACCESSING_BITS_8_15)
6464   {
6565      state->soundlatch_byte_w(space, 0, data  >> 8);
r19352r19353
7777   state->membank("bank1")->set_entry(data & 0x07);
7878}
7979
80static WRITE8_HANDLER( sf2mdt_snd_bankswitch_w )
81{
82   cps_state *state = space.machine().driver_data<cps_state>();
83
84   state->m_msm_1->set_output_gain(0, (data & 0x20) ? 0.0 : 1.0);
85   state->m_msm_2->set_output_gain(0, (data & 0x10) ? 0.0 : 1.0);
86
87   state->membank("bank1")->set_entry(data & 0x07);
88}
89
8090static void m5205_int1( device_t *device )
8191{
8292   cps_state *state = device->machine().driver_data<cps_state>();
r19352r19353
126136      state->m_cps_b_regs[state->m_layer_mask_reg[2] / 2] = data;
127137}
128138
139WRITE16_MEMBER(cps_state::sf2mdt_layer_w)
140{
141   cps_state *state = space.machine().driver_data<cps_state>();
142   
143   /* layer enable and scroll registers are written here - passing them to m_cps_b_regs and m_cps_a_regs for now for drawing routines */
144   if (offset == 0x0086)
145      state->m_cps_a_regs[0x14 / 2] = data + 0xffce; /* scroll 3x */
146   else
147   if (offset == 0x0087)
148      state->m_cps_a_regs[0x16 / 2] = data; /* scroll 3y */
149   else
150   if (offset == 0x0088)
151      state->m_cps_a_regs[0x10 / 2] = data + 0xffcd; /* scroll 2x */
152   else
153   if (offset == 0x0089)
154      state->m_cps_a_regs[0x0c / 2] = data + 0xffca; /* scroll 1x */
155   else
156   if (offset == 0x008a) {
157      state->m_cps_a_regs[0x12 / 2] = data; /* scroll 2y */
158      state->m_cps_a_regs[0x20 / 2] = data; /* row scroll start */
159      state->m_cps_a_regs[0x08 / 2] = m_bootleg_work_ram[0x802e / 2]; /* pretty gross hack?, but the row scroll table address isn't written anywhere else */
160   } else   
161   if (offset == 0x008b)
162      state->m_cps_a_regs[0x0e / 2] = data; /* scroll 1y */
163   else
164   if (offset == 0x00a6)
165      state->m_cps_b_regs[m_layer_enable_reg / 2] = data;
166}
129167
168
130169/* not verified */
131170#define CPS1_ROWSCROLL_OFFS     (0x20/2)    /* base of row scroll offsets in other RAM */
132171
r19352r19353
157196   int pos;
158197   int base = state->m_sprite_base / 2;
159198   int num_sprites = machine.gfx[2]->elements();
199   int last_sprite_offset = 0x1ffc;
200   UINT16 *sprite_ram = state->m_gfxram;
160201
161202   // sprite base registers need hooking up properly.. on fcrash it is NOT cps1_cps_a_regs[0]
162203   //  on kodb, it might still be, unless that's just a leftover and it writes somewhere else too
163204//  if (state->m_cps_a_regs[0] & 0x00ff) base = 0x10c8/2;
164205//  printf("cps1_cps_a_regs %04x\n", state->m_cps_a_regs[0]);
165
206   
207   /* if we have separate sprite ram, use it */
208   if (state->m_bootleg_sprite_ram) sprite_ram = state->m_bootleg_sprite_ram;
209   
166210   /* get end of sprite list marker */
167   int last_sprite_offset = 0x1ffc;
168   
169211   for (pos = 0x1ffc; pos >= 0x0000; pos -= 4)
170212   {
171      if (state->m_gfxram[base + pos - 1] == state->m_sprite_list_end_marker) last_sprite_offset = pos;
213      if (sprite_ram[base + pos - 1] == state->m_sprite_list_end_marker) last_sprite_offset = pos;
172214   }
173
215   
174216   for (pos = last_sprite_offset; pos >= 0x0000; pos -= 4)
175217   {
176218      int tileno;
r19352r19353
179221      int flipx, flipy;
180222      int colour;
181223
182      tileno = state->m_gfxram[base + pos];
224      tileno = sprite_ram[base + pos];
183225      if (tileno >= num_sprites) continue; /* don't render anything outside our tiles */
184      xpos   = state->m_gfxram[base + pos + 2] & 0x1ff;
185      ypos   = state->m_gfxram[base + pos - 1] & 0x1ff;
186      flipx  = state->m_gfxram[base + pos + 1] & 0x20;
187      flipy  = state->m_gfxram[base + pos + 1] & 0x40;
188      colour = state->m_gfxram[base + pos + 1] & 0x1f;
226      xpos   = sprite_ram[base + pos + 2] & 0x1ff;
227      ypos   = sprite_ram[base + pos - 1] & 0x1ff;
228      flipx  = sprite_ram[base + pos + 1] & 0x20;
229      flipy  = sprite_ram[base + pos + 1] & 0x40;
230      colour = sprite_ram[base + pos + 1] & 0x1f;
189231      ypos   = 256 - ypos;
232      xpos  += state->m_sprite_x_offset;
190233     
191234      pdrawgfx_transpen(bitmap, cliprect, machine.gfx[2], tileno, colour, flipx, flipy, xpos + 49, ypos - 16, machine.priority_bitmap, 0x02, 15);
192235
r19352r19353
365408   AM_RANGE(0xd000, 0xd7ff) AM_RAM
366409   AM_RANGE(0xe000, 0xe001) AM_DEVREADWRITE("2151", ym2151_device, read, write)
367410   AM_RANGE(0xe400, 0xe400) AM_DEVREADWRITE("oki", okim6295_device, read, write)
368   AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r)   /* Sound command */
411   AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_byte_r)
369412ADDRESS_MAP_END
370413
414static ADDRESS_MAP_START( sf2mdt_z80map, AS_PROGRAM, 8, cps_state )
415   AM_RANGE(0x0000, 0x7fff) AM_ROM
416   AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
417   AM_RANGE(0xd000, 0xd7ff) AM_RAM
418   AM_RANGE(0xd800, 0xd801) AM_DEVREADWRITE("2151", ym2151_device, read, write)
419   AM_RANGE(0xdc00, 0xdc00) AM_READ(soundlatch_byte_r)
420   AM_RANGE(0xe000, 0xe000) AM_WRITE_LEGACY(sf2mdt_snd_bankswitch_w)
421   AM_RANGE(0xe400, 0xe400) AM_WRITE_LEGACY(fcrash_msm5205_0_data_w)
422   AM_RANGE(0xe800, 0xe800) AM_WRITE_LEGACY(fcrash_msm5205_1_data_w)
423ADDRESS_MAP_END
371424
425
372426#define CPS1_COINAGE_1 \
373427   PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) \
374428   PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
r19352r19353
700754   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START3 )
701755INPUT_PORTS_END
702756
757static INPUT_PORTS_START( sf2mdt )
758   PORT_START("IN0")
759   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
760   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
761   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
762   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
763   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
764   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
765   PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW )
766   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
703767
768   PORT_START("IN1")
769   PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
770   PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
771   PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
772   PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
773   PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Jab Punch") PORT_PLAYER(1)
774   PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Strong Punch") PORT_PLAYER(1)
775   PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Fierce Punch") PORT_PLAYER(1)
776   PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
777   PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
778   PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
779   PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
780   PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
781   PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Jab Punch") PORT_PLAYER(2)
782   PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P2 Strong Punch") PORT_PLAYER(2)
783   PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P2 Fierce Punch") PORT_PLAYER(2)
784   PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )   
785
786   PORT_START("IN2")      /* Extra buttons */
787   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 Short Kick") PORT_PLAYER(1)
788   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P1 Forward Kick") PORT_PLAYER(1)
789   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P1 Roundhouse Kick") PORT_PLAYER(1)
790   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
791   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P2 Short Kick") PORT_PLAYER(2)
792   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P2 Forward Kick") PORT_PLAYER(2)
793   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P2 Roundhouse Kick") PORT_PLAYER(2)
794   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
795
796   PORT_START("DSWA")
797   CPS1_COINAGE_1
798   PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" )   PORT_DIPLOCATION("SW(A):7")
799   PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
800   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
801   PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(A):8" )
802
803   PORT_START("DSWB")
804   CPS1_DIFFICULTY_1( "SW(B)" )
805   PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW(B):4" )
806   PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW(B):5" )
807   PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW(B):6" )
808   PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW(B):7" )
809   PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(B):8" )
810
811   PORT_START("DSWC")
812   PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW(C):1" )
813   PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW(C):2" )
814   PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) )            PORT_DIPLOCATION("SW(C):3")
815   PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
816   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
817   PORT_DIPNAME( 0x08, 0x08, "Freeze" )                     PORT_DIPLOCATION("SW(C):4")
818   PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
819   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
820   PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )            PORT_DIPLOCATION("SW(C):5")
821   PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
822   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
823   PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )            PORT_DIPLOCATION("SW(C):6")
824   PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
825   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
826   PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) )         PORT_DIPLOCATION("SW(C):7")
827   PORT_DIPSETTING(    0x40, DEF_STR( No ) )
828   PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
829   PORT_DIPNAME( 0x80, 0x80, "Game Mode")                     PORT_DIPLOCATION("SW(C):8")
830   PORT_DIPSETTING(    0x80, "Game" )
831   PORT_DIPSETTING(    0x00, DEF_STR( Test ) )
832INPUT_PORTS_END
833
834
704835static const msm5205_interface msm5205_interface1 =
705836{
706837   m5205_int1,   /* interrupt function */
r19352r19353
735866   m_layer_scroll3x_offset = 64;
736867   m_sprite_base = 0x50c8;
737868   m_sprite_list_end_marker = 0x8000;
869   m_sprite_x_offset = 0;
738870
739871   save_item(NAME(m_sample_buffer1));
740872   save_item(NAME(m_sample_buffer2));
r19352r19353
757889   m_layer_scroll3x_offset = 0;
758890   m_sprite_base = 0x50c8;
759891   m_sprite_list_end_marker = 0xffff;
892   m_sprite_x_offset = 0;
760893}
761894
762895MACHINE_START_MEMBER(cps_state, cawingbl)
r19352r19353
774907   m_sprite_base = 0x1000;
775908}
776909
910MACHINE_START_MEMBER(cps_state, sf2mdt)
911{
912   UINT8 *ROM = memregion("soundcpu")->base();
913
914   membank("bank1")->configure_entries(0, 8, &ROM[0x10000], 0x4000);
915
916   m_maincpu = machine().device<cpu_device>("maincpu");
917   m_audiocpu = machine().device<cpu_device>("soundcpu");
918   m_msm_1 = machine().device<msm5205_device>("msm1");
919   m_msm_2 = machine().device<msm5205_device>("msm2");
920   
921   m_layer_enable_reg = 0x26;
922   m_layer_mask_reg[0] = 0x28;
923   m_layer_mask_reg[1] = 0x2a;
924   m_layer_mask_reg[2] = 0x2c;
925   m_layer_mask_reg[3] = 0x2e;
926   m_layer_scroll1x_offset = 0;
927   m_layer_scroll2x_offset = 0;
928   m_layer_scroll3x_offset = 0;
929   m_sprite_base = 0x1000;
930   m_sprite_list_end_marker = 0x8000;
931   m_sprite_x_offset = 3;
932
933   save_item(NAME(m_sample_buffer1));
934   save_item(NAME(m_sample_buffer2));
935   save_item(NAME(m_sample_select1));
936   save_item(NAME(m_sample_select2));
937}
938
777939MACHINE_RESET_MEMBER(cps_state,fcrash)
778940{
779941   m_sample_buffer1 = 0;
r19352r19353
8801042   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
8811043MACHINE_CONFIG_END
8821044
1045static MACHINE_CONFIG_START( sf2mdt, cps_state )
8831046
1047   /* basic machine hardware */
1048   MCFG_CPU_ADD("maincpu", M68000, 12000000)
1049   MCFG_CPU_PROGRAM_MAP(fcrash_map)
1050   MCFG_CPU_VBLANK_INT_DRIVER("screen", cps_state,  irq4_line_hold) /* triggers the sprite ram and scroll writes */
8841051
1052   MCFG_CPU_ADD("soundcpu", Z80, 3579545)
1053   MCFG_CPU_PROGRAM_MAP(sf2mdt_z80map)
1054
1055   MCFG_MACHINE_START_OVERRIDE(cps_state, sf2mdt)
1056   MCFG_MACHINE_RESET_OVERRIDE(cps_state,fcrash)
1057
1058   /* video hardware */
1059   MCFG_SCREEN_ADD("screen", RASTER)
1060   MCFG_SCREEN_REFRESH_RATE(60)
1061   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
1062   MCFG_SCREEN_SIZE(64*8, 32*8)
1063   MCFG_SCREEN_VISIBLE_AREA(8*8, (64-8)*8-1, 2*8, 30*8-1 )
1064   MCFG_SCREEN_UPDATE_DRIVER(cps_state, screen_update_fcrash)
1065   MCFG_SCREEN_VBLANK_DRIVER(cps_state, screen_eof_cps1)
1066
1067   MCFG_GFXDECODE(cps1)
1068   MCFG_PALETTE_LENGTH(4096)
1069
1070   MCFG_VIDEO_START_OVERRIDE(cps_state,cps1)
1071
1072   /* sound hardware */
1073   MCFG_SPEAKER_STANDARD_MONO("mono")
1074
1075   MCFG_YM2151_ADD("2151", 3579545)
1076   MCFG_SOUND_ROUTE(0, "mono", 0.35)
1077   MCFG_SOUND_ROUTE(1, "mono", 0.35)
1078
1079   /* has 2x MSM5205 instead of OKI6295 */
1080   MCFG_SOUND_ADD("msm1", MSM5205, 24000000/64)   /* ? */
1081   MCFG_SOUND_CONFIG(msm5205_interface1)
1082   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1083
1084   MCFG_SOUND_ADD("msm2", MSM5205, 24000000/64)   /* ? */
1085   MCFG_SOUND_CONFIG(msm5205_interface2)
1086   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1087MACHINE_CONFIG_END
1088
1089
8851090ROM_START( fcrash )
8861091   ROM_REGION( 0x400000, "maincpu", 0 )      /* 68000 code */
8871092   ROM_LOAD16_BYTE( "9.bin",  0x00000, 0x20000, CRC(c6854c91) SHA1(29f01cc65be5eaa3f86e99eebdd284104623abb0) )
r19352r19353
10291234   ROM_RELOAD(            0x10000, 0x20000 )
10301235ROM_END
10311236
1237/*
1238CPU
1239
12401x MC68000P12 (main)
12411x TPC1020AFN-084C (main)
12421x Z0840006PSC-Z80CPU (sound)
12431x YM2151 (sound)
12441x YM3012 (sound)
12452x M5205 (sound)
12462x LM324N (sound)
12471x TDA2003 (sound)
12481x oscillator 24.000000MHz
12491x oscillator 30.000MHz
1250ROMs
1251
125214x AM27C040 (1,3,6,7,8,9,10,11,12,13,14,15,16,17)
12533x TMS27C010A (2,4,5)
12543x PAL 16S20 (ic7,ic72, ic80) (read protected, not dumped)
12553x GAL20V8A (ic120, ic121, ic169) (read protected, not dumped)
1256
1257Note
1258
12591x JAMMA edge connector
12601x trimmer (volume)
12613x 8x2 switches dip
1262*/
1263
1264ROM_START( sf2mdt )
1265   ROM_REGION( 0x400000, "maincpu", 0 )      /* 68000 code */
1266   ROM_LOAD16_BYTE( "3.ic172",   0x000000, 0x80000, CRC(5301b41f) SHA1(6855a57b21e8c5d74e5cb18f9ce6af650d7fb422) )
1267   ROM_LOAD16_BYTE( "1.ic171",   0x000001, 0x80000, CRC(c1c803f6) SHA1(9fe18ae2553a63d8e4dcc20bafd5a4634f8b93c4) )
1268   ROM_LOAD16_BYTE( "4.ic176",   0x100000, 0x20000, CRC(1073b7b6) SHA1(81ca1eab65ceac69520584bb23a684ccb9d92f89) )
1269   ROM_LOAD16_BYTE( "2.ic175",   0x100001, 0x20000, CRC(924c6ce2) SHA1(676a912652bd75da5087f0c7eae047b7681a993c) )
1270
1271   ROM_REGION( 0x600000, "gfx", 0 ) /* rearranged in init */
1272   ROMX_LOAD( "7.ic90",    0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) , ROM_GROUPWORD | ROM_SKIP(6) )
1273   ROMX_LOAD( "10.ic88",   0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) , ROM_GROUPWORD | ROM_SKIP(6) )
1274   ROMX_LOAD( "13.ic89",   0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) , ROM_GROUPWORD | ROM_SKIP(6) )
1275   ROMX_LOAD( "16.ic87",   0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) , ROM_GROUPWORD | ROM_SKIP(6) )
1276   ROMX_LOAD( "6.ic91",    0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) , ROM_GROUPWORD | ROM_SKIP(6) )
1277   ROMX_LOAD( "9.ic93",    0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) , ROM_GROUPWORD | ROM_SKIP(6) )
1278   ROMX_LOAD( "12.ic92",   0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) , ROM_GROUPWORD | ROM_SKIP(6) )
1279   ROMX_LOAD( "15.ic94",   0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) , ROM_GROUPWORD | ROM_SKIP(6) )
1280   ROMX_LOAD( "8.ic86",    0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) , ROM_GROUPWORD | ROM_SKIP(6) )
1281   ROMX_LOAD( "11.ic84",   0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) , ROM_GROUPWORD | ROM_SKIP(6) )
1282   ROMX_LOAD( "14.ic85",   0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) , ROM_GROUPWORD | ROM_SKIP(6) )
1283   ROMX_LOAD( "17.ic83",   0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) , ROM_GROUPWORD | ROM_SKIP(6) )
1284
1285   ROM_REGION( 0x30000, "soundcpu", 0 ) /* Sound program + samples  */
1286   ROM_LOAD( "5.ic26",    0x00000, 0x20000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
1287   ROM_RELOAD(            0x10000, 0x20000 )
1288ROM_END
1289
1290ROM_START( sf2mdta )
1291/* unconfirmed if working on real hardware, pf4 is a bad dump (bad pin) */
1292   ROM_REGION( 0x400000, "maincpu", 0 )      /* 68000 code */
1293   ROM_LOAD16_BYTE( "3.mdta", 0x000000, 0x80000, CRC(9f544ef4) SHA1(f784809e59a5fcabd6d15d3f1c36250a5528c9f8) )
1294   ROM_LOAD16_BYTE( "5.mdta", 0x000001, 0x80000, CRC(d76d6621) SHA1(aa9cea9ddace212a7b3c535b8f6e3fbc50da1f94) )
1295   ROM_LOAD16_BYTE( "2.mdta", 0x100000, 0x20000, CRC(74844192) SHA1(99cd546c78cce7f632007af454d8a55eddb6b19b) )
1296   ROM_LOAD16_BYTE( "4.mdta", 0x100001, 0x20000, CRC(bd98ff15) SHA1(ed902d949b0b5c5beaaea78a4b418ffa6db9e1df) )
1297
1298   ROM_REGION( 0x600000, "gfx", 0 )
1299   ROMX_LOAD( "pf4 sh058.ic89", 0x000000, 0x80000, BAD_DUMP CRC(40fdf624) SHA1(cb928602744bf36e6851527f00d90da29de751e6), ROM_GROUPWORD | ROM_SKIP(6) )
1300   ROM_CONTINUE(                0x000002, 0x80000)
1301   ROMX_LOAD( "pf7 sh072.ic92", 0x000004, 0x80000, CRC(fb78022e) SHA1(b8974387056dd52db96b01cc4648edc814398c7e), ROM_GROUPWORD | ROM_SKIP(6) )
1302   ROM_CONTINUE(                0x000006, 0x80000)
1303   ROMX_LOAD( "pf5 sh036.ic90", 0x200000, 0x80000, CRC(0a6be48b) SHA1(b7e72c94d4e3eb4a6bba6608d9b9a093c8901ad9), ROM_GROUPWORD | ROM_SKIP(6) )
1304   ROM_CONTINUE(                0x200002, 0x80000)
1305   ROMX_LOAD( "pf8 sh074.ic93", 0x200004, 0x80000, CRC(6258c7cf) SHA1(4cd7519245c0aa816934a43e6743160f715d7dc2), ROM_GROUPWORD | ROM_SKIP(6) )
1306   ROM_CONTINUE(                0x200006, 0x80000)
1307   ROMX_LOAD( "pf6 sh070.ic88", 0x400000, 0x80000, CRC(9b5b09d7) SHA1(698a6aab41e495bd0c37a19aee16a84f04d15797), ROM_GROUPWORD | ROM_SKIP(6) )
1308   ROM_CONTINUE(                0x400002, 0x80000)
1309   ROMX_LOAD( "pf9 sh001.ic91", 0x400004, 0x80000, CRC(9f25090e) SHA1(12ff0431ef6550db446985c8914ac7d78eec6b6d), ROM_GROUPWORD | ROM_SKIP(6) )
1310   ROM_CONTINUE(                0x400006, 0x80000)
1311
1312   ROM_REGION( 0x30000, "soundcpu", 0 ) /* Sound program + samples  */
1313   ROM_LOAD( "1.ic28",    0x00000, 0x20000, CRC(d5bee9cc) SHA1(e638cb5ce7a22c18b60296a7defe8b03418da56c) )
1314   ROM_RELOAD(            0x10000, 0x20000 )
1315ROM_END
1316
10321317// 24mhz crystal (maincpu), 28.322 crystal (video), 3.579545 crystal (sound)
10331318// sound cpu is (239 V 249521 VC5006 KABUKI DL-030P-110V) - recycled Kabuki Z80 from genuine Capcom HW?
10341319// 3x8 dsws
r19352r19353
10971382   DRIVER_INIT_CALL(cps1);
10981383}
10991384
1385DRIVER_INIT_MEMBER(cps_state, sf2mdt)
1386{
1387   int i;
1388   UINT32 gfx_size = machine().root_device().memregion( "gfx" )->bytes();
1389   UINT8 *rom = machine().root_device().memregion( "gfx" )->base();
1390   UINT8 tmp;
11001391
1392   for( i = 0; i < gfx_size; i += 8 )
1393   {
1394      tmp = rom[i + 1];
1395      rom[i + 1] = rom[i + 4];
1396      rom[i + 4] = tmp;
1397      tmp = rom[i + 3];
1398      rom[i + 3] = rom[i + 6];
1399      rom[i + 6] = tmp;
1400   }
1401   
1402   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x70c018, 0x70c01f, read16_delegate(FUNC(cps_state::cps1_dsw_r),this));
1403   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x708000, 0x708fff, write16_delegate(FUNC(cps_state::sf2mdt_layer_w),this));
1404   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x70c000, 0x70c001, "IN1");
1405   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_port(0x70c008, 0x70c009, "IN2");
1406   
1407   /* bootleg sprite ram */
1408   m_bootleg_sprite_ram = (UINT16*)machine().device("maincpu")->memory().space(AS_PROGRAM).install_ram(0x700000, 0x703fff);
1409   machine().device("maincpu")->memory().space(AS_PROGRAM).install_ram(0x704000, 0x707fff, m_bootleg_sprite_ram); /* both of these need to be mapped */
1410   machine().device("maincpu")->memory().space(AS_PROGRAM).install_write_handler(0x70c106, 0x70c107, write16_delegate(FUNC(cps_state::cawingbl_soundlatch_w),this));
1411   
1412   m_bootleg_work_ram = (UINT16*)machine().device("maincpu")->memory().space(AS_PROGRAM).install_ram(0xff0000, 0xffffff);
1413   
1414   machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x800030, 0x800031); /* coin lockout doesn't work (unmap it) */
1415
1416   DRIVER_INIT_CALL(cps1);
1417}
1418
1419
11011420GAME( 1990, fcrash,    ffight,  fcrash,    fcrash,   cps_state, cps1,     ROT0,   "bootleg (Playmark)", "Final Crash (bootleg of Final Fight)", GAME_SUPPORTS_SAVE )
11021421GAME( 1991, kodb,      kod,     kodb,      kodb,     cps_state, kodb,     ROT0,   "bootleg (Playmark)", "The King of Dragons (bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )   // 910731  "ETC"
11031422GAME( 1990, cawingbl,  cawing,  cawingbl,  cawingbl, cps_state, cawingbl, ROT0,   "bootleg", "Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 1)", GAME_SUPPORTS_SAVE )
11041423GAME( 1990, cawingb2,  cawing,  cawingbl,  cawingbl, cps_state, cawingbl, ROT0,   "bootleg", "Carrier Air Wing (bootleg with 2xYM2203 + 2xMSM205 set 2)", GAME_SUPPORTS_SAVE )
1424GAME( 1992, sf2mdt,    sf2ce,   sf2mdt,    sf2mdt,   cps_state, sf2mdt,   ROT0,   "bootleg", "Street Fighter II': Magic Delta Turbo (bootleg, set 1)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )   // 920313 - based on (heavily modified) World version
1425GAME( 1992, sf2mdta,   sf2ce,   sf2mdt,    sf2mdt,   cps_state, sf2mdt,   ROT0,   "bootleg", "Street Fighter II': Magic Delta Turbo (bootleg, set 2)", GAME_NOT_WORKING | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )   // 920313 - based on World version
11051426GAME( 199?, sgyxz,     wof,     sgyxz,     fcrash,   cps_state, cps1,     ROT0,   "bootleg (All-In Electronic)", "Warriors of Fate ('sgyxz' bootleg)", GAME_NOT_WORKING | GAME_NO_SOUND )
trunk/src/mame/includes/cps1.h
r19352r19353
148148   int          m_layer_scroll3x_offset;
149149   int          m_sprite_base;
150150   int          m_sprite_list_end_marker;
151   int          m_sprite_x_offset;
152   UINT16       *m_bootleg_sprite_ram;
153   UINT16       *m_bootleg_work_ram;
151154
152155   /* devices */
153156   cpu_device *m_maincpu;
r19352r19353
232235   DECLARE_MACHINE_RESET(fcrash);
233236   DECLARE_MACHINE_START(kodb);
234237   DECLARE_MACHINE_START(cawingbl);
238   DECLARE_MACHINE_START(sf2mdt);
235239   DECLARE_WRITE16_MEMBER(kodb_layer_w);
236240   DECLARE_WRITE16_MEMBER(cawingbl_soundlatch_w);
241   DECLARE_WRITE16_MEMBER(sf2mdt_layer_w);
237242   UINT32 screen_update_fcrash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
238243};
239244

Previous 199869 Revisions Next


© 1997-2024 The MAME Team