1 // license:BSD-3-Clause
2 // copyright-holders:Philip Bennett, R. Belmont
3 /*
4   Konami Gambling Games ("Tasman" hardware)
5   System GX derivative
6 
7   68EC020 @ 25 MHz
8   K056832 + K058143 : GX tilemaps
9   K055673(x2) + K053246A : (extended?) GX sprites
10   K055555 : GX mixer/blender
11 
12   68000 @ 16 MHz + YMZ280B for audio
13 
14   Thanks to palindrome for PCB scans.
15 
16     0x38606
17 
18   TODO:
19   - dual port sound RAM;
20   - interrupt sources / irq masking;
21 */
22 
23 #include "emu.h"
24 #include "video/konami_helper.h"
25 #include "cpu/m68000/m68000.h"
26 #include "machine/k053252.h"
27 #include "machine/timer.h"
28 #include "video/k053246_k053247_k055673.h"
29 #include "video/k054156_k054157_k056832.h"
30 #include "video/k055555.h"
31 #include "machine/eepromser.h"
32 #include "emupal.h"
33 #include "speaker.h"
34 
35 
36 #define CUSTOM_DRAW 1
37 
38 class kongambl_state : public driver_device
39 {
40 public:
kongambl_state(const machine_config & mconfig,device_type type,const char * tag)41 	kongambl_state(const machine_config &mconfig, device_type type, const char *tag) :
42 		driver_device(mconfig, type, tag),
43 		m_maincpu(*this,"maincpu"),
44 		m_k053252(*this, "k053252"),
45 		m_k055673(*this, "k055673"),
46 		m_k055555(*this, "k055555"),
47 		m_k056832(*this, "k056832"),
48 #if CUSTOM_DRAW
49 		m_gfxdecode(*this, "gfxdecode"),
50 #endif
51 		m_screen(*this, "screen"),
52 		m_palette(*this, "palette"),
53 		m_vram(*this, "vram")
54 	{ }
55 
56 	void kongambl(machine_config &config);
57 
58 	void init_kingtut();
59 
60 private:
61 	required_device<cpu_device> m_maincpu;
62 	required_device<k053252_device> m_k053252;
63 	required_device<k055673_device> m_k055673;
64 	required_device<k055555_device> m_k055555;
65 	required_device<k056832_device> m_k056832;
66 #if CUSTOM_DRAW
67 	required_device<gfxdecode_device> m_gfxdecode;
68 #endif
69 	required_device<screen_device> m_screen;
70 	required_device<palette_device> m_palette;
71 
72 	optional_shared_ptr<uint32_t> m_vram;
73 	uint32_t eeprom_r(offs_t offset, uint32_t mem_mask = ~0);
74 	void eeprom_w(offs_t offset, uint8_t data);
75 	void kongambl_ff_w(uint8_t data);
76 	uint32_t test_r();
77 	// uint32_t rng_r();
78 
79 	DECLARE_VIDEO_START(kongambl);
80 	uint8_t m_irq_mask;
81 
machine_reset()82 	virtual void machine_reset() override { m_irq_mask = 0; };
83 	uint32_t screen_update_kongambl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
84 	WRITE_LINE_MEMBER(vblank_irq_ack_w);
85 	WRITE_LINE_MEMBER(hblank_irq_ack_w);
86 	TIMER_DEVICE_CALLBACK_MEMBER(kongambl_vblank);
87 	K056832_CB_MEMBER(tile_callback);
88 	K053246_CB_MEMBER(sprite_callback);
89 
90 	void kongamaud_map(address_map &map);
91 	void kongambl_map(address_map &map);
92 };
93 
94 
VIDEO_START_MEMBER(kongambl_state,kongambl)95 VIDEO_START_MEMBER(kongambl_state,kongambl)
96 {
97 	#if CUSTOM_DRAW
98 
99 	#else
100 	m_k056832->set_layer_association(0);
101 	m_k056832->set_layer_offs(0, -2, 0);
102 	m_k056832->set_layer_offs(1,  2, 0);
103 	m_k056832->set_layer_offs(2,  4, 0);
104 	m_k056832->set_layer_offs(3,  6, 0);
105 	#endif
106 }
107 
screen_update_kongambl(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)108 uint32_t kongambl_state::screen_update_kongambl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
109 {
110 	#if CUSTOM_DRAW
111 	gfx_element *gfx = m_gfxdecode->gfx(0);
112 	uint32_t count;
113 
114 	count = 0;
115 
116 	for (int y=0;y<64;y++)
117 	{
118 		for (int x=0;x<128;x++)
119 		{
120 			uint32_t tile = m_vram[count] & 0xffff;
121 
122 			if(m_screen->visible_area().contains(x*8, y*8))
123 				gfx->opaque(bitmap,cliprect,tile,0,0,0,x*8,y*8);
124 
125 			count++;
126 		}
127 	}
128 
129 	count = 0x8000/4;
130 
131 	for (int y=0;y<64;y++)
132 	{
133 		for (int x=0;x<128;x++)
134 		{
135 			uint32_t tile = m_vram[count] & 0xffff;
136 
137 			if(m_screen->visible_area().contains(x*8, y*8))
138 				gfx->transpen(bitmap,cliprect,tile,0,0,0,x*8,y*8,0);
139 
140 			count++;
141 		}
142 	}
143 
144 
145 	#else
146 	bitmap.fill(0, cliprect);
147 	screen.priority().fill(0, cliprect);
148 
149 	m_k056832->tilemap_draw(screen, bitmap, cliprect, 3, 0, 0);
150 	m_k056832->tilemap_draw(screen, bitmap, cliprect, 2, 0, 0);
151 	m_k056832->tilemap_draw(screen, bitmap, cliprect, 1, 0, 0);
152 	m_k056832->tilemap_draw(screen, bitmap, cliprect, 0, 0, 0);
153 	#endif
154 	return 0;
155 }
156 
eeprom_r(offs_t offset,uint32_t mem_mask)157 uint32_t kongambl_state::eeprom_r(offs_t offset, uint32_t mem_mask)
158 {
159 	//return machine().rand();
160 	uint32_t retval = 0;
161 
162 	if (ACCESSING_BITS_24_31)
163 		retval |= ioport("IN0")->read() << 24; // bit 0 freezes the system if 1
164 
165 	if (ACCESSING_BITS_16_23)
166 		retval |= ioport("EXT_PCB")->read() << 16; // ???
167 
168 	if (ACCESSING_BITS_8_15)
169 		retval |= ioport("IN2")->read() << 8; // ???
170 
171 	if (ACCESSING_BITS_0_7)
172 		retval |= (ioport("SYSTEM")->read());
173 
174 
175 //  printf("%08x\n",mem_mask);
176 
177 	return retval;
178 }
eeprom_w(offs_t offset,uint8_t data)179 void kongambl_state::eeprom_w(offs_t offset, uint8_t data)
180 {
181 	// offset == 3 seems mux writes (active low)
182 
183 	if (offset == 2)
184 	{
185 		ioport("EEPROMOUT")->write(data&0x7, 0xff);
186 		if(data & 0xf8)
187 			printf("Unused EEPROM bits %02x %02x\n",offset,data);
188 	}
189 	else
190 		printf("%02x %02x\n",offset,data);
191 
192 	if(offset == 0)
193 		m_irq_mask = data;
194 }
195 
test_r()196 uint32_t kongambl_state::test_r()
197 {
198 	return -1;//machine().rand();
199 }
200 
201 /*
202  uint32_t kongambl_state::rng_r()
203 {
204     return machine().rand();
205 }
206 */
207 
kongambl_ff_w(uint8_t data)208 void kongambl_state::kongambl_ff_w(uint8_t data)
209 {
210 	/* enables thru 0->1 */
211 	/* ---- x--- (related to OBJ ROM) */
212 	/* ---- -x-- k056832 upper ROM bank */
213 	/* ---- --x- k056832 related (enabled when testing ROM area) */
214 //  printf("%02x\n",data);
215 }
216 
kongambl_map(address_map & map)217 void kongambl_state::kongambl_map(address_map &map)
218 {
219 	map(0x000000, 0x0fffff).rom(); // main program
220 	map(0x100000, 0x11ffff).ram(); // work RAM
221 
222 	map(0x200000, 0x207fff).ram(); // backup RAM 24F
223 
224 	map(0x300000, 0x307fff).ram(); // backup RAM 24H
225 
226 	// override konami chips with custom areas until that code is removed
227 	map(0x420000, 0x43ffff).ram().share("vram");
228 	//map(0x480000, 0x48003f).ram(); // vregs
229 
230 	//0x400000 0x400001 "13M" even addresses
231 	//0x400002,0x400003 "13J" odd addresses
232 	map(0x400000, 0x401fff).r(m_k056832, FUNC(k056832_device::rom_word_r));
233 //  map(0x420000, 0x43ffff).rw(m_k056832, FUNC(k056832_device::unpaged_ram_word_r), FUNC(k056832_device::unpaged_ram_word_w));
234 	map(0x480000, 0x48003f).w(m_k056832, FUNC(k056832_device::word_w));
235 
236 
237 
238 	map(0x440000, 0x443fff).ram(); // OBJ RAM
239 
240 	map(0x460000, 0x47ffff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette");
241 
242 	map(0x4b0000, 0x4b001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask32(0xff00ff00);
243 
244 	map(0x4c0000, 0x4c0007).w(m_k055673, FUNC(k055673_device::k053246_w));
245 	//map(0x4c4000, 0x4c4003).nopw();
246 	//map(0x4c4004, 0x4c4007).nopw();
247 	//map(0x4c801c, 0x4c801f).nopw();
248 	//map(0x4cc01c, 0x4cc01f).nopw();
249 
250 	map(0x4cc000, 0x4cc00f).r(m_k055673, FUNC(k055673_device::k055673_rom_word_r));
251 
252 	map(0x4d0000, 0x4d0000).w(FUNC(kongambl_state::kongambl_ff_w));
253 
254 	map(0x500000, 0x5007ff).ram();
255 	map(0x500380, 0x500383).r(FUNC(kongambl_state::test_r));
256 //  map(0x500400, 0x500403).noprw(); //dual port?
257 //  map(0x500420, 0x500423).noprw(); //dual port?
258 //  map(0x500500, 0x500503).noprw(); // reads sound ROM in here, polled from m68k?
259 	map(0x580000, 0x580007).r(FUNC(kongambl_state::test_r));
260 
261 	map(0x600000, 0x60000f).r(FUNC(kongambl_state::test_r));
262 
263 	map(0x700000, 0x700003).r(FUNC(kongambl_state::eeprom_r));
264 	map(0x700004, 0x700007).portr("IN1");
265 	map(0x700008, 0x70000b).portr("IN3");
266 	map(0x780000, 0x780003).w(FUNC(kongambl_state::eeprom_w));
267 	//map(0x780004, 0x780007).nopw();
268 }
269 
kongamaud_map(address_map & map)270 void kongambl_state::kongamaud_map(address_map &map)
271 {
272 	map(0x000000, 0x01ffff).rom(); // main program (mirrored?)
273 	map(0x100000, 0x10ffff).ram(); // work RAM
274 	map(0x180000, 0x180001).nopw();
275 	map(0x190000, 0x190001).nopw();
276 	map(0x1a0000, 0x1a0001).nopw();
277 	map(0x1b0000, 0x1b0001).nopr();
278 	map(0x1c0000, 0x1c0001).nopr();
279 	map(0x200000, 0x2000ff).ram(); // unknown (YMZ280b?  Shared with 68020?)
280 	map(0x280000, 0x2800ff).ram();
281 	map(0x300000, 0x3007ff).ram();
282 }
283 
284 
285 
286 static INPUT_PORTS_START( kongambl )
287 	PORT_START( "SYSTEM" )
288 	PORT_DIPNAME( 0x01, 0x00, "SYSTEM" )
DEF_STR(Off)289 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
290 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
291 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
292 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
293 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
294 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
295 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
296 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
297 	PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read)
298 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
299 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
300 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
301 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
302 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
303 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
304 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
305 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
306 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
307 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
308 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
309 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
310 
311 	PORT_START( "IN0" )
312 	PORT_DIPNAME( 0x01, 0x00, "SYSA" )
313 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
314 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
315 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
316 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
317 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
318 	PORT_DIPNAME( 0x04, 0x00, "Reset Backup RAM" )
319 	PORT_DIPSETTING(    0x00, DEF_STR( Yes ) )
320 	PORT_DIPSETTING(    0x04, DEF_STR( No ) )
321 	PORT_DIPNAME( 0x08, 0x08, "Reset Signal" )
322 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
323 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
324 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
325 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
326 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
327 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
328 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
329 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
330 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
331 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
332 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
333 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
334 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
335 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
336 
337 	PORT_START( "EXT_PCB" )
338 	PORT_DIPNAME( 0x01, 0x00, "SYSB" )
339 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
340 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
341 	PORT_DIPNAME( 0x02, 0x02, "No Battery - 1" ) // "NO BATTERY"
342 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
343 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
344 	PORT_DIPNAME( 0x04, 0x04, "No Battery - 2" ) // "NO BATTERY"
345 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
346 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
347 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
348 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
349 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
350 	PORT_DIPNAME( 0x10, 0x00, "IFU signal" ) // IFU
351 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
352 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
353 	PORT_DIPNAME( 0x20, 0x00, "LCU signal" ) // LCU
354 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
355 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
356 	PORT_DIPNAME( 0x40, 0x00, "VSB signal" ) // VSB
357 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
358 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
359 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
360 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
361 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
362 
363 	PORT_START( "IN1" )
364 	PORT_DIPNAME( 0x01, 0x00, "SYSC" )
365 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
366 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
367 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
368 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
369 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
370 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
371 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
372 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
373 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
374 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
375 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
376 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
377 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
378 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
379 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
380 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
381 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
382 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
383 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
384 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
385 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
386 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
387 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
388 	PORT_DIPNAME( 0x0100, 0x0000, "SYSD" )
389 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
390 	PORT_DIPSETTING(    0x0100, DEF_STR( On ) )
391 	PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
392 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
393 	PORT_DIPSETTING(    0x0200, DEF_STR( On ) )
394 	PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
395 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
396 	PORT_DIPSETTING(    0x0400, DEF_STR( On ) )
397 	PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
398 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
399 	PORT_DIPSETTING(    0x0800, DEF_STR( On ) )
400 	PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
401 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
402 	PORT_DIPSETTING(    0x1000, DEF_STR( On ) )
403 	PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
404 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
405 	PORT_DIPSETTING(    0x2000, DEF_STR( On ) )
406 	PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Service_Mode ) )
407 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
408 	PORT_DIPSETTING(    0x4000, DEF_STR( On ) )
409 	PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
410 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
411 	PORT_DIPSETTING(    0x8000, DEF_STR( On ) )
412 	PORT_DIPNAME( 0x010000, 0x000000, "SYSE" )
413 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
414 	PORT_DIPSETTING(    0x010000, DEF_STR( On ) )
415 	PORT_DIPNAME( 0x020000, 0x000000, DEF_STR( Unknown ) )
416 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
417 	PORT_DIPSETTING(    0x020000, DEF_STR( On ) )
418 	PORT_DIPNAME( 0x040000, 0x000000, DEF_STR( Unknown ) )
419 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
420 	PORT_DIPSETTING(    0x040000, DEF_STR( On ) )
421 	PORT_DIPNAME( 0x080000, 0x000000, DEF_STR( Unknown ) )
422 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
423 	PORT_DIPSETTING(    0x080000, DEF_STR( On ) )
424 	PORT_DIPNAME( 0x100000, 0x000000, DEF_STR( Unknown ) )
425 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
426 	PORT_DIPSETTING(    0x100000, DEF_STR( On ) )
427 	PORT_DIPNAME( 0x200000, 0x000000, DEF_STR( Unknown ) )
428 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
429 	PORT_DIPSETTING(    0x200000, DEF_STR( On ) )
430 	PORT_DIPNAME( 0x400000, 0x000000, DEF_STR( Unknown ) )
431 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
432 	PORT_DIPSETTING(    0x400000, DEF_STR( On ) )
433 	PORT_DIPNAME( 0x800000, 0x000000, DEF_STR( Unknown ) )
434 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
435 	PORT_DIPSETTING(    0x800000, DEF_STR( On ) )
436 	PORT_DIPNAME( 0x01000000, 0x00000000, "SYSF" )
437 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
438 	PORT_DIPSETTING(    0x01000000, DEF_STR( On ) )
439 	PORT_DIPNAME( 0x02000000, 0x00000000, DEF_STR( Unknown ) )
440 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
441 	PORT_DIPSETTING(    0x02000000, DEF_STR( On ) )
442 	PORT_DIPNAME( 0x04000000, 0x00000000, DEF_STR( Unknown ) )
443 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
444 	PORT_DIPSETTING(    0x04000000, DEF_STR( On ) )
445 	PORT_DIPNAME( 0x08000000, 0x00000000, DEF_STR( Unknown ) )
446 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
447 	PORT_DIPSETTING(    0x08000000, DEF_STR( On ) )
448 	PORT_DIPNAME( 0x10000000, 0x00000000, DEF_STR( Unknown ) )
449 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
450 	PORT_DIPSETTING(    0x10000000, DEF_STR( On ) )
451 	PORT_DIPNAME( 0x20000000, 0x00000000, DEF_STR( Unknown ) )
452 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
453 	PORT_DIPSETTING(    0x20000000, DEF_STR( On ) )
454 	PORT_DIPNAME( 0x40000000, 0x00000000, DEF_STR( Unknown ) )
455 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
456 	PORT_DIPSETTING(    0x40000000, DEF_STR( On ) )
457 	PORT_DIPNAME( 0x80000000, 0x00000000, DEF_STR( Unknown ) )
458 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
459 	PORT_DIPSETTING(    0x80000000, DEF_STR( On ) )
460 
461 	PORT_START( "IN2" )
462 	PORT_DIPNAME( 0x01, 0x00, "SYSG" )
463 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
464 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
465 	PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
466 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
467 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
468 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
469 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
470 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
471 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
472 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
473 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
474 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
475 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
476 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
477 	PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
478 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
479 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
480 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
481 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
482 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
483 	PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
484 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
485 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
486 
487 	PORT_START( "IN3" )
488 	PORT_DIPNAME( 0x01, 0x01, "SYSC" )
489 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
490 	PORT_DIPSETTING(    0x01, DEF_STR( On ) )
491 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
492 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
493 	PORT_DIPSETTING(    0x02, DEF_STR( On ) )
494 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
495 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
496 	PORT_DIPSETTING(    0x04, DEF_STR( On ) )
497 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
498 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
499 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
500 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
501 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
502 	PORT_DIPSETTING(    0x10, DEF_STR( On ) )
503 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
504 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
505 	PORT_DIPSETTING(    0x20, DEF_STR( On ) )
506 	PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
507 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
508 	PORT_DIPSETTING(    0x40, DEF_STR( On ) )
509 	PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
510 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
511 	PORT_DIPSETTING(    0x80, DEF_STR( On ) )
512 	PORT_DIPNAME( 0x0100, 0x0000, "SYSD" )
513 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
514 	PORT_DIPSETTING(    0x0100, DEF_STR( On ) )
515 	PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) )
516 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
517 	PORT_DIPSETTING(    0x0200, DEF_STR( On ) )
518 	PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) )
519 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
520 	PORT_DIPSETTING(    0x0400, DEF_STR( On ) )
521 	PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) )
522 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
523 	PORT_DIPSETTING(    0x0800, DEF_STR( On ) )
524 	PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) )
525 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
526 	PORT_DIPSETTING(    0x1000, DEF_STR( On ) )
527 	PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) )
528 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
529 	PORT_DIPSETTING(    0x2000, DEF_STR( On ) )
530 	PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) )
531 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
532 	PORT_DIPSETTING(    0x4000, DEF_STR( On ) )
533 	PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) )
534 	PORT_DIPSETTING(    0x0000, DEF_STR( Off ) )
535 	PORT_DIPSETTING(    0x8000, DEF_STR( On ) )
536 	PORT_DIPNAME( 0x010000, 0x000000, "SYSE" )
537 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
538 	PORT_DIPSETTING(    0x010000, DEF_STR( On ) )
539 	PORT_DIPNAME( 0x020000, 0x000000, DEF_STR( Unknown ) )
540 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
541 	PORT_DIPSETTING(    0x020000, DEF_STR( On ) )
542 	PORT_DIPNAME( 0x040000, 0x000000, DEF_STR( Unknown ) )
543 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
544 	PORT_DIPSETTING(    0x040000, DEF_STR( On ) )
545 	PORT_DIPNAME( 0x080000, 0x000000, DEF_STR( Unknown ) )
546 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
547 	PORT_DIPSETTING(    0x080000, DEF_STR( On ) )
548 	PORT_DIPNAME( 0x100000, 0x000000, DEF_STR( Unknown ) )
549 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
550 	PORT_DIPSETTING(    0x100000, DEF_STR( On ) )
551 	PORT_DIPNAME( 0x200000, 0x000000, DEF_STR( Unknown ) )
552 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
553 	PORT_DIPSETTING(    0x200000, DEF_STR( On ) )
554 	PORT_DIPNAME( 0x400000, 0x000000, DEF_STR( Unknown ) )
555 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
556 	PORT_DIPSETTING(    0x400000, DEF_STR( On ) )
557 	PORT_DIPNAME( 0x800000, 0x000000, DEF_STR( Unknown ) )
558 	PORT_DIPSETTING(    0x000000, DEF_STR( Off ) )
559 	PORT_DIPSETTING(    0x800000, DEF_STR( On ) )
560 	PORT_DIPNAME( 0x01000000, 0x00000000, "SYSF" )
561 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
562 	PORT_DIPSETTING(    0x01000000, DEF_STR( On ) )
563 	PORT_DIPNAME( 0x02000000, 0x00000000, DEF_STR( Unknown ) )
564 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
565 	PORT_DIPSETTING(    0x02000000, DEF_STR( On ) )
566 	PORT_DIPNAME( 0x04000000, 0x00000000, DEF_STR( Unknown ) )
567 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
568 	PORT_DIPSETTING(    0x04000000, DEF_STR( On ) )
569 	PORT_DIPNAME( 0x08000000, 0x00000000, DEF_STR( Unknown ) )
570 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
571 	PORT_DIPSETTING(    0x08000000, DEF_STR( On ) )
572 	PORT_DIPNAME( 0x10000000, 0x00000000, DEF_STR( Unknown ) )
573 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
574 	PORT_DIPSETTING(    0x10000000, DEF_STR( On ) )
575 	PORT_DIPNAME( 0x20000000, 0x00000000, DEF_STR( Unknown ) )
576 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
577 	PORT_DIPSETTING(    0x20000000, DEF_STR( On ) )
578 	PORT_DIPNAME( 0x40000000, 0x00000000, DEF_STR( Unknown ) )
579 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
580 	PORT_DIPSETTING(    0x40000000, DEF_STR( On ) )
581 	PORT_DIPNAME( 0x80000000, 0x00000000, DEF_STR( Unknown ) )
582 	PORT_DIPSETTING(    0x00000000, DEF_STR( Off ) )
583 	PORT_DIPSETTING(    0x80000000, DEF_STR( On ) )
584 
585 	PORT_START( "EEPROMOUT" )
586 	PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, di_write)
587 	PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, clk_write)
588 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, cs_write)
589 INPUT_PORTS_END
590 
591 
592 K053246_CB_MEMBER(kongambl_state::sprite_callback)
593 {
594 }
595 
K056832_CB_MEMBER(kongambl_state::tile_callback)596 K056832_CB_MEMBER(kongambl_state::tile_callback)
597 {
598 }
599 
600 
601 static const gfx_layout charlayout8_tasman =
602 {
603 	8,8,
604 	RGN_FRAC(1,1),
605 	8,
606 	// 0,8,16,24,32,40,48,56
607 	{ 56,24,40,8,48,16,32,0 },
608 	{ 0,1,2,3,4,5,6,7 },
609 	{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64},
610 	8*64
611 };
612 
613 static GFXDECODE_START( gfx_tasman )
614 	GFXDECODE_ENTRY( "k056832", 0, charlayout8_tasman, 0, 0x8000/(1 << 8) )
615 GFXDECODE_END
616 
617 
WRITE_LINE_MEMBER(kongambl_state::vblank_irq_ack_w)618 WRITE_LINE_MEMBER(kongambl_state::vblank_irq_ack_w)
619 {
620 	m_maincpu->set_input_line(1, CLEAR_LINE);
621 }
622 
WRITE_LINE_MEMBER(kongambl_state::hblank_irq_ack_w)623 WRITE_LINE_MEMBER(kongambl_state::hblank_irq_ack_w)
624 {
625 	m_maincpu->set_input_line(2, CLEAR_LINE);
626 }
627 
TIMER_DEVICE_CALLBACK_MEMBER(kongambl_state::kongambl_vblank)628 TIMER_DEVICE_CALLBACK_MEMBER(kongambl_state::kongambl_vblank)
629 {
630 	int scanline = param;
631 
632 	// disabled for now since it interferes with the ROM tests
633 	if(scanline == 384 && m_irq_mask & 1)
634 		m_maincpu->set_input_line(1, HOLD_LINE); // vblank?
635 
636 	//if(scanline == 256 && m_irq_mask & 2)
637 	//  m_maincpu->set_input_line(2, HOLD_LINE); // unknown (jumps to work RAM via a branch or returns lv 2 exception error, extension board?)
638 
639 	if(scanline == 0 && m_irq_mask & 4)
640 		m_maincpu->set_input_line(3, HOLD_LINE); // sprite irq?
641 
642 	if(scanline == 128 && m_irq_mask & 8)
643 		m_maincpu->set_input_line(4, HOLD_LINE); // sound irq
644 
645 }
646 
kongambl(machine_config & config)647 void kongambl_state::kongambl(machine_config &config)
648 {
649 	M68EC020(config, m_maincpu, 25000000);
650 	m_maincpu->set_addrmap(AS_PROGRAM, &kongambl_state::kongambl_map);
651 	TIMER(config, "scantimer").configure_scanline(FUNC(kongambl_state::kongambl_vblank), "screen", 0, 1);
652 
653 	m68000_device &sndcpu(M68000(config, "sndcpu", 16000000));
654 	sndcpu.set_addrmap(AS_PROGRAM, &kongambl_state::kongamaud_map);
655 	sndcpu.set_periodic_int(FUNC(kongambl_state::irq2_line_hold), attotime::from_hz(480));
656 
657 	K053252(config, m_k053252, 25000000);
658 	m_k053252->set_offsets(0, 16); // TBD
659 	m_k053252->int1_ack().set(FUNC(kongambl_state::vblank_irq_ack_w));
660 	m_k053252->int2_ack().set(FUNC(kongambl_state::hblank_irq_ack_w));
661 	m_k053252->set_screen(m_screen);
662 
663 	EEPROM_93C46_16BIT(config, "eeprom");
664 
665 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
666 	m_screen->set_raw(25000000, 288+16+32+48, 0, 287, 224+16+8+16, 0, 223); // fake, they'll be changed by CCU anyway, TBD
667 	m_screen->set_screen_update(FUNC(kongambl_state::screen_update_kongambl));
668 	m_screen->set_palette(m_palette);
669 
670 	PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 32768);
671 
672 	MCFG_VIDEO_START_OVERRIDE(kongambl_state,kongambl)
673 
674 	K055555(config, m_k055555, 0);
675 
676 	K055673(config, m_k055673, 0);
677 	m_k055673->set_sprite_callback(FUNC(kongambl_state::sprite_callback));
678 	m_k055673->set_config(K055673_LAYOUT_LE2, -48+1, -23);
679 	m_k055673->set_palette(m_palette);
680 
681 #if CUSTOM_DRAW
682 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_tasman);
683 #endif
684 
685 	K056832(config, m_k056832, 0);
686 	m_k056832->set_tile_callback(FUNC(kongambl_state::tile_callback));
687 	m_k056832->set_config(K056832_BPP_8TASMAN, 0, 0);
688 	m_k056832->set_palette(m_palette);
689 
690 	SPEAKER(config, "lspeaker").front_left();
691 	SPEAKER(config, "rspeaker").front_right();
692 }
693 
694 
695 ROM_START( kingtut )
696 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68EC020 Code */
697 	ROM_LOAD32_WORD_SWAP( "kitp1b37_l.02", 0x000002, 0x40000, CRC(95c6da28) SHA1(3ef33f5d0748c80be82d33c21f0f8bb71909884e) )
698 	ROM_RELOAD(0x080002, 0x40000)
699 	ROM_LOAD32_WORD_SWAP( "kitp1b37_h.01", 0x000000, 0x40000, CRC(16709625) SHA1(6b818a85724f87fed23a26978dd26b079f814134) )
700 	ROM_RELOAD(0x080000, 0x40000)
701 
702 	ROM_REGION( 0x80000, "sndcpu", 0 ) /* 68000 sound program */
CRC(dbb8a7e8)703 	ROM_LOAD16_WORD_SWAP( "n12prog_ifu.41", 0x00000, 0x08000, CRC(dbb8a7e8) SHA1(9662b34e9332385d20e17ee1c92fd91935d4c3b2) )
704 
705 	ROM_REGION( 0x100000, "k056832", 0 ) // 8x8x8 tiles
706 	ROM_LOAD16_BYTE( "kit11_l1_vrm.21", 0x000000, 0x80000, CRC(431eb89f) SHA1(377c96f615b4b76314aeecad4e868edb66c72f33) )
707 	ROM_LOAD16_BYTE( "kit11_h1_vrm.23", 0x000001, 0x80000, CRC(7aa2f1bc) SHA1(d8aead9dedcc83d3dc574122103aaa2074011197) )
708 
709 	ROM_REGION( 0x200000, "k055673", 0 ) // 16x16x8 sprites
710 	ROM_LOAD64_WORD( "kit11ll1_obj.17", 0x000000, 0x80000, CRC(a19338b8) SHA1(1aa68596e5bf493cb360495f1174dc1323086ad2) )
711 	ROM_LOAD64_WORD( "kit11lm1_obj.15", 0x000002, 0x80000, CRC(1aea3f4d) SHA1(52fd1a7ffeeb3acce176ad3812a2ca146e02c324) )
712 	ROM_LOAD64_WORD( "kit11hm1_obj.13", 0x000004, 0x80000, CRC(21cc4e40) SHA1(9e3735fc8cd53f7e831dc76697911216bd8bbc70) )
713 	ROM_LOAD64_WORD( "kit11hh1_obj.11", 0x000006, 0x80000, CRC(a64d2382) SHA1(bb745a26ef6c076f3aa3ec476589a95915b359ed) )
714 
715 	ROM_REGION( 0x100000, "snd", 0 )
716 	ROM_LOAD( "snd12sd1_snd.31", 0x000000, 0x80000, CRC(f4121baa) SHA1(723c6d96ecef5ef510d085f443d44bad07aa19e5) )
717 	ROM_LOAD( "kit11sd2_snd.32", 0x080000, 0x80000, CRC(647c6e2e) SHA1(e013239a73553e2993adabeda103f5b1cfee0f6c) )
718 ROM_END
719 
720 ROM_START( moneybnk )
721 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68EC020 Code */
722 	ROM_LOAD32_WORD_SWAP( "mobn6l29_l.02", 0x000002, 0x40000, CRC(9cd2754a) SHA1(2eb695cb4abab4a448711b8acf3f5b1bb169eb6f) )
723 	ROM_RELOAD(0x080002, 0x40000)
724 	ROM_LOAD32_WORD_SWAP( "mobn6l29_h.01", 0x000000, 0x40000, CRC(952c376b) SHA1(0fc0499f5570b920c600ddd6a15751d72345c83e) )
725 	ROM_RELOAD(0x080000, 0x40000)
726 
727 	ROM_REGION( 0x80000, "sndcpu", 0 ) /* 68000 sound program */
728 	ROM_LOAD16_WORD_SWAP( "n12prog_ifu.41", 0x00000, 0x08000, CRC(dbb8a7e8) SHA1(9662b34e9332385d20e17ee1c92fd91935d4c3b2) ) // some kind of bios? same on both games
729 
730 	ROM_REGION( 0x100000, "k056832", 0 ) // 8x8x8 tiles
731 	ROM_LOAD16_BYTE( "mob11_l1_vrm.21", 0x000000, 0x80000, CRC(926fbd3b) SHA1(4f85ea63faff1508d5abf0ca0ebd16e802f8f45c) )
732 	ROM_LOAD16_BYTE( "mob11_h1_vrm.23", 0x000001, 0x80000, CRC(a119feaa) SHA1(567e319dfddb9ec04b9302af782e9baccab4f5a6) )
733 
734 	ROM_REGION( 0x200000, "k055673", 0 ) // 16x16x8 sprites
735 	ROM_LOAD64_WORD( "mob11ll1_obj.17", 0x000000, 0x80000, CRC(5c5959a3) SHA1(1eea6bf4c34aa05f45b2737eb6035f2762277cfb) )
736 	ROM_LOAD64_WORD( "mob11lm1_obj.15", 0x000002, 0x80000, CRC(0b0e4e9b) SHA1(cbbbde7470f96e9f93fa848371e19ebfeea7fe4d) )
737 	ROM_LOAD64_WORD( "mob11hm1_obj.13", 0x000004, 0x80000, CRC(6f84c287) SHA1(edccefa96d97c6f67a9cd02f70cf61385d70daae) )
738 	ROM_LOAD64_WORD( "mob11hh1_obj.11", 0x000006, 0x80000, CRC(fc2ebc0a) SHA1(7c61d05ae1644a2aafc2f81725658b29ce69a091) )
739 
740 	ROM_REGION( 0x100000, "snd", 0 )
741 	ROM_LOAD( "snd11sd1_snd.31", 0x000000, 0x80000, CRC(cce53e79) SHA1(970507fcef309c6c81f7e1a8e90afa64f3f6e2ae) )
742 	ROM_LOAD( "mob11sd2_snd.32", 0x080000, 0x80000, CRC(71ecc441) SHA1(4c94fa3a4ab872b2b841d98b73da89eaec0f46f0) )
743 ROM_END
744 
745 
746 
747 ROM_START( dragsphr )
748 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68EC020 Code */
749 	ROM_LOAD32_WORD_SWAP( "u2.bin", 0x00002, 0x080000, CRC(1fec9ead) SHA1(55c1420b22781ee985ce5369186a236e235c55d1) )
750 	ROM_LOAD32_WORD_SWAP( "u1.bin", 0x00000, 0x080000, CRC(581acba9) SHA1(157157130c009ab5c4329e4f0dad7419176ff51a) )
751 
752 	ROM_REGION( 0x80000, "sndcpu", 0 ) /* 68000 sound program */
753 	ROM_LOAD16_WORD_SWAP( "u41_c06chex", 0x0000, 0x020000, CRC(adac17b1) SHA1(8e92dfd112f15ee0dbca215e265f479fb19d4be4) )
754 
755 	ROM_REGION( 0x100000, "k056832", 0 ) // 8x8x8 tiles
756 	ROM_LOAD16_BYTE( "u21.bin", 0x00000, 0x080000, CRC(83fc3afe) SHA1(09cc89567b985685ed206b273915157fc46212f9) )
757 	ROM_LOAD16_BYTE( "u23.bin", 0x00001, 0x080000, CRC(a29a777f) SHA1(1ca37e468f31246cbcbd2e1799e5a0137d19d0b9) )
758 
759 	ROM_REGION( 0x200000, "k055673", 0 ) // 16x16x8 sprites
760 	ROM_LOAD64_WORD( "u17.bin", 0x000000, 0x080000, CRC(9352f279) SHA1(1795df2331fde6de06b7d910d74a3fde69379943) )
761 	ROM_LOAD64_WORD( "u15.bin", 0x000002, 0x080000, CRC(4a7bc71a) SHA1(7b6bfc2b83ea6189a629b64cae295071b52c5fab) )
762 	ROM_LOAD64_WORD( "u13.bin", 0x000004, 0x080000, CRC(a4a60822) SHA1(6f49ae6b40185a0b0dc796b32cdbd048bfcbd3de) )
763 	ROM_LOAD64_WORD( "u11.bin", 0x000006, 0x080000, CRC(97efac6c) SHA1(e317834e3e9b32fb8a8343e58c047a427b3111f0) )
764 
765 	ROM_REGION( 0x100000, "snd", 0 )
766 	ROM_LOAD( "snd11sd1_snd.31", 0x000000, 0x80000, CRC(cce53e79) SHA1(970507fcef309c6c81f7e1a8e90afa64f3f6e2ae) ) // same as moneybnk
767 	/* no rom 32? missing or unused? */
768 ROM_END
769 
770 
771 
772 ROM_START( ivorytsk )
773 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68EC020 Code */
774 	ROM_LOAD32_WORD_SWAP( "u2_5ff4hex", 0x00002, 0x080000, CRC(0af976ba) SHA1(23dbaa6d8eaa501436aecc4f4d2875b3cf1ce4d9) )
775 	ROM_LOAD32_WORD_SWAP( "u1_a3d6hex", 0x00000, 0x080000, CRC(4e37c7dc) SHA1(52afb1989cb720b4757c8adb12240b493165c145) )
776 
777 	ROM_REGION( 0x80000, "sndcpu", 0 ) /* 68000 sound program */
778 	ROM_LOAD16_WORD_SWAP( "u41_c06chex", 0x0000, 0x020000, CRC(adac17b1) SHA1(8e92dfd112f15ee0dbca215e265f479fb19d4be4) )
779 
780 	ROM_REGION( 0x100000, "k056832", 0 ) // 8x8x8 tiles
781 	ROM_LOAD16_BYTE( "u21_ba6dhex", 0x00000, 0x080000, CRC(d14efb82) SHA1(420bf5d807d59e6d17ee113125046b979e1d12f4) )
782 	ROM_LOAD16_BYTE( "u23_9297hex", 0x00001, 0x080000, CRC(5e36ff5f) SHA1(9be65015217affc1e28d9ce855cd22f9cb147258) )
783 
784 	ROM_REGION( 0x200000, "k055673", 0 ) // 16x16x8 sprites
785 	ROM_LOAD64_WORD( "u17_cof8hex", 0x000000, 0x080000, CRC(1ace8891) SHA1(91115680b50d6e31cdbac81ae439eeacb7a5f812) )
786 	ROM_LOAD64_WORD( "u15_8e23hex", 0x000002, 0x080000, CRC(174114cb) SHA1(3f9151e5785482aebfcb6787ddd63d32e0225ad2) )
787 	ROM_LOAD64_WORD( "u13_29fbhex", 0x000004, 0x080000, CRC(8f21cbb9) SHA1(a0e82e9f29f9eedabcd79a72db7187180e64a076) )
788 	ROM_LOAD64_WORD( "u11_17fbhex", 0x000006, 0x080000, CRC(82e8e69b) SHA1(9aab64be470b07340d4f39de04b3b790821b3ce7) )
789 
790 	ROM_REGION( 0x100000, "snd", 0 )
791 	ROM_LOAD( "snd11sd1_snd.31", 0x000000, 0x80000, CRC(cce53e79) SHA1(970507fcef309c6c81f7e1a8e90afa64f3f6e2ae) ) // same as moneybnk
792 	ROM_LOAD( "u32_c20fbin.hex", 0x080000, 0x080000, CRC(38a50800) SHA1(a7a70638d021a039070c9173a42095f7603b57c2) )
793 ROM_END
794 
795 
796 
797 ROM_START( vikingt )
798 	ROM_REGION( 0x100000, "maincpu", 0 ) /* 68EC020 Code */
799 	ROM_LOAD32_WORD_SWAP( "u2.bin", 0x00002, 0x080000, CRC(09a14cb1) SHA1(f09338b43e89cb265c136965b01625a3458f3e41) )
800 	ROM_LOAD32_WORD_SWAP( "u1.bin", 0x00000, 0x080000, CRC(90b07cb4) SHA1(e9eb1601956fa6f5bfa3c4c9b7fccf6eab08dc09) )
801 
802 	ROM_REGION( 0x80000, "sndcpu", 0 ) /* 68000 sound program */
803 	ROM_LOAD16_WORD_SWAP( "u41.bin", 0x0000, 0x020000, CRC(adac17b1) SHA1(8e92dfd112f15ee0dbca215e265f479fb19d4be4) )
804 
805 	ROM_REGION( 0x100000, "k056832", 0 ) // 8x8x8 tiles
806 	ROM_LOAD16_BYTE( "u21.bin", 0x00000, 0x080000, CRC(789d7c41) SHA1(a04b7e8c894e08e9210c630fabd878b8389ee82c) )
807 	ROM_LOAD16_BYTE( "u23.bin", 0x00001, 0x080000, CRC(56ba968e) SHA1(100edc40748067683172480fc2b7d48f4dc89da7) )
808 
809 	ROM_REGION( 0x200000, "k055673", 0 ) // 16x16x8 sprites
810 	ROM_LOAD64_WORD( "u17.bin", 0x000000, 0x080000, CRC(83e7f568) SHA1(0f82eadb3badb7074338099ff9f4d73216a1d5c7) )
811 	ROM_LOAD64_WORD( "u15.bin", 0x000002, 0x080000, CRC(f349b72b) SHA1(d8abc42bbc607e36004a76e45dd88b581db60d09) )
812 	ROM_LOAD64_WORD( "u13.bin", 0x000004, 0x080000, CRC(2cbda923) SHA1(888b3ef9fe91843b59b03b9dabc3fd32fb7fac20) )
813 	ROM_LOAD64_WORD( "u11.bin", 0x000006, 0x080000, CRC(c0bf7510) SHA1(aa0a6d8109452ddf6915a9bd33b7cbb5fbda2386) )
814 
815 	ROM_REGION( 0x100000, "snd", 0 )
816 	ROM_LOAD( "snd12sd1_snd.31", 0x000000, 0x80000, CRC(f4121baa) SHA1(723c6d96ecef5ef510d085f443d44bad07aa19e5) ) // same as King Tut
817 	ROM_LOAD( "u32.bin",         0x080000, 0x080000, CRC(b162ecc7) SHA1(2d1bcbe692a579ed4b582472228021839fd5dab0) )
818 ROM_END
819 
820 
821 void kongambl_state::init_kingtut()
822 {
823 	//uint32_t *rom = (uint32_t*)memregion("maincpu")->base();
824 
825 	//rom[0x3986c/4] = (rom[0x3986c/4] & 0xffff0000) | 0x600e; // patch ROM check
826 	//rom[0x2bfc8/4] = (rom[0x2bfc8/4] & 0xffff0000) | 0x6612; // patch VRAM ROM checks
827 	//rom[0x2acd0/4] = (rom[0x2acd0/4] & 0xffff) | 0x6612<<16; // patch OBJ ROM checks
828 	//rom[0x55e40/4] = (rom[0x55e40/4] & 0xffff0000) | 0x4e71; // goes away from the POST
829 }
830 
831 GAME( 199?, kingtut,    0,        kongambl,    kongambl, kongambl_state, init_kingtut, ROT0,  "Konami", "King Tut (NSW, Australia)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
832 GAME( 199?, moneybnk,   0,        kongambl,    kongambl, kongambl_state, empty_init,   ROT0,  "Konami", "Money In The Bank (NSW, Australia)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
833 GAME( 199?, dragsphr,   0,        kongambl,    kongambl, kongambl_state, empty_init,   ROT0,  "Konami", "Dragon Sphere", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
834 GAME( 199?, ivorytsk,   0,        kongambl,    kongambl, kongambl_state, empty_init,   ROT0,  "Konami", "Ivory Tusk", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
835 GAME( 199?, vikingt,    0,        kongambl,    kongambl, kongambl_state, empty_init,   ROT0,  "Konami", "Viking Treasure", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
836