1 // license:BSD-3-Clause
2 // copyright-holders:R. Belmont, Acho A. Tang
3 /***************************************************************************
4 
5  Wild West C.O.W.boys of Moo Mesa
6  Bucky O'Hare
7  (c) 1992 Konami
8  Driver by R. Belmont and Acho A. Tang based on xexex.cpp by Olivier Galibert.
9  Moo Mesa protection information thanks to ElSemi and OG.
10 
11  These are the final Xexex hardware games before the pre-GX/Mystic Warriors
12  hardware took over.
13 
14 
15 Wild West C.O.W. Boys Of Moo Mesa
16 Konami 1992
17 
18 PCB Layout
19 ----------
20 GX151 PWB353126
21 |--------------------------------------------------------|
22 |LA4705                             151A11.A8  151A11.A10|
23 |                        151A08.B6  151A10.B8  151A12.B10|
24 | 054986    |------|     62256                  |------| |
25 |           |054539|     62256                  |053246A |
26 |S_OUT      |      |          054744   5168     |      | |
27 |           |      |                   5168     |      | |
28 |           |------|                            |      | |
29 | YM2151  Z80E  151A07.F5                       |------| |
30 |                                                        |
31 |J   051550                                     |------| |
32 |A                                              |053247A |
33 |M 054573   |------| 2018                       |      | |
34 |M 054753   |054338| 2018                       |      | |
35 |A 054753   |      | 2018                       |      | |
36 |  054754   |      |                  |------|  |------| |
37 |           |------|  053252          |053251|   5168    |
38 |                    |------|         |      |   5168    |
39 | 18.432MHz |-----|  |053990|         |------|   5168    |
40 | 32MHz     |68000|  |      |          |------|          |
41 |           |     |  |------|          |054157| |------| |
42 |  ER5911.N2|-----|  055373            |      | |054156| |
43 |                                      |      | |      | |
44 |005273(X10)   151B01.Q5  151AAB02.Q6  |      | |      | |
45 |TEST_SW       62256      62256        |------| |      | |
46 |              151A03.T5  151A04.T6             |------| |
47 |PL3 PL4 DSW(4)                      151A05.T8 151A06.T10|
48 |--------------------------------------------------------|
49 Notes:
50       68000   - Clock 16.000MHz [32/2]
51       Z80E    - Clock 8.000MHz [32/4]
52       YM2151  - Clock 4.000MHz [32/8]
53       62256   - KM62256 32kx8 SRAM (DIP28)
54       5168    - Sharp LH5168 8kx8 SRAM (DIP28)
55       ER5911  - EEPROM (128 bytes)
56       S_OUT   - 4 pin connector for stereo sound output
57       PL3/PL4 - 15 pin connectors for player 3 & player 4 controls
58       151*    - EPROM/mask ROM
59       LA4705  - Power AMP IC
60 
61       Custom Chips
62       ------------
63       053990  - ? (Connected to 68000, main program ROMs and 2018 RAM)
64       053251  - Priority encoder
65       053252  - Timing/Interrupt controller. Clock input 32MHz
66       054157  \
67       054156  / Tilemap generators
68       053246A \
69       053247A / Sprite generators
70       054539  - 8-Channel ADPCM sound generator. Clock input 18.432MHz. Clock outputs 18.432/4 & 18.432/8
71       054573  - Video DAC (one for each R,G,B video signal)
72       054574  - Possibly RGB mixer/DAC/filter? (connected to 054573)
73       054338  - Color mixer for special effects/alpha blending etc (connected to 054573 & 054574 and 2018 RAM)
74       051550  - EMI filter for credit/coin counter
75       005273  - Resistor array for player 3 & player 4 controls
76       054986  - Audio DAC/filter
77       054744  - PAL16L8
78       055373  - PAL20L10
79 
80       Sync Measurements
81       -----------------
82       HSync - 15.2036kHz
83       VSync - 59.1858Hz
84 
85 
86 ****************************************************************************
87 
88 Bug Fixes and Outstanding Issues
89 --------------------------------
90 Moo:
91  - 54338 color blender support. Works fine with Bucky but needs a correct
92    enable/disable bit in Moo. (intro gfx missing and fog blocking view)
93  - Enemies coming out of the jail cells in the last stage have wrong priority.
94    Could be tile priority or the typical "small Z, big pri" sprite masking
95    trick currently not supported by k053247_sprites_draw().
96 
97 Moo (bootleg):
98  - No sprites appear, and the game never enables '246 interrupts.  Of course,
99    they're using some copy of a '246 on FPGAs, so who knows what's going on...
100 
101 Bucky:
102  - Shadows sometimes have wrong priority. (unsupported priority modes)
103  - Gaps between zoomed sprites. (fraction round-off)
104  - Rogue sprites keep popping on screen after stage 2. They can usually be
105    found near 950000 with sprite code around 5e40 or f400. The GFX viewer
106    only shows blanks at 5e40, however. Are they invalid data from bad
107    sprite ROMs or markers that aren't supposed to be displayed? These
108    artifacts have one thing in common: they all have zero zcode. In fact
109    no other sprites in Bucky seems to have zero zcode.
110 
111    Update: More garbages seen in later stages with a great variety.
112    There's enough indication to assume Bucky simply ignores sprites with
113    zero Z. I wonder why nobody reported this.
114 
115 ***************************************************************************/
116 
117 #include "emu.h"
118 #include "includes/moo.h"
119 #include "includes/konamipt.h"
120 
121 #include "cpu/m68000/m68000.h"
122 #include "cpu/z80/z80.h"
123 #include "machine/eepromser.h"
124 #include "sound/ym2151.h"
125 #include "sound/okim6295.h"
126 #include "sound/k054539.h"
127 #include "speaker.h"
128 
129 #define MOO_DEBUG 0
130 #define MOO_DMADELAY (100)
131 
132 
control2_r()133 uint16_t moo_state::control2_r()
134 {
135 	return m_cur_control2;
136 }
137 
control2_w(offs_t offset,uint16_t data,uint16_t mem_mask)138 void moo_state::control2_w(offs_t offset, uint16_t data, uint16_t mem_mask)
139 {
140 	/* bit 0  is data */
141 	/* bit 1  is cs (active low) */
142 	/* bit 2  is clock (active high) */
143 	/* bit 5  is enable irq 5 (unconfirmed) */
144 	/* bit 8  is enable sprite ROM reading */
145 	/* bit 10 is watchdog */
146 	/* bit 11 is enable irq 4 (unconfirmed) */
147 
148 	COMBINE_DATA(&m_cur_control2);
149 
150 	ioport("EEPROMOUT")->write(m_cur_control2, 0xff);
151 
152 	if (data & 0x100)
153 		m_k053246->k053246_set_objcha_line( ASSERT_LINE);
154 	else
155 		m_k053246->k053246_set_objcha_line( CLEAR_LINE);
156 }
157 
158 
moo_objdma()159 void moo_state::moo_objdma()
160 {
161 	int num_inactive;
162 	uint16_t *src, *dst;
163 	int counter = m_k053246->k053247_get_dy();
164 
165 	m_k053246->k053247_get_ram( &dst);
166 	src = m_spriteram;
167 	num_inactive = counter = 256;
168 
169 	do
170 	{
171 		if ((*src & 0x8000) && (*src & m_zmask))
172 		{
173 			memcpy(dst, src, 0x10);
174 			dst += 8;
175 			num_inactive--;
176 		}
177 		src += 0x80;
178 	}
179 	while (--counter);
180 
181 	if (num_inactive)
182 	{
183 		do
184 		{
185 			*dst = 0;
186 			dst += 8;
187 		}
188 		while (--num_inactive);
189 	}
190 }
191 
TIMER_CALLBACK_MEMBER(moo_state::dmaend_callback)192 TIMER_CALLBACK_MEMBER(moo_state::dmaend_callback)
193 {
194 	if (m_cur_control2 & 0x800)
195 		m_maincpu->set_input_line(4, HOLD_LINE);
196 }
197 
INTERRUPT_GEN_MEMBER(moo_state::moo_interrupt)198 INTERRUPT_GEN_MEMBER(moo_state::moo_interrupt)
199 {
200 	if (m_k053246->k053246_is_irq_enabled())
201 	{
202 		moo_objdma();
203 
204 		// schedule DMA end interrupt (delay shortened to catch up with V-blank)
205 		m_dmaend_timer->adjust(attotime::from_usec(MOO_DMADELAY));
206 	}
207 
208 	// trigger V-blank interrupt
209 	if (m_cur_control2 & 0x20)
210 		device.execute().set_input_line(5, HOLD_LINE);
211 }
212 
INTERRUPT_GEN_MEMBER(moo_state::moobl_interrupt)213 INTERRUPT_GEN_MEMBER(moo_state::moobl_interrupt)
214 {
215 	moo_objdma();
216 
217 	// schedule DMA end interrupt (delay shortened to catch up with V-blank)
218 	m_dmaend_timer->adjust(attotime::from_usec(MOO_DMADELAY));
219 
220 	// trigger V-blank interrupt
221 	device.execute().set_input_line(5, HOLD_LINE);
222 }
223 
sound_irq_w(uint16_t data)224 void moo_state::sound_irq_w(uint16_t data)
225 {
226 	m_soundcpu->set_input_line(0, HOLD_LINE);
227 }
228 
sound_bankswitch_w(uint8_t data)229 void moo_state::sound_bankswitch_w(uint8_t data)
230 {
231 	membank("bank1")->set_base(memregion("soundcpu")->base() + 0x10000 + (data&0xf)*0x4000);
232 }
233 
234 
235 #if 0 // (for reference; do not remove)
236 
237 /* the interface with the 053247 is weird. The chip can address only 0x1000 bytes */
238 /* of RAM, but they put 0x10000 there. The CPU can access them all. */
239 uint16_t moo_state::k053247_scattered_word_r(offs_t offset, uint16_t mem_mask)
240 {
241 	if (offset & 0x0078)
242 		return m_spriteram[offset];
243 	else
244 	{
245 		offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4);
246 		return k053247_word_r(m_k053246, offset, mem_mask);
247 	}
248 }
249 
250 void moo_state::k053247_scattered_word_w(offs_t offset, uint16_t data, uint16_t mem_mask)
251 {
252 	if (offset & 0x0078)
253 		COMBINE_DATA(m_spriteram + offset);
254 	else
255 	{
256 		offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4);
257 
258 		k053247_word_w(m_k053246, offset, data, mem_mask);
259 	}
260 }
261 
262 #endif
263 
264 
moo_prot_w(address_space & space,offs_t offset,uint16_t data,uint16_t mem_mask)265 void moo_state::moo_prot_w(address_space &space, offs_t offset, uint16_t data, uint16_t mem_mask)
266 {
267 	uint32_t src1, src2, dst, length, a, b, res;
268 
269 	COMBINE_DATA(&m_protram[offset]);
270 
271 	if (offset == 0xc)  // trigger operation
272 	{
273 		src1 = (m_protram[1] & 0xff) << 16 | m_protram[0];
274 		src2 = (m_protram[3] & 0xff) << 16 | m_protram[2];
275 		dst = (m_protram[5] & 0xff) << 16 | m_protram[4];
276 		length = m_protram[0xf];
277 
278 		while (length)
279 		{
280 			a = space.read_word(src1);
281 			b = space.read_word(src2);
282 			res = a + 2 * b;
283 
284 			space.write_word(dst, res);
285 
286 			src1 += 2;
287 			src2 += 2;
288 			dst += 2;
289 			length--;
290 		}
291 	}
292 }
293 
294 
moobl_oki_bank_w(uint16_t data)295 void moo_state::moobl_oki_bank_w(uint16_t data)
296 {
297 	logerror("%x to OKI bank\n", data);
298 
299 	m_oki->set_rom_bank(data & 0x0f);
300 }
301 
moo_map(address_map & map)302 void moo_state::moo_map(address_map &map)
303 {
304 	map(0x000000, 0x07ffff).rom();
305 	map(0x0c0000, 0x0c003f).w(m_k056832, FUNC(k056832_device::word_w));
306 	map(0x0c2000, 0x0c2007).w(m_k053246, FUNC(k053247_device::k053246_w));
307 
308 	map(0x0c4000, 0x0c4001).r(m_k053246, FUNC(k053247_device::k053246_r));
309 	map(0x0ca000, 0x0ca01f).w(m_k054338, FUNC(k054338_device::word_w));      /* K054338 alpha blending engine */
310 	map(0x0cc000, 0x0cc01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
311 	map(0x0ce000, 0x0ce01f).w(FUNC(moo_state::moo_prot_w));
312 	map(0x0d0000, 0x0d001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask16(0x00ff);                  /* CCU regs (ignored) */
313 	map(0x0d4000, 0x0d4001).w(FUNC(moo_state::sound_irq_w));
314 	map(0x0d6000, 0x0d601f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0x00ff);
315 	map(0x0d8000, 0x0d8007).w(m_k056832, FUNC(k056832_device::b_word_w));        /* VSCCS regs */
316 	map(0x0da000, 0x0da001).portr("P1_P3");
317 	map(0x0da002, 0x0da003).portr("P2_P4");
318 	map(0x0dc000, 0x0dc001).portr("IN0");
319 	map(0x0dc002, 0x0dc003).portr("IN1");
320 	map(0x0de000, 0x0de001).rw(FUNC(moo_state::control2_r), FUNC(moo_state::control2_w));
321 	map(0x100000, 0x17ffff).rom();
322 	map(0x180000, 0x18ffff).ram().share("workram");     /* Work RAM */
323 	map(0x190000, 0x19ffff).ram().share("spriteram");   /* Sprite RAM */
324 	map(0x1a0000, 0x1a1fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w));  /* Graphic planes */
325 	map(0x1a2000, 0x1a3fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w));  /* Graphic planes mirror */
326 	map(0x1b0000, 0x1b1fff).r(m_k056832, FUNC(k056832_device::rom_word_r));   /* Passthrough to tile roms */
327 	map(0x1c0000, 0x1c1fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
328 #if MOO_DEBUG
329 	map(0x0c0000, 0x0c003f).r(m_k056832, FUNC(k056832_device::word_r));
330 	map(0x0c2000, 0x0c2007).r(m_k053246, FUNC(k053247_device::k053246_read_register));
331 	map(0x0ca000, 0x0ca01f).r(m_k054338, FUNC(k054338_device::register_r));
332 	map(0x0cc000, 0x0cc01f).r(m_k053251, FUNC(k053251_device::read)).umask16(0x00ff);
333 	map(0x0d8000, 0x0d8007).r(m_k056832, FUNC(k056832_device::b_word_r));
334 #endif
335 }
336 
moobl_map(address_map & map)337 void moo_state::moobl_map(address_map &map)
338 {
339 	map(0x000000, 0x07ffff).rom();
340 	map(0x0c0000, 0x0c003f).w(m_k056832, FUNC(k056832_device::word_w));
341 	map(0x0c2000, 0x0c2007).w(m_k053246, FUNC(k053247_device::k053246_w));
342 	map(0x0c2f00, 0x0c2f01).nopr();                     /* heck if I know, but it's polled constantly */
343 	map(0x0c4000, 0x0c4001).r(m_k053246, FUNC(k053247_device::k053246_r));
344 	map(0x0ca000, 0x0ca01f).w(m_k054338, FUNC(k054338_device::word_w));       /* K054338 alpha blending engine */
345 	map(0x0cc000, 0x0cc01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
346 	map(0x0d0000, 0x0d001f).writeonly();                   /* CCU regs (ignored) */
347 	map(0x0d6ffc, 0x0d6ffd).w(FUNC(moo_state::moobl_oki_bank_w));
348 	map(0x0d6fff, 0x0d6fff).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write));
349 	map(0x0d8000, 0x0d8007).w(m_k056832, FUNC(k056832_device::b_word_w));     /* VSCCS regs */
350 	map(0x0da000, 0x0da001).portr("P1_P3");
351 	map(0x0da002, 0x0da003).portr("P2_P4");
352 	map(0x0dc000, 0x0dc001).portr("IN0");
353 	map(0x0dc002, 0x0dc003).portr("IN1");
354 	map(0x0de000, 0x0de001).rw(FUNC(moo_state::control2_r), FUNC(moo_state::control2_w));
355 	map(0x100000, 0x17ffff).rom();
356 	map(0x180000, 0x18ffff).ram().share("workram");      /* Work RAM */
357 	map(0x190000, 0x19ffff).ram().share("spriteram");    /* Sprite RAM */
358 	map(0x1a0000, 0x1a1fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w)); /* Graphic planes */
359 	map(0x1a2000, 0x1a3fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w));  /* Graphic planes mirror */
360 	map(0x1b0000, 0x1b1fff).r(m_k056832, FUNC(k056832_device::rom_word_r));   /* Passthrough to tile roms */
361 	map(0x1c0000, 0x1c1fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
362 }
363 
bucky_map(address_map & map)364 void moo_state::bucky_map(address_map &map)
365 {
366 	map(0x000000, 0x07ffff).rom();
367 	map(0x080000, 0x08ffff).ram();
368 	map(0x090000, 0x09ffff).ram().share("spriteram");   /* Sprite RAM */
369 	map(0x0a0000, 0x0affff).ram();                         /* extra sprite RAM? */
370 	map(0x0c0000, 0x0c003f).w(m_k056832, FUNC(k056832_device::word_w));
371 	map(0x0c2000, 0x0c2007).w(m_k053246, FUNC(k053247_device::k053246_w));
372 	map(0x0c4000, 0x0c4001).r(m_k053246, FUNC(k053247_device::k053246_r));
373 	map(0x0ca000, 0x0ca01f).w(m_k054338, FUNC(k054338_device::word_w));      /* K054338 alpha blending engine */
374 	map(0x0cc000, 0x0cc01f).w(m_k053251, FUNC(k053251_device::write)).umask16(0x00ff);
375 	map(0x0ce000, 0x0ce01f).w(FUNC(moo_state::moo_prot_w));
376 	map(0x0d0000, 0x0d001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask16(0x00ff);                  /* CCU regs (ignored) */
377 	map(0x0d2000, 0x0d20ff).rw("k054000", FUNC(k054000_device::read), FUNC(k054000_device::write)).umask16(0x00ff);
378 	map(0x0d4000, 0x0d4001).w(FUNC(moo_state::sound_irq_w));
379 	map(0x0d6000, 0x0d601f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0x00ff);
380 	map(0x0d8000, 0x0d8007).w(m_k056832, FUNC(k056832_device::b_word_w));        /* VSCCS regs */
381 	map(0x0da000, 0x0da001).portr("P1_P3");
382 	map(0x0da002, 0x0da003).portr("P2_P4");
383 	map(0x0dc000, 0x0dc001).portr("IN0");
384 	map(0x0dc002, 0x0dc003).portr("IN1");
385 	map(0x0de000, 0x0de001).rw(FUNC(moo_state::control2_r), FUNC(moo_state::control2_w));
386 	map(0x180000, 0x181fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w));  /* Graphic planes */
387 	map(0x182000, 0x183fff).rw(m_k056832, FUNC(k056832_device::ram_word_r), FUNC(k056832_device::ram_word_w));  /* Graphic planes mirror */
388 	map(0x184000, 0x187fff).ram();                         /* extra tile RAM? */
389 	map(0x190000, 0x191fff).r(m_k056832, FUNC(k056832_device::rom_word_r));   /* Passthrough to tile roms */
390 	map(0x1b0000, 0x1b3fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
391 	map(0x200000, 0x23ffff).rom();                         /* data */
392 #if MOO_DEBUG
393 	map(0x0c0000, 0x0c003f).r(m_k056832, FUNC(k056832_device::word_r));
394 	map(0x0c2000, 0x0c2007).r(m_k053246, FUNC(k053247_device::k053246_read_register));
395 	map(0x0ca000, 0x0ca01f).r(m_k054338, FUNC(k054338_device::register_r));
396 	map(0x0cc000, 0x0cc01f).r(m_k053251, FUNC(k053251_device::read)).umask16(0x00ff);
397 	map(0x0d8000, 0x0d8007).r(m_k056832, FUNC(k056832_device::b_word_r));
398 #endif
399 }
400 
sound_map(address_map & map)401 void moo_state::sound_map(address_map &map)
402 {
403 	map(0x0000, 0x7fff).rom();
404 	map(0x8000, 0xbfff).bankr("bank1");
405 	map(0xc000, 0xdfff).ram();
406 	map(0xe000, 0xe22f).rw(m_k054539, FUNC(k054539_device::read), FUNC(k054539_device::write));
407 	map(0xec00, 0xec01).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write));
408 	map(0xf000, 0xf003).m(m_k054321, FUNC(k054321_device::sound_map));
409 	map(0xf800, 0xf800).w(FUNC(moo_state::sound_bankswitch_w));
410 }
411 
412 static INPUT_PORTS_START( moo )
413 	PORT_START("IN0")
414 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
415 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
416 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
417 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
418 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
419 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
420 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
421 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
422 
423 	PORT_START("IN1")
424 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, do_read)
425 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, ready_read)
426 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
427 	PORT_SERVICE_NO_TOGGLE(0x08, IP_ACTIVE_LOW)
428 	PORT_DIPNAME( 0x10, 0x00, "Sound Output")       PORT_DIPLOCATION("SW1:1")
DEF_STR(Mono)429 	PORT_DIPSETTING(    0x10, DEF_STR( Mono ) )
430 	PORT_DIPSETTING(    0x00, DEF_STR( Stereo ) )
431 	PORT_DIPNAME( 0x20, 0x20, "Coin Mechanism")         PORT_DIPLOCATION("SW1:2")
432 	PORT_DIPSETTING(    0x20, "Common")
433 	PORT_DIPSETTING(    0x00, "Independent")
434 	PORT_DIPNAME( 0xc0, 0x80, "Number of Players")      PORT_DIPLOCATION("SW1:3,4")
435 	PORT_DIPSETTING(    0xc0, "2")
436 	PORT_DIPSETTING(    0x40, "3")
437 	PORT_DIPSETTING(    0x80, "4")
438 
439 	PORT_START( "EEPROMOUT" )
440 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, di_write)
441 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, cs_write)
442 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_er5911_device, clk_write)
443 
444 	PORT_START("P1_P3")
445 	KONAMI16_LSB( 1, IPT_UNKNOWN, IPT_START1 )
446 	KONAMI16_MSB( 3, IPT_UNKNOWN, IPT_START3 )
447 
448 	PORT_START("P2_P4")
449 	KONAMI16_LSB( 2, IPT_UNKNOWN, IPT_START2 )
450 	KONAMI16_MSB( 4, IPT_UNKNOWN, IPT_START4 )
451 INPUT_PORTS_END
452 
453 /* Same as 'moo', but additional "Button 3" for all players */
454 static INPUT_PORTS_START( bucky )
455 	PORT_INCLUDE( moo )
456 
457 	PORT_MODIFY("P1_P3")
458 	KONAMI16_LSB( 1, IPT_BUTTON3, IPT_START1 )
459 	KONAMI16_MSB( 3, IPT_BUTTON3, IPT_START3 )
460 
461 	PORT_MODIFY("P2_P4")
462 	KONAMI16_LSB( 2, IPT_BUTTON3, IPT_START2 )
463 	KONAMI16_MSB( 4, IPT_BUTTON3, IPT_START4 )
464 INPUT_PORTS_END
465 
466 
467 MACHINE_START_MEMBER(moo_state,moo)
468 {
469 	save_item(NAME(m_cur_control2));
470 	save_item(NAME(m_alpha_enabled));
471 	save_item(NAME(m_sprite_colorbase));
472 	save_item(NAME(m_layer_colorbase));
473 	save_item(NAME(m_layerpri));
474 	save_item(NAME(m_protram));
475 
476 	m_dmaend_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(moo_state::dmaend_callback),this));
477 }
478 
MACHINE_RESET_MEMBER(moo_state,moo)479 MACHINE_RESET_MEMBER(moo_state,moo)
480 {
481 	int i;
482 
483 	for (i = 0; i < 16; i++)
484 		m_protram[i] = 0;
485 
486 	for (i = 0; i < 4; i++)
487 		m_layer_colorbase[i] = 0;
488 
489 	for (i = 0; i < 3; i++)
490 		m_layerpri[i] = 0;
491 
492 	m_cur_control2 = 0;
493 	m_alpha_enabled = 0;
494 	m_sprite_colorbase = 0;
495 }
496 
moo(machine_config & config)497 void moo_state::moo(machine_config &config)
498 {
499 	/* basic machine hardware */
500 	M68000(config, m_maincpu, XTAL(32'000'000)/2); // 16MHz verified
501 	m_maincpu->set_addrmap(AS_PROGRAM, &moo_state::moo_map);
502 	m_maincpu->set_vblank_int("screen", FUNC(moo_state::moo_interrupt));
503 
504 	Z80(config, m_soundcpu, XTAL(32'000'000)/4); // 8MHz verified
505 	m_soundcpu->set_addrmap(AS_PROGRAM, &moo_state::sound_map);
506 
507 	MCFG_MACHINE_START_OVERRIDE(moo_state,moo)
508 	MCFG_MACHINE_RESET_OVERRIDE(moo_state,moo)
509 
510 	EEPROM_ER5911_8BIT(config, "eeprom");
511 
512 	K053252(config, m_k053252, XTAL(32'000'000)/4); // 8MHz
513 	m_k053252->set_offsets(40, 16);
514 
515 	/* video hardware */
516 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
517 	m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
518 	m_screen->set_refresh_hz(60);
519 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1200));   // should give IRQ4 sufficient time to update scroll registers
520 	m_screen->set_size(64*8, 32*8);
521 	m_screen->set_visarea(40, 40+384-1, 16, 16+224-1);
522 	m_screen->set_screen_update(FUNC(moo_state::screen_update_moo));
523 
524 	PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 2048);
525 	m_palette->enable_shadows();
526 	m_palette->enable_hilights();
527 
528 	MCFG_VIDEO_START_OVERRIDE(moo_state,moo)
529 
530 	K053246(config, m_k053246, 0);
531 	m_k053246->set_sprite_callback(FUNC(moo_state::sprite_callback));
532 	m_k053246->set_config(NORMAL_PLANE_ORDER, -48+1, 23);
533 	m_k053246->set_palette("palette");
534 
535 	K056832(config, m_k056832, 0);
536 	m_k056832->set_tile_callback(FUNC(moo_state::tile_callback));
537 	m_k056832->set_config(K056832_BPP_4, 1, 0);
538 	m_k056832->set_palette("palette");
539 
540 	K053251(config, m_k053251, 0);
541 
542 	K054338(config, m_k054338, 0);
543 
544 	/* sound hardware */
545 	SPEAKER(config, "lspeaker").front_left();
546 	SPEAKER(config, "rspeaker").front_right();
547 
548 	K054321(config, m_k054321, "lspeaker", "rspeaker");
549 
550 	YM2151(config, "ymsnd", XTAL(32'000'000)/8).add_route(0, "lspeaker", 0.50).add_route(1, "rspeaker", 0.50); // 4MHz verified
551 
552 	K054539(config, m_k054539, XTAL(18'432'000));
553 	m_k054539->add_route(0, "rspeaker", 0.75);
554 	m_k054539->add_route(1, "lspeaker", 0.75);
555 }
556 
moobl(machine_config & config)557 void moo_state::moobl(machine_config &config)
558 {
559 	/* basic machine hardware */
560 	M68000(config, m_maincpu, 16100000);
561 	m_maincpu->set_addrmap(AS_PROGRAM, &moo_state::moobl_map);
562 	m_maincpu->set_vblank_int("screen", FUNC(moo_state::moobl_interrupt));
563 
564 	MCFG_MACHINE_START_OVERRIDE(moo_state,moo)
565 	MCFG_MACHINE_RESET_OVERRIDE(moo_state,moo)
566 
567 	EEPROM_ER5911_8BIT(config, "eeprom");
568 
569 	/* video hardware */
570 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
571 	m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
572 	m_screen->set_refresh_hz(60);
573 	m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1200)); // should give IRQ4 sufficient time to update scroll registers
574 	m_screen->set_size(64*8, 32*8);
575 	m_screen->set_visarea(40, 40+384-1, 16, 16+224-1);
576 	m_screen->set_screen_update(FUNC(moo_state::screen_update_moo));
577 
578 	PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 2048);
579 	m_palette->enable_shadows();
580 	m_palette->enable_hilights();
581 
582 	MCFG_VIDEO_START_OVERRIDE(moo_state,moo)
583 
584 	K053246(config, m_k053246, 0);
585 	m_k053246->set_sprite_callback(FUNC(moo_state::sprite_callback));
586 	m_k053246->set_config(NORMAL_PLANE_ORDER, -48+1, 23);
587 	m_k053246->set_palette("palette");
588 
589 	K056832(config, m_k056832, 0);
590 	m_k056832->set_tile_callback(FUNC(moo_state::tile_callback));
591 	m_k056832->set_config(K056832_BPP_4, 1, 0);
592 	m_k056832->set_palette("palette");
593 
594 	K053251(config, m_k053251, 0);
595 
596 	K054338(config, m_k054338, 0);
597 
598 	/* sound hardware */
599 	SPEAKER(config, "lspeaker").front_left();
600 	SPEAKER(config, "rspeaker").front_right();
601 
602 	OKIM6295(config, m_oki, 1056000, okim6295_device::PIN7_HIGH); // clock frequency & pin 7 not verified
603 	m_oki->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
604 	m_oki->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
605 }
606 
bucky(machine_config & config)607 void moo_state::bucky(machine_config &config)
608 {
609 	moo(config);
610 
611 	m_maincpu->set_addrmap(AS_PROGRAM, &moo_state::bucky_map);
612 
613 	K054000(config, "k054000", 0);
614 
615 	m_k053246->set_config(NORMAL_PLANE_ORDER, -48, 23);
616 
617 	/* video hardware */
618 	m_palette->set_format(palette_device::xRGB_888, 4096);
619 
620 	MCFG_VIDEO_START_OVERRIDE(moo_state,bucky)
621 }
622 
623 
624 ROM_START( moomesa ) /* Version EA */
625 	ROM_REGION( 0x180000, "maincpu", 0 )
626 	/* main program */
627 	ROM_LOAD16_BYTE( "151b01.q5",   0x000000, 0x40000, CRC(fb2fa298) SHA1(f03b24681a2b329ba797fd2780ac9a3cf862ebcb) )   /* B */
628 	ROM_LOAD16_BYTE( "151eab02.q6", 0x000001, 0x40000, CRC(37b30c01) SHA1(cb91739097a4a36f8f8d92998d822ffc851e1279) )   /* EAB */
629 
630 	/* data */
631 	ROM_LOAD16_BYTE( "151a03.t5", 0x100000, 0x40000, CRC(c896d3ea) SHA1(ea83c63e2c3dbc4f1e1d49f1852a78ffc1f0ea4b) )
632 	ROM_LOAD16_BYTE( "151a04.t6", 0x100001, 0x40000, CRC(3b24706a) SHA1(c2a77944284e35ff57f0774fa7b67e53d3b63e1f) )
633 
634 	ROM_REGION( 0x050000, "soundcpu", 0 )
635 	/* Z80 sound program */
636 	ROM_LOAD( "151a07.f5",  0x000000, 0x040000, CRC(cde247fc) SHA1(cdee0228db55d53ae43d7cd2d9001dadd20c2c61) )
637 	ROM_RELOAD(             0x010000, 0x040000 )
638 
639 	ROM_REGION( 0x200000, "k056832", 0 )
640 	/* tilemaps */
641 	ROM_LOAD32_WORD( "151a05.t8",  0x000000, 0x100000, CRC(bc616249) SHA1(58c1f1a03ce9bead8f79d12ce4b2d342432b24b5) )
642 	ROM_LOAD32_WORD( "151a06.t10", 0x000002, 0x100000, CRC(38dbcac1) SHA1(c357779733921695b20ac586db5b475f5b2b8f4c) )
643 
644 	ROM_REGION( 0x800000, "k053246", 0 )
645 	/* sprites */
646 	ROM_LOAD64_WORD( "151a10.b8",  0x000000, 0x200000, CRC(376c64f1) SHA1(eb69c5a27f9795e28f04a503955132f0a9e4de12) )
647 	ROM_LOAD64_WORD( "151a11.a8",  0x000002, 0x200000, CRC(e7f49225) SHA1(1255b214f29b6507540dad5892c60a7ae2aafc5c) )
648 	ROM_LOAD64_WORD( "151a12.b10", 0x000004, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) )
649 	ROM_LOAD64_WORD( "151a13.a10", 0x000006, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) )
650 
651 	ROM_REGION( 0x200000, "k054539", 0 )
652 	/* K054539 samples */
653 	ROM_LOAD( "151a08.b6",  0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) )
654 
655 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
656 	ROM_LOAD( "moomesa.nv", 0x0000, 0x080, CRC(7bd904a8) SHA1(8747c5c62d1832e290be8ace73c61b1f228c0bec) )
657 ROM_END
658 
659 ROM_START( moomesauac ) /* Version UA */
660 	ROM_REGION( 0x180000, "maincpu", 0 )
661 	/* main program */
662 	ROM_LOAD16_BYTE( "151c01.q5",   0x000000, 0x40000, CRC(10555732) SHA1(b67cb756c250ddd6f3291683b3f3449e13a2ee83) )   /* C */
663 	ROM_LOAD16_BYTE( "151uac02.q6", 0x000001, 0x40000, CRC(52ae87b0) SHA1(552d41a2ddd040f92c6a3cfdc07f9d6e751ac9c1) )   /* UAC */
664 
665 	/* data */
666 	ROM_LOAD16_BYTE( "151a03.t5", 0x100000, 0x40000, CRC(c896d3ea) SHA1(ea83c63e2c3dbc4f1e1d49f1852a78ffc1f0ea4b) )
667 	ROM_LOAD16_BYTE( "151a04.t6", 0x100001, 0x40000, CRC(3b24706a) SHA1(c2a77944284e35ff57f0774fa7b67e53d3b63e1f) )
668 
669 	ROM_REGION( 0x050000, "soundcpu", 0 )
670 	/* Z80 sound program */
671 	ROM_LOAD( "151a07.f5",  0x000000, 0x040000, CRC(cde247fc) SHA1(cdee0228db55d53ae43d7cd2d9001dadd20c2c61) )
672 	ROM_RELOAD(             0x010000, 0x040000 )
673 
674 	ROM_REGION( 0x200000, "k056832", 0 )
675 	/* tilemaps */
676 	ROM_LOAD32_WORD( "151a05.t8",  0x000000, 0x100000, CRC(bc616249) SHA1(58c1f1a03ce9bead8f79d12ce4b2d342432b24b5) )
677 	ROM_LOAD32_WORD( "151a06.t10", 0x000002, 0x100000, CRC(38dbcac1) SHA1(c357779733921695b20ac586db5b475f5b2b8f4c) )
678 
679 	ROM_REGION( 0x800000, "k053246", 0 )
680 	/* sprites */
681 	ROM_LOAD64_WORD( "151a10.b8",  0x000000, 0x200000, CRC(376c64f1) SHA1(eb69c5a27f9795e28f04a503955132f0a9e4de12) )
682 	ROM_LOAD64_WORD( "151a11.a8",  0x000002, 0x200000, CRC(e7f49225) SHA1(1255b214f29b6507540dad5892c60a7ae2aafc5c) )
683 	ROM_LOAD64_WORD( "151a12.b10", 0x000004, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) )
684 	ROM_LOAD64_WORD( "151a13.a10", 0x000006, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) )
685 
686 	ROM_REGION( 0x200000, "k054539", 0 )
687 	/* K054539 samples */
688 	ROM_LOAD( "151a08.b6",  0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) )
689 
690 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
691 	ROM_LOAD( "moomesauac.nv", 0x0000, 0x080, CRC(a5cb137a) SHA1(119df859d6b5c366481305b1433eea0deadc3fa9) )
692 ROM_END
693 
694 ROM_START( moomesauab ) /* Version UA */
695 	ROM_REGION( 0x180000, "maincpu", 0 )
696 	/* main program */
697 	ROM_LOAD16_BYTE( "151b01.q5",   0x000000, 0x40000, CRC(fb2fa298) SHA1(f03b24681a2b329ba797fd2780ac9a3cf862ebcb) )   /* B */
698 	ROM_LOAD16_BYTE( "151uab02.q6", 0x000001, 0x40000, CRC(3d9f4d59) SHA1(db47044bd4935fce94ec659242c9819c30eb6d0f) )   /* UAB */
699 
700 	/* data */
701 	ROM_LOAD16_BYTE( "151a03.t5", 0x100000, 0x40000, CRC(c896d3ea) SHA1(ea83c63e2c3dbc4f1e1d49f1852a78ffc1f0ea4b) )
702 	ROM_LOAD16_BYTE( "151a04.t6", 0x100001, 0x40000, CRC(3b24706a) SHA1(c2a77944284e35ff57f0774fa7b67e53d3b63e1f) )
703 
704 	ROM_REGION( 0x050000, "soundcpu", 0 )
705 	/* Z80 sound program */
706 	ROM_LOAD( "151a07.f5",  0x000000, 0x040000, CRC(cde247fc) SHA1(cdee0228db55d53ae43d7cd2d9001dadd20c2c61) )
707 	ROM_RELOAD(             0x010000, 0x040000 )
708 
709 	ROM_REGION( 0x200000, "k056832", 0 )
710 	/* tilemaps */
711 	ROM_LOAD32_WORD( "151a05.t8",  0x000000, 0x100000, CRC(bc616249) SHA1(58c1f1a03ce9bead8f79d12ce4b2d342432b24b5) )
712 	ROM_LOAD32_WORD( "151a06.t10", 0x000002, 0x100000, CRC(38dbcac1) SHA1(c357779733921695b20ac586db5b475f5b2b8f4c) )
713 
714 	ROM_REGION( 0x800000, "k053246", 0 )
715 	/* sprites */
716 	ROM_LOAD64_WORD( "151a10.b8",  0x000000, 0x200000, CRC(376c64f1) SHA1(eb69c5a27f9795e28f04a503955132f0a9e4de12) )
717 	ROM_LOAD64_WORD( "151a11.a8",  0x000002, 0x200000, CRC(e7f49225) SHA1(1255b214f29b6507540dad5892c60a7ae2aafc5c) )
718 	ROM_LOAD64_WORD( "151a12.b10", 0x000004, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) )
719 	ROM_LOAD64_WORD( "151a13.a10", 0x000006, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) )
720 
721 	ROM_REGION( 0x200000, "k054539", 0 )
722 	/* K054539 samples */
723 	ROM_LOAD( "151a08.b6",  0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) )
724 
725 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
726 	ROM_LOAD( "moomesauab.nv", 0x0000, 0x080, CRC(a5cb137a) SHA1(119df859d6b5c366481305b1433eea0deadc3fa9) )
727 ROM_END
728 
729 ROM_START( moomesaaab ) /* Version AA */
730 	ROM_REGION( 0x180000, "maincpu", 0 )
731 	/* main program */
732 	ROM_LOAD16_BYTE( "151b01.q5",   0x000000, 0x40000, CRC(fb2fa298) SHA1(f03b24681a2b329ba797fd2780ac9a3cf862ebcb) )   /* B */
733 	ROM_LOAD16_BYTE( "151aab02.q6", 0x000001, 0x40000, CRC(2162d593) SHA1(a6cfe4a57b3f22b2aa0f04f91acefe3b7bea9e76) )   /* AAB */
734 
735 	/* data */
736 	ROM_LOAD16_BYTE( "151a03.t5", 0x100000, 0x40000, CRC(c896d3ea) SHA1(ea83c63e2c3dbc4f1e1d49f1852a78ffc1f0ea4b) )
737 	ROM_LOAD16_BYTE( "151a04.t6", 0x100001, 0x40000, CRC(3b24706a) SHA1(c2a77944284e35ff57f0774fa7b67e53d3b63e1f) )
738 
739 	ROM_REGION( 0x050000, "soundcpu", 0 )
740 	/* Z80 sound program */
741 	ROM_LOAD( "151a07.f5",  0x000000, 0x040000, CRC(cde247fc) SHA1(cdee0228db55d53ae43d7cd2d9001dadd20c2c61) )
742 	ROM_RELOAD(             0x010000, 0x040000 )
743 
744 	ROM_REGION( 0x200000, "k056832", 0 )
745 	/* tilemaps */
746 	ROM_LOAD32_WORD( "151a05.t8",  0x000000, 0x100000, CRC(bc616249) SHA1(58c1f1a03ce9bead8f79d12ce4b2d342432b24b5) )
747 	ROM_LOAD32_WORD( "151a06.t10", 0x000002, 0x100000, CRC(38dbcac1) SHA1(c357779733921695b20ac586db5b475f5b2b8f4c) )
748 
749 	ROM_REGION( 0x800000, "k053246", 0 )
750 	/* sprites */
751 	ROM_LOAD64_WORD( "151a10.b8",  0x000000, 0x200000, CRC(376c64f1) SHA1(eb69c5a27f9795e28f04a503955132f0a9e4de12) )
752 	ROM_LOAD64_WORD( "151a11.a8",  0x000002, 0x200000, CRC(e7f49225) SHA1(1255b214f29b6507540dad5892c60a7ae2aafc5c) )
753 	ROM_LOAD64_WORD( "151a12.b10", 0x000004, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) )
754 	ROM_LOAD64_WORD( "151a13.a10", 0x000006, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) )
755 
756 	ROM_REGION( 0x200000, "k054539", 0 )
757 	/* K054539 samples */
758 	ROM_LOAD( "151a08.b6",  0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) )
759 
760 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
761 	ROM_LOAD( "moomesaaab.nv", 0x0000, 0x080, CRC(7bd904a8) SHA1(8747c5c62d1832e290be8ace73c61b1f228c0bec) )
762 ROM_END
763 
764 ROM_START( bucky ) /* Version EA */
765 	ROM_REGION( 0x240000, "maincpu", 0 )
766 	/* main program */
767 	ROM_LOAD16_BYTE( "173eab01.q5", 0x000000, 0x40000, CRC(7785ac8a) SHA1(ef78d14f54d3a0b724b9702a18c67891e2d366a7) )   /* EAB */
768 	ROM_LOAD16_BYTE( "173eab02.q6", 0x000001, 0x40000, CRC(9b45f122) SHA1(325af1612e6f90ef9ae9353c43dc645be1f3465c) )   /* EAB */
769 
770 	/* data */
771 	ROM_LOAD16_BYTE( "173a03.t5", 0x200000, 0x20000, CRC(cd724026) SHA1(525445499604b713da4d8bc0a88e428654ceab95) )
772 	ROM_LOAD16_BYTE( "173a04.t6", 0x200001, 0x20000, CRC(7dd54d6f) SHA1(b0ee8ec445b92254bca881eefd4449972fed506a) )
773 
774 	ROM_REGION( 0x050000, "soundcpu", 0 )
775 	/* Z80 sound program */
776 	ROM_LOAD( "173a07.f5",  0x000000, 0x040000, CRC(4cdaee71) SHA1(bdc05d4475415f6fac65d7cdbc48df398e57845e) )
777 	ROM_RELOAD(             0x010000, 0x040000 )
778 
779 	ROM_REGION( 0x200000, "k056832", 0 )
780 	/* tilemaps */
781 	ROM_LOAD32_WORD( "173a05.t8",  0x000000, 0x100000, CRC(d14333b4) SHA1(d1a15ead2d156e1fceca0bf202ab3962411caf11) )
782 	ROM_LOAD32_WORD( "173a06.t10", 0x000002, 0x100000, CRC(6541a34f) SHA1(15cf481498e3b7e0b2f7bfe5434121cc3bd65662) )
783 
784 	ROM_REGION( 0x800000, "k053246", 0 )
785 	/* sprites */
786 	ROM_LOAD64_WORD( "173a10.b8",  0x000000, 0x200000, CRC(42fb0a0c) SHA1(d68c932cfabdec7896698b433525fe47ef4698d0) )
787 	ROM_LOAD64_WORD( "173a11.a8",  0x000002, 0x200000, CRC(b0d747c4) SHA1(0cf1ee1b9a35ded31a81c321df2a076f7b588971) )
788 	ROM_LOAD64_WORD( "173a12.b10", 0x000004, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) )
789 	ROM_LOAD64_WORD( "173a13.a10", 0x000006, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) )
790 
791 	ROM_REGION( 0x400000, "k054539", 0 )
792 	/* K054539 samples */
793 	ROM_LOAD( "173a08.b6",  0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) )
794 	ROM_LOAD( "173a09.a6",  0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) )
795 
796 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
797 	ROM_LOAD( "bucky.nv", 0x0000, 0x080, CRC(6a5986f3) SHA1(3efddeed261b09031c582e12318f00c2cbb214ea) )
798 ROM_END
799 
800 ROM_START( buckyea ) /* Version EA */
801 	ROM_REGION( 0x240000, "maincpu", 0 )
802 	/* main program */
803 	ROM_LOAD16_BYTE( "2.d5", 0x000000, 0x40000, CRC(e18518a6) SHA1(6b0bac8080032b7528b47e802c2f6a5264da5f55) )   /* EA */
804 	ROM_LOAD16_BYTE( "3.d6", 0x000001, 0x40000, CRC(45ef9545) SHA1(370862e916410e7052e094033cc18ac727c75d8e) )   /* EA */
805 
806 	/* data */
807 	ROM_LOAD16_BYTE( "173a03.t5", 0x200000, 0x20000, CRC(cd724026) SHA1(525445499604b713da4d8bc0a88e428654ceab95) )
808 	ROM_LOAD16_BYTE( "173a04.t6", 0x200001, 0x20000, CRC(7dd54d6f) SHA1(b0ee8ec445b92254bca881eefd4449972fed506a) )
809 
810 	ROM_REGION( 0x050000, "soundcpu", 0 )
811 	/* Z80 sound program */
812 	ROM_LOAD( "173a07.f5",  0x000000, 0x040000, CRC(4cdaee71) SHA1(bdc05d4475415f6fac65d7cdbc48df398e57845e) )
813 	ROM_RELOAD(             0x010000, 0x040000 )
814 
815 	ROM_REGION( 0x200000, "k056832", 0 )
816 	/* tilemaps */
817 	ROM_LOAD32_WORD( "173a05.t8",  0x000000, 0x100000, CRC(d14333b4) SHA1(d1a15ead2d156e1fceca0bf202ab3962411caf11) )
818 	ROM_LOAD32_WORD( "173a06.t10", 0x000002, 0x100000, CRC(6541a34f) SHA1(15cf481498e3b7e0b2f7bfe5434121cc3bd65662) )
819 
820 	ROM_REGION( 0x800000, "k053246", 0 )
821 	/* sprites */
822 	ROM_LOAD64_WORD( "173a10.b8",  0x000000, 0x200000, CRC(42fb0a0c) SHA1(d68c932cfabdec7896698b433525fe47ef4698d0) )
823 	ROM_LOAD64_WORD( "173a11.a8",  0x000002, 0x200000, CRC(b0d747c4) SHA1(0cf1ee1b9a35ded31a81c321df2a076f7b588971) )
824 	ROM_LOAD64_WORD( "173a12.b10", 0x000004, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) )
825 	ROM_LOAD64_WORD( "173a13.a10", 0x000006, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) )
826 
827 	ROM_REGION( 0x400000, "k054539", 0 )
828 	/* K054539 samples */
829 	ROM_LOAD( "173a08.b6",  0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) )
830 	ROM_LOAD( "173a09.a6",  0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) )
831 
832 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
833 	ROM_LOAD( "bucky.nv", 0x0000, 0x080, CRC(6a5986f3) SHA1(3efddeed261b09031c582e12318f00c2cbb214ea) )
834 ROM_END
835 
836 ROM_START( buckyjaa ) /* Version JA */
837 	ROM_REGION( 0x240000, "maincpu", 0 )
838 	/* main program */
839 	ROM_LOAD16_BYTE( "173jaa01.05", 0x000000, 0x040000, CRC(0a32bde7) SHA1(17b7654fd69eb1b82e2949ef324ce599113360aa) )   /* JAA */
840 	ROM_LOAD16_BYTE( "173jaa02.06", 0x000001, 0x040000, CRC(3e6f3955) SHA1(09ca39da8bdb37cb5517fe59cff5467c0623c380) )   /* JAA */
841 
842 	/* data */
843 	ROM_LOAD16_BYTE( "173a03.t5", 0x200000, 0x20000, CRC(cd724026) SHA1(525445499604b713da4d8bc0a88e428654ceab95) )
844 	ROM_LOAD16_BYTE( "173a04.t6", 0x200001, 0x20000, CRC(7dd54d6f) SHA1(b0ee8ec445b92254bca881eefd4449972fed506a) )
845 
846 	ROM_REGION( 0x050000, "soundcpu", 0 )
847 	/* Z80 sound program */
848 	ROM_LOAD( "173a07.f5",  0x000000, 0x040000, CRC(4cdaee71) SHA1(bdc05d4475415f6fac65d7cdbc48df398e57845e) )
849 	ROM_RELOAD(             0x010000, 0x040000 )
850 
851 	ROM_REGION( 0x200000, "k056832", 0 )
852 	/* tilemaps */
853 	ROM_LOAD32_WORD( "173a05.t8",  0x000000, 0x100000, CRC(d14333b4) SHA1(d1a15ead2d156e1fceca0bf202ab3962411caf11) )
854 	ROM_LOAD32_WORD( "173a06.t10", 0x000002, 0x100000, CRC(6541a34f) SHA1(15cf481498e3b7e0b2f7bfe5434121cc3bd65662) )
855 
856 	ROM_REGION( 0x800000, "k053246", 0 )
857 	/* sprites */
858 	ROM_LOAD64_WORD( "173a10.b8",  0x000000, 0x200000, CRC(42fb0a0c) SHA1(d68c932cfabdec7896698b433525fe47ef4698d0) )
859 	ROM_LOAD64_WORD( "173a11.a8",  0x000002, 0x200000, CRC(b0d747c4) SHA1(0cf1ee1b9a35ded31a81c321df2a076f7b588971) )
860 	ROM_LOAD64_WORD( "173a12.b10", 0x000004, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) )
861 	ROM_LOAD64_WORD( "173a13.a10", 0x000006, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) )
862 
863 	ROM_REGION( 0x400000, "k054539", 0 )
864 	/* K054539 samples */
865 	ROM_LOAD( "173a08.b6",  0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) )
866 	ROM_LOAD( "173a09.a6",  0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) )
867 
868 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
869 	ROM_LOAD( "buckyja.nv", 0x0000, 0x080, CRC(2f280a74) SHA1(c4b4472da57599587325bad6d9e7760916076816) )
870 ROM_END
871 
872 ROM_START( buckyuab ) /* Version UA */
873 	ROM_REGION( 0x240000, "maincpu", 0 )
874 	/* main program */
875 	ROM_LOAD16_BYTE( "173uab01.q5", 0x000000, 0x40000, CRC(dcaecca0) SHA1(c41847c9d89cdaf7cfa81ad9cc018c32592a882f) )   /* UAB */
876 	ROM_LOAD16_BYTE( "173uab02.q6", 0x000001, 0x40000, CRC(e3c856a6) SHA1(33cc8a29643e44b31ee280015c0c994bed72a0e3) )   /* UAB */
877 
878 	/* data */
879 	ROM_LOAD16_BYTE( "173a03.t5", 0x200000, 0x20000, CRC(cd724026) SHA1(525445499604b713da4d8bc0a88e428654ceab95) )
880 	ROM_LOAD16_BYTE( "173a04.t6", 0x200001, 0x20000, CRC(7dd54d6f) SHA1(b0ee8ec445b92254bca881eefd4449972fed506a) )
881 
882 	ROM_REGION( 0x050000, "soundcpu", 0 )
883 	/* Z80 sound program */
884 	ROM_LOAD( "173a07.f5",  0x000000, 0x040000, CRC(4cdaee71) SHA1(bdc05d4475415f6fac65d7cdbc48df398e57845e) )
885 	ROM_RELOAD(             0x010000, 0x040000 )
886 
887 	ROM_REGION( 0x200000, "k056832", 0 )
888 	/* tilemaps */
889 	ROM_LOAD32_WORD( "173a05.t8",  0x000000, 0x100000, CRC(d14333b4) SHA1(d1a15ead2d156e1fceca0bf202ab3962411caf11) )
890 	ROM_LOAD32_WORD( "173a06.t10", 0x000002, 0x100000, CRC(6541a34f) SHA1(15cf481498e3b7e0b2f7bfe5434121cc3bd65662) )
891 
892 	ROM_REGION( 0x800000, "k053246", 0 )
893 	/* sprites */
894 	ROM_LOAD64_WORD( "173a10.b8",  0x000000, 0x200000, CRC(42fb0a0c) SHA1(d68c932cfabdec7896698b433525fe47ef4698d0) )
895 	ROM_LOAD64_WORD( "173a11.a8",  0x000002, 0x200000, CRC(b0d747c4) SHA1(0cf1ee1b9a35ded31a81c321df2a076f7b588971) )
896 	ROM_LOAD64_WORD( "173a12.b10", 0x000004, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) )
897 	ROM_LOAD64_WORD( "173a13.a10", 0x000006, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) )
898 
899 	ROM_REGION( 0x400000, "k054539", 0 )
900 	/* K054539 samples */
901 	ROM_LOAD( "173a08.b6",  0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) )
902 	ROM_LOAD( "173a09.a6",  0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) )
903 
904 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
905 	ROM_LOAD( "buckyuab.nv", 0x0000, 0x080, CRC(a5cb137a) SHA1(119df859d6b5c366481305b1433eea0deadc3fa9) )
906 ROM_END
907 
908 ROM_START( buckyaab ) /* Version AA */
909 	ROM_REGION( 0x240000, "maincpu", 0 )
910 	/* main program */
911 	ROM_LOAD16_BYTE( "173aab01.q5", 0x000000, 0x40000, CRC(9193e89f) SHA1(574d6eb4097cd10c3dea99060ee09f220d41f1dc) )   /* AAB */
912 	ROM_LOAD16_BYTE( "173aab02.q6", 0x000001, 0x40000, CRC(2567f3eb) SHA1(ccdb2a4b3ad1464f70d1442df8a3a7a7e34f6cd7) )   /* AAB */
913 
914 	/* data */
915 	ROM_LOAD16_BYTE( "173a03.t5", 0x200000, 0x20000, CRC(cd724026) SHA1(525445499604b713da4d8bc0a88e428654ceab95) )
916 	ROM_LOAD16_BYTE( "173a04.t6", 0x200001, 0x20000, CRC(7dd54d6f) SHA1(b0ee8ec445b92254bca881eefd4449972fed506a) )
917 
918 	ROM_REGION( 0x050000, "soundcpu", 0 )
919 	/* Z80 sound program */
920 	ROM_LOAD( "173a07.f5",  0x000000, 0x040000, CRC(4cdaee71) SHA1(bdc05d4475415f6fac65d7cdbc48df398e57845e) )
921 	ROM_RELOAD(             0x010000, 0x040000 )
922 
923 	ROM_REGION( 0x200000, "k056832", 0 )
924 	/* tilemaps */
925 	ROM_LOAD32_WORD( "173a05.t8",  0x000000, 0x100000, CRC(d14333b4) SHA1(d1a15ead2d156e1fceca0bf202ab3962411caf11) )
926 	ROM_LOAD32_WORD( "173a06.t10", 0x000002, 0x100000, CRC(6541a34f) SHA1(15cf481498e3b7e0b2f7bfe5434121cc3bd65662) )
927 
928 	ROM_REGION( 0x800000, "k053246", 0 )
929 	/* sprites */
930 	ROM_LOAD64_WORD( "173a10.b8",  0x000000, 0x200000, CRC(42fb0a0c) SHA1(d68c932cfabdec7896698b433525fe47ef4698d0) )
931 	ROM_LOAD64_WORD( "173a11.a8",  0x000002, 0x200000, CRC(b0d747c4) SHA1(0cf1ee1b9a35ded31a81c321df2a076f7b588971) )
932 	ROM_LOAD64_WORD( "173a12.b10", 0x000004, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) )
933 	ROM_LOAD64_WORD( "173a13.a10", 0x000006, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) )
934 
935 	ROM_REGION( 0x400000, "k054539", 0 )
936 	/* K054539 samples */
937 	ROM_LOAD( "173a08.b6",  0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) )
938 	ROM_LOAD( "173a09.a6",  0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) )
939 
940 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
941 	ROM_LOAD( "buckyaab.nv", 0x0000, 0x080, CRC(6a5986f3) SHA1(3efddeed261b09031c582e12318f00c2cbb214ea) )
942 ROM_END
943 
944 ROM_START( buckyaa ) /* Version AA */
945 	ROM_REGION( 0x240000, "maincpu", 0 )
946 	/* main program */
947 	ROM_LOAD16_BYTE( "173aa01.q4", 0x000000, 0x40000, CRC(e18518a6) SHA1(6b0bac8080032b7528b47e802c2f6a5264da5f55) )   /* AA */
948 	ROM_LOAD16_BYTE( "173aa02.q5", 0x000001, 0x40000, CRC(c888d0c7) SHA1(e11d270049ea8e2d9673224c990c8beecf7942be) )   /* AA */
949 
950 	/* data */
951 	ROM_LOAD16_BYTE( "173a03.t5", 0x200000, 0x20000, CRC(cd724026) SHA1(525445499604b713da4d8bc0a88e428654ceab95) )
952 	ROM_LOAD16_BYTE( "173a04.t6", 0x200001, 0x20000, CRC(7dd54d6f) SHA1(b0ee8ec445b92254bca881eefd4449972fed506a) )
953 
954 	ROM_REGION( 0x050000, "soundcpu", 0 )
955 	/* Z80 sound program */
956 	ROM_LOAD( "173a07.f5",  0x000000, 0x040000, CRC(4cdaee71) SHA1(bdc05d4475415f6fac65d7cdbc48df398e57845e) )
957 	ROM_RELOAD(             0x010000, 0x040000 )
958 
959 	ROM_REGION( 0x200000, "k056832", 0 )
960 	/* tilemaps */
961 	ROM_LOAD32_WORD( "173a05.t8",  0x000000, 0x100000, CRC(d14333b4) SHA1(d1a15ead2d156e1fceca0bf202ab3962411caf11) )
962 	ROM_LOAD32_WORD( "173a06.t10", 0x000002, 0x100000, CRC(6541a34f) SHA1(15cf481498e3b7e0b2f7bfe5434121cc3bd65662) )
963 
964 	ROM_REGION( 0x800000, "k053246", 0 )
965 	/* sprites */
966 	ROM_LOAD64_WORD( "173a10.b8",  0x000000, 0x200000, CRC(42fb0a0c) SHA1(d68c932cfabdec7896698b433525fe47ef4698d0) )
967 	ROM_LOAD64_WORD( "173a11.a8",  0x000002, 0x200000, CRC(b0d747c4) SHA1(0cf1ee1b9a35ded31a81c321df2a076f7b588971) )
968 	ROM_LOAD64_WORD( "173a12.b10", 0x000004, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) )
969 	ROM_LOAD64_WORD( "173a13.a10", 0x000006, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) )
970 
971 	ROM_REGION( 0x400000, "k054539", 0 )
972 	/* K054539 samples */
973 	ROM_LOAD( "173a08.b6",  0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) )
974 	ROM_LOAD( "173a09.a6",  0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) )
975 
976 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
977 	ROM_LOAD( "bucky.nv", 0x0000, 0x080, CRC(6a5986f3) SHA1(3efddeed261b09031c582e12318f00c2cbb214ea) )
978 ROM_END
979 
980 
981 ROM_START( moomesabl )
982 	ROM_REGION( 0x180000, "maincpu", 0 )
983 	ROM_LOAD16_WORD_SWAP( "moo03.rom", 0x000000, 0x80000, CRC(fed6a1cb) SHA1(be58e266973930d643b5e15dcc974a82e1a3ae35) )
984 	ROM_LOAD16_WORD_SWAP( "moo04.rom", 0x100000, 0x80000, CRC(ec45892a) SHA1(594330cbbfbca87e61ddf519e565018b6eaf5a20) )
985 
986 	ROM_REGION( 0x100000, "user1", 0 )
987 	ROM_LOAD16_WORD_SWAP( "moo03.rom", 0x000000, 0x80000, CRC(fed6a1cb) SHA1(be58e266973930d643b5e15dcc974a82e1a3ae35) )
988 	ROM_LOAD16_WORD_SWAP( "moo04.rom", 0x080000, 0x80000, CRC(ec45892a) SHA1(594330cbbfbca87e61ddf519e565018b6eaf5a20) )
989 
990 	ROM_REGION( 0x200000, "k056832", 0 )
991 	ROM_LOAD32_WORD( "moo05.rom", 0x000000, 0x080000, CRC(8c045f9c) SHA1(cde81a722a4bc2efac09a26d7e300664059ec7bb) )
992 	ROM_LOAD32_WORD( "moo07.rom", 0x000002, 0x080000, CRC(b9e29f50) SHA1(c2af095df0af45064d49210085370425b319b82b) )
993 	ROM_LOAD32_WORD( "moo06.rom", 0x100000, 0x080000, CRC(1261aa89) SHA1(b600916911bc0d8b6348e2ad4a16ed1a1c528261) )
994 	ROM_LOAD32_WORD( "moo08.rom", 0x100002, 0x080000, CRC(e6937229) SHA1(089b3d4af33e8d8fbc1f3abb81e047a7a590567c) )
995 
996 	// sprites from bootleg not included in dump, taken from original game
997 	ROM_REGION( 0x800000, "k053246", 0 )
998 	ROM_LOAD64_WORD( "151a10", 0x000000, 0x200000, CRC(376c64f1) SHA1(eb69c5a27f9795e28f04a503955132f0a9e4de12) )
999 	ROM_LOAD64_WORD( "151a11", 0x000002, 0x200000, CRC(e7f49225) SHA1(1255b214f29b6507540dad5892c60a7ae2aafc5c) )
1000 	ROM_LOAD64_WORD( "151a12", 0x000004, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) )
1001 	ROM_LOAD64_WORD( "151a13", 0x000006, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) )
1002 
1003 	ROM_REGION( 0x340000, "oki", 0 )
1004 	ROM_LOAD( "moo01.rom", 0x000000, 0x040000, CRC(3311338a) SHA1(c0b5cd16f0275b5b93a2ea4fc64013c848c5fa43) )//bank 0 lo & hi
1005 	ROM_CONTINUE(          0x040000+0x30000, 0x010000)//bank 1 hi
1006 	ROM_CONTINUE(          0x080000+0x30000, 0x010000)//bank 2 hi
1007 	ROM_CONTINUE(          0x0c0000+0x30000, 0x010000)//bank 3 hi
1008 	ROM_CONTINUE(          0x100000+0x30000, 0x010000)//bank 4 hi
1009 	ROM_RELOAD(            0x040000, 0x30000 )//bank 1 lo
1010 	ROM_RELOAD(            0x080000, 0x30000 )//bank 2 lo
1011 	ROM_RELOAD(            0x0c0000, 0x30000 )//bank 3 lo
1012 	ROM_RELOAD(            0x100000, 0x30000 )//bank 4 lo
1013 	ROM_RELOAD(            0x140000, 0x30000 )//bank 5 lo
1014 	ROM_RELOAD(            0x180000, 0x30000 )//bank 6 lo
1015 	ROM_RELOAD(            0x1c0000, 0x30000 )//bank 7 lo
1016 	ROM_RELOAD(            0x200000, 0x30000 )//bank 8 lo
1017 	ROM_RELOAD(            0x240000, 0x30000 )//bank 9 lo
1018 	ROM_RELOAD(            0x280000, 0x30000 )//bank a lo
1019 	ROM_RELOAD(            0x2c0000, 0x30000 )//bank b lo
1020 	ROM_RELOAD(            0x300000, 0x30000 )//bank c lo
1021 
1022 	ROM_LOAD( "moo02.rom", 0x140000+0x30000, 0x010000, CRC(2cf3a7c6) SHA1(06f495ba8250b34c32569d49c8b84e6edef562d3) )//bank 5 hi
1023 	ROM_CONTINUE(          0x180000+0x30000, 0x010000)//bank 6 hi
1024 	ROM_CONTINUE(          0x1c0000+0x30000, 0x010000)//bank 7 hi
1025 	ROM_CONTINUE(          0x200000+0x30000, 0x010000)//bank 8 hi
1026 	ROM_CONTINUE(          0x240000+0x30000, 0x010000)//bank 9 hi
1027 	ROM_CONTINUE(          0x280000+0x30000, 0x010000)//bank a hi
1028 	ROM_CONTINUE(          0x2c0000+0x30000, 0x010000)//bank b hi
1029 	ROM_CONTINUE(          0x300000+0x30000, 0x010000)//bank c hi
1030 
1031 	ROM_REGION( 0x80, "eeprom", 0 ) // default eeprom to prevent game booting upside down with error
1032 	ROM_LOAD( "moo.nv", 0x0000, 0x080, CRC(7bd904a8) SHA1(8747c5c62d1832e290be8ace73c61b1f228c0bec) )
1033 ROM_END
1034 
1035 
1036 GAME( 1992, moomesa,    0,       moo,     moo,   moo_state, empty_init, ROT0, "Konami",  "Wild West C.O.W.-Boys of Moo Mesa (ver EAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1037 GAME( 1992, moomesauac, moomesa, moo,     moo,   moo_state, empty_init, ROT0, "Konami",  "Wild West C.O.W.-Boys of Moo Mesa (ver UAC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1038 GAME( 1992, moomesauab, moomesa, moo,     moo,   moo_state, empty_init, ROT0, "Konami",  "Wild West C.O.W.-Boys of Moo Mesa (ver UAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1039 GAME( 1992, moomesaaab, moomesa, moo,     moo,   moo_state, empty_init, ROT0, "Konami",  "Wild West C.O.W.-Boys of Moo Mesa (ver AAB)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1040 GAME( 1992, moomesabl,  moomesa, moobl,   moo,   moo_state, empty_init, ROT0, "bootleg", "Wild West C.O.W.-Boys of Moo Mesa (bootleg)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // based on Version AA
1041 GAME( 1992, bucky,      0,       bucky,   bucky, moo_state, empty_init, ROT0, "Konami",  "Bucky O'Hare (ver EAB)",                      MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1042 GAME( 1992, buckyea,    bucky,   bucky,   bucky, moo_state, empty_init, ROT0, "Konami",  "Bucky O'Hare (ver EA)",                       MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1043 GAME( 1992, buckyjaa,   bucky,   bucky,   bucky, moo_state, empty_init, ROT0, "Konami",  "Bucky O'Hare (ver JAA)",                      MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1044 GAME( 1992, buckyuab,   bucky,   bucky,   bucky, moo_state, empty_init, ROT0, "Konami",  "Bucky O'Hare (ver UAB)",                      MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1045 GAME( 1992, buckyaab,   bucky,   bucky,   bucky, moo_state, empty_init, ROT0, "Konami",  "Bucky O'Hare (ver AAB)",                      MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1046 GAME( 1992, buckyaa,    bucky,   bucky,   bucky, moo_state, empty_init, ROT0, "Konami",  "Bucky O'Hare (ver AA)",                       MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
1047