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