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