1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood
3 
4 /*
5     CPS1 single board bootlegs (thought to be produced by "Playmark")
6 
7     sound hardware: Z80, YM2151, 2x oki MSM5205 (instead of oki M6295)
8 
9     Games known to use this h/w:
10     Captain Commando                       911014 ETC
11     Knights of the Round                   911127 ETC
12     Street Fighter II: The World Warrior   910204 ETC
13     Street Fighter II': Champion Edition   920313 ETC    * this might be hacked WW (uses WW portraits on character select screen)
14     Street Fighter II': Magic Delta Turbo  920313 ETC
15     The King of Dragons                    ?  (No dump)
16 
17     Generally the sound quality is quite poor compared to official Capcom hardware (consequence of M6295->2xM5205 conversion).
18     Most noticeable is missing percussion backing of music tracks and no fade in/out effect.
19     Often the 2x M5205 are clocked with a 400KHz xtal (should really be 384KHz) so pitch of samples is slightly out as well.
20     The sf2 sets seem to have quite a few missing samples?
21 
22 Status of each game:
23 --------------------
24 sf2mdt, sf2mdtb: OK.
25 sf2mdta, sf2ceb: Scroll 2X has strange 0x200 writes that cause missing fighters' portraits at the vs. screen
26                  and glitched backgrounds during fights. Masking them out seems a hack.
27 captcommb2:      OK.
28 knightsb3:       OK.
29 
30 */
31 
32 #include "emu.h"
33 #include "includes/fcrash.h"
34 
35 #include "cpu/z80/z80.h"
36 #include "cpu/m68000/m68000.h"
37 #include "sound/msm5205.h"
38 #include "sound/ym2151.h"
39 #include "speaker.h"
40 
41 
42 #define CPS1_ROWSCROLL_OFFS  (0x20/2)    /* base of row scroll offsets in other RAM */
43 #define CODE_SIZE            0x400000
44 
45 
46 class cps1bl_5205_state : public fcrash_state
47 {
48 public:
cps1bl_5205_state(const machine_config & mconfig,device_type type,const char * tag)49 	cps1bl_5205_state(const machine_config &mconfig, device_type type, const char *tag)
50 		: fcrash_state(mconfig, type, tag)
51 		, m_msm_mux(*this, "msm_mux%u", 1)
52 	{ }
53 
54 	void captcommb2(machine_config &config);
55 	void knightsb(machine_config &config);
56 	void sf2b(machine_config &config);
57 	void sf2mdt(machine_config &config);
58 
59 	void init_captcommb2();
60 	void init_knightsb();
61 	void init_sf2b();
62 	void init_sf2mdt();
63 	void init_sf2mdta();
64 	void init_sf2mdtb();
65 
66 private:
67 	DECLARE_MACHINE_START(captcommb2);
68 	DECLARE_MACHINE_RESET(captcommb2);
69 	DECLARE_MACHINE_START(sf2mdt);
70 
71 	void captcommb2_layer_w(offs_t offset, uint16_t data);
72 	void captcommb2_soundlatch_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
73 	uint8_t captcommb2_soundlatch_r();
74 	void captcommb2_snd_bankswitch_w(uint8_t data);
75 	DECLARE_WRITE_LINE_MEMBER(captcommb2_mux_select_w);
76 	void knightsb_layer_w(offs_t offset, uint16_t data);
77 	void sf2b_layer_w(offs_t offset, uint16_t data);
78 	void sf2mdt_layer_w(offs_t offset, uint16_t data);
79 	void sf2mdt_soundlatch_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
80 	void sf2mdta_layer_w(offs_t offset, uint16_t data);
81 
82 	void captcommb2_map(address_map &map);
83 	void sf2b_map(address_map &map);
84 	void sf2mdt_map(address_map &map);
85 	void captcommb2_z80map(address_map &map);
86 
87 	bool m_captcommb2_mux_toggle;
88 
89 	optional_device_array<ls157_device, 2> m_msm_mux;
90 };
91 
92 class captcommb2_state : public cps1bl_5205_state
93 {
94 public:
captcommb2_state(const machine_config & mconfig,device_type type,const char * tag)95 	captcommb2_state(const machine_config &mconfig, device_type type, const char *tag)
96 		: cps1bl_5205_state(mconfig, type, tag)
97 	{ }
98 
99 private:
100 	void bootleg_render_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
101 };
102 
103 
captcommb2_layer_w(offs_t offset,uint16_t data)104 void cps1bl_5205_state::captcommb2_layer_w(offs_t offset, uint16_t data)
105 {
106 	switch (offset)
107 	{
108 	case 0x00:
109 		m_cps_a_regs[0x0e / 2] = data;  // scroll1 y
110 		break;
111 	case 0x01:
112 		m_cps_a_regs[0x0c / 2] = data;  // scroll1 x
113 		break;
114 	case 0x02:
115 		m_cps_a_regs[0x12 / 2] = data;  // scroll2 y
116 		m_cps_a_regs[CPS1_ROWSCROLL_OFFS] = data;  // probably don't need this
117 		break;
118 	case 0x03:
119 		m_cps_a_regs[0x10 / 2] = data;  // scroll2 x
120 		break;
121 	case 0x04:
122 		m_cps_a_regs[0x16 / 2] = data;  // scroll3 y
123 		break;
124 	case 0x05:
125 		m_cps_a_regs[0x14 / 2] = data;  // scroll3 x
126 		break;
127 	case 0x06:
128 		m_cps_b_regs[m_layer_enable_reg / 2] = data;
129 		m_cps_a_regs[0x02 / 2] = 0x9000 + ((data & 0x1f) << 5);  // scroll1 base
130 		break;
131 	case 0x10:
132 		m_cps_b_regs[m_layer_mask_reg[1] / 2] = data;
133 		break;
134 	case 0x11:
135 		m_cps_b_regs[m_layer_mask_reg[2] / 2] = (data & 0x8000) ? data & 0x7fff : data;
136 		m_cps_b_regs[m_layer_mask_reg[3] / 2] = (data & 0x8000) ? 0x7fff : 0x07ff;
137 		break;
138 	}
139 }
140 
captcommb2_soundlatch_w(offs_t offset,uint16_t data,uint16_t mem_mask)141 void cps1bl_5205_state::captcommb2_soundlatch_w(offs_t offset, uint16_t data, uint16_t mem_mask)
142 {
143 	if (ACCESSING_BITS_0_7)
144 	{
145 		m_soundlatch->write(data & 0xff);
146 		m_audiocpu->set_input_line(0, ASSERT_LINE);
147 	}
148 }
149 
captcommb2_soundlatch_r()150 uint8_t cps1bl_5205_state::captcommb2_soundlatch_r()
151 {
152 	uint8_t latch = m_soundlatch->read();
153 	m_audiocpu->set_input_line(0, CLEAR_LINE);
154 	return latch;
155 }
156 
captcommb2_snd_bankswitch_w(uint8_t data)157 void cps1bl_5205_state::captcommb2_snd_bankswitch_w(uint8_t data)
158 {
159 	m_msm_1->reset_w(BIT(data, 5));
160 	m_msm_2->reset_w(BIT(data, 4));
161 	membank("bank1")->set_entry(data & 0x0f);
162 }
163 
WRITE_LINE_MEMBER(cps1bl_5205_state::captcommb2_mux_select_w)164 WRITE_LINE_MEMBER(cps1bl_5205_state::captcommb2_mux_select_w)
165 {
166 	// toggle both mux select pins (and fire /nmi)
167 	// vck halved by flipflop IC186  ~2kHz
168 	if (!state)
169 		return;
170 
171 	m_captcommb2_mux_toggle = !m_captcommb2_mux_toggle;
172 	m_msm_mux[0]->select_w(m_captcommb2_mux_toggle);
173 	m_msm_mux[1]->select_w(m_captcommb2_mux_toggle);
174 	m_audiocpu->set_input_line(INPUT_LINE_NMI, m_captcommb2_mux_toggle);
175 }
176 
knightsb_layer_w(offs_t offset,uint16_t data)177 void cps1bl_5205_state::knightsb_layer_w(offs_t offset, uint16_t data)
178 {
179 	switch (offset)
180 	{
181 	case 0x00:
182 		m_cps_a_regs[0x0e / 2] = data;
183 		break;
184 	case 0x01:
185 		m_cps_a_regs[0x0c / 2] = data;
186 		break;
187 	case 0x02:
188 		m_cps_a_regs[0x12 / 2] = data;
189 		m_cps_a_regs[CPS1_ROWSCROLL_OFFS] = data; /* row scroll start */
190 		break;
191 	case 0x03:
192 		m_cps_a_regs[0x10 / 2] = data;
193 		break;
194 	case 0x04:
195 		m_cps_a_regs[0x16 / 2] = data;
196 		break;
197 	case 0x05:
198 		m_cps_a_regs[0x14 / 2] = data;
199 		break;
200 	case 0x06:
201 		{
202 			switch (data)
203 			{
204 			case 0x0000:
205 			case 0x001f:
206 			case 0x00ff:
207 			case 0x07ff:
208 				data = 0x12f2;
209 				break;
210 			case 0x2000:
211 				data = 0x06c0;
212 				break;
213 			case 0x5800:
214 			case 0x5f00:
215 				data = 0x12c0;
216 				break;
217 			case 0x80ff:
218 			case 0x87ff:
219 				data = 0x1380;
220 				break;
221 			case 0xa000:
222 				data = 0x24c0;
223 				break;
224 			case 0xd800:
225 				data = 0x1380;
226 				break;
227 			default:
228 				printf ("Unknown control word = %X\n",data);
229 				data = 0x12c0;
230 			}
231 		m_cps_b_regs[m_layer_enable_reg / 2] = data;
232 		break;
233 		}
234 	case 0x10:
235 		m_cps_b_regs[m_layer_mask_reg[1] / 2] = data;
236 		break;
237 	case 0x11:
238 		m_cps_b_regs[m_layer_mask_reg[2] / 2] = data;
239 		break;
240 	case 0x12:
241 		m_cps_b_regs[m_layer_mask_reg[3] / 2] = data;
242 	}
243 }
244 
sf2b_layer_w(offs_t offset,uint16_t data)245 void cps1bl_5205_state::sf2b_layer_w(offs_t offset, uint16_t data)
246 {
247 	switch (offset)
248 	{
249 	case 0x06:
250 		m_cps_a_regs[0x0c / 2] = data + 0xffbe; /* scroll 1x */
251 		break;
252 	case 0x07:
253 		m_cps_a_regs[0x0e / 2] = data; /* scroll 1y */
254 		break;
255 	case 0x08:
256 		m_cps_a_regs[0x14 / 2] = data + 0xffce; /* scroll 3x */
257 		break;
258 	case 0x09:
259 		m_cps_a_regs[0x12 / 2] = data; /* scroll 2y */
260 		m_cps_a_regs[CPS1_ROWSCROLL_OFFS] = data; /* row scroll start */
261 		break;
262 	case 0x0a:
263 		m_cps_a_regs[0x10 / 2] = data + 0xffce; /* scroll 2x */
264 		break;
265 	case 0x0b:
266 		m_cps_a_regs[0x16 / 2] = data; /* scroll 3y */
267 		break;
268 	case 0x26:
269 		m_cps_b_regs[m_layer_enable_reg / 2] = data;
270 		break;
271 	default:
272 		printf("%X:%X ",offset,data);
273 	}
274 }
275 
sf2mdt_layer_w(offs_t offset,uint16_t data)276 void cps1bl_5205_state::sf2mdt_layer_w(offs_t offset, uint16_t data)
277 {
278 	/* 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
279 	the scroll layers aren't buttery smooth, due to the lack of using the row scroll address tables in the rendering code, this is also
280 	supported by the fact that the game doesn't write the table address anywhere */
281 
282 	switch (offset)
283 	{
284 	case 0x06:
285 		m_cps_a_regs[0x14 / 2] = data + 0xffce; /* scroll 3x */
286 		break;
287 	case 0x07:
288 		m_cps_a_regs[0x16 / 2] = data; /* scroll 3y */
289 		break;
290 	case 0x08:
291 		m_cps_a_regs[0x10 / 2] = data + 0xffce; /* scroll 2x */
292 		break;
293 	case 0x09:
294 		m_cps_a_regs[0x0c / 2] = data + 0xffca; /* scroll 1x */
295 		break;
296 	case 0x0a:
297 		m_cps_a_regs[0x12 / 2] = data; /* scroll 2y */
298 		m_cps_a_regs[CPS1_ROWSCROLL_OFFS] = data; /* row scroll start */
299 		break;
300 	case 0x0b:
301 		m_cps_a_regs[0x0e / 2] = data; /* scroll 1y */
302 		break;
303 	case 0x26:
304 		m_cps_b_regs[m_layer_enable_reg / 2] = data;
305 	}
306 }
307 
sf2mdt_soundlatch_w(offs_t offset,uint16_t data,uint16_t mem_mask)308 void cps1bl_5205_state::sf2mdt_soundlatch_w(offs_t offset, uint16_t data, uint16_t mem_mask)
309 {
310 	if (ACCESSING_BITS_8_15)
311 	{
312 		m_soundlatch->write(data >> 8);
313 		m_audiocpu->set_input_line(0, ASSERT_LINE);
314 	}
315 }
316 
sf2mdta_layer_w(offs_t offset,uint16_t data)317 void cps1bl_5205_state::sf2mdta_layer_w(offs_t offset, uint16_t data)
318 {
319 	/* 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
320 	the scroll layers aren't buttery smooth, due to the lack of using the row scroll address tables in the rendering code, this is also
321 	supported by the fact that the game doesn't write the table address anywhere */
322 
323 	switch (offset)
324 	{
325 	case 0x06:
326 		m_cps_a_regs[0x0c / 2] = data + 0xffbe; /* scroll 1x */
327 		break;
328 	case 0x07:
329 		m_cps_a_regs[0x0e / 2] = data; /* scroll 1y */
330 		break;
331 	case 0x08:
332 		m_cps_a_regs[0x14 / 2] = data + 0xffce; /* scroll 3x */
333 		break;
334 	case 0x09:
335 		m_cps_a_regs[0x12 / 2] = data; /* scroll 2y */
336 		m_cps_a_regs[CPS1_ROWSCROLL_OFFS] = data; /* row scroll start */
337 		break;
338 	case 0x0a:
339 		m_cps_a_regs[0x10 / 2] = 0xffce; /* scroll 2x */
340 		break;
341 	case 0x0b:
342 		m_cps_a_regs[0x16 / 2] = data; /* scroll 3y */
343 		break;
344 	case 0x26:
345 		m_cps_b_regs[m_layer_enable_reg / 2] = data;
346 	}
347 }
348 
349 
captcommb2(machine_config & config)350 void cps1bl_5205_state::captcommb2(machine_config &config)
351 {
352 	// xtals: 30MHz, 24MHz, 400KHz
353 	M68000(config, m_maincpu, 24000000 / 2);   // 12MHz measured on pcb
354 	m_maincpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::captcommb2_map);
355 	m_maincpu->set_vblank_int("screen", FUNC(cps1bl_5205_state::cps1_interrupt));
356 	m_maincpu->set_addrmap(m68000_base_device::AS_CPU_SPACE, &cps1bl_5205_state::cpu_space_map);
357 
358 	Z80(config, m_audiocpu, 30000000 / 8);  // 3.75MHz measured on pcb
359 	m_audiocpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::captcommb2_z80map);
360 
361 	MCFG_MACHINE_START_OVERRIDE(cps1bl_5205_state, captcommb2)
362 	MCFG_MACHINE_RESET_OVERRIDE(cps1bl_5205_state, captcommb2)
363 
364 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
365 	m_screen->set_raw(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART);
366 	m_screen->set_screen_update(FUNC(cps1bl_5205_state::screen_update_fcrash));
367 	m_screen->screen_vblank().set(FUNC(cps1bl_5205_state::screen_vblank_cps1));
368 	m_screen->set_palette(m_palette);
369 
370 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1);
371 	PALETTE(config, m_palette, palette_device::BLACK).set_entries(0xc00);
372 
373 	SPEAKER(config, "mono").front_center();
374 	GENERIC_LATCH_8(config, m_soundlatch);
375 
376 	ym2151_device &ym2151(YM2151(config, "2151", 30000000 / 8));  // 3.75MHz measured on pcb
377 	// IRQ pin not used
378 	ym2151.add_route(0, "mono", 0.35);
379 	ym2151.add_route(1, "mono", 0.35);
380 
381 	LS157(config, m_msm_mux[0], 0);
382 	m_msm_mux[0]->out_callback().set("msm1", FUNC(msm5205_device::data_w));
383 
384 	LS157(config, m_msm_mux[1], 0);
385 	m_msm_mux[1]->out_callback().set("msm2", FUNC(msm5205_device::data_w));
386 
387 	MSM5205(config, m_msm_1, 400000);  // 400kHz measured on pcb
388 	m_msm_1->vck_callback().set(FUNC(cps1bl_5205_state::captcommb2_mux_select_w));
389 	m_msm_1->vck_callback().append(m_msm_2, FUNC(msm5205_device::vclk_w));
390 	m_msm_1->set_prescaler_selector(msm5205_device::S96_4B);
391 	m_msm_1->add_route(ALL_OUTPUTS, "mono", 0.25);
392 
393 	MSM5205(config, m_msm_2, 400000);
394 	m_msm_2->set_prescaler_selector(msm5205_device::SEX_4B);
395 	m_msm_2->add_route(ALL_OUTPUTS, "mono", 0.25);
396 }
397 
knightsb(machine_config & config)398 void cps1bl_5205_state::knightsb(machine_config &config)
399 {
400 	captcommb2(config);
401 	m_msm_1->reset_routes().add_route(ALL_OUTPUTS, "mono", 0.5);
402 	m_msm_2->reset_routes().add_route(ALL_OUTPUTS, "mono", 0.5);
403 }
404 
sf2b(machine_config & config)405 void cps1bl_5205_state::sf2b(machine_config &config)
406 {
407 	sf2mdt(config);
408 	m_maincpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::sf2b_map);
409 }
410 
sf2mdt(machine_config & config)411 void cps1bl_5205_state::sf2mdt(machine_config &config)
412 {
413 	/* basic machine hardware */
414 	M68000(config, m_maincpu, 12000000);
415 	m_maincpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::sf2mdt_map);
416 	m_maincpu->set_vblank_int("screen", FUNC(cps1bl_5205_state::irq4_line_hold)); /* triggers the sprite ram and scroll writes */
417 
418 	Z80(config, m_audiocpu, 3750000);
419 	m_audiocpu->set_addrmap(AS_PROGRAM, &cps1bl_5205_state::captcommb2_z80map);
420 
421 	MCFG_MACHINE_START_OVERRIDE(cps1bl_5205_state, sf2mdt)
422 	MCFG_MACHINE_RESET_OVERRIDE(cps1bl_5205_state, captcommb2)
423 
424 	/* video hardware */
425 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
426 	m_screen->set_raw(CPS_PIXEL_CLOCK, CPS_HTOTAL, CPS_HBEND, CPS_HBSTART, CPS_VTOTAL, CPS_VBEND, CPS_VBSTART);
427 	m_screen->set_screen_update(FUNC(cps1bl_5205_state::screen_update_fcrash));
428 	m_screen->screen_vblank().set(FUNC(cps1bl_5205_state::screen_vblank_cps1));
429 	m_screen->set_palette(m_palette);
430 
431 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_cps1);
432 	PALETTE(config, m_palette, palette_device::BLACK).set_entries(4096);
433 
434 	/* sound hardware */
435 	SPEAKER(config, "mono").front_center();
436 
437 	GENERIC_LATCH_8(config, m_soundlatch);
438 
439 	YM2151(config, "2151", 3750000).add_route(0, "mono", 0.35).add_route(1, "mono", 0.35);
440 
441 	LS157(config, m_msm_mux[0], 0);
442 	m_msm_mux[0]->out_callback().set("msm1", FUNC(msm5205_device::data_w));
443 
444 	LS157(config, m_msm_mux[1], 0);
445 	m_msm_mux[1]->out_callback().set("msm2", FUNC(msm5205_device::data_w));
446 
447 	MSM5205(config, m_msm_1, 400000);  // 400kHz ?
448 	m_msm_1->vck_callback().set(FUNC(cps1bl_5205_state::captcommb2_mux_select_w));
449 	m_msm_1->vck_callback().append(m_msm_2, FUNC(msm5205_device::vclk_w));
450 	m_msm_1->set_prescaler_selector(msm5205_device::S96_4B);
451 	m_msm_1->add_route(ALL_OUTPUTS, "mono", 0.25);
452 
453 	MSM5205(config, m_msm_2, 400000);
454 	m_msm_2->set_prescaler_selector(msm5205_device::SEX_4B);
455 	m_msm_2->add_route(ALL_OUTPUTS, "mono", 0.25);
456 }
457 
458 
captcommb2_map(address_map & map)459 void cps1bl_5205_state::captcommb2_map(address_map &map)
460 {
461 	map(0x000000, 0x3fffff).rom();
462 	map(0x800000, 0x800001).portr("IN1");
463 	map(0x800002, 0x800003).portr("IN2"); // player 3 + 4 inputs
464 	map(0x800004, 0x800005).nopw();       // writes 00 here
465 	map(0x800006, 0x800007).w(FUNC(cps1bl_5205_state::captcommb2_soundlatch_w));
466 	map(0x800018, 0x80001f).r(FUNC(cps1bl_5205_state::cps1_dsw_r));
467 	map(0x800030, 0x800031).nopw();       // coinctrl
468 	map(0x800100, 0x80013f).ram().share("cps_a_regs");
469 	map(0x800140, 0x80017f).ram().share("cps_b_regs");
470 	map(0x800180, 0x800181).nopw();       // original sound latch, not used
471 	map(0x880000, 0x880001).nopw();       // ?
472 	map(0x900000, 0x92ffff).ram().w(FUNC(cps1bl_5205_state::cps1_gfxram_w)).share("gfxram");
473 	map(0x980000, 0x980023).w(FUNC(cps1bl_5205_state::captcommb2_layer_w));
474 	//  0x990000, 0x993fff  spriteram
475 	//  0x990000, 0x990001  sprite buffer flip
476 	//  0x991000, 0x9917ff  sprite buffer #1
477 	//  0x993000, 0x9937ff  sprite buffer #2
478 	map(0xff0000, 0xffffff).ram().share("mainram");
479 }
480 
sf2b_map(address_map & map)481 void cps1bl_5205_state::sf2b_map(address_map &map)
482 {
483 	map(0x000000, 0x3fffff).rom();
484 	map(0x708100, 0x7081ff).w(FUNC(cps1bl_5205_state::sf2b_layer_w));
485 	map(0x70c000, 0x70c001).portr("IN1");
486 	map(0x70c008, 0x70c009).portr("IN2");
487 	map(0x70c018, 0x70c01f).r(FUNC(cps1bl_5205_state::cps1_hack_dsw_r));
488 	map(0x70c106, 0x70c107).w(FUNC(cps1bl_5205_state::sf2mdt_soundlatch_w));
489 	map(0x70d000, 0x70d001).nopw(); // writes FFFF
490 	//map(0x800030, 0x800031).w(FUNC(cps1bl_5205_state::cps1_coinctrl_w));
491 	map(0x800100, 0x80013f).ram().share("cps_a_regs");  /* CPS-A custom */
492 	map(0x800140, 0x80017f).rw(FUNC(cps1bl_5205_state::cps1_cps_b_r), FUNC(cps1bl_5205_state::cps1_cps_b_w)).share("cps_b_regs");  /* CPS-B custom */
493 	map(0x900000, 0x92ffff).ram().w(FUNC(cps1bl_5205_state::cps1_gfxram_w)).share("gfxram");
494 	map(0xff0000, 0xffffff).ram().share("mainram");
495 }
496 
sf2mdt_map(address_map & map)497 void cps1bl_5205_state::sf2mdt_map(address_map &map)
498 {
499 	map(0x000000, 0x3fffff).rom();
500 	map(0x708100, 0x7081ff).w(FUNC(cps1bl_5205_state::sf2mdta_layer_w));
501 	map(0x70c000, 0x70c001).portr("IN1");
502 	map(0x70c008, 0x70c009).portr("IN2");
503 	map(0x70c018, 0x70c01f).r(FUNC(cps1bl_5205_state::cps1_hack_dsw_r));
504 	map(0x70c106, 0x70c107).w(FUNC(cps1bl_5205_state::sf2mdt_soundlatch_w));
505 	map(0x70d000, 0x70d001).nopw(); // writes FFFF
506 	//map(0x800030, 0x800031).w(FUNC(cps1bl_5205_state::cps1_coinctrl_w));
507 	map(0x800100, 0x80013f).ram().share("cps_a_regs");  /* CPS-A custom */
508 	map(0x800140, 0x80017f).ram().share("cps_b_regs");  /* CPS-B custom */
509 	map(0x900000, 0x92ffff).ram().w(FUNC(cps1bl_5205_state::cps1_gfxram_w)).share("gfxram");
510 	map(0xff0000, 0xffffff).ram().share("mainram");
511 }
512 
513 /*
514  *  z80 mapper IC7 GAL16V8 + IC19 74LS138
515  *  138 pin 15  D000-D7FF R/W   ram
516  *  138 pin 14  D800-DBFF R/W   ym
517  *  138 pin 13  -               ?  pin not used
518  *  138 pin 12  DC00-DFFF R/W   read sound latch, clear /int
519  *  138 pin 11  E800-EBFF W     slave 5205
520  *  138 pin 10  E000-E3FF W     latch bank and 5202 reset lines
521  *  138 pin 9   E400-E7FF W     master 5205
522  *  138 pin 7   EC00-EFFF W     ?  pin not used
523  *
524  *  gal pin 15  0000-BFFF R     rom
525  */
captcommb2_z80map(address_map & map)526 void cps1bl_5205_state::captcommb2_z80map(address_map &map)
527 {
528 	map(0x0000, 0x7fff).rom();
529 	map(0x8000, 0xbfff).bankr("bank1");
530 	map(0xd000, 0xd7ff).ram();
531 	map(0xd800, 0xd801).rw("2151", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
532 	map(0xdc00, 0xdc00).r(FUNC(cps1bl_5205_state::captcommb2_soundlatch_r));   // clear /int here
533 	map(0xe000, 0xe000).w(FUNC(cps1bl_5205_state::captcommb2_snd_bankswitch_w));
534 	map(0xe400, 0xe400).w("msm_mux1", FUNC(ls157_device::ba_w));      // latch data for mux 1
535 	map(0xe800, 0xe800).w("msm_mux2", FUNC(ls157_device::ba_w));      // latch data for mux 2
536 }
537 
538 
MACHINE_START_MEMBER(cps1bl_5205_state,captcommb2)539 MACHINE_START_MEMBER(cps1bl_5205_state, captcommb2)
540 {
541 	membank("bank1")->configure_entries(0, 16, memregion("audiocpu")->base() + 0x10000, 0x4000);
542 
543 	m_layer_enable_reg = 0x28;
544 	m_layer_mask_reg[0] = 0x26;
545 	m_layer_mask_reg[1] = 0x24;
546 	m_layer_mask_reg[2] = 0x22;
547 	m_layer_mask_reg[3] = 0x20;
548 	m_layer_scroll1x_offset = 0x3e;
549 	m_layer_scroll2x_offset = 0x3c;
550 	m_layer_scroll3x_offset = 0x40;
551 	//m_sprite_base = 0x1000;
552 	m_sprite_list_end_marker = 0x8000;
553 	m_sprite_x_offset = 0;
554 
555 	save_item(NAME(m_captcommb2_mux_toggle));
556 }
557 
MACHINE_RESET_MEMBER(cps1bl_5205_state,captcommb2)558 MACHINE_RESET_MEMBER(cps1bl_5205_state, captcommb2)
559 {
560 	m_captcommb2_mux_toggle = 0;
561 }
562 
MACHINE_START_MEMBER(cps1bl_5205_state,sf2mdt)563 MACHINE_START_MEMBER(cps1bl_5205_state, sf2mdt)
564 {
565 	membank("bank1")->configure_entries(0, 8, memregion("audiocpu")->base() + 0x10000, 0x4000);
566 
567 	m_layer_enable_reg = 0x26;
568 	m_layer_mask_reg[0] = 0x28;
569 	m_layer_mask_reg[1] = 0x2a;
570 	m_layer_mask_reg[2] = 0x2c;
571 	m_layer_mask_reg[3] = 0x2e;
572 	m_layer_scroll1x_offset = 0;
573 	m_layer_scroll2x_offset = 0;
574 	m_layer_scroll3x_offset = 0;
575 	m_sprite_base = 0x1000;
576 	m_sprite_list_end_marker = 0x8000;
577 	m_sprite_x_offset = 2;
578 
579 	save_item(NAME(m_captcommb2_mux_toggle));
580 }
581 
582 
init_captcommb2()583 void cps1bl_5205_state::init_captcommb2()
584 {
585 	// gfx data bits 2 and 4 swapped
586 	uint8_t *gfx = memregion("gfx")->base();
587 	for (int i = 0; i < 0x400000; i++)
588 	{
589 		uint8_t x = gfx[i];
590 		gfx[i] = bitswap(x, 7, 6 ,5, 2, 3, 4, 1, 0);
591 	}
592 
593 	init_mtwinsb();
594 
595 	// patch - fix invisible test screen at start
596 	uint8_t *rom = memregion("maincpu")->base();
597 	rom[0x65c] = 0x68;
598 	rom[0x7b0] = 0x68;
599 }
600 
init_knightsb()601 void cps1bl_5205_state::init_knightsb()
602 {
603 	m_maincpu->space(AS_PROGRAM).unmap_write(0x980000, 0x980023);
604 	m_maincpu->space(AS_PROGRAM).install_write_handler(0x980000, 0x980025, write16sm_delegate(*this, FUNC(cps1bl_5205_state::knightsb_layer_w)));
605 
606 	init_mtwinsb();
607 }
608 
init_sf2b()609 void cps1bl_5205_state::init_sf2b()
610 {
611 	/* extra sprite ram */
612 	/* both of these need to be mapped - see the "Magic Delta Turbo" text on the title screen */
613 	m_bootleg_sprite_ram = std::make_unique<uint16_t[]>(0x2000);
614 	m_maincpu->space(AS_PROGRAM).install_ram(0x700000, 0x703fff, m_bootleg_sprite_ram.get());
615 	m_maincpu->space(AS_PROGRAM).install_ram(0x704000, 0x707fff, m_bootleg_sprite_ram.get());
616 
617 	init_cps1();
618 }
619 
init_sf2mdt()620 void cps1bl_5205_state::init_sf2mdt()
621 {
622 	m_maincpu->space(AS_PROGRAM).install_write_handler(0x708100, 0x7081ff, write16sm_delegate(*this, FUNC(cps1bl_5205_state::sf2mdt_layer_w)));
623 
624 	/* extra work ram */
625 	m_bootleg_work_ram = std::make_unique<uint16_t[]>(0x8000);
626 	m_maincpu->space(AS_PROGRAM).install_ram(0xfc0000, 0xfcffff, m_bootleg_work_ram.get());
627 
628 	init_sf2mdtb();
629 }
630 
init_sf2mdta()631 void cps1bl_5205_state::init_sf2mdta()
632 {
633 	/* extra work ram */
634 	m_bootleg_work_ram = std::make_unique<uint16_t[]>(0x8000);
635 	m_maincpu->space(AS_PROGRAM).install_ram(0xfc0000, 0xfcffff, m_bootleg_work_ram.get());
636 
637 	init_sf2b();
638 }
639 
init_sf2mdtb()640 void cps1bl_5205_state::init_sf2mdtb()
641 {
642 	uint32_t gfx_size = memregion( "gfx" )->bytes();
643 	uint8_t *rom = memregion( "gfx" )->base();
644 	for (int i = 0; i < gfx_size; i += 8)
645 	{
646 		uint8_t tmp = rom[i + 1];
647 		rom[i + 1] = rom[i + 4];
648 		rom[i + 4] = tmp;
649 		tmp = rom[i + 3];
650 		rom[i + 3] = rom[i + 6];
651 		rom[i + 6] = tmp;
652 	}
653 
654 	init_sf2b();
655 }
656 
657 
658 #define CPS1_COINAGE_1 \
659 	PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coin_A ) ) \
660 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
661 	PORT_DIPSETTING(    0x01, DEF_STR( 3C_1C ) ) \
662 	PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) ) \
663 	PORT_DIPSETTING(    0x07, DEF_STR( 1C_1C ) ) \
664 	PORT_DIPSETTING(    0x06, DEF_STR( 1C_2C ) ) \
665 	PORT_DIPSETTING(    0x05, DEF_STR( 1C_3C ) ) \
666 	PORT_DIPSETTING(    0x04, DEF_STR( 1C_4C ) ) \
667 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_6C ) ) \
668 	PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coin_B ) ) \
669 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
670 	PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) ) \
671 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
672 	PORT_DIPSETTING(    0x38, DEF_STR( 1C_1C ) ) \
673 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_2C ) ) \
674 	PORT_DIPSETTING(    0x28, DEF_STR( 1C_3C ) ) \
675 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_4C ) ) \
676 	PORT_DIPSETTING(    0x18, DEF_STR( 1C_6C ) )
677 
678 #define CPS1_DIFFICULTY_1(diploc) \
679 	PORT_DIPNAME( 0x07, 0x04, DEF_STR( Difficulty ) ) PORT_DIPLOCATION(diploc ":1,2,3") \
680 	PORT_DIPSETTING(    0x07, "1 (Easiest)" ) \
681 	PORT_DIPSETTING(    0x06, "2" ) \
682 	PORT_DIPSETTING(    0x05, "3" ) \
683 	PORT_DIPSETTING(    0x04, "4 (Normal)" ) \
684 	PORT_DIPSETTING(    0x03, "5" ) \
685 	PORT_DIPSETTING(    0x02, "6" ) \
686 	PORT_DIPSETTING(    0x01, "7" ) \
687 	PORT_DIPSETTING(    0x00, "8 (Hardest)" )
688 
689 static INPUT_PORTS_START( captcommb2 )
PORT_INCLUDE(captcomm)690 	PORT_INCLUDE(captcomm)
691 
692 	PORT_MODIFY("IN3")
693 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
694 
695 	PORT_MODIFY("IN2")  // Player 4
696 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
697 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
698 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
699 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
700 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
701 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
702 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_COIN4 )
703 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_START4 )
704 INPUT_PORTS_END
705 
706 static INPUT_PORTS_START( sf2mdt )
707 	PORT_START("IN0")
708 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
709 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
710 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
711 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
712 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
713 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
714 	PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW )
715 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
716 
717 	PORT_START("IN1")
718 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
719 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
720 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
721 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
722 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Jab Punch") PORT_PLAYER(1)
723 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Strong Punch") PORT_PLAYER(1)
724 	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Fierce Punch") PORT_PLAYER(1)
725 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
726 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
727 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
728 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
729 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
730 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Jab Punch") PORT_PLAYER(2)
731 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P2 Strong Punch") PORT_PLAYER(2)
732 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P2 Fierce Punch") PORT_PLAYER(2)
733 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
734 
735 	PORT_START("IN2")      /* Extra buttons */
736 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 Short Kick") PORT_PLAYER(1)
737 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P1 Forward Kick") PORT_PLAYER(1)
738 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P1 Roundhouse Kick") PORT_PLAYER(1)
739 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
740 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P2 Short Kick") PORT_PLAYER(2)
741 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P2 Forward Kick") PORT_PLAYER(2)
742 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P2 Roundhouse Kick") PORT_PLAYER(2)
743 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
744 
745 	PORT_START("DSWA")
746 	CPS1_COINAGE_1
747 	PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" )   PORT_DIPLOCATION("SW(A):7")
748 	PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
749 	PORT_DIPSETTING( 0x00, DEF_STR( On ) )
750 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(A):8" )
751 
752 	PORT_START("DSWB")
753 	CPS1_DIFFICULTY_1( "SW(B)" )
754 	PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW(B):4" )
755 	PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW(B):5" )
756 	PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW(B):6" )
757 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW(B):7" )
758 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(B):8" )
759 
760 	PORT_START("DSWC")
761 	PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW(C):1" )
762 	PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW(C):2" )
763 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) )                PORT_DIPLOCATION("SW(C):3")
764 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
765 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
766 	PORT_DIPNAME( 0x08, 0x08, "Freeze" )                            PORT_DIPLOCATION("SW(C):4")
767 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
768 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
769 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )              PORT_DIPLOCATION("SW(C):5")
770 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
771 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
772 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )              PORT_DIPLOCATION("SW(C):6")
773 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
774 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
775 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) )           PORT_DIPLOCATION("SW(C):7")
776 	PORT_DIPSETTING(    0x40, DEF_STR( No ) )
777 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
778 	PORT_DIPNAME( 0x80, 0x80, "Game Mode")                          PORT_DIPLOCATION("SW(C):8")
779 	PORT_DIPSETTING(    0x80, "Game" )
780 	PORT_DIPSETTING(    0x00, DEF_STR( Test ) )
781 INPUT_PORTS_END
782 
783 static INPUT_PORTS_START( sf2mdtb )
784 	PORT_START("IN0")
785 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
786 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
787 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 )
788 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
789 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
790 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
791 	PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW )
792 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
793 
794 	PORT_START("IN1")
795 	PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
796 	PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
797 	PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
798 	PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
799 	PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P1 Jab Punch") PORT_PLAYER(1)
800 	PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P1 Strong Punch") PORT_PLAYER(1)
801 	PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P1 Fierce Punch") PORT_PLAYER(1)
802 	PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
803 	PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
804 	PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
805 	PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
806 	PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
807 	PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("P2 Jab Punch") PORT_PLAYER(2)
808 	PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("P2 Strong Punch") PORT_PLAYER(2)
809 	PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("P2 Fierce Punch") PORT_PLAYER(2)
810 	PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
811 
812 	PORT_START("IN2")      /* Extra buttons */
813 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P1 Short Kick") PORT_PLAYER(1)
814 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P1 Forward Kick") PORT_PLAYER(1)
815 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P1 Roundhouse Kick") PORT_PLAYER(1)
816 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
817 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("P2 Short Kick") PORT_PLAYER(2)
818 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("P2 Forward Kick") PORT_PLAYER(2)
819 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P2 Roundhouse Kick") PORT_PLAYER(2)
820 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
821 
822 	PORT_START("DSWA")
823 	CPS1_COINAGE_1
824 	PORT_DIPNAME( 0x40, 0x40, "2 Coins to Start, 1 to Continue" )   PORT_DIPLOCATION("SW(A):7")
825 	PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
826 	PORT_DIPSETTING( 0x00, DEF_STR( On ) )
827 	// debug mode? depending on other DSW setting get different "game" mode, autoplay, bonus round, etc...
828 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(A):8" )
829 
830 	PORT_START("DSWB")
831 	CPS1_DIFFICULTY_1("SW(B)")
832 	PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW(B):4" )
833 	PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW(B):5" )
834 	PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW(B):6" )
835 	PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW(B):7" )
836 	PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW(B):8" )
837 
838 	PORT_START("DSWC")
839 	PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW(C):1" )
840 	PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW(C):2" )
841 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) )                PORT_DIPLOCATION("SW(C):3")
842 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
843 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
844 	PORT_DIPNAME( 0x08, 0x08, "Freeze" )                            PORT_DIPLOCATION("SW(C):4")
845 	PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
846 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
847 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Flip_Screen ) )              PORT_DIPLOCATION("SW(C):5")
848 	PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
849 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
850 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) )              PORT_DIPLOCATION("SW(C):6")
851 	PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
852 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
853 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Allow_Continue ) )           PORT_DIPLOCATION("SW(C):7")
854 	PORT_DIPSETTING(    0x40, DEF_STR( No ) )
855 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
856 	PORT_DIPNAME( 0x80, 0x80, "Game Mode")                          PORT_DIPLOCATION("SW(C):8")
857 	PORT_DIPSETTING(    0x80, "Game" )
858 	PORT_DIPSETTING(    0x00, DEF_STR( Test ) )
859 INPUT_PORTS_END
860 
861 
862 void captcommb2_state::bootleg_render_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect )
863 {
864 	int pos;
865 	int last_sprite_offset = 0;
866 	uint16_t tileno, colour, xpos, ypos;
867 	bool flipx, flipy;
868 	uint16_t *sprite_ram = m_bootleg_sprite_ram.get();
869 	int base = (sprite_ram[0] ? 0x3000 : 0x1000) / 2;  // writes sprite buffer flip here instead of obj_base register
870 
871 	// end of sprite table marker is 0x8000
872 	// 1st sprite always 0x100e/0x300e
873 	// sprites are: [ypos][tile#][color][xpos]
874 	// no block sprites
875 	for (pos = base + 7; pos < base + 0x400; pos += 4)
876 		if (sprite_ram[pos] == m_sprite_list_end_marker)
877 		{
878 			last_sprite_offset = pos - 3;
879 			break;
880 		}
881 
882 	for (pos = last_sprite_offset - base; pos >= 0; pos -= 4)
883 	{
884 		tileno = sprite_ram[base + pos] & 0x7fff;      // see below
885 		xpos   = sprite_ram[base + pos + 2] & 0x1ff;
886 		ypos   = sprite_ram[base + pos - 1] & 0x1ff;
887 		flipx  = BIT(sprite_ram[base + pos + 1], 5);
888 		flipy  = BIT(sprite_ram[base + pos + 1], 6);
889 		colour = sprite_ram[base + pos + 1] & 0x1f;
890 		ypos   = 256 - ypos - 16;
891 		xpos   = xpos + m_sprite_x_offset + 49;
892 
893 		if (flip_screen())
894 			m_gfxdecode->gfx(2)->prio_transpen(bitmap, cliprect, tileno, colour, !flipx, !flipy, 512-16-xpos, 256-16-ypos, screen.priority(), 2, 15);
895 		else
896 			m_gfxdecode->gfx(2)->prio_transpen(bitmap, cliprect, tileno, colour, flipx, flipy, xpos, ypos, screen.priority(), 2, 15);
897 	}
898 
899 	/* tileno note:
900 	    sets the unused msb for certain tiles eg. middle parts of rocket launcher weapon,
901 	    this means the tile is out of range and therefore transparent,
902 	    most likely just a bug and the real h/w ignores the unused bit so the effect is not seen.
903 	*/
904 }
905 
906 
907 // ************************************************************************* CAPTCOMMB2
908 
909 /*
910     Captain Commando:
911 
912     h/w issues compared to original game (captcomm)
913     -----------------------------------------------
914     these are present on the real board so are not emulation issues:
915 
916     * End sequence row scroll effect doesn't work.
917     * Capcom copyright text missing on title screen, deliberately shifted down out of visible area by bootleggers.
918     * Capcom logo missing from end sequence, as above.
919     * Sprite flickering effects eg. when character has invincibility, look a little different to original.
920     * Certain static sprites wobble vertically just a pixel or two  eg. manhole covers, breakable oil drums etc.
921 
922     these are present on the real board but are unintentionally "fixed" in emulation:
923 
924     * All '0' characters are missing in test menu eg. sound test, input test etc.
925     * Wrong tile displayed when character select count-down timer reaches zero (superscript '1' with white bar underneath)
926 */
927 ROM_START( captcommb2 )
928 	ROM_REGION( CODE_SIZE, "maincpu", 0 ) // = captcommr1 + additional code mapped on top
929 	ROM_LOAD16_BYTE( "5.bin", 0x000000, 0x80000, CRC(c3a6ed28) SHA1(f79fed35f7b0dc383837a2ead846acc686dd3487) )
930 	ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x80000, CRC(28729335) SHA1(6dd23c2d41e4e182434fe80c03d5c90785e6c0ce) )
931 	ROM_LOAD16_BYTE( "4.bin", 0x100000, 0x20000, CRC(1b526d73) SHA1(3dd8dec61db4f4f5546937602a8fb01c639d72f8) )
932 	ROM_CONTINUE(             0x000000, 0x04000)
933 	ROM_CONTINUE(             0x018000, 0x04000)
934 	ROM_IGNORE(                         0x18000)
935 	ROM_LOAD16_BYTE( "2.bin", 0x100001, 0x20000, CRC(73c99709) SHA1(e122e3771b698c44fb998589af0542b1f2a3876a) )
936 	ROM_CONTINUE(             0x000001, 0x04000)
937 	ROM_CONTINUE(             0x018001, 0x04000)
938 	ROM_IGNORE(                         0x18000)
939 
940 	ROM_REGION( 0x400000, "gfx", 0 ) // some data bits are swapped, see init()
941 	ROM_LOAD64_BYTE( "bnh-01.bin", 0x000000, 0x40000, CRC(ffbc3bdd) SHA1(fcee1befd8279d41a81689394a562e2344191e2a) )
942 	ROM_CONTINUE(                  0x000004, 0x40000)
943 	ROM_LOAD64_BYTE( "bnh-02.bin", 0x000001, 0x40000, CRC(40e58d52) SHA1(d980d075f4feeaf95ad599e1b95a1b550f6a85d9) )
944 	ROM_CONTINUE(                  0x000005, 0x40000)
945 	ROM_LOAD64_BYTE( "bnh-03.bin", 0x000002, 0x40000, CRC(58f92cad) SHA1(041cd7d7d325147eefab245cd0610203200be1ce) )
946 	ROM_CONTINUE(                  0x000006, 0x40000)
947 	ROM_LOAD64_BYTE( "bnh-04.bin", 0x000003, 0x40000, CRC(284eea8a) SHA1(b95cf797b3576d7d62f58d4a70d4b6e64ece7601) )
948 	ROM_CONTINUE(                  0x000007, 0x40000)
949 	ROM_LOAD64_BYTE( "bnh-05.bin", 0x200000, 0x40000, CRC(d02719b7) SHA1(c67bc53c22030c7a75f2fdde1480f619e2be314c) )
950 	ROM_CONTINUE(                  0x200004, 0x40000)
951 	ROM_LOAD64_BYTE( "bnh-06.bin", 0x200001, 0x40000, CRC(d9d43b55) SHA1(db462900958e06610cfdc47bb774f37ea1c0a1b7) )
952 	ROM_CONTINUE(                  0x200005, 0x40000)
953 	ROM_LOAD64_BYTE( "bnh-07.bin", 0x200002, 0x40000, CRC(03b7900d) SHA1(ade31f4b37e8ca50214c5b32a2e5899043f49c8a) )
954 	ROM_CONTINUE(                  0x200006, 0x40000)
955 	ROM_LOAD64_BYTE( "bnh-08.bin", 0x200003, 0x40000, CRC(327b8da8) SHA1(4bcc6fd637d382ce35b9387568c53d89a55e8ed2) )
956 	ROM_CONTINUE(                  0x200007, 0x40000)
957 
958 	ROM_REGION( 0x50000, "audiocpu", 0 )
959 	ROM_LOAD( "1.bin", 0x00000, 0x40000, CRC(aed2f4bd) SHA1(3bd567dc350bf6ac3a349548790ad49eb5bd8307) )
960 	ROM_RELOAD(        0x10000, 0x40000 )
961 
962 	/* pld devices */
963 	ROM_REGION( 0xc00, "plds", 0 )
964 	ROM_LOAD( "1_gal20v8.ic169", 0x000, 0x157, CRC(e5cf9f53) SHA1(9c5f88d2dcfaab1c1ba80019e9ec60f0c1fb8c49) )  // all unsecured
965 	ROM_LOAD( "2_gal16v8.ic7",   0x200, 0x117, CRC(0ebc7cd7) SHA1(95f0cba1f588920634b5f09b85197474201d9aed) )
966 	ROM_LOAD( "3_gal16v8.ic72",  0x400, 0x117, CRC(ebf1f643) SHA1(d2d1d60ced5665469589122001d9b7b36b7444d2) )
967 	ROM_LOAD( "4_gal16v8.ic80",  0x600, 0x117, CRC(2c43c330) SHA1(7df648b63bc0c845a579a29722004f28d3e04a10) )
968 	ROM_LOAD( "5_gal20v8.ic121", 0x800, 0x157, CRC(76fa8969) SHA1(8fce620ece2d70511868c9cdd8c421762a467c11) )
969 	ROM_LOAD( "6_gal20v8.ic120", 0xa00, 0x157, CRC(6a55a974) SHA1(f4df5a45409eca84c1ac36f7f8dbb218b79b57ac) )
970 	// ic116  tpc1020afn-084c  no dump
971 ROM_END
972 
973 
974 // ************************************************************************* KNIGHTSB, KNIGHTSB3
975 
976 /*
977     CPU
978     1x MC68000P12 ic65 main
979     1x Z0840006PSC ic1 sound
980     1x YM2151 ic29 sound
981     1x YM3012 ic30 sound
982     2x LM324 ic15,ic31 sound
983     2x M5205 ic184,ic185 sound
984     1x TDA2003 ic14 sound
985     1x oscillator 24.000000MHz (close to main)
986     1x oscillator 29.821000MHz (close to sound)
987 
988     ROMs
989     5x M27C2001 1,2,3,4,5 dumped
990     4x mask ROM KA,KB,KC,KD not dumped
991 
992     RAMs
993     4x KM62256ALP ic112,ic113,ic168,ic170
994     1x SYC6116L ic24
995     1x MCM2018AN ic7,ic8,ic51,ic56,ic70,ic71,ic77,ic78
996 
997     PLDs
998     1x TPC1020AFN ic116 read protected
999     3x GAL20V8A ic120,ic121,ic169 read protected
1000     3x GAL16V8A ic7,ic72,ic80 read protected
1001 
1002     Note
1003     1x JAMMA edge connector
1004     2x 10 legs connector
1005     1x trimmer (volume)
1006     3x 8x2 switches DIP
1007 
1008     FIXME - graphics ROMs are wrong, copied from the other version
1009     ROMs missing are KA.IC91 KB.IC92 KC.IC93 KD.IC94
1010 */
1011 ROM_START( knightsb )
1012 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1013 	ROM_LOAD16_BYTE( "3.ic173",    0x00001, 0x40000, CRC(c9c6e720) SHA1(e8a1cd73458b548e88fc49d8f659e0dc33a8e756) )
1014 	ROM_LOAD16_BYTE( "5.ic172",    0x00000, 0x40000, CRC(7fd91118) SHA1(d2832b21309a467938891946d7af35d8095787a4) )
1015 	ROM_LOAD16_BYTE( "2.ic175",    0x80001, 0x40000, CRC(1eb91343) SHA1(e02cfbbd7689346f14f2e3455ed17e7f0b51bad0) )
1016 	ROM_LOAD16_BYTE( "4.ic176",    0x80000, 0x40000, CRC(af352703) SHA1(7855ac65752203f45af4ef41af8c291540a1c8a8) )
1017 
1018 	ROM_REGION( 0x400000, "gfx", 0 ) /* bootleg had 4x 1meg mask ROMs, these need dumping so that the format is known */
1019 	ROM_LOAD64_WORD( "kr_gfx1.rom",  0x000000, 0x80000, BAD_DUMP CRC(9e36c1a4) SHA1(772daae74e119371dfb76fde9775bda78a8ba125) )
1020 	ROM_LOAD64_WORD( "kr_gfx3.rom",  0x000002, 0x80000, BAD_DUMP CRC(c5832cae) SHA1(a188cf401cd3a2909b377d3059f14d22ec3b0643) )
1021 	ROM_LOAD64_WORD( "kr_gfx2.rom",  0x000004, 0x80000, BAD_DUMP CRC(f095be2d) SHA1(0427d1574062f277a9d04440019d5638b05de561) )
1022 	ROM_LOAD64_WORD( "kr_gfx4.rom",  0x000006, 0x80000, BAD_DUMP CRC(179dfd96) SHA1(b1844e69da7ab13474da569978d5b47deb8eb2be) )
1023 	ROM_LOAD64_WORD( "kr_gfx5.rom",  0x200000, 0x80000, BAD_DUMP CRC(1f4298d2) SHA1(4b162a7f649b0bcd676f8ca0c5eee9a1250d6452) )
1024 	ROM_LOAD64_WORD( "kr_gfx7.rom",  0x200002, 0x80000, BAD_DUMP CRC(37fa8751) SHA1(b88b39d1f08621f15a5620095aef998346fa9891) )
1025 	ROM_LOAD64_WORD( "kr_gfx6.rom",  0x200004, 0x80000, BAD_DUMP CRC(0200bc3d) SHA1(c900b1be2b4e49b951e5c1e3fd1e19d21b82986e) )
1026 	ROM_LOAD64_WORD( "kr_gfx8.rom",  0x200006, 0x80000, BAD_DUMP CRC(0bb2b4e7) SHA1(983b800925d58e4aeb4e5105f93ed5faf66d009c) )
1027 
1028 	ROM_REGION( 0x50000, "audiocpu", 0 ) /* 64k for the audio CPU (+banks) */
1029 	ROM_LOAD( "1.ic26",     0x00000, 0x40000, CRC(bd6f9cc1) SHA1(9f33cccef224d2204736a9eae761196866bd6e41) )
1030 	ROM_RELOAD(            0x10000, 0x40000 )
1031 ROM_END
1032 
1033 /*
1034     Knights of the Round
1035     pcb marking: ORD 92032
1036     Very similar to knightsb set:
1037      maincpu roms are just 1 byte different, vector 1 (stack pointer init) is ff80d6 instead of ff81d6
1038      knightsb gfx roms are 4x 1MB (but not dumped), these are 8x 512KB (suspect data is same)
1039     Some sound samples are very quiet on real pcb
1040     Confirmed clocks (measured) are same as captcommb2:
1041      xtals: 30MHz, 24MHz, 400KHz
1042      68k = 12MHz (P10 model, overclocked)
1043      z80/ym = 3.75MHz
1044      5202 = 400KHz
1045 */
1046 ROM_START( knightsb3 )
1047 	ROM_REGION( CODE_SIZE, "maincpu", 0 )
1048 	ROM_LOAD16_BYTE( "5.bin", 0x00000, 0x80000, CRC(b818272c) SHA1(680b1539bbeebf26706c9367decce2a8de0144e4) )  // 27c040
1049 	ROM_LOAD16_BYTE( "3.bin", 0x00001, 0x80000, CRC(b0b9a4c2) SHA1(7d49b260224756303f9c6cdb67e8c531b0f5689f) )  // 27c040
1050 
1051 	ROM_REGION( 0x400000, "gfx", 0 ) // = knights but arranged differently
1052 	ROM_LOAD64_BYTE( "svr-01.bin", 0x000000, 0x40000, CRC(b08dc61f) SHA1(9527636ba0ccc7f02db6ba7013e932582ff85a93) )
1053 	ROM_CONTINUE(                  0x000004, 0x40000)
1054 	ROM_LOAD64_BYTE( "svr-02.bin", 0x000001, 0x40000, CRC(cca262aa) SHA1(587b25a724a89095299bd1f655d833d26a420c30) )
1055 	ROM_CONTINUE(                  0x000005, 0x40000)
1056 	ROM_LOAD64_BYTE( "svr-03.bin", 0x000002, 0x40000, CRC(1fe7056c) SHA1(eb9e5955c6cf2cfef565672cd0efcfd6921fefc3) )
1057 	ROM_CONTINUE(                  0x000006, 0x40000)
1058 	ROM_LOAD64_BYTE( "svr-04.bin", 0x000003, 0x40000, CRC(b29ce7cf) SHA1(d8f99c57561c60bec260c6b5daef81ba7856b547) )
1059 	ROM_CONTINUE(                  0x000007, 0x40000)
1060 	ROM_LOAD64_BYTE( "svr-05.bin", 0x200000, 0x40000, CRC(1c774671) SHA1(d553b87e8a0f13f404cff64089847325a18d1afb) )
1061 	ROM_CONTINUE(                  0x200004, 0x40000)
1062 	ROM_LOAD64_BYTE( "svr-06.bin", 0x200001, 0x40000, CRC(05463aa3) SHA1(27cc2724e22bf74e972283d6c35d31cea2c1a943) )
1063 	ROM_CONTINUE(                  0x200005, 0x40000)
1064 	ROM_LOAD64_BYTE( "svr-07.bin", 0x200002, 0x40000, CRC(87944aaa) SHA1(57d4637d5cf10b9cef95e12c64362c04a604cf64) )
1065 	ROM_CONTINUE(                  0x200006, 0x40000)
1066 	ROM_LOAD64_BYTE( "svr-08.bin", 0x200003, 0x40000, CRC(aa9d82fb) SHA1(41ff75bc0cc3766c19d79080893b52d9c759a443) )
1067 	ROM_CONTINUE(                  0x200007, 0x40000)
1068 
1069 	// TODO: dump
1070 	ROM_REGION( 0x50000, "audiocpu", 0 )
1071 	ROM_LOAD( "1.ic26", 0x00000, 0x40000, CRC(bd6f9cc1) SHA1(9f33cccef224d2204736a9eae761196866bd6e41) )  // knightsb
1072 	ROM_RELOAD( 0x10000, 0x40000 )
1073 
1074 	/* pld devices:
1075 	     ________________________
1076 	    |                   4    |      (no component reference markings on pcb)
1077 	    |                        |
1078 	  ==       2    3            |
1079 	  ==                    7    |
1080 	  ==                         |
1081 	  ==                         |
1082 	  ==                         |
1083 	    |   1            5    6  |
1084 	    |________________________|
1085 
1086 	#1   palce20v8h     secured, bruteforce ok
1087 	#2   palce16v8h     secured, bruteforce ok
1088 	#3   palce16v8h     secured, registered
1089 	#4   palce16v8h     secured, registered
1090 	#5   palce20v8h     secured, registered
1091 	#6   palce20v8h     secured, registered
1092 	#7   a1020a pl84c   unattempted
1093 	*/
1094 	ROM_REGION( 0x400, "plds", 0 )
1095 	ROM_LOAD( "1_palce20v8.bin", 0x000, 0x157, CRC(a5078c38) SHA1(59558a514ec60cd7148ede78a5641f5e6c0479c8) )
1096 	ROM_LOAD( "2_palce16v8.bin", 0x200, 0x117, CRC(bad3316b) SHA1(b25141540fbaab028ba563f4fe1796b6039a4d59) )
1097 ROM_END
1098 
1099 
1100 // ************************************************************************* SF2B, SF2B2
1101 
1102 ROM_START( sf2b )
1103 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1104 	ROM_LOAD16_WORD_SWAP( "pf1-2-sg076.bin", 0x000000, 0x100000, CRC(1d15bc7a) SHA1(834627545f191f39de6beb008c89623f2b88c13b) )
1105 
1106 	ROM_REGION( 0x600000, "gfx", 0 )
1107 	ROM_LOAD32_WORD( "pf4-sg072.bin", 0x000000, 0x100000, CRC(16289710) SHA1(4f3236712b979a1eb2fa97740e32d7913cee0d0d) )
1108 	ROM_LOAD32_WORD( "pf7-sg103.bin", 0x000002, 0x100000, CRC(fb78022e) SHA1(b8974387056dd52db96b01cc4648edc814398c7e) )
1109 	ROM_LOAD32_WORD( "pf5-sg095.bin", 0x200000, 0x100000, CRC(0a6be48b) SHA1(b7e72c94d4e3eb4a6bba6608d9b9a093c8901ad9) )
1110 	ROM_LOAD32_WORD( "pf8-sg101.bin", 0x200002, 0x100000, CRC(6258c7cf) SHA1(4cd7519245c0aa816934a43e6743160f715d7dc2) )
1111 	ROM_LOAD32_WORD( "pf6-sg068.bin", 0x400000, 0x100000, CRC(9b5b09d7) SHA1(698a6aab41e495bd0c37a19aee16a84f04d15797) )
1112 	ROM_LOAD32_WORD( "pf9-sh001.bin", 0x400002, 0x100000, CRC(9f25090e) SHA1(12ff0431ef6550db446985c8914ac7d78eec6b6d) )
1113 
1114 	ROM_REGION( 0x30000, "audiocpu", 0 ) /* Sound program + samples  */
1115 	ROM_LOAD( "3snd.ic28", 0x00000, 0x20000, CRC(d5bee9cc) SHA1(e638cb5ce7a22c18b60296a7defe8b03418da56c) )
1116 	ROM_RELOAD(            0x10000, 0x20000 )
1117 ROM_END
1118 
1119 // this PCB has stickers in Spanish. It's extremely similar to sf2b, but audiocpu ROM is identical to sf2mdt and 11.bin is slightly different.
1120 ROM_START( sf2b2 )
1121 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1122 	ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x80000, CRC(42809e5a) SHA1(ee91ecfce29bc50cf3f492ff646109c60bf65551) )
1123 	ROM_LOAD16_BYTE( "1.bin", 0x000001, 0x80000, CRC(e58db26c) SHA1(da1a4e063fa770257fd3df5fdb3785c1856511a5) )
1124 
1125 	ROM_REGION( 0x600000, "gfx", 0 ) /* rearranged in init */
1126 	ROM_LOAD64_WORD( "5.bin",  0x000000, 0x80000, CRC(47fab9ed) SHA1(1709becbe189b21f2c1920acef96f9412eb954e2) )
1127 	ROM_LOAD64_WORD( "8.bin",  0x000002, 0x80000, CRC(b8c39d56) SHA1(ee2939f42e95c926bdd88adf326eee02cba3f37a) )
1128 	ROM_LOAD64_WORD( "11.bin", 0x000004, 0x80000, CRC(6e8c98d8) SHA1(fbd7d788349fd418c48aedd906c40960e41c20f1) )
1129 	ROM_LOAD64_WORD( "14.bin", 0x000006, 0x80000, CRC(672d4f85) SHA1(511a8878d14d3fd39c9a22efb983550098ea8760) )
1130 	ROM_LOAD64_WORD( "4.bin",  0x200000, 0x80000, CRC(69d7b06b) SHA1(b428a0b5dfdee20d4d198673fe3b0147cad2d5bd) )
1131 	ROM_LOAD64_WORD( "7.bin",  0x200002, 0x80000, CRC(ded88f5f) SHA1(71c63fed5a15f6ce1df878dca7aa5d53868e68ee) )
1132 	ROM_LOAD64_WORD( "10.bin", 0x200004, 0x80000, CRC(8c2fca3c) SHA1(a84399e91dbf5790c3fe003385f6d9f4bc9d3366) )
1133 	ROM_LOAD64_WORD( "13.bin", 0x200006, 0x80000, CRC(26f09d38) SHA1(3babc4f502ea9e07f79306b1abc9c94f484f9cc1) )
1134 	ROM_LOAD64_WORD( "6.bin",  0x400000, 0x80000, CRC(b6215991) SHA1(5e20632e1a2d6eebe3b5d314cf2549bb74d7118e) )
1135 	ROM_LOAD64_WORD( "9.bin",  0x400002, 0x80000, CRC(b6a71ed7) SHA1(1850b4b4aa4b5cafc594b174322afefbdf215221) )
1136 	ROM_LOAD64_WORD( "12.bin", 0x400004, 0x80000, CRC(971903fa) SHA1(849ee7200815ef73f75456e656f061f1e852af59) )
1137 	ROM_LOAD64_WORD( "15.bin", 0x400006, 0x80000, CRC(00983914) SHA1(4ead6bbce6ca8c4cc884d55c1f821242d0e67fae) )
1138 
1139 	ROM_REGION( 0x30000, "audiocpu", 0 ) /* Sound program + samples  */
1140 	ROM_LOAD( "3.bin", 0x00000, 0x20000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
1141 	ROM_RELOAD(        0x10000, 0x20000 )
1142 ROM_END
1143 
1144 
1145 // ************************************************************************* SF2CEB
1146 
1147 ROM_START( sf2ceb )
1148 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1149 	ROM_LOAD16_BYTE( "3.ic171", 0x000000, 0x80000, CRC(a2355d90) SHA1(6c9e1294c55a5a9f244f6f1ce46224c51f910bb1) )
1150 	ROM_LOAD16_BYTE( "5.ic171", 0x000001, 0x80000, CRC(c6f86e84) SHA1(546841fe7d423fff05a7772aa57fa3274515c32b) )
1151 	ROM_LOAD16_BYTE( "2.ic171", 0x100000, 0x20000, CRC(74844192) SHA1(99cd546c78cce7f632007af454d8a55eddb6b19b) )
1152 	ROM_LOAD16_BYTE( "4.ic171", 0x100001, 0x20000, CRC(bd98ff15) SHA1(ed902d949b0b5c5beaaea78a4b418ffa6db9e1df) )
1153 
1154 	ROM_REGION( 0x600000, "gfx", 0 )
1155 	ROM_LOAD32_WORD( "pf4-sg072.ic90", 0x000000, 0x100000, CRC(446575c7) SHA1(2bd769674fbe280d304b389daf74202cf9e4ac22) )
1156 	ROM_LOAD32_WORD( "pf7-sg103.ic88", 0x000002, 0x100000, CRC(fb78022e) SHA1(b8974387056dd52db96b01cc4648edc814398c7e) )
1157 	ROM_LOAD32_WORD( "pf5-sg063.ic91", 0x200000, 0x100000, CRC(0a6be48b) SHA1(b7e72c94d4e3eb4a6bba6608d9b9a093c8901ad9) )
1158 	ROM_LOAD32_WORD( "pf8-sg101.ic93", 0x200002, 0x100000, CRC(6258c7cf) SHA1(4cd7519245c0aa816934a43e6743160f715d7dc2) )
1159 	ROM_LOAD32_WORD( "pf6-sg070.ic86", 0x400000, 0x100000, CRC(9b5b09d7) SHA1(698a6aab41e495bd0c37a19aee16a84f04d15797) )
1160 	ROM_LOAD32_WORD( "pf9-sh001.ic84", 0x400002, 0x100000, CRC(9f25090e) SHA1(12ff0431ef6550db446985c8914ac7d78eec6b6d) )
1161 
1162 	ROM_REGION( 0x30000, "audiocpu", 0 ) /* Sound program + samples  */
1163 	ROM_LOAD( "3.ic28", 0x00000, 0x20000, CRC(d5bee9cc) SHA1(e638cb5ce7a22c18b60296a7defe8b03418da56c) )
1164 	ROM_RELOAD(         0x10000, 0x20000 )
1165 ROM_END
1166 
1167 ROM_START( sf2ceb2 ) // sf2ceeab3 in FBNeo, all ROMs but the first two program ROMs match sf2mdt. Dump has been confirmed on 2 different PCBs
1168 	ROM_REGION( CODE_SIZE, "maincpu", 0 )
1169 	ROM_LOAD16_BYTE( "3.ic172", 0x000000, 0x80000, CRC(11b5fe98) SHA1(6dda11e6c443a7c0ddf17a9840c93be00a424472) )
1170 	ROM_LOAD16_BYTE( "1.ic171", 0x000001, 0x80000, CRC(6d948623) SHA1(0bcdda9ba2ef2051ad70277fbc383035a63540f3) )
1171 	ROM_LOAD16_BYTE( "4.ic176", 0x100000, 0x20000, CRC(1073b7b6) SHA1(81ca1eab65ceac69520584bb23a684ccb9d92f89) )
1172 	ROM_LOAD16_BYTE( "2.ic175", 0x100001, 0x20000, CRC(924c6ce2) SHA1(676a912652bd75da5087f0c7eae047b7681a993c) )
1173 
1174 	ROM_REGION( 0x600000, "gfx", 0 ) // rearranged in init
1175 	ROM_LOAD64_WORD( "7.ic90",  0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) )
1176 	ROM_LOAD64_WORD( "10.ic88", 0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) )
1177 	ROM_LOAD64_WORD( "13.ic89", 0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) )
1178 	ROM_LOAD64_WORD( "16.ic87", 0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) )
1179 	ROM_LOAD64_WORD( "6.ic91",  0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) )
1180 	ROM_LOAD64_WORD( "9.ic93",  0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) )
1181 	ROM_LOAD64_WORD( "12.ic92", 0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) )
1182 	ROM_LOAD64_WORD( "15.ic94", 0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) )
1183 	ROM_LOAD64_WORD( "8.ic86",  0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) )
1184 	ROM_LOAD64_WORD( "11.ic84", 0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) )
1185 	ROM_LOAD64_WORD( "14.ic85", 0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) )
1186 	ROM_LOAD64_WORD( "17.ic83", 0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) )
1187 
1188 	ROM_REGION( 0x30000, "audiocpu", 0 ) // Sound program + samples
1189 	ROM_LOAD( "5.ic26", 0x00000, 0x20000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
1190 	ROM_RELOAD(         0x10000, 0x20000 )
1191 ROM_END
1192 
1193 ROM_START( sf2ceb3 ) // sf2ceeab4 in FBNeo, all ROMs but the first match sf2ceb2. Changes do not seem a result of bit-rot
1194 	ROM_REGION( CODE_SIZE, "maincpu", 0 ) // main CPU has a (sic) 'Street Figter III 00325' sticker
1195 	ROM_LOAD16_BYTE( "3.ic172", 0x000000, 0x80000, CRC(30848e16) SHA1(b48809350f033010d33666a8cd5a610f9721f994) )
1196 	ROM_LOAD16_BYTE( "1.ic171", 0x000001, 0x80000, CRC(6d948623) SHA1(0bcdda9ba2ef2051ad70277fbc383035a63540f3) )
1197 	ROM_LOAD16_BYTE( "4.ic176", 0x100000, 0x20000, CRC(1073b7b6) SHA1(81ca1eab65ceac69520584bb23a684ccb9d92f89) )
1198 	ROM_LOAD16_BYTE( "2.ic175", 0x100001, 0x20000, CRC(924c6ce2) SHA1(676a912652bd75da5087f0c7eae047b7681a993c) )
1199 
1200 	ROM_REGION( 0x600000, "gfx", 0 ) // rearranged in init
1201 	ROM_LOAD64_WORD( "7.ic90",  0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) )
1202 	ROM_LOAD64_WORD( "10.ic88", 0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) )
1203 	ROM_LOAD64_WORD( "13.ic89", 0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) )
1204 	ROM_LOAD64_WORD( "16.ic87", 0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) )
1205 	ROM_LOAD64_WORD( "6.ic91",  0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) )
1206 	ROM_LOAD64_WORD( "9.ic93",  0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) )
1207 	ROM_LOAD64_WORD( "12.ic92", 0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) )
1208 	ROM_LOAD64_WORD( "15.ic94", 0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) )
1209 	ROM_LOAD64_WORD( "8.ic86",  0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) )
1210 	ROM_LOAD64_WORD( "11.ic84", 0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) )
1211 	ROM_LOAD64_WORD( "14.ic85", 0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) )
1212 	ROM_LOAD64_WORD( "17.ic83", 0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) )
1213 
1214 	ROM_REGION( 0x30000, "audiocpu", 0 ) // Sound program + samples
1215 	ROM_LOAD( "5.ic26", 0x00000, 0x20000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
1216 	ROM_RELOAD(         0x10000, 0x20000 )
1217 ROM_END
1218 
1219 ROM_START( sf2ceb4 ) // sf2ceeab5 in FBNeo, all ROMs but ic171 match sf2ceb2. Dump has been confirmed on 3 different PCBs
1220 	ROM_REGION( CODE_SIZE, "maincpu", 0 )
1221 	ROM_LOAD16_BYTE( "3.ic172", 0x000000, 0x80000, CRC(11b5fe98) SHA1(6dda11e6c443a7c0ddf17a9840c93be00a424472) )
1222 	ROM_LOAD16_BYTE( "5.ic171", 0x000001, 0x80000, CRC(43e85f2c) SHA1(56026e5d0ba4e0fb1bc92b981f69d0fc9d7af1d2) )
1223 	ROM_LOAD16_BYTE( "2.ic176", 0x100000, 0x20000, CRC(1073b7b6) SHA1(81ca1eab65ceac69520584bb23a684ccb9d92f89) )
1224 	ROM_LOAD16_BYTE( "4.ic175", 0x100001, 0x20000, CRC(924c6ce2) SHA1(676a912652bd75da5087f0c7eae047b7681a993c) )
1225 
1226 	ROM_REGION( 0x600000, "gfx", 0 ) // rearranged in init
1227 	ROM_LOAD64_WORD( "10.ic90", 0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) )
1228 	ROM_LOAD64_WORD( "7.ic88",  0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) )
1229 	ROM_LOAD64_WORD( "16.ic89", 0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) )
1230 	ROM_LOAD64_WORD( "13.ic87", 0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) )
1231 	ROM_LOAD64_WORD( "11.ic91", 0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) )
1232 	ROM_LOAD64_WORD( "8.ic93",  0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) )
1233 	ROM_LOAD64_WORD( "17.ic92", 0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) )
1234 	ROM_LOAD64_WORD( "14.ic94", 0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) )
1235 	ROM_LOAD64_WORD( "9.ic86",  0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) )
1236 	ROM_LOAD64_WORD( "6.ic84",  0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) )
1237 	ROM_LOAD64_WORD( "15.ic85", 0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) )
1238 	ROM_LOAD64_WORD( "12.ic83", 0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) )
1239 
1240 	ROM_REGION( 0x30000, "audiocpu", 0 ) // Sound program + samples
1241 	ROM_LOAD( "1.ic26", 0x00000, 0x20000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
1242 	ROM_RELOAD(         0x10000, 0x20000 )
1243 ROM_END
1244 
1245 // ************************************************************************* SF2MDT, SF2MDTA, SF2MDTB
1246 
1247 /*
1248     CPU
1249     1x MC68000P12 (main)
1250     1x TPC1020AFN-084C (main)
1251     1x Z0840006PSC-Z80CPU (sound)
1252     1x YM2151 (sound)
1253     1x YM3012 (sound)
1254     2x M5205 (sound)
1255     2x LM324N (sound)
1256     1x TDA2003 (sound)
1257     1x oscillator 24.000000MHz
1258     1x oscillator 30.000MHz
1259 
1260     ROMs
1261     14x AM27C040 (1,3,6,7,8,9,10,11,12,13,14,15,16,17)
1262     3x TMS27C010A (2,4,5)
1263     3x PAL 16S20 (ic7,ic72, ic80) (read protected, not dumped)
1264     3x GAL20V8A (ic120, ic121, ic169) (read protected, not dumped)
1265 
1266     Note
1267     1x JAMMA edge connector
1268     1x trimmer (volume)
1269     3x 8x2 switches dip
1270 */
1271 ROM_START( sf2mdt )
1272 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1273 	ROM_LOAD16_BYTE( "3.ic172", 0x000000, 0x80000, CRC(5301b41f) SHA1(6855a57b21e8c5d74e5cb18f9ce6af650d7fb422) )
1274 	ROM_LOAD16_BYTE( "1.ic171", 0x000001, 0x80000, CRC(c1c803f6) SHA1(9fe18ae2553a63d8e4dcc20bafd5a4634f8b93c4) )
1275 	ROM_LOAD16_BYTE( "4.ic176", 0x100000, 0x20000, CRC(1073b7b6) SHA1(81ca1eab65ceac69520584bb23a684ccb9d92f89) )
1276 	ROM_LOAD16_BYTE( "2.ic175", 0x100001, 0x20000, CRC(924c6ce2) SHA1(676a912652bd75da5087f0c7eae047b7681a993c) )
1277 
1278 	ROM_REGION( 0x600000, "gfx", 0 ) /* rearranged in init */
1279 	ROM_LOAD64_WORD( "7.ic90",  0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) )
1280 	ROM_LOAD64_WORD( "10.ic88", 0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) )
1281 	ROM_LOAD64_WORD( "13.ic89", 0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) )
1282 	ROM_LOAD64_WORD( "16.ic87", 0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) )
1283 	ROM_LOAD64_WORD( "6.ic91",  0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) )
1284 	ROM_LOAD64_WORD( "9.ic93",  0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) )
1285 	ROM_LOAD64_WORD( "12.ic92", 0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) )
1286 	ROM_LOAD64_WORD( "15.ic94", 0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) )
1287 	ROM_LOAD64_WORD( "8.ic86",  0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) )
1288 	ROM_LOAD64_WORD( "11.ic84", 0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) )
1289 	ROM_LOAD64_WORD( "14.ic85", 0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) )
1290 	ROM_LOAD64_WORD( "17.ic83", 0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) )
1291 
1292 	ROM_REGION( 0x30000, "audiocpu", 0 ) /* Sound program + samples  */
1293 	ROM_LOAD( "5.ic26", 0x00000, 0x20000, CRC(17d5ba8a) SHA1(6ff3b8860d7e1fdee3561846f645eb4d3a8965ec) )
1294 	ROM_RELOAD(         0x10000, 0x20000 )
1295 ROM_END
1296 
1297 ROM_START( sf2mdta )
1298 	/* unconfirmed if working on real hardware, pf4 is a bad dump (bad pin) */
1299 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1300 	ROM_LOAD16_BYTE( "3.mdta", 0x000000, 0x80000, CRC(9f544ef4) SHA1(f784809e59a5fcabd6d15d3f1c36250a5528c9f8) )
1301 	ROM_LOAD16_BYTE( "5.mdta", 0x000001, 0x80000, CRC(d76d6621) SHA1(aa9cea9ddace212a7b3c535b8f6e3fbc50da1f94) )
1302 	ROM_LOAD16_BYTE( "2.mdta", 0x100000, 0x20000, CRC(74844192) SHA1(99cd546c78cce7f632007af454d8a55eddb6b19b) )
1303 	ROM_LOAD16_BYTE( "4.mdta", 0x100001, 0x20000, CRC(bd98ff15) SHA1(ed902d949b0b5c5beaaea78a4b418ffa6db9e1df) )
1304 
1305 	ROM_REGION( 0x600000, "gfx", 0 )
1306 	ROM_LOAD32_WORD( "pf4 sh058.ic89", 0x000000, 0x100000, CRC(16289710) SHA1(4f3236712b979a1eb2fa97740e32d7913cee0d0d) )
1307 	ROM_LOAD32_WORD( "pf7 sh072.ic92", 0x000002, 0x100000, CRC(fb78022e) SHA1(b8974387056dd52db96b01cc4648edc814398c7e) )
1308 	ROM_LOAD32_WORD( "pf5 sh036.ic90", 0x200000, 0x100000, CRC(0a6be48b) SHA1(b7e72c94d4e3eb4a6bba6608d9b9a093c8901ad9) )
1309 	ROM_LOAD32_WORD( "pf8 sh074.ic93", 0x200002, 0x100000, CRC(6258c7cf) SHA1(4cd7519245c0aa816934a43e6743160f715d7dc2) )
1310 	ROM_LOAD32_WORD( "pf6 sh070.ic88", 0x400000, 0x100000, CRC(9b5b09d7) SHA1(698a6aab41e495bd0c37a19aee16a84f04d15797) )
1311 	ROM_LOAD32_WORD( "pf9 sh001.ic91", 0x400002, 0x100000, CRC(9f25090e) SHA1(12ff0431ef6550db446985c8914ac7d78eec6b6d) )
1312 
1313 	ROM_REGION( 0x30000, "audiocpu", 0 ) /* Sound program + samples  */
1314 	ROM_LOAD( "1.ic28", 0x00000, 0x20000, CRC(d5bee9cc) SHA1(e638cb5ce7a22c18b60296a7defe8b03418da56c) )
1315 	ROM_RELOAD(         0x10000, 0x20000 )
1316 ROM_END
1317 
1318 ROM_START( sf2mdtb )
1319 	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
1320 	ROM_LOAD16_BYTE( "3.ic172", 0x000000, 0x80000, CRC(0bdb9da2) SHA1(5224ee81d94be70a84ffaa3a56b8093aa36d6b4f) ) // sldh
1321 	ROM_LOAD16_BYTE( "1.ic171", 0x000001, 0x80000, CRC(d88abbce) SHA1(57667a92710bb1d37daed09262c3064d09cbf4af) ) // sldh
1322 	ROM_LOAD16_BYTE( "4.ic176", 0x100000, 0x20000, CRC(74844192) SHA1(99cd546c78cce7f632007af454d8a55eddb6b19b) ) // sldh
1323 	ROM_LOAD16_BYTE( "2.ic175", 0x100001, 0x20000, CRC(bd98ff15) SHA1(ed902d949b0b5c5beaaea78a4b418ffa6db9e1df) ) // sldh
1324 
1325 	ROM_REGION( 0x600000, "gfx", 0 ) /* rearranged in init */
1326 	ROM_LOAD64_WORD( "7.ic90",  0x000000, 0x80000, CRC(896eaf48) SHA1(5a13ae8b554e05eed3d5749aaf5845d499bce45b) )
1327 	ROM_LOAD64_WORD( "10.ic88", 0x000002, 0x80000, CRC(ef3f5be8) SHA1(d4e1de7d7caf6977e48544d6701618ae70c717f9) )
1328 	ROM_LOAD64_WORD( "13.ic89", 0x000004, 0x80000, CRC(305dd72a) SHA1(c373b517c23f3b019abb06e21f6b9ab6e1e47909) )
1329 	ROM_LOAD64_WORD( "16.ic87", 0x000006, 0x80000, CRC(e57f6db9) SHA1(b37f95737804002ec0e237472eaacf0bc1e868e8) )
1330 	ROM_LOAD64_WORD( "6.ic91",  0x200000, 0x80000, CRC(054cd5c4) SHA1(07f275e118c141a84ca15a2e9edc81694af37cf2) )
1331 	ROM_LOAD64_WORD( "9.ic93",  0x200002, 0x80000, CRC(818ca33d) SHA1(dfb707e17c83216f8a62e905f8c7cd6d406b417b) )
1332 	ROM_LOAD64_WORD( "12.ic92", 0x200004, 0x80000, CRC(87e069e8) SHA1(cddd3be84f8379134590bfbbb080518f28120e49) )
1333 	ROM_LOAD64_WORD( "15.ic94", 0x200006, 0x80000, CRC(5dfb44d1) SHA1(08e44b8efc84f9cfc829aabf704155ddc700de76) )
1334 	ROM_LOAD64_WORD( "8.ic86",  0x400000, 0x80000, CRC(34bbb3fa) SHA1(7794e89258f12b17d38c3d302dc15c502a8c8eb6) )
1335 	ROM_LOAD64_WORD( "11.ic84", 0x400002, 0x80000, CRC(cea6d1d6) SHA1(9c953db42f0d877e43c0c239f69a00df39a18295) )
1336 	ROM_LOAD64_WORD( "14.ic85", 0x400004, 0x80000, CRC(7d9f1a67) SHA1(6deb7fff867c42b13a32bb11eda798cfdb4cbaa8) )
1337 	ROM_LOAD64_WORD( "17.ic83", 0x400006, 0x80000, CRC(91a9a05d) SHA1(5266ceddd2df925e79b4200843dec2f7aa9297b3) )
1338 
1339 	ROM_REGION( 0x30000, "audiocpu", 0 ) /* Sound program + samples  */
1340 	ROM_LOAD( "5.ic28", 0x00000, 0x20000, CRC(d5bee9cc) SHA1(e638cb5ce7a22c18b60296a7defe8b03418da56c) )
1341 	ROM_RELOAD(         0x10000, 0x20000 )
1342 ROM_END
1343 
1344 // ************************************************************************* DRIVER MACROS
1345 
1346 GAME( 1991,  captcommb2,  captcomm, captcommb2,  captcommb2,  captcommb2_state,   init_captcommb2,  ROT0,  "bootleg",  "Captain Commando (bootleg with 2xMSM5205)",  MACHINE_SUPPORTS_SAVE )  // 911014 ETC
1347 
1348 GAME( 1991,  knightsb,    knights,  knightsb,    knights,     captcommb2_state,   init_knightsb,    ROT0,  "bootleg",  "Knights of the Round (bootleg with 2xMSM5205, set 1)",  MACHINE_SUPPORTS_SAVE )  // 911127 ETC
1349 GAME( 1991,  knightsb3,   knights,  knightsb,    knights,     captcommb2_state,   init_knightsb,    ROT0,  "bootleg",  "Knights of the Round (bootleg with 2xMSM5205, set 2)",  MACHINE_SUPPORTS_SAVE )  // 911127 ETC
1350 
1351 GAME( 1992,  sf2b,        sf2,      sf2b,        sf2mdt,      cps1bl_5205_state,  init_sf2b,        ROT0,  "bootleg (Playmark)",  "Street Fighter II: The World Warrior (bootleg, set 1)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 910204 ETC
1352 GAME( 1992,  sf2b2,       sf2,      sf2b,        sf2mdt,      cps1bl_5205_state,  init_sf2mdtb,     ROT0,  "bootleg", "Street Fighter II: The World Warrior (bootleg, set 2)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )              // 910204 ETC
1353 
1354 GAME( 1992,  sf2ceb,      sf2ce,    sf2mdt,      sf2mdt,      cps1bl_5205_state,  init_sf2mdta,     ROT0,  "bootleg (Playmark)",  "Street Fighter II': Champion Edition (Playmark bootleg, set 1)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1355 GAME( 1992,  sf2ceb2,     sf2ce,    sf2mdt,      sf2mdt,      cps1bl_5205_state,  init_sf2mdtb,     ROT0,  "bootleg",  "Street Fighter II': Champion Edition (bootleg, set 1)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1356 GAME( 1992,  sf2ceb3,     sf2ce,    sf2mdt,      sf2mdt,      cps1bl_5205_state,  init_sf2mdtb,     ROT0,  "bootleg",  "Street Fighter II': Champion Edition (bootleg, set 2)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1357 GAME( 1992,  sf2ceb4,     sf2ce,    sf2mdt,      sf2mdt,      cps1bl_5205_state,  init_sf2mdtb,     ROT0,  "bootleg",  "Street Fighter II': Champion Edition (Playmark bootleg, set 2)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1358 
1359 GAME( 1992,  sf2mdt,      sf2ce,    sf2mdt,      sf2mdt,      cps1bl_5205_state,  init_sf2mdt,      ROT0,  "bootleg",  "Street Fighter II': Magic Delta Turbo (bootleg, set 1)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1360 GAME( 1992,  sf2mdta,     sf2ce,    sf2mdt,      sf2mdt,      cps1bl_5205_state,  init_sf2mdta,     ROT0,  "bootleg",  "Street Fighter II': Magic Delta Turbo (bootleg, set 2)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1361 GAME( 1992,  sf2mdtb,     sf2ce,    sf2mdt,      sf2mdtb,     cps1bl_5205_state,  init_sf2mdtb,     ROT0,  "bootleg",  "Street Fighter II': Magic Delta Turbo (bootleg, set 3)",  MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )  // 920313 ETC
1362