1 // license:BSD-3-Clause
2 // copyright-holders:Pierpaolo Prazzoli
3 /*
4 
5  Enerdyne Technologies Inc. (El Cajon, CA 92020) hardware
6 
7  CPU: Z80
8  Sound: AY-3-8912 (x3)
9  Other: Dallas DS1220Y NVRAM, N8T245N (x2), PAL16L8A-2CN (x2,protected)
10 
11  XTAL = 12 MHz
12 
13 Supported games:
14 
15 - Progressive Music Trivia  (c) 1985
16 - Super Trivia Master       (c) 1986
17 
18  driver by Pierpaolo Prazzoli, thanks to Tomasz Slanina too.
19 
20 Notes:
21 
22  You can swap the question ROMs arbitrarily on these boards. This means
23   the ROMsets in this driver aren't true sets per se, they're just how
24   boards were found "in the wild."
25  ROMs with music questions come in hi|lo pairs.
26 
27 */
28 
29 #include "emu.h"
30 #include "cpu/z80/z80.h"
31 #include "machine/nvram.h"
32 #include "sound/ay8910.h"
33 #include "video/resnet.h"
34 #include "emupal.h"
35 #include "screen.h"
36 #include "speaker.h"
37 #include "tilemap.h"
38 
39 
40 class ettrivia_state : public driver_device
41 {
42 public:
ettrivia_state(const machine_config & mconfig,device_type type,const char * tag)43 	ettrivia_state(const machine_config &mconfig, device_type type, const char *tag)
44 		: driver_device(mconfig, type, tag)
45 		, m_fg_videoram(*this, "fg_videoram")
46 		, m_bg_videoram(*this, "bg_videoram")
47 		, m_maincpu(*this, "maincpu")
48 		, m_gfxdecode(*this, "gfxdecode")
49 		, m_ay(*this, "ay%u", 1)
50 	{
51 	}
52 
53 	void ettrivia(machine_config &config);
54 
55 protected:
56 	virtual void video_start() override;
57 
58 private:
59 	int m_palreg;
60 	int m_gfx_bank;
61 	int m_question_bank;
62 	int m_b000_val;
63 	int m_b000_ret;
64 	int m_b800_prev;
65 	required_shared_ptr<uint8_t> m_fg_videoram;
66 	required_shared_ptr<uint8_t> m_bg_videoram;
67 	tilemap_t *m_bg_tilemap;
68 	tilemap_t *m_fg_tilemap;
69 	void ettrivia_fg_w(offs_t offset, uint8_t data);
70 	void ettrivia_bg_w(offs_t offset, uint8_t data);
71 	void ettrivia_control_w(uint8_t data);
72 	uint8_t ettrivia_question_r(offs_t offset);
73 	void b000_w(uint8_t data);
74 	uint8_t b000_r();
75 	void b800_w(uint8_t data);
76 	TILE_GET_INFO_MEMBER(get_tile_info_bg);
77 	TILE_GET_INFO_MEMBER(get_tile_info_fg);
78 	void ettrivia_palette(palette_device &palette) const;
79 	uint32_t screen_update_ettrivia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
80 	INTERRUPT_GEN_MEMBER(ettrivia_interrupt);
81 	inline void get_tile_info(tile_data &tileinfo, int tile_index, uint8_t *vidram, int gfx_code);
82 	required_device<cpu_device> m_maincpu;
83 	required_device<gfxdecode_device> m_gfxdecode;
84 	required_device_array<ay8912_device, 3> m_ay;
85 	void cpu_map(address_map &map);
86 	void io_map(address_map &map);
87 };
88 
89 
ettrivia_fg_w(offs_t offset,uint8_t data)90 void ettrivia_state::ettrivia_fg_w(offs_t offset, uint8_t data)
91 {
92 	m_fg_videoram[offset] = data;
93 	m_fg_tilemap->mark_tile_dirty(offset);
94 }
95 
ettrivia_bg_w(offs_t offset,uint8_t data)96 void ettrivia_state::ettrivia_bg_w(offs_t offset, uint8_t data)
97 {
98 	m_bg_videoram[offset] = data;
99 	m_bg_tilemap->mark_tile_dirty(offset);
100 }
101 
ettrivia_control_w(uint8_t data)102 void ettrivia_state::ettrivia_control_w(uint8_t data)
103 {
104 	machine().tilemap().mark_all_dirty();
105 
106 	m_palreg  = (data >> 1) & 3;
107 	m_gfx_bank = (data >> 2) & 1;
108 
109 	m_question_bank = (data >> 3) & 3;
110 
111 	machine().bookkeeping().coin_counter_w(0, data & 0x80);
112 
113 	flip_screen_set(data & 1);
114 }
115 
ettrivia_question_r(offs_t offset)116 uint8_t ettrivia_state::ettrivia_question_r(offs_t offset)
117 {
118 	uint8_t *QUESTIONS = memregion("user1")->base();
119 	return QUESTIONS[offset + 0x10000 * m_question_bank];
120 }
121 
b000_w(uint8_t data)122 void ettrivia_state::b000_w(uint8_t data)
123 {
124 	m_b000_val = data;
125 }
126 
b000_r()127 uint8_t ettrivia_state::b000_r()
128 {
129 	if(m_b800_prev)
130 		return m_b000_ret;
131 	else
132 		return m_b000_val;
133 }
134 
b800_w(uint8_t data)135 void ettrivia_state::b800_w(uint8_t data)
136 {
137 	switch(data)
138 	{
139 		/* special case to return the value written to 0xb000 */
140 		/* does it reset the chips too ? */
141 		case 0: break;
142 		case 0xc4: m_b000_ret = m_ay[0]->data_r();    break;
143 		case 0x94: m_b000_ret = m_ay[1]->data_r();    break;
144 		case 0x86: m_b000_ret = m_ay[2]->data_r();    break;
145 
146 		case 0x80:
147 			switch(m_b800_prev)
148 			{
149 				case 0xe0: m_ay[0]->address_w(m_b000_val);    break;
150 				case 0x98: m_ay[1]->address_w(m_b000_val);    break;
151 				case 0x83: m_ay[2]->address_w(m_b000_val);    break;
152 
153 				case 0xa0: m_ay[0]->data_w(m_b000_val);   break;
154 				case 0x88: m_ay[1]->data_w(m_b000_val);   break;
155 				case 0x81: m_ay[2]->data_w(m_b000_val);   break;
156 
157 			}
158 		break;
159 	}
160 
161 	m_b800_prev = data;
162 }
163 
cpu_map(address_map & map)164 void ettrivia_state::cpu_map(address_map &map)
165 {
166 	map(0x0000, 0x7fff).rom();
167 	map(0x8000, 0x87ff).ram().share("nvram");
168 	map(0x9000, 0x9000).w(FUNC(ettrivia_state::ettrivia_control_w));
169 	map(0x9800, 0x9800).nopw();
170 	map(0xa000, 0xa000).nopw();
171 	map(0xb000, 0xb000).r(FUNC(ettrivia_state::b000_r)).w(FUNC(ettrivia_state::b000_w));
172 	map(0xb800, 0xb800).w(FUNC(ettrivia_state::b800_w));
173 	map(0xc000, 0xc7ff).ram().w(FUNC(ettrivia_state::ettrivia_fg_w)).share("fg_videoram");
174 	map(0xe000, 0xe7ff).ram().w(FUNC(ettrivia_state::ettrivia_bg_w)).share("bg_videoram");
175 }
176 
io_map(address_map & map)177 void ettrivia_state::io_map(address_map &map)
178 {
179 	map(0x0000, 0xffff).r(FUNC(ettrivia_state::ettrivia_question_r));
180 }
181 
182 static INPUT_PORTS_START( ettrivia )
183 	PORT_START("IN0")
184 	PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
185 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
186 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
187 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
188 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 )
189 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 )
190 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
191 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
192 
193 	PORT_START("IN1")
194 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
195 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
196 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
197 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
198 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
199 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
200 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
201 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
202 
203 	PORT_START("COIN")
204 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
205 INPUT_PORTS_END
206 
207 static const gfx_layout charlayout =
208 {
209 	8,8,
210 	RGN_FRAC(1,2),
211 	2,
212 	{ RGN_FRAC(1,2), RGN_FRAC(0,2) },
213 	{ 7, 6, 5, 4, 3, 2, 1, 0 },
214 	{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
215 	8*8
216 };
217 
218 static GFXDECODE_START( gfx_ettrivia )
219 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,    0, 32 )
220 	GFXDECODE_ENTRY( "gfx2", 0, charlayout, 32*4, 32 )
221 GFXDECODE_END
222 
get_tile_info(tile_data & tileinfo,int tile_index,uint8_t * vidram,int gfx_code)223 void ettrivia_state::get_tile_info(tile_data &tileinfo, int tile_index, uint8_t *vidram, int gfx_code)
224 {
225 	int code = vidram[tile_index];
226 	int color = (code >> 5) + 8 * m_palreg;
227 
228 	code += m_gfx_bank * 0x100;
229 
230 	tileinfo.set(gfx_code,code,color,0);
231 }
232 
TILE_GET_INFO_MEMBER(ettrivia_state::get_tile_info_bg)233 TILE_GET_INFO_MEMBER(ettrivia_state::get_tile_info_bg)
234 {
235 	get_tile_info(tileinfo, tile_index, m_bg_videoram, 0);
236 }
237 
TILE_GET_INFO_MEMBER(ettrivia_state::get_tile_info_fg)238 TILE_GET_INFO_MEMBER(ettrivia_state::get_tile_info_fg)
239 {
240 	get_tile_info(tileinfo, tile_index, m_fg_videoram, 1);
241 }
242 
ettrivia_palette(palette_device & palette) const243 void ettrivia_state::ettrivia_palette(palette_device &palette) const
244 {
245 	uint8_t const *const color_prom = memregion("proms")->base();
246 	static constexpr int resistances[2] = { 270, 130 };
247 
248 	// compute the color output resistor weights
249 	double weights[2];
250 	compute_resistor_weights(0, 255, -1.0,
251 			2, resistances, weights, 0, 0,
252 			2, resistances, weights, 0, 0,
253 			0, nullptr, nullptr, 0, 0);
254 
255 	for (int i = 0; i < palette.entries(); i++)
256 	{
257 		int bit0, bit1;
258 
259 		// red component
260 		bit0 = BIT(color_prom[i], 0);
261 		bit1 = BIT(color_prom[i+0x100], 0);
262 		int const r = combine_weights(weights, bit0, bit1);
263 
264 		// green component
265 		bit0 = BIT(color_prom[i], 2);
266 		bit1 = BIT(color_prom[i+0x100], 2);
267 		int const g = combine_weights(weights, bit0, bit1);
268 
269 		// blue component
270 		bit0 = BIT(color_prom[i], 1);
271 		bit1 = BIT(color_prom[i+0x100], 1);
272 		int const b = combine_weights(weights, bit0, bit1);
273 
274 		palette.set_pen_color(bitswap<8>(i,5,7,6,2,1,0,4,3), rgb_t(r, g, b));
275 	}
276 }
277 
video_start()278 void ettrivia_state::video_start()
279 {
280 	m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ettrivia_state::get_tile_info_bg)), TILEMAP_SCAN_ROWS, 8,8,64,32);
281 	m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ettrivia_state::get_tile_info_fg)), TILEMAP_SCAN_ROWS, 8,8,64,32);
282 
283 	m_fg_tilemap->set_transparent_pen(0);
284 }
285 
screen_update_ettrivia(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)286 uint32_t ettrivia_state::screen_update_ettrivia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
287 {
288 	m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
289 	m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
290 	return 0;
291 }
292 
INTERRUPT_GEN_MEMBER(ettrivia_state::ettrivia_interrupt)293 INTERRUPT_GEN_MEMBER(ettrivia_state::ettrivia_interrupt)
294 {
295 	if( ioport("COIN")->read() & 0x01 )
296 		device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
297 	else
298 		device.execute().set_input_line(0, HOLD_LINE);
299 }
300 
ettrivia(machine_config & config)301 void ettrivia_state::ettrivia(machine_config &config)
302 {
303 	Z80(config, m_maincpu, 12000000/4-48000); //should be ok, it gives the 300 interrupts expected
304 	m_maincpu->set_addrmap(AS_PROGRAM, &ettrivia_state::cpu_map);
305 	m_maincpu->set_addrmap(AS_IO, &ettrivia_state::io_map);
306 	m_maincpu->set_vblank_int("screen", FUNC(ettrivia_state::ettrivia_interrupt));
307 
308 	NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
309 
310 	/* video hardware */
311 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
312 	screen.set_refresh_hz(60);
313 	screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
314 	screen.set_size(256, 256);
315 	screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
316 	screen.set_screen_update(FUNC(ettrivia_state::screen_update_ettrivia));
317 	screen.set_palette("palette");
318 
319 	GFXDECODE(config, m_gfxdecode, "palette", gfx_ettrivia);
320 	PALETTE(config, "palette", FUNC(ettrivia_state::ettrivia_palette), 256);
321 
322 	/* sound hardware */
323 	SPEAKER(config, "mono").front_center();
324 
325 	AY8912(config, m_ay[0], 1500000).add_route(ALL_OUTPUTS, "mono", 0.25);
326 
327 	AY8912(config, m_ay[1], 1500000);
328 	m_ay[1]->port_a_read_callback().set_ioport("IN1");
329 	m_ay[1]->add_route(ALL_OUTPUTS, "mono", 0.25);
330 
331 	AY8912(config, m_ay[2], 1500000);
332 	m_ay[2]->port_a_read_callback().set_ioport("IN0");
333 	m_ay[2]->add_route(ALL_OUTPUTS, "mono", 0.25);
334 }
335 
336 ROM_START( promutrv )
337 	ROM_REGION( 0x10000, "maincpu", 0 )
338 	ROM_LOAD( "u16.u16",      0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
339 
340 	ROM_REGION( 0x2000, "gfx1", 0 )
341 	ROM_LOAD( "mt44ic.44",    0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
342 	ROM_LOAD( "mt46ic.46",    0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
343 
344 	ROM_REGION( 0x2000, "gfx2", 0 )
345 	ROM_LOAD( "mt48ic.48",    0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
346 	ROM_LOAD( "mt50ic.50",    0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
347 
348 	ROM_REGION( 0x0200, "proms", 0 )
349 	ROM_LOAD( "ic64.prm",     0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
350 	ROM_LOAD( "ic63.prm",     0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
351 
352 	ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
353 	ROM_LOAD( "movie-tv.lo0", 0x00000, 0x8000, CRC(dbf03e62) SHA1(0210442ff80cce8fe39ba5e373bca0f47bb389c4) )
354 	ROM_LOAD( "movie-tv.hi0", 0x08000, 0x8000, CRC(77f09aab) SHA1(007ae0ec1f37b575412fa71c92d1891a62069089) )
355 	ROM_LOAD( "scifi.lo1",    0x10000, 0x8000, CRC(b5595f81) SHA1(5e7fa334f6541860a5c04e5f345673ea12efafb4) )
356 	ROM_LOAD( "enter3.hi1",   0x18000, 0x8000, CRC(a8cf603b) SHA1(6efa5753d8d252452b3f5be8635a28364e4d8de1) )
357 	ROM_LOAD( "sports3.lo2",  0x20000, 0x8000, CRC(bb28fa92) SHA1(a3c4c67be0e31793d68b0b048f3a73e9ce1d5859) )
358 	ROM_LOAD( "life-sci.hi2", 0x28000, 0x8000, CRC(975d48f4) SHA1(8c702da2178b1429b3c055a33917f44ca46aedb9) )
359 	ROM_LOAD( "wars.lo3",     0x30000, 0x8000, CRC(c437f9a8) SHA1(c625c46723e279474b52b05c4ec95f1df428505d) )
360 	ROM_LOAD( "soaps.hi3",    0x38000, 0x8000, CRC(9e20614d) SHA1(02121f2c17768763658e77bf19ccaae38a07e509) )
361 ROM_END
362 
363 ROM_START( promutrva )
364 	ROM_REGION( 0x10000, "maincpu", 0 )
365 	ROM_LOAD( "u16.u16",      0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
366 
367 	ROM_REGION( 0x2000, "gfx1", 0 )
368 	ROM_LOAD( "mt44ic.44",    0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
369 	ROM_LOAD( "mt46ic.46",    0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
370 
371 	ROM_REGION( 0x2000, "gfx2", 0 )
372 	ROM_LOAD( "mt48ic.48",    0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
373 	ROM_LOAD( "mt50ic.50",    0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
374 
375 	ROM_REGION( 0x0200, "proms", 0 )
376 	ROM_LOAD( "ic64.prm",     0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
377 	ROM_LOAD( "ic63.prm",     0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
378 
379 	ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
380 	ROM_LOAD( "movie-tv.lo0", 0x00000, 0x8000, CRC(dbf03e62) SHA1(0210442ff80cce8fe39ba5e373bca0f47bb389c4) )
381 	ROM_LOAD( "movie-tv.hi0", 0x08000, 0x8000, CRC(77f09aab) SHA1(007ae0ec1f37b575412fa71c92d1891a62069089) )
382 	ROM_LOAD( "rock-pop.lo1", 0x10000, 0x8000, CRC(4252bc23) SHA1(d6c5b3c5f227b043f298cea585bcb934538b8880) )
383 	ROM_LOAD( "rock-pop.hi1", 0x18000, 0x8000, CRC(272aba66) SHA1(305866b07c6bb2d71ee169b0e8c75f95896d4484) )
384 	ROM_LOAD( "country.lo2",  0x20000, 0x8000, CRC(44673138) SHA1(4e5a3181300bd5f0e9336c2d0ddf900a9b4256d9) )
385 	ROM_LOAD( "country.hi2",  0x28000, 0x8000, CRC(3d35a612) SHA1(9d17477c8097b1110ed752caa6d280160368eac1) )
386 	ROM_LOAD( "sex.lo3",      0x30000, 0x8000, CRC(397b9c47) SHA1(bbb05f2ef22be0c099bb21139d21005039c61c31) )
387 	ROM_LOAD( "enter3.hi3",   0x38000, 0x8000, CRC(a8cf603b) SHA1(6efa5753d8d252452b3f5be8635a28364e4d8de1) )
388 ROM_END
389 
390 ROM_START( promutrvb )
391 	ROM_REGION( 0x10000, "maincpu", 0 )
392 	ROM_LOAD( "u16.u16",      0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
393 
394 	ROM_REGION( 0x2000, "gfx1", 0 )
395 	ROM_LOAD( "mt44.ic44",    0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
396 	ROM_LOAD( "mt46.ic46",    0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
397 
398 	ROM_REGION( 0x2000, "gfx2", 0 )
399 	ROM_LOAD( "mt48.ic48",    0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
400 	ROM_LOAD( "mt50.ic50",    0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
401 
402 	ROM_REGION( 0x0200, "proms", 0 )
403 	ROM_LOAD( "dm74s287n.ic64",     0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
404 	ROM_LOAD( "dm74s287n.ic63",     0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
405 
406 	ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
407 	ROM_LOAD( "movie-tv.lo0.u8", 0x00000, 0x8000, CRC(dbf03e62) SHA1(0210442ff80cce8fe39ba5e373bca0f47bb389c4) )
408 	ROM_LOAD( "movie-tv.hi0.u7", 0x08000, 0x8000, CRC(77f09aab) SHA1(007ae0ec1f37b575412fa71c92d1891a62069089) )
409 	ROM_LOAD( "rock-pop.lo1.u6", 0x10000, 0x8000, CRC(4252bc23) SHA1(d6c5b3c5f227b043f298cea585bcb934538b8880) )
410 	ROM_LOAD( "rock-pop.hi1.u5", 0x18000, 0x8000, CRC(272aba66) SHA1(305866b07c6bb2d71ee169b0e8c75f95896d4484) )
411 	ROM_LOAD( "country.lo2.u4",  0x20000, 0x8000, CRC(44673138) SHA1(4e5a3181300bd5f0e9336c2d0ddf900a9b4256d9) )
412 	ROM_LOAD( "country.hi2.u3",  0x28000, 0x8000, CRC(3d35a612) SHA1(9d17477c8097b1110ed752caa6d280160368eac1) )
413 	ROM_LOAD( "enter3.lo3.u2",   0x30000, 0x8000, CRC(a8cf603b) SHA1(6efa5753d8d252452b3f5be8635a28364e4d8de1) )
414 	ROM_LOAD( "geninfo.hi3.u1",  0x38000, 0x8000, CRC(2747fd74) SHA1(d34ac30349dc965ecd8b05b3f1cb7ee24627f369) )
415 
416 	ROM_REGION( 0x0400, "plds", 0 )
417 	ROM_LOAD( "pal16l8a-ep-0.u10", 0x0000, 0x0104, CRC(ccbd5f41) SHA1(49e815dc3377b7ed4312c3c9c215c1a6fbce2769) )
418 	ROM_LOAD( "pal16l8a-ep-0.u9",  0x0200, 0x0104, CRC(180e95ad) SHA1(9c8dbe159aaf2595b9934fd4afff16b2e9ab584c) )
419 ROM_END
420 
421 ROM_START( promutrvc )
422 	ROM_REGION( 0x10000, "maincpu", 0 )
423 	ROM_LOAD( "u16.u16",      0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
424 
425 	ROM_REGION( 0x2000, "gfx1", 0 )
426 	ROM_LOAD( "mt44.ic44",    0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
427 	ROM_LOAD( "mt46.ic46",    0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
428 
429 	ROM_REGION( 0x2000, "gfx2", 0 )
430 	ROM_LOAD( "mt48.ic48",    0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
431 	ROM_LOAD( "mt50.ic50",    0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
432 
433 	ROM_REGION( 0x0200, "proms", 0 )
434 	ROM_LOAD( "dm74s287n.ic64",     0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
435 	ROM_LOAD( "dm74s287n.ic63",     0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
436 
437 	ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
438 	ROM_LOAD( "sports.lo0.u8",   0x00000, 0x8000, CRC(bb28fa92) SHA1(a3c4c67be0e31793d68b0b048f3a73e9ce1d5859) )
439 	ROM_LOAD( "sports2.hi0.u7",  0x08000, 0x8000, CRC(4d0107d7) SHA1(4cbef1bc5faaca52ce6bb490560f213d60a96191) )
440 	ROM_LOAD( "expert.lo1.u6",   0x10000, 0x8000, CRC(19153d1a) SHA1(a2f2bbabbd1c68aae58ff29a43cb02b0e8867f5a) )
441 	ROM_LOAD( "potpouri.hi1.u5", 0x18000, 0x8000, CRC(cbfa6491) SHA1(74120ea6b3678d54737c37ec3b4b309c346c460e) )
442 	ROM_LOAD( "country.lo2.u4",  0x20000, 0x8000, CRC(44673138) SHA1(4e5a3181300bd5f0e9336c2d0ddf900a9b4256d9) )
443 	ROM_LOAD( "country.hi2.u3",  0x28000, 0x8000, CRC(3d35a612) SHA1(9d17477c8097b1110ed752caa6d280160368eac1) )
444 	ROM_LOAD( "sex3.lo3.u2",     0x30000, 0x8000, CRC(1a2322be) SHA1(22f930dc29e2b9a2c5fbf16479bc213e94df5620) )
445 	ROM_LOAD( "geninfo.hi3.u1",  0x38000, 0x8000, CRC(2747fd74) SHA1(d34ac30349dc965ecd8b05b3f1cb7ee24627f369) )
446 
447 	ROM_REGION( 0x0400, "plds", 0 )
448 	ROM_LOAD( "pal16l8a-ep-0.u10", 0x0000, 0x0104, CRC(ccbd5f41) SHA1(49e815dc3377b7ed4312c3c9c215c1a6fbce2769) )
449 	ROM_LOAD( "pal16l8a-ep-0.u9",  0x0200, 0x0104, CRC(180e95ad) SHA1(9c8dbe159aaf2595b9934fd4afff16b2e9ab584c) )
450 ROM_END
451 
452 ROM_START( strvmstr )
453 	ROM_REGION( 0x10000, "maincpu", 0 )
454 	ROM_LOAD( "stm16.u16",    0x0000, 0x8000, CRC(ae734db9) SHA1(1bacdfdebaa1f250bfbd49053c3910f1396afe11) )
455 
456 	ROM_REGION( 0x2000, "gfx1", 0 )
457 	ROM_LOAD( "stm44.rom",    0x0000, 0x1000, CRC(e69da710) SHA1(218a9d7600d67858d1f21282a0cebec0ae93e0ff) )
458 	ROM_LOAD( "stm46.rom",    0x1000, 0x1000, CRC(d927a1f1) SHA1(63a49a61107deaf7a9f28b9653c310c5331f5143) )
459 
460 	ROM_REGION( 0x2000, "gfx2", 0 )
461 	ROM_LOAD( "stm48.rom",    0x0000, 0x1000, CRC(51719714) SHA1(fdecbd22ea65eec7b4b5138f89ddc5876b05def6) )
462 	ROM_LOAD( "stm50.rom",    0x1000, 0x1000, CRC(cfc1a1d1) SHA1(9ef38f12360dd946651e67770742ca72fa6846f1) )
463 
464 	ROM_REGION( 0x0200, "proms", 0 )
465 	ROM_LOAD( "stm64.prm",    0x0000, 0x0100, BAD_DUMP CRC(69ebc0b8) SHA1(de2b936e3246e3bfc7e2ff9546c1854ec3504cc2) ) /* palette low bits */
466 	ROM_LOAD( "stm63.prm",    0x0100, 0x0100, BAD_DUMP CRC(305271cf) SHA1(6fd5fe085d79ca7aa57010cffbdb2a85b9c24701) ) /* palette high bits */
467 
468 	ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
469 	ROM_LOAD( "sex2.lo0",     0x00000, 0x8000, CRC(9c68b277) SHA1(34bc9d7b973fe482abd5e34a058b72eb5ec8db64) )
470 	ROM_LOAD( "sports.hi0",   0x08000, 0x8000, CRC(3678fb79) SHA1(4e40cc20707195c0e88e595f752a2982b531b57e) )
471 	ROM_LOAD( "movies.lo1",   0x10000, 0x8000, CRC(16cba1b7) SHA1(8aa3eff72d1ec8dac906f2e803a88578a9fe763c) )
472 	ROM_LOAD( "rock-pop.hi1", 0x18000, 0x8000, CRC(e2954db6) SHA1(d545236a844b63c85937ee8fb8e65bcd74b1bf43) )
473 	ROM_LOAD( "sci-fi.lo2",   0x20000, 0x8000, CRC(b5595f81) SHA1(5e7fa334f6541860a5c04e5f345673ea12efafb4) )
474 	ROM_LOAD( "cars.hi2",     0x28000, 0x8000, CRC(50310557) SHA1(7559c603625e4df442b440b8b08e6efef06e2781) )
475 	ROM_LOAD( "potprri.lo3",  0x30000, 0x8000, CRC(427eada9) SHA1(bac29ec637a17db95507c68fd73a8ce52744bf8e) )
476 	ROM_LOAD( "entrtn.hi3",   0x38000, 0x8000, CRC(a8cf603b) SHA1(6efa5753d8d252452b3f5be8635a28364e4d8de1) )
477 ROM_END
478 
479 GAME( 1985, promutrv,  0,        ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 1)", 0 )
480 GAME( 1985, promutrva, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 2)", 0 )
481 GAME( 1985, promutrvb, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 3)", 0 )
482 GAME( 1985, promutrvc, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 4)", 0 )
483 GAME( 1986, strvmstr,  0,        ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Super Trivia Master",                       MACHINE_WRONG_COLORS )
484