1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood
3 /*
4 
5 Sega M1 hardware (837-7571) (PCB)
6 
7 Sega Bingo Multicart (837-10675) (Sticker on PCB)
8 
9 used for redemption / gambling style machines in a satellite setup
10 
11 based on Caribbean Boule the following hardware setup is used
12 
13 One X-Board (segaxbd.cpp) drives a large rear-projection monitor which all players view to see the main game progress.
14 
15 Multiple M1 boards ("satellite" board) for each player for them to view information privately.
16 
17 One 'link' board which connects everything together.  The link board has audio hardware, a 68K, and a Z80 as
18 well as a huge bank of UARTS and toslink connectors, but no video. It's possible the main game logic runs
19 on the 'link' board.
20 
21 
22 Unfortunately we don't have any dumps of anything other than an M1 board right now.
23 
24 ---
25 
26 is this related to (or a component of?) bingoc.cpp, the EPR numbers are much lower there tho
27 so it's probably an earlier version of the same thing or one of the 'link' boards?
28 
29 uses s24 style tilemaps (ram based?)
30 
31 
32 */
33 
34 
35 #include "emu.h"
36 #include "cpu/m68000/m68000.h"
37 #include "cpu/z80/z80.h"
38 #include "machine/315_5296.h"
39 #include "machine/gen_latch.h"
40 #include "machine/i8251.h"
41 #include "machine/mb8421.h"
42 #include "sound/2612intf.h"
43 #include "video/segaic24.h"
44 #include "emupal.h"
45 #include "screen.h"
46 #include "speaker.h"
47 
48 
49 
50 class segam1_state : public driver_device
51 {
52 public:
segam1_state(const machine_config & mconfig,device_type type,const char * tag)53 	segam1_state(const machine_config &mconfig, device_type type, const char *tag)
54 		: driver_device(mconfig, type, tag)
55 		, m_maincpu(*this, "maincpu")
56 		, m_audiocpu(*this, "audiocpu")
57 		, m_m1comm(*this, "m1comm")
58 		, m_screen(*this, "screen")
59 		, m_palette(*this, "palette")
60 		, m_paletteram(*this, "paletteram")
61 		, m_tile(*this, "tile")
62 		, m_mixer(*this, "mixer")
63 		, m_ymsnd(*this, "ymsnd")
64 	{ }
65 
66 	void unkm1(machine_config &config);
67 	void segam1(machine_config &config);
68 
69 private:
70 	void paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
71 	void sound_a0_bank_w(uint8_t data);
72 
73 	virtual void machine_start() override;
74 	virtual void video_start() override;
75 
76 	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
77 	required_device<cpu_device> m_maincpu;
78 	required_device<z80_device> m_audiocpu;
79 	required_device<z80_device> m_m1comm;
80 	required_device<screen_device> m_screen;
81 	required_device<palette_device> m_palette;
82 	required_shared_ptr<u16> m_paletteram;
83 	required_device<segas24_tile_device> m_tile;
84 	required_device<segas24_mixer_device> m_mixer;
85 	required_device<ym3438_device> m_ymsnd;
86 	void segam1_comms_map(address_map &map);
87 	void segam1_map(address_map &map);
88 	void segam1_sound_io_map(address_map &map);
89 	void segam1_sound_map(address_map &map);
90 	void unkm1_sound_map(address_map &map);
91 };
92 
machine_start()93 void segam1_state::machine_start()
94 {
95 	membank("soundbank")->configure_entries(0x00, 0x10, memregion("audiocpu")->base(), 0x2000);
96 }
97 
video_start()98 void segam1_state::video_start()
99 {
100 }
101 
sound_a0_bank_w(uint8_t data)102 void segam1_state::sound_a0_bank_w(uint8_t data)
103 {
104 	membank("soundbank")->set_entry(data & 0x0f);
105 }
106 
107 // 315-5242
108 
paletteram_w(offs_t offset,uint16_t data,uint16_t mem_mask)109 void segam1_state::paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
110 {
111 	COMBINE_DATA(&m_paletteram[offset]);
112 	data = m_paletteram[offset];
113 
114 	u16 r = (data & 0x00f) << 4;
115 	if(data & 0x1000)
116 		r |= 8;
117 
118 	u16 g = data & 0x0f0;
119 	if(data & 0x2000)
120 		g |= 8;
121 
122 	u16 b = (data & 0xf00) >> 4;
123 	if(data & 0x4000)
124 		b |= 8;
125 
126 	r |= r >> 5;
127 	g |= g >> 5;
128 	b |= b >> 5;
129 
130 	m_palette->set_pen_color(offset, rgb_t(r, g, b));
131 
132 	if(data & 0x8000) {
133 		r = 255-0.6*(255-r);
134 		g = 255-0.6*(255-g);
135 		b = 255-0.6*(255-b);
136 	} else {
137 		r = 0.6*r;
138 		g = 0.6*g;
139 		b = 0.6*b;
140 	}
141 	m_palette->set_pen_color(offset+m_palette->entries()/2, rgb_t(r, g, b));
142 }
143 
144 
145 // copied from segas24.cpp
146 namespace {
147 	struct layer_sort {
layer_sort__anonee3373ed0111::layer_sort148 		layer_sort(segas24_mixer_device *_mixer) { mixer = _mixer; }
149 
operator ()__anonee3373ed0111::layer_sort150 		bool operator()(int l1, int l2) {
151 			static const int default_pri[12] = { 0, 1, 2, 3, 4, 5, 6, 7, -4, -3, -2, -1 };
152 			int p1 = mixer->get_reg(l1) & 7;
153 			int p2 = mixer->get_reg(l2) & 7;
154 			if(p1 != p2)
155 				return p1 - p2 < 0;
156 			return default_pri[l2] - default_pri[l1] < 0;
157 		}
158 
159 		segas24_mixer_device *mixer;
160 	};
161 }
162 
163 // copied from segas24.cpp
screen_update(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)164 uint32_t segam1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
165 {
166 	if (m_mixer->get_reg(13) & 1)
167 	{
168 		bitmap.fill(m_palette->black_pen());
169 		return 0;
170 	}
171 
172 	screen.priority().fill(0);
173 	bitmap.fill(0, cliprect);
174 
175 	std::vector<int> order;
176 	order.resize(12);
177 	for(int i=0; i<12; i++)
178 		order[i] = i;
179 
180 	std::sort(order.begin(), order.end(), layer_sort(m_mixer.target()));
181 
182 	int level = 0;
183 	for(int i=0; i<12; i++)
184 		if(order[i] < 8)
185 			m_tile->draw(screen, bitmap, cliprect, order[i], level, 0);
186 		else
187 			level++;
188 
189 	return 0;
190 }
191 
192 
193 
segam1_map(address_map & map)194 void segam1_state::segam1_map(address_map &map)
195 {
196 	map(0x000000, 0x07ffff).rom();
197 	map(0x340000, 0x340fff).rw("dpram", FUNC(mb8421_device::right_r), FUNC(mb8421_device::right_w)).umask16(0x00ff);
198 	map(0xb00000, 0xb0ffff).rw(m_tile, FUNC(segas24_tile_device::tile_r), FUNC(segas24_tile_device::tile_w));
199 	map(0xb20000, 0xb20001).nopw();        /* Horizontal split position (ABSEL) */
200 	map(0xb40000, 0xb40001).nopw();        /* Scanline trigger position (XHOUT) */
201 	map(0xb60000, 0xb60001).nopw();        /* Frame trigger position (XVOUT) */
202 	map(0xb70000, 0xb70001).nopw();        /* Synchronization mode */
203 	map(0xb80000, 0xbfffff).rw(m_tile, FUNC(segas24_tile_device::char_r), FUNC(segas24_tile_device::char_w));
204 	map(0xc00000, 0xc03fff).ram().w(FUNC(segam1_state::paletteram_w)).share("paletteram");
205 	map(0xc04000, 0xc0401f).rw(m_mixer, FUNC(segas24_mixer_device::read), FUNC(segas24_mixer_device::write));
206 	map(0xe00000, 0xe0001f).rw("io1", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
207 	map(0xe40000, 0xe40001).portr("INX");
208 	map(0xe40002, 0xe40003).portr("INY");
209 	map(0xe40005, 0xe40005).w("soundlatch", FUNC(generic_latch_8_device::write));
210 	map(0xe40006, 0xe40007).nopw();
211 	map(0xe40008, 0xe40009).portr("INZ");
212 	map(0xe80000, 0xe8001f).rw("io2", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
213 	map(0xf00000, 0xf03fff).mirror(0x0fc000).ram(); // NVRAM?
214 }
215 
segam1_sound_map(address_map & map)216 void segam1_state::segam1_sound_map(address_map &map)
217 {
218 	map(0x0000, 0x7fff).rom();
219 	map(0xa000, 0xbfff).bankr("soundbank");
220 	map(0xf000, 0xffff).ram();
221 }
222 
unkm1_sound_map(address_map & map)223 void segam1_state::unkm1_sound_map(address_map &map)
224 {
225 	segam1_sound_map(map);
226 	map(0xe000, 0xefff).ram();
227 }
228 
segam1_sound_io_map(address_map & map)229 void segam1_state::segam1_sound_io_map(address_map &map)
230 {
231 	map.global_mask(0xff);
232 	map(0x80, 0x83).rw(m_ymsnd, FUNC(ym3438_device::read), FUNC(ym3438_device::write));
233 	map(0xa0, 0xa0).w(FUNC(segam1_state::sound_a0_bank_w));
234 	map(0xc0, 0xc0).r("soundlatch", FUNC(generic_latch_8_device::read)).nopw();
235 }
236 
segam1_comms_map(address_map & map)237 void segam1_state::segam1_comms_map(address_map &map)
238 {
239 	map(0x0000, 0x7fff).rom();
240 	map(0x8000, 0x9fff).ram();
241 	map(0xa000, 0xa7ff).rw("dpram", FUNC(mb8421_device::left_r), FUNC(mb8421_device::left_w));
242 	map(0xc000, 0xc001).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write));
243 	map(0xe003, 0xe003).nopw(); // ???
244 }
245 
246 
247 static INPUT_PORTS_START( segam1 )
248 	PORT_START("INA")
249 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
250 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
251 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
252 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
253 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
254 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
255 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
256 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
257 
258 	PORT_START("INB")
259 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
260 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
261 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
262 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
263 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
264 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
265 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
266 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
267 
268 	PORT_START("INC")
269 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
270 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
271 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
272 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
273 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
274 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
275 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
276 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
277 
278 	PORT_START("IND")
279 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
280 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
281 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
282 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
283 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
284 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
285 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
286 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
287 
288 	PORT_START("INE")
289 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
290 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
291 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
292 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
293 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
294 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
295 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
296 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
297 
298 	PORT_START("INF")
299 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
300 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
301 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
302 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
303 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
304 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
305 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
306 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
307 
308 	PORT_START("ING")
309 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
310 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
311 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
312 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
313 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
314 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
315 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
316 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
317 
318 	PORT_START("INX")
319 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
320 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
321 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
322 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
323 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
324 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
325 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
326 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
327 	PORT_BIT(0xff00, IP_ACTIVE_LOW, IPT_UNUSED)
328 
329 	PORT_START("INY")
330 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
331 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
332 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
333 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
334 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
335 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
336 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
337 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
338 	PORT_BIT(0xff00, IP_ACTIVE_LOW, IPT_UNUSED)
339 
340 	PORT_START("INZ")
341 	PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN)
342 	PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN)
343 	PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN)
344 	PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNKNOWN)
345 	PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNKNOWN)
346 	PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN)
347 	PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNKNOWN)
348 	PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN)
349 	PORT_BIT(0xff00, IP_ACTIVE_LOW, IPT_UNUSED)
350 INPUT_PORTS_END
351 
352 
353 
354 
segam1(machine_config & config)355 void segam1_state::segam1(machine_config &config)
356 {
357 	M68000(config, m_maincpu, XTAL(20'000'000)/2);
358 	m_maincpu->set_addrmap(AS_PROGRAM, &segam1_state::segam1_map);
359 	m_maincpu->set_vblank_int("screen", FUNC(segam1_state::irq4_line_hold));
360 
361 	Z80(config, m_audiocpu, 4000000); // unknown clock
362 	m_audiocpu->set_addrmap(AS_PROGRAM, &segam1_state::segam1_sound_map);
363 	m_audiocpu->set_addrmap(AS_IO, &segam1_state::segam1_sound_io_map);
364 
365 	Z80(config, m_m1comm, 4000000); // unknown clock
366 	m_m1comm->set_addrmap(AS_PROGRAM, &segam1_state::segam1_comms_map);
367 
368 	sega_315_5296_device &io1(SEGA_315_5296(config, "io1", 0)); // unknown clock
369 	io1.in_pa_callback().set_ioport("INA");
370 	io1.in_pb_callback().set_ioport("INB");
371 	io1.in_pc_callback().set_ioport("INC");
372 	io1.in_pd_callback().set_ioport("IND");
373 	io1.in_pe_callback().set_ioport("INE");
374 	io1.in_pf_callback().set_ioport("INF");
375 
376 	sega_315_5296_device &io2(SEGA_315_5296(config, "io2", 0)); // unknown clock
377 	io2.in_pg_callback().set_ioport("ING");
378 
379 	I8251(config, "uart", 4000000); // unknown clock
380 
381 	mb8421_device &dpram(MB8421(config, "dpram"));
382 	dpram.intl_callback().set_inputline("m1comm", 0);
383 
384 	S24TILE(config, m_tile, 0, 0x3fff).set_palette(m_palette);
385 	S24MIXER(config, m_mixer, 0);
386 
387 	SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
388 	m_screen->set_video_attributes(VIDEO_UPDATE_AFTER_VBLANK);
389 	m_screen->set_raw(16000000, 656, 0, 496, 424, 0, 384); // copied from segas24.cpp; may not be accurate
390 	m_screen->set_screen_update(FUNC(segam1_state::screen_update));
391 	m_screen->set_palette(m_palette);
392 
393 	PALETTE(config, m_palette).set_entries(8192*2);
394 
395 	// sound hardware
396 	SPEAKER(config, "mono").front_center();
397 
398 	GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline("audiocpu", INPUT_LINE_NMI);
399 
400 	YM3438(config, m_ymsnd, 8000000);
401 	m_ymsnd->add_route(ALL_OUTPUTS, "mono", 0.40);
402 	//m_ymsnd->irq_handler().set(FUNC(segam1_state::ym3438_irq_handler));
403 }
404 
unkm1(machine_config & config)405 void segam1_state::unkm1(machine_config &config)
406 {
407 	segam1(config);
408 	m_audiocpu->set_addrmap(AS_PROGRAM, &segam1_state::unkm1_sound_map);
409 
410 	m_m1comm->set_disable(); // not dumped yet
411 }
412 
413 
414 ROM_START( bingpty ) // 1994/05/01 string
415 	ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
416 	ROM_LOAD16_BYTE( "epr-16648b.bin", 0x00000, 0x20000, CRC(e4fceb4c) SHA1(0a248bb328d2f6d72d540baefbe62838f4b76585) )
417 	ROM_LOAD16_BYTE( "epr-16649b.bin", 0x00001, 0x20000, CRC(736d8bbd) SHA1(c359ad513d4a7693cbb1a27ce26f89849e894d05) )
418 
419 	ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Code */
420 	ROM_LOAD( "epr-14845.bin", 0x00000, 0x20000, CRC(90d47101) SHA1(7bc002c104e3dbde1986aaec54112d5658eab523) )
421 
422 	ROM_REGION( 0x8000, "m1comm", 0 ) /* Z80 Code */
423 	ROM_LOAD( "epr-14221a.bin", 0x00000, 0x8000, CRC(a13e67a4) SHA1(4cd269c7f04a64ae7806c8784f86bf6553a25d85) )
424 
425 	// dumps of the X-Board part, and the LINK PCB are missing.
426 ROM_END
427 
428 ROM_START( unkm1 ) // 1992.01.31 string
429 	ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 Code */
430 	ROM_LOAD16_BYTE( "epr-14427.ic8", 0x00000, 0x40000, CRC(2d904fc6) SHA1(7062f47d77d09906420118c85e1cb565bec345a7) )
431 	ROM_LOAD16_BYTE( "epr-14428.ic7", 0x00001, 0x40000, CRC(97a317f4) SHA1(19bc4cf6b6c580caa44f36c929b445ed94b2d9eb) )
432 
433 	ROM_REGION( 0x20000, "audiocpu", 0 ) /* Z80 Code */
434 	ROM_LOAD( "epr-14429.ic104", 0x00000, 0x20000, CRC(1ff8262d) SHA1(fb90bd877b2dc65eb3e5495d6e21dee1f871fb44) )
435 
436 	ROM_REGION( 0x8000, "m1comm", 0 )
437 	ROM_LOAD( "unkm1_comm.bin", 0x00000, 0x8000, NO_DUMP ) // CPU almost certainly exists, but not even type is confirmed
438 
439 	ROM_REGION( 0x100, "plds", 0 )
440 	ROM_LOAD( "315-5472-01.ic22", 0x000, 0x0eb, CRC(828ee6e2) SHA1(f32dd0f6297cc8bd3049be4bca502c0f8ec738cf) )
441 	// dumps of the X-Board part, and the LINK PCB are missing.
442 ROM_END
443 
444 GAME( 1994, bingpty,    0,        segam1,    segam1, segam1_state, empty_init, ROT0,  "Sega", "Bingo Party Multicart (Rev B) (M1 Satellite board)", MACHINE_NOT_WORKING )
445 GAME( 1992, unkm1,      0,        unkm1,     segam1, segam1_state, empty_init, ROT0,  "Sega", "unknown Sega gambling game (M1 Satellite board)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
446