1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 /***************************************************************************
4 
5 Commando memory map (preliminary)
6 
7 driver by Nicola Salmoria
8 
9 
10 MAIN CPU
11 0000-bfff ROM
12 d000-d3ff Video RAM
13 d400-d7ff Color RAM
14 d800-dbff background video RAM
15 dc00-dfff background color RAM
16 e000-ffff RAM
17 fe00-ff7f Sprites
18 
19 read:
20 c000      IN0
21 c001      IN1
22 c002      IN2
23 c003      DSW1
24 c004      DSW2
25 
26 write:
27 c808-c809 background scroll x position
28 c80a-c80b background scroll y position
29 
30 SOUND CPU
31 0000-3fff ROM
32 4000-47ff RAM
33 
34 write:
35 8000      YM2203 #1 control
36 8001      YM2203 #1 write
37 8002      YM2203 #2 control
38 8003      YM2203 #2 write
39 
40 ****************************************************************************
41 
42 Note : there is an ingame typo bug that doesn't display the bonus life values
43        correctly on the title screen in 'commando', 'commandoj' and 'spaceinv'.
44 
45 ***************************************************************************/
46 
47 // Notes by Jose Tejada (jotego):
48 // The main CPU frequency is 3 MHz, after a two-stage FF clock divider.
49 // The CPU clock is gated by bus arbitrion logic. The CPU clock is halted until
50 // video hardware has an opening in memory access, then the CPU is allowed to
51 // access common memory. This slows down the CPU but doesn't alter its basic 3MHz frequency.
52 //
53 // There is also a DMA circuit that copies object data from the CPU RAM to a buffer
54 // this also slows down the CPU as it is halted during that time.
55 
56 
57 #include "emu.h"
58 #include "includes/commando.h"
59 
60 #include "cpu/z80/z80.h"
61 #include "machine/gen_latch.h"
62 #include "sound/2203intf.h"
63 #include "screen.h"
64 #include "speaker.h"
65 
66 
67 /* Memory Maps */
68 
commando_map(address_map & map)69 void commando_state::commando_map(address_map &map)
70 {
71 	map(0x0000, 0xbfff).rom();
72 	map(0xc000, 0xc000).portr("SYSTEM");
73 	map(0xc001, 0xc001).portr("P1");
74 	map(0xc002, 0xc002).portr("P2");
75 	map(0xc003, 0xc003).portr("DSW1");
76 	map(0xc004, 0xc004).portr("DSW2");
77 	map(0xc800, 0xc800).w("soundlatch", FUNC(generic_latch_8_device::write));
78 	map(0xc804, 0xc804).w(FUNC(commando_state::commando_c804_w));
79 	// 0xc806 triggers the DMA (not emulated)
80 	map(0xc808, 0xc809).w(FUNC(commando_state::commando_scrollx_w));
81 	map(0xc80a, 0xc80b).w(FUNC(commando_state::commando_scrolly_w));
82 	map(0xd000, 0xd3ff).ram().w(FUNC(commando_state::commando_videoram2_w)).share("videoram2");
83 	map(0xd400, 0xd7ff).ram().w(FUNC(commando_state::commando_colorram2_w)).share("colorram2");
84 	map(0xd800, 0xdbff).ram().w(FUNC(commando_state::commando_videoram_w)).share("videoram");
85 	map(0xdc00, 0xdfff).ram().w(FUNC(commando_state::commando_colorram_w)).share("colorram");
86 	map(0xe000, 0xfdff).ram();
87 	map(0xfe00, 0xff7f).ram().share("spriteram");
88 	map(0xff80, 0xffff).ram();
89 }
90 
decrypted_opcodes_map(address_map & map)91 void commando_state::decrypted_opcodes_map(address_map &map)
92 {
93 	map(0x0000, 0xbfff).rom().share("decrypted_opcodes");
94 }
95 
sound_map(address_map & map)96 void commando_state::sound_map(address_map &map)
97 {
98 	map(0x0000, 0x3fff).rom();
99 	map(0x4000, 0x47ff).ram();
100 	map(0x6000, 0x6000).r("soundlatch", FUNC(generic_latch_8_device::read));
101 	map(0x8000, 0x8001).w("ym1", FUNC(ym2203_device::write));
102 	map(0x8002, 0x8003).w("ym2", FUNC(ym2203_device::write));
103 }
104 
105 /* Input Ports */
106 
107 static INPUT_PORTS_START( commando )
108 	PORT_START("SYSTEM")
109 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
110 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
111 	PORT_BIT( 0x0c, IP_ACTIVE_LOW, IPT_UNUSED )
112 	PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNKNOWN )
113 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
114 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
115 
116 	PORT_START("P1")
117 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
118 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
119 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
120 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
121 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
122 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
123 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
124 
125 	PORT_START("P2")
126 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
127 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
128 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
129 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
130 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
131 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
132 	PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
133 
134 	PORT_START("DSW1")
135 	PORT_DIPNAME( 0x03, 0x03, "Starting Area" ) PORT_DIPLOCATION("SW1:8,7")
136 	PORT_DIPSETTING(    0x03, "0 (Forest 1)" )
137 	PORT_DIPSETTING(    0x01, "2 (Desert 1)" )
138 	PORT_DIPSETTING(    0x02, "4 (Forest 2)" )
139 	PORT_DIPSETTING(    0x00, "6 (Desert 2)" )
140 	PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:6,5")
141 	PORT_DIPSETTING(    0x04, "2" )
142 	PORT_DIPSETTING(    0x0c, "3" )
143 	PORT_DIPSETTING(    0x08, "4" )
144 	PORT_DIPSETTING(    0x00, "5" )
145 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:4,3")
146 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) )
147 	PORT_DIPSETTING(    0x20, DEF_STR( 3C_1C ) )
148 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
149 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
150 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2")
151 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
152 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) )
153 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_2C ) )
154 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) )
155 
156 	PORT_START("DSW2")
157 	PORT_DIPNAME( 0x07, 0x07, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:8,7,6")
158 	PORT_DIPSETTING(    0x07, "10K 50K+" )
159 	PORT_DIPSETTING(    0x03, "10K 60K+" )
160 	PORT_DIPSETTING(    0x05, "20K 60K+" )
161 	PORT_DIPSETTING(    0x01, "20K 70K+" )
162 	PORT_DIPSETTING(    0x06, "30K 70K+" )
163 	PORT_DIPSETTING(    0x02, "30K 80K+" )
164 	PORT_DIPSETTING(    0x04, "40K 100K+" )
165 	PORT_DIPSETTING(    0x00, DEF_STR( None ) )
166 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5")
167 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
168 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
169 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:4")
170 	PORT_DIPSETTING(    0x10, DEF_STR( Normal ) )
171 	PORT_DIPSETTING(    0x00, DEF_STR( Difficult ) )
172 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:3")
173 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
174 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
175 	PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:2,1")
176 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
177 	PORT_DIPSETTING(    0x40, "Upright Two Players" )
178 	PORT_DIPSETTING(    0xc0, DEF_STR( Cocktail ) )
179 INPUT_PORTS_END
180 
181 static INPUT_PORTS_START( commandou )
182 	PORT_INCLUDE(commando)
183 
184 	PORT_MODIFY("DSW2")
185 	PORT_SERVICE_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:5" )
186 INPUT_PORTS_END
187 
188 /* Graphics Layouts */
189 
190 static const gfx_layout charlayout =
191 {
192 	8, 8,
193 	RGN_FRAC(1,1),
194 	2,
195 	{ 4, 0 },
196 	{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 },
197 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
198 	16*8
199 };
200 
201 static const gfx_layout tilelayout =
202 {
203 	16, 16,
204 	RGN_FRAC(1,3),
205 	3,
206 	{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3) },
207 	{ 0, 1, 2, 3, 4, 5, 6, 7,
208 			16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
209 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
210 			8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
211 	32*8
212 };
213 
214 static const gfx_layout spritelayout =
215 {
216 	16, 16,
217 	RGN_FRAC(1,2),
218 	4,
219 	{ RGN_FRAC(1,2)+4, RGN_FRAC(1,2)+0, 4, 0 },
220 	{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3,
221 			32*8+0, 32*8+1, 32*8+2, 32*8+3, 33*8+0, 33*8+1, 33*8+2, 33*8+3 },
222 	{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
223 			8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
224 	64*8
225 };
226 
227 /* Graphics Decode Information */
228 
229 static GFXDECODE_START( gfx_commando )
230 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,   192, 16 ) // colors 192-255
231 	GFXDECODE_ENTRY( "gfx2", 0, tilelayout,     0, 16 ) // colors   0-127
232 	GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 128,  4 ) // colors 128-191
233 GFXDECODE_END
234 
235 /* Sound Interface */
236 
237 #define XTAL        12000000
238 #define PHI_B       XTAL/2/2
239 #define PHI_MAIN    XTAL/2/2 // As seen in the schematics:
240 // the signal goes into a bus arbitrion logic that doesn't affect its frequency
241 // although the CPU gets slowed down when accessing char/background memories
242 
243 /* Interrupt Generator */
244 
WRITE_LINE_MEMBER(commando_state::vblank_irq)245 WRITE_LINE_MEMBER(commando_state::vblank_irq)
246 {
247 	if (state)
248 		m_maincpu->set_input_line_and_vector(0, HOLD_LINE, 0xd7); // Z80 - RST 10h - VBLANK
249 }
250 
251 /* Machine Driver */
252 
machine_start()253 void commando_state::machine_start()
254 {
255 	save_item(NAME(m_scroll_x));
256 	save_item(NAME(m_scroll_y));
257 }
258 
machine_reset()259 void commando_state::machine_reset()
260 {
261 	m_scroll_x[0] = 0;
262 	m_scroll_x[1] = 0;
263 	m_scroll_y[0] = 0;
264 	m_scroll_y[1] = 0;
265 }
266 
267 
commando(machine_config & config)268 void commando_state::commando(machine_config &config)
269 {
270 	/* basic machine hardware */
271 	Z80(config, m_maincpu, PHI_MAIN);  // 3 MHz
272 	m_maincpu->set_addrmap(AS_PROGRAM, &commando_state::commando_map);
273 	m_maincpu->set_addrmap(AS_OPCODES, &commando_state::decrypted_opcodes_map);
274 
275 	Z80(config, m_audiocpu, PHI_B);    // 3 MHz
276 	m_audiocpu->set_addrmap(AS_PROGRAM, &commando_state::sound_map);
277 	m_audiocpu->set_periodic_int(FUNC(commando_state::irq0_line_hold), attotime::from_hz(4*60));
278 
279 	/* video hardware */
280 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
281 	screen.set_refresh_hz(60);
282 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
283 	screen.set_size(32*8, 32*8);
284 	screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
285 	screen.set_screen_update(FUNC(commando_state::screen_update_commando));
286 	screen.screen_vblank().set(m_spriteram, FUNC(buffered_spriteram8_device::vblank_copy_rising));
287 	screen.screen_vblank().append(FUNC(commando_state::vblank_irq));
288 	screen.set_palette(m_palette);
289 
290 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_commando);
291 	PALETTE(config, m_palette, palette_device::RGB_444_PROMS, "proms", 256);
292 
293 	BUFFERED_SPRITERAM8(config, m_spriteram);
294 
295 	/* sound hardware */
296 	SPEAKER(config, "mono").front_center();
297 
298 	GENERIC_LATCH_8(config, "soundlatch");
299 
300 	YM2203(config, "ym1", PHI_B/2).add_route(ALL_OUTPUTS, "mono", 0.15);
301 
302 	YM2203(config, "ym2", PHI_B/2).add_route(ALL_OUTPUTS, "mono", 0.15);
303 }
304 
305 
306 /* ROMs */
307 
308 ROM_START( commando )
309 	ROM_REGION( 0xc000, "maincpu", 0 )
310 	ROM_LOAD( "cm04.9m",  0x0000, 0x8000, CRC(8438b694) SHA1(e154478d8f1b635355bd777370acabe49cb9d309) )
311 	ROM_LOAD( "cm03.8m",  0x8000, 0x4000, CRC(35486542) SHA1(531a85c9e03970ce037be84f2240c2df6f6e3ec1) )
312 
313 	ROM_REGION( 0x10000, "audiocpu", 0 )
CRC(f9cc4a74)314 	ROM_LOAD( "cm02.9f",  0x0000, 0x4000, CRC(f9cc4a74) SHA1(ee8dd73919c6f47f62cc6d999de9510db9f79b8f) )
315 
316 	ROM_REGION( 0x4000, "gfx1", 0 )
317 	ROM_LOAD( "vt01.5d",  0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
318 
319 	ROM_REGION( 0x18000, "gfx2", 0 )
320 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
321 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
322 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
323 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
324 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
325 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
326 
327 	ROM_REGION( 0x18000, "gfx3", 0 )
328 	ROM_LOAD( "vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // sprites
329 	ROM_LOAD( "vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
330 	ROM_LOAD( "vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
331 	ROM_LOAD( "vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )
332 	ROM_LOAD( "vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
333 	ROM_LOAD( "vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
334 
335 	ROM_REGION( 0x600, "proms", 0 )
336 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
337 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
338 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
339 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
340 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
341 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
342 ROM_END
343 
344 ROM_START( commandou )
345 	ROM_REGION( 0xc000, "maincpu", 0 )
346 	ROM_LOAD( "u4-f.9m",  0x0000, 0x8000, CRC(a6118935) SHA1(d5811968b23d61e344e151747bcc3c0ed2b9497b) )
347 	ROM_LOAD( "u3-f.8m",  0x8000, 0x4000, CRC(24f49684) SHA1(d38a7bd9f3b506747a03f6b94c3f8a2d9fc59166) )
348 
349 	ROM_REGION( 0x10000, "audiocpu", 0 )
350 	ROM_LOAD( "cm02.9f",  0x0000, 0x4000, CRC(f9cc4a74) SHA1(ee8dd73919c6f47f62cc6d999de9510db9f79b8f) )
351 
352 	ROM_REGION( 0x4000, "gfx1", 0 )
353 	ROM_LOAD( "vt01.5d",  0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
354 
355 	ROM_REGION( 0x18000, "gfx2", 0 )
356 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
357 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
358 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
359 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
360 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
361 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
362 
363 	ROM_REGION( 0x18000, "gfx3", 0 )
364 	ROM_LOAD( "vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // sprites
365 	ROM_LOAD( "vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
366 	ROM_LOAD( "vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
367 	ROM_LOAD( "vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )
368 	ROM_LOAD( "vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
369 	ROM_LOAD( "vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
370 
371 	ROM_REGION( 0x600, "proms", 0 )
372 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
373 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
374 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
375 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
376 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
377 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
378 ROM_END
379 
380 ROM_START( commandoj )
381 	ROM_REGION( 0xc000, "maincpu", 0 )
382 	ROM_LOAD( "so04.9m", 0x0000, 0x8000, CRC(d3f2bfb3) SHA1(738a5673ac6a907cb04cfb125e8aab3f7437b9d2) )
383 	ROM_LOAD( "so03.8m", 0x8000, 0x4000, CRC(ed01f472) SHA1(fa181293ae8f0fee78d412259eb81f6de1e1307a) )
384 
385 	ROM_REGION( 0x10000, "audiocpu", 0 )
386 	ROM_LOAD( "so02.9f", 0x0000, 0x4000, CRC(ca20aca5) SHA1(206a8fd4a8985e7ceed7de8349ba02627e881503) )
387 
388 	ROM_REGION( 0x4000, "gfx1", 0 )
389 	ROM_LOAD( "vt01.5d",  0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
390 
391 	ROM_REGION( 0x18000, "gfx2", 0 )
392 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
393 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
394 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
395 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
396 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
397 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
398 
399 	ROM_REGION( 0x18000, "gfx3", 0 )
400 	ROM_LOAD( "vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // sprites
401 	ROM_LOAD( "vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
402 	ROM_LOAD( "vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
403 	ROM_LOAD( "vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )
404 	ROM_LOAD( "vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
405 	ROM_LOAD( "vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
406 
407 	ROM_REGION( 0x600, "proms", 0 )
408 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
409 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
410 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
411 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
412 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
413 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
414 ROM_END
415 
416 ROM_START( commandob )
417 	ROM_REGION( 0xc000, "maincpu", 0 )
418 	ROM_LOAD( "commandob_04_9m_27256.bin",  0x0000, 0x8000, CRC(348a7654) SHA1(f3668c47c154a9c7d7afeabb0259c9bc56e847ac) )
419 	ROM_LOAD( "cm03.8m",  0x8000, 0x4000, CRC(35486542) SHA1(531a85c9e03970ce037be84f2240c2df6f6e3ec1) )
420 
421 	ROM_REGION( 0x10000, "audiocpu", 0 )
422 	ROM_LOAD( "cm02.9f",  0x0000, 0x4000, CRC(f9cc4a74) SHA1(ee8dd73919c6f47f62cc6d999de9510db9f79b8f) )
423 
424 	ROM_REGION( 0x4000, "gfx1", 0 )
425 	ROM_LOAD( "vt01.5d",  0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
426 
427 	ROM_REGION( 0x18000, "gfx2", 0 )
428 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
429 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
430 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
431 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
432 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
433 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
434 
435 	ROM_REGION( 0x18000, "gfx3", 0 )
436 	ROM_LOAD( "vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // sprites
437 	ROM_LOAD( "vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
438 	ROM_LOAD( "vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
439 	ROM_LOAD( "vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )
440 	ROM_LOAD( "vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
441 	ROM_LOAD( "vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
442 
443 		/* I did not dumped the PROMs of the bootleg board, I'm just adding the parent ones, it has the same
444 		   number of PROMs on the same board locations as the original board. */
445 	ROM_REGION( 0x600, "proms", 0 )
446 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
447 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
448 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
449 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
450 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
451 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
452 
453 		/* There's a 16L8A PAL (with a 74LS244P and a 74LS367AP) on a tiny sub-board between the CPU1 ROMs
454 		   and the CPU1 (a Z80 compatible NEC D780C-1). This sub-board is plugged on what seems to be
455 		   a ROM socket. */
456 	ROM_REGION( 0x0200, "plds", 0 )
457 	ROM_LOAD( "commandob_pal16l8a.bin", 0x0000, 0x0104, NO_DUMP ) /* I Didn't try to dump it... */
458 ROM_END
459 
460 ROM_START( commandob2 )
461 	ROM_REGION( 0xc000, "maincpu", 0 )
462 	ROM_LOAD( "10",  0x0000, 0x8000, CRC(ab5d1469) SHA1(05935155365bef3c40823101303a3857af1c71e6) )
463 	ROM_LOAD( "11",  0x8000, 0x4000, CRC(d1a43ba1) SHA1(dbaedcd3a1b489a01b7f783fda6fcad203758717) )
464 
465 	ROM_REGION( 0x10000, "audiocpu", 0 )
466 	ROM_LOAD( "8,so02.9f",  0x0000, 0x4000, CRC(ca20aca5) SHA1(206a8fd4a8985e7ceed7de8349ba02627e881503) )
467 
468 	ROM_REGION( 0x4000, "gfx1", 0 )
469 	ROM_LOAD( "7,vt01.5d",  0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
470 
471 	ROM_REGION( 0x18000, "gfx2", 0 )
472 	ROM_LOAD( "17,vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
473 	ROM_LOAD( "16,vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
474 	ROM_LOAD( "15,vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
475 	ROM_LOAD( "14,vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
476 	ROM_LOAD( "13,vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
477 	ROM_LOAD( "12,vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
478 
479 	ROM_REGION( 0x18000, "gfx3", 0 )
480 	ROM_LOAD( "3,vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // sprites
481 	ROM_LOAD( "2,vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
482 	ROM_LOAD( "1,vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
483 	ROM_LOAD( "6,vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )
484 	ROM_LOAD( "5,vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
485 	ROM_LOAD( "4,vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
486 
487 		/* I did not dumped the PROMs of the bootleg board, I'm just adding the parent ones, it has the same
488 		   number of PROMs on the same board locations as the original board. */
489 	ROM_REGION( 0x600, "proms", 0 )
490 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
491 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
492 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
493 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
494 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
495 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
496 
497 		/* There's a 16L8 PAL (with a 74LS245 and a 74LS08) on a tiny sub-board between the CPU1 ROMs
498 		   and the CPU1 (a Z80 compatible NEC D780C-1). This sub-board is plugged on what seems to be
499 		   a ROM socket.
500 
501 		PAL16L8 (SWELT-019A)
502 
503 		Pin 1  - Pin 12 of 27256 (D1) and Pin 3 of 74LS245 (A2) (Input)
504 		Pin 2  - Pin 13 of 27256 (D2) and Pin 4 of 74LS245 (A3) (Input)
505 		Pin 3  - Pin 15 of 27256 (D3) and Pin 5 of 74LS245 (A4) (Input)
506 		Pin 4  - Pin 8 of 74LS08 (Input)
507 		Pin 5  - Pin 17 of 27256 (D5) and Pin 7 of 74LS245 (A6) (Input)
508 		Pin 6  - Pin 18 of 27256 (D6) and Pin 8 of 74LS245 (A7) (Input)
509 		Pin 7  - Pin 19 of 27256 (D7) and Pin 9 of 74LS245 (A8) (Input)
510 		Pin 8  - Pin 6 of 74LS14 (Input)
511 		Pin 9  - Pin 11 of 74LS08 (Input)
512 		Pin 10 - Ground
513 		Pin 11 - Pin 22 of Z80 (~WD) and Pin 1 of 74LS245 (DIR) (Input)
514 		Pin 12 - Pin 19 of 74LS245 (~OE) (Output)
515 		Pin 13 - Pin 13 of Z80 (D7) (Input?, Output)
516 		Pin 14 - Pin 10 of Z80 (D6) (Input?, Output)
517 		Pin 15 - Pin 9 of Z80 (D5) (Input?, Output)
518 		Pin 16 - Not Used (Input?, Output)
519 		Pin 17 - Pin 8 of Z80 (D3) (Input?, Output)
520 		Pin 18 - Pin 12 of Z80 (D2) (Input?, Output)
521 		Pin 19 - Pin 15 of Z80 (D1) (Output)
522 		Pin 20 - VCC
523 
524 		------------------------------------------------------------------------------
525 
526 		Pin 14 of Z80 (D0) to Pin 11 of 27256 (D0)
527 		Pin 7 of Z80 (D4) to Pin 16 of 27256 (D4)
528 		*/
529 
530 	ROM_REGION( 0x0200, "plds", 0 )
531 	ROM_LOAD( "commandob2_pal16l8.bin", 0x000000, 0x000104, CRC(bdbcaf02) SHA1(148591f95a343c8ffa2eaa02764c91557aa523d3) )
532 ROM_END
533 
534 // mix of ROMs from Mercenario and other commando bootlegs, only the first maincpu ROM is unique
535 ROM_START( commandob3 )
536 	ROM_REGION( 0xc000, "maincpu", 0 )
537 	ROM_LOAD( "b5.10n",  0x0000, 0x4000, CRC(df8f4e9a) SHA1(72f08dc70a72c183c3f071ed47b1d060516e545a) ) // like mercenario but for byte 0x00 changed to the encrypted one
538 	ROM_LOAD( "b4.9n",   0x4000, 0x4000, CRC(aca99905) SHA1(609cf3d180ceb0c67e2deff9db16fa56c8948a97) ) // like mercenario
539 	ROM_LOAD( "b3.8n",   0x8000, 0x4000, CRC(35486542) SHA1(531a85c9e03970ce037be84f2240c2df6f6e3ec1) ) // like commandob
540 
541 	ROM_REGION( 0x10000, "audiocpu", 0 )
542 	ROM_LOAD( "b2.9f",   0x0000, 0x4000, CRC(f9cc4a74) SHA1(ee8dd73919c6f47f62cc6d999de9510db9f79b8f) )    // 2c.9f
543 
544 	ROM_REGION( 0x4000, "gfx1", 0 )
545 	ROM_LOAD( "b1.5d",   0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
546 
547 	ROM_REGION( 0x18000, "gfx2", 0 )
548 	ROM_LOAD( "b12.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // 11c.5a
549 	ROM_LOAD( "b13.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // 12c.6a
550 	ROM_LOAD( "b14.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // 13c.7a
551 	ROM_LOAD( "b15.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // 14c.8a
552 	ROM_LOAD( "b16.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // 15c.9a
553 	ROM_LOAD( "b17.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // 16c.10a
554 
555 	ROM_REGION( 0x18000, "gfx3", 0 )
556 	ROM_LOAD( "b6.7e",   0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // 5c.7e
557 	ROM_LOAD( "b7.8e",   0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )   // 6c.8e
558 	ROM_LOAD( "b8.9e",   0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )   // 7c.9e
559 	ROM_LOAD( "b9.7h",   0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )   // 8c.7h
560 	ROM_LOAD( "b10.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )   // 9c.8h
561 	ROM_LOAD( "b11.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )   // 10c.9h
562 
563 	ROM_REGION( 0x600, "proms", 0 )
564 	ROM_LOAD( "vtb1.1d", 0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
565 	ROM_LOAD( "vtb2.2d", 0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
566 	ROM_LOAD( "vtb3.3d", 0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
567 	ROM_LOAD( "vtb4.1h", 0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
568 	ROM_LOAD( "vtb5.6l", 0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
569 	ROM_LOAD( "vtb6.6e", 0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
570 ROM_END
571 
572 ROM_START( commandou2 )
573 	ROM_REGION( 0xc000, "maincpu", 0 )
574 	ROM_LOAD( "uc4.9m",   0x0000, 0x8000, CRC(89ee8e17) SHA1(68db271af8b0f400ca95df5672983bfb87f3f84a) )
575 	ROM_LOAD( "uc3.8m",   0x8000, 0x4000, CRC(72a1a529) SHA1(fe7797206e38bd78e817b6c351d5cb943720fe6c) )
576 
577 	ROM_REGION( 0x10000, "audiocpu", 0 )
578 	ROM_LOAD( "cd02.9f",  0x0000, 0x4000, CRC(f9cc4a74) SHA1(ee8dd73919c6f47f62cc6d999de9510db9f79b8f) )
579 
580 	ROM_REGION( 0x4000, "gfx1", 0 )
581 	ROM_LOAD( "vt01.5d",  0x0000, 0x4000, CRC(505726e0) SHA1(2435c87c9c9d78a6e703cf0e1f6a0288207fcd4c) )    // characters
582 
583 	ROM_REGION( 0x18000, "gfx2", 0 )
584 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
585 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
586 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
587 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
588 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
589 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
590 
591 	ROM_REGION( 0x18000, "gfx3", 0 )
592 	ROM_LOAD( "vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // sprites
593 	ROM_LOAD( "vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
594 	ROM_LOAD( "vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
595 	ROM_LOAD( "vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )
596 	ROM_LOAD( "vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
597 	ROM_LOAD( "vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
598 
599 	ROM_REGION( 0x600, "proms", 0 )
600 	ROM_LOAD( "vtb-1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
601 	ROM_LOAD( "vtb-2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
602 	ROM_LOAD( "vtb-3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
603 	ROM_LOAD( "vtb-4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
604 	ROM_LOAD( "vtb-5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
605 	ROM_LOAD( "vtb-6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
606 ROM_END
607 
608 ROM_START( sinvasn )
609 	ROM_REGION( 0xc000, "maincpu", 0 )
610 	ROM_LOAD( "sp04.9m",  0x0000, 0x8000, CRC(33f9601e) SHA1(71182227b77fccbbc1d89b5828aa86dcc64ca05e) )
611 	ROM_LOAD( "sp03.8m",  0x8000, 0x4000, CRC(c7fb43b3) SHA1(36d0dffdacc36a6b6a77101d942c0821846f3275) )
612 
613 	ROM_REGION( 0x10000, "audiocpu", 0 )
614 	ROM_LOAD( "u2.9f",    0x0000, 0x4000, CRC(cbf8c40e) SHA1(0c8dce034d96d075e012cbb8f68c2817b860d969) )
615 
616 	ROM_REGION( 0x04000, "gfx1", 0 )
617 	ROM_LOAD( "u1.5d",    0x0000, 0x4000, CRC(f477e13a) SHA1(ec5b80f5d508501e72cba028dc45b2c307ac452b) )    /* characters */
618 
619 	ROM_REGION( 0x18000, "gfx2", 0 )
620 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
621 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
622 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
623 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
624 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
625 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
626 
627 	ROM_REGION( 0x18000, "gfx3", 0 )
628 	ROM_LOAD( "u5.e7",    0x00000, 0x4000, CRC(2a97c933) SHA1(bfddb0c0f930a7caffad7e52d394d72c09ffb45f) )   /* sprites */
629 	ROM_LOAD( "sp06.e8",  0x04000, 0x4000, CRC(d7887212) SHA1(43ad98263d6314d40abf33087127c23a3ad72335) )
630 	ROM_LOAD( "sp07.e9",  0x08000, 0x4000, CRC(9abe7a20) SHA1(5f1b851bd66a3ab818b893286d3ebf2194f425c4) )
631 	ROM_LOAD( "u8.h7",    0x0c000, 0x4000, CRC(d6b4aa2e) SHA1(5bbf536f73010182b9150dd4fb1e2a42b5b380b0) )
632 	ROM_LOAD( "sp09.h8",  0x10000, 0x4000, CRC(3985b318) SHA1(ac4c67c3af42121869c1b9470377404bc88793c2) )
633 	ROM_LOAD( "sp10.h9",  0x14000, 0x4000, CRC(3c131b0f) SHA1(dd3e63199120502c03eedd024a2eed3b5d3e2a1c) )
634 
635 	ROM_REGION( 0x0600, "proms", 0 )
636 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
637 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
638 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
639 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
640 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
641 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
642 ROM_END
643 
644 ROM_START( sinvasnb )
645 	ROM_REGION( 0xc000, "maincpu", 0 )
646 	ROM_LOAD( "u4",       0x0000, 0x8000, CRC(834ba0de) SHA1(85f40559e6a436f3f752b6e862a419a5b9481fa8) )
647 	ROM_LOAD( "u3",       0x8000, 0x4000, CRC(07e4ee3a) SHA1(6d7665b3072f075893ef37e55147b10271d069ef) )
648 
649 	ROM_REGION( 0x10000, "audiocpu", 0 )
650 	ROM_LOAD( "u2",       0x0000, 0x4000, CRC(cbf8c40e) SHA1(0c8dce034d96d075e012cbb8f68c2817b860d969) )
651 
652 	ROM_REGION( 0x04000, "gfx1", 0 )
653 	ROM_LOAD( "u1",       0x0000, 0x4000, CRC(f477e13a) SHA1(ec5b80f5d508501e72cba028dc45b2c307ac452b) )    /* characters */
654 
655 	ROM_REGION( 0x18000, "gfx2", 0 )
656 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // SCR X (tiles)
657 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // SCR X
658 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // SCR Y
659 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // SCR Y
660 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // SCR Z
661 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // SCR Z
662 
663 	ROM_REGION( 0x18000, "gfx3", 0 )
664 	ROM_LOAD( "u5",       0x00000, 0x4000, CRC(2a97c933) SHA1(bfddb0c0f930a7caffad7e52d394d72c09ffb45f) )   /* sprites */
665 	ROM_LOAD( "vt06.e8",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )
666 	ROM_LOAD( "vt07.e9",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )
667 	ROM_LOAD( "u8",       0x0c000, 0x4000, CRC(d6b4aa2e) SHA1(5bbf536f73010182b9150dd4fb1e2a42b5b380b0) )
668 	ROM_LOAD( "vt09.h8",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )
669 	ROM_LOAD( "vt10.h9",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )
670 
671 	ROM_REGION( 0x0600, "proms", 0 )
672 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
673 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
674 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
675 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
676 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
677 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
678 ROM_END
679 
680 ROM_START( mercenario )
681 	ROM_REGION( 0xc000, "maincpu", 0 )
682 	ROM_LOAD( "4ac.bin",  0x0000, 0x4000, CRC(59ebf408) SHA1(ce2c06580a9fc902b1f6409249f25eba8216af8a) )
683 	ROM_LOAD( "4bc.bin",  0x4000, 0x4000, CRC(aca99905) SHA1(609cf3d180ceb0c67e2deff9db16fa56c8948a97) )
684 	ROM_LOAD( "b3.8n",    0x8000, 0x4000, CRC(f998d08a) SHA1(05d86daeaaffbf5f67c77b630b91064c9ae7b6d4) )
685 
686 	ROM_REGION( 0x10000, "audiocpu", 0 )
687 	ROM_LOAD( "cm02.9f",  0x0000, 0x4000, CRC(f9cc4a74) SHA1(ee8dd73919c6f47f62cc6d999de9510db9f79b8f) )    // 2c.9f
688 
689 	ROM_REGION( 0x4000, "gfx1", 0 )
690 	ROM_LOAD( "1c.5d",    0x0000, 0x4000, CRC(fe3ebe35) SHA1(298f1620e83929af01bc9c999262c022e9421c41) )    // characters
691 
692 	ROM_REGION( 0x18000, "gfx2", 0 )
693 	ROM_LOAD( "vt11.5a",  0x00000, 0x4000, CRC(7b2e1b48) SHA1(5d49e1d8146e4ef744445b68f35677302e875a85) )   // 11c.5a
694 	ROM_LOAD( "vt12.6a",  0x04000, 0x4000, CRC(81b417d3) SHA1(5ec7e3f0c8069384a5f6eb39232c228b9d7b8c0c) )   // 12c.6a
695 	ROM_LOAD( "vt13.7a",  0x08000, 0x4000, CRC(5612dbd2) SHA1(9e4e1a22b6cbf60607b9a81dae34482ae55f7c47) )   // 13c.7a
696 	ROM_LOAD( "vt14.8a",  0x0c000, 0x4000, CRC(2b2dee36) SHA1(8792278464fa3da47176582025f6673a15a581e2) )   // 14c.8a
697 	ROM_LOAD( "vt15.9a",  0x10000, 0x4000, CRC(de70babf) SHA1(6717e23baf55f84d3143fb432140a7c3e102ac26) )   // 15c.9a
698 	ROM_LOAD( "vt16.10a", 0x14000, 0x4000, CRC(14178237) SHA1(f896e71c7004349c9a46155edfd9f0aaa186065d) )   // 16c.10a
699 
700 	ROM_REGION( 0x18000, "gfx3", 0 )
701 	ROM_LOAD( "vt05.7e",  0x00000, 0x4000, CRC(79f16e3d) SHA1(04e1f03a4d6b4cc2b81bce3a290bbb95de900d35) )   // 5c.7e
702 	ROM_LOAD( "vt06.8e",  0x04000, 0x4000, CRC(26fee521) SHA1(2fbfc73ee860f72a20229a01d4da9f5cc2e858d3) )   // 6c.8e
703 	ROM_LOAD( "vt07.9e",  0x08000, 0x4000, CRC(ca88bdfd) SHA1(548b05460bc7983cc81f15c70e87f47d10db2812) )   // 7c.9e
704 	ROM_LOAD( "vt08.7h",  0x0c000, 0x4000, CRC(2019c883) SHA1(883c0156ceab99f4849fe36972c4162b4ac8c216) )   // 8c.7h
705 	ROM_LOAD( "vt09.8h",  0x10000, 0x4000, CRC(98703982) SHA1(ba9a9b0dcadd4f52502828408c4a19b0bd518351) )   // 9c.8h
706 	ROM_LOAD( "vt10.9h",  0x14000, 0x4000, CRC(f069d2f8) SHA1(2c92300a9407470b34965021de882f1f7a84730c) )   // 10c.9h
707 
708 	ROM_REGION( 0x600, "proms", 0 )
709 	ROM_LOAD( "vtb1.1d",  0x0000, 0x0100, CRC(3aba15a1) SHA1(8b057f6e26155dd9e48bde182e680fce4519f600) )    /* red */
710 	ROM_LOAD( "vtb2.2d",  0x0100, 0x0100, CRC(88865754) SHA1(ca6dddca98baf00a65b2fb70b69cf4704ef8c831) )    /* green */
711 	ROM_LOAD( "vtb3.3d",  0x0200, 0x0100, CRC(4c14c3f6) SHA1(644ac17c7413f094ec9a15cba87bbd421b26321f) )    /* blue */
712 	ROM_LOAD( "vtb4.1h",  0x0300, 0x0100, CRC(b388c246) SHA1(038f9851699331ad887b6281a9df053dca3db8fd) )    /* palette selector (not used) */
713 	ROM_LOAD( "vtb5.6l",  0x0400, 0x0100, CRC(712ac508) SHA1(5349d722ab6733afdda65f6e0a98322f0d515e86) )    /* interrupt timing (not used) */
714 	ROM_LOAD( "vtb6.6e",  0x0500, 0x0100, CRC(0eaf5158) SHA1(bafd4108708f66cd7b280e47152b108f3e254fc9) )    /* video timing (not used) */
715 ROM_END
716 
717 
718 /* Driver Initialization */
719 
720 void commando_state::init_commando()
721 {
722 	uint8_t *rom = memregion("maincpu")->base();
723 
724 	// the first opcode is *not* encrypted
725 	m_decrypted_opcodes[0] = rom[0];
726 	for (int A = 1; A < 0xc000; A++)
727 	{
728 		uint8_t src = rom[A];
729 		m_decrypted_opcodes[A] = (src & 0x11) | ((src & 0xe0) >> 4) | ((src & 0x0e) << 4);
730 	}
731 }
732 
init_spaceinv()733 void commando_state::init_spaceinv()
734 {
735 	uint8_t *rom = memregion("maincpu")->base();
736 
737 	// the first opcode *is* encrypted
738 	for (int A = 0; A < 0xc000; A++)
739 	{
740 		uint8_t src = rom[A];
741 		m_decrypted_opcodes[A] = (src & 0x11) | ((src & 0xe0) >> 4) | ((src & 0x0e) << 4);
742 	}
743 }
744 
745 /* Game Drivers */
746 
747 GAME( 1985, commando,   0,        commando, commando, commando_state, init_commando, ROT270, "Capcom", "Commando (World)", MACHINE_SUPPORTS_SAVE )
748 GAME( 1985, commandou,  commando, commando, commandou,commando_state, init_commando, ROT270, "Capcom (Data East USA license)", "Commando (US set 1)", MACHINE_SUPPORTS_SAVE )
749 GAME( 1985, commandou2, commando, commando, commando, commando_state, init_commando, ROT270, "Capcom (Data East USA license)", "Commando (US set 2)", MACHINE_SUPPORTS_SAVE )
750 GAME( 1985, commandoj,  commando, commando, commando, commando_state, init_commando, ROT270, "Capcom", "Senjou no Ookami", MACHINE_SUPPORTS_SAVE )
751 GAME( 1985, commandob,  commando, commando, commando, commando_state, init_spaceinv, ROT270, "bootleg", "Commando (bootleg set 1)", MACHINE_SUPPORTS_SAVE )
752 GAME( 1985, commandob2, commando, commando, commando, commando_state, init_commando, ROT270, "bootleg", "Commando (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
753 GAME( 1985, commandob3, commando, commando, commando, commando_state, init_commando, ROT270, "bootleg", "Commando (bootleg set 3)", MACHINE_SUPPORTS_SAVE )
754 GAME( 1985, sinvasn,    commando, commando, commando, commando_state, init_commando, ROT270, "Capcom", "Space Invasion (Europe)", MACHINE_SUPPORTS_SAVE )
755 GAME( 1985, sinvasnb,   commando, commando, commando, commando_state, init_spaceinv, ROT270, "bootleg", "Space Invasion (bootleg)", MACHINE_SUPPORTS_SAVE )
756 GAME( 1985, mercenario, commando, commando, commando, commando_state, init_spaceinv, ROT270, "bootleg", "Mercenario (Commando bootleg)", MACHINE_SUPPORTS_SAVE )
757