1 // license:BSD-3-Clause
2 // copyright-holders:Angelo Salese, Pierpaolo Prazzoli, Roberto Fresca
3 /************************************************************************
4
5 Super Draw Poker (c) Stern Electronics 1983
6
7 Driver by Pierpaolo Prazzoli.
8 Additional work by Angelo Salese & Roberto Fresca.
9
10 *************************************************************************
11
12 Notes:
13
14 - According to some original screenshots floating around the net, this game
15 uses a weird coloring scheme for the char text that dynamically changes
16 the color of an entire column. For now I can only guess about how it
17 truly works.
18
19 - An original snap of these can be seen at:
20 http://mamedev.emulab.it/kale/fast/files/A00000211628-007.jpg
21
22
23 *************************************************************************
24
25
26 Updates:
27
28 - Reworked inputs to match the standard poker inputs names/layout.
29 - Hooked the payout switch.
30 - Hooked a watchdog circuitry, that seems intended to reset
31 the game and/or an external device.
32 - Added machine start & reset.
33 - All clocks pre defined.
34 - Added ay8910 interface as a preliminary attempt to analyze the unknown
35 port writes when these ports are set as input.
36 - Figured out the following DIP switches:
37 Auto Bet (No, Yes).
38 Allow Raise (No, Yes).
39 Double-Up (No, Yes).
40 Minimal Winner Hand (Jacks or Better, Two Pair).
41 Deal Speed (Slow, Fast).
42 Aces Type (Normal Aces, Number 1).
43 Cards Deck Type (English cards, French cards).
44 Max Bet (5, 10, 15, 20).
45 - Added NVRAM support.
46 - Reorganized and cleaned-up the driver.
47
48
49 To do:
50
51 - Needs schematics to check if the current implementation of the
52 "global column coloring" is correct.
53 - Check unknown read/writes, too many of them.
54 - Check the correct CPU and AY8910 clocks from PCB.
55 - A workaround for writes to ay8910 ports when these are set as input.
56
57
58 ************************************************************************/
59
60 #include "emu.h"
61 #include "cpu/z80/z80.h"
62 #include "sound/ay8910.h"
63 #include "machine/nvram.h"
64 #include "machine/watchdog.h"
65 #include "emupal.h"
66 #include "screen.h"
67 #include "speaker.h"
68
69
70 #define MASTER_CLOCK XTAL(12'000'000)
71 #define CPU_CLOCK MASTER_CLOCK/4 /* guess */
72 #define SND_CLOCK MASTER_CLOCK/8 /* guess */
73
74 class supdrapo_state : public driver_device
75 {
76 public:
supdrapo_state(const machine_config & mconfig,device_type type,const char * tag)77 supdrapo_state(const machine_config &mconfig, device_type type, const char *tag) :
78 driver_device(mconfig, type, tag),
79 m_maincpu(*this, "maincpu"),
80 m_watchdog(*this, "watchdog"),
81 m_gfxdecode(*this, "gfxdecode"),
82 m_palette(*this, "palette"),
83 m_col_line(*this, "col_line"),
84 m_videoram(*this, "videoram"),
85 m_char_bank(*this, "char_bank")
86 { }
87
88 void supdrapo(machine_config &config);
89
90 private:
91 required_device<cpu_device> m_maincpu;
92 required_device<watchdog_timer_device> m_watchdog;
93 required_device<gfxdecode_device> m_gfxdecode;
94 required_device<palette_device> m_palette;
95
96 required_shared_ptr<uint8_t> m_col_line;
97 required_shared_ptr<uint8_t> m_videoram;
98 required_shared_ptr<uint8_t> m_char_bank;
99
100 uint8_t m_wdog;
101
102 uint8_t rng_r();
103 void wdog8000_w(uint8_t data);
104 void debug8004_w(uint8_t data);
105 void debug7c00_w(uint8_t data);
106 void coinin_w(uint8_t data);
107 void payout_w(uint8_t data);
108 void ay8910_outputa_w(uint8_t data);
109 void ay8910_outputb_w(uint8_t data);
110
111 virtual void machine_start() override;
112 virtual void machine_reset() override;
113 virtual void video_start() override;
114 void supdrapo_palette(palette_device &palette) const;
115
116 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
117 void sdpoker_mem(address_map &map);
118 };
119
120
121 /*********************************************************************
122 Video Hardware
123 **********************************************************************/
124
video_start()125 void supdrapo_state::video_start()
126 {
127 }
128
129
screen_update(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)130 uint32_t supdrapo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
131 {
132 int count = 0;
133 for (int y = 0; y < 32; y++)
134 {
135 for (int x = 0; x < 32; x++)
136 {
137 int const tile = m_videoram[count] + m_char_bank[count] * 0x100;
138 // Global Column Coloring, GUESS!
139 int const color = m_col_line[(x*2) + 1] ? (m_col_line[(x*2) + 1] - 1) & 7 : 0;
140
141 m_gfxdecode->gfx(0)->opaque(bitmap,cliprect, tile,color, 0, 0, x*8, y*8);
142
143 count++;
144 }
145 }
146
147 return 0;
148 }
149
150
151 // Maybe bit 2 & 3 of the second color prom are intensity bits?
supdrapo_palette(palette_device & palette) const152 void supdrapo_state::supdrapo_palette(palette_device &palette) const
153 {
154 const uint8_t *color_prom = memregion("proms")->base();
155
156 for (int i = 0; i < 0x100; ++i)
157 {
158 int bit0, bit1, bit2;
159
160 bit0 = 0; // BIT(color_prom[0], 0);
161 bit1 = BIT(color_prom[0], 0);
162 bit2 = BIT(color_prom[0], 1);
163 int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
164
165 bit0 = 0; // BIT(color_prom[0], 3);
166 bit1 = BIT(color_prom[0], 2);
167 bit2 = BIT(color_prom[0], 3);
168 int const b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
169
170 bit0 = 0; // BIT(color_prom[0], 0);
171 bit1 = BIT(color_prom[0x100], 0);
172 bit2 = BIT(color_prom[0x100], 1);
173 int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
174
175 palette.set_pen_color(i, rgb_t(r, g, b));
176 color_prom++;
177 }
178 }
179
180
181 /*********************************************************************
182 R/W Handlers
183 **********************************************************************/
184
rng_r()185 uint8_t supdrapo_state::rng_r()
186 {
187 return machine().rand();
188 }
189
wdog8000_w(uint8_t data)190 void supdrapo_state::wdog8000_w(uint8_t data)
191 {
192 /* Kind of state watchdog alternating 0x00 & 0x01 writes.
193 Used when exit the test mode (writes 2 consecutive 0's).
194 Seems to be intended to reset some external device.
195
196 Watchdog: 01
197 Watchdog: 00
198 Watchdog: 01
199 Watchdog: 00
200 Watchdog: 01
201 Watchdog: 00
202 Watchdog: 00 ---> Exit from test mode.
203
204 Debug3: 00
205 Watchdog: 00
206 Watchdog: 00
207
208 Debug3: 00
209 Watchdog: 01
210 Watchdog: 00
211 Watchdog: 01
212 Watchdog: 00
213 Watchdog: 01
214 Watchdog: 00
215
216 */
217
218
219 if (m_wdog == data)
220 {
221 m_watchdog->watchdog_reset(); /* Reset */
222 }
223
224 m_wdog = data;
225 // logerror("Watchdog: %02X\n", data);
226 }
227
228
debug8004_w(uint8_t data)229 void supdrapo_state::debug8004_w(uint8_t data)
230 {
231 /* Writes 0x00 each time the machine is initialized */
232
233 logerror("debug8004: %02X\n", data);
234 // popmessage("written : %02X", data);
235 }
236
debug7c00_w(uint8_t data)237 void supdrapo_state::debug7c00_w(uint8_t data)
238 {
239 /* This one write 0's constantly when the input test mode is running */
240 logerror("debug7c00: %02X\n", data);
241 }
242
243
244 /*********************************************************************
245 Coin I/O Counters
246 **********************************************************************/
247
coinin_w(uint8_t data)248 void supdrapo_state::coinin_w(uint8_t data)
249 {
250 machine().bookkeeping().coin_counter_w(0, data & 0x01); /* Coin In */
251 }
252
payout_w(uint8_t data)253 void supdrapo_state::payout_w(uint8_t data)
254 {
255 machine().bookkeeping().coin_counter_w(1, data & 0x01); /* Payout */
256 }
257
258
259 /*********************************************************************
260 Machine Start & Reset
261 **********************************************************************/
262
machine_start()263 void supdrapo_state::machine_start()
264 {
265 save_item(NAME(m_wdog));
266 }
267
268
machine_reset()269 void supdrapo_state::machine_reset()
270 {
271 m_wdog = 1;
272 }
273
274
275 /*********************************************************************
276 Memory Map
277 **********************************************************************/
278
sdpoker_mem(address_map & map)279 void supdrapo_state::sdpoker_mem(address_map &map)
280 {
281 map(0x0000, 0x4fff).rom();
282 map(0x5000, 0x50ff).ram().share("col_line");
283 map(0x57ff, 0x57ff).ram().share("col_line");
284 map(0x5800, 0x58ff).ram().share("col_line");
285 map(0x6000, 0x67ff).ram(); //work ram
286 map(0x6800, 0x6bff).ram().share("videoram");
287 map(0x6c00, 0x6fff).ram().share("char_bank");
288 map(0x7000, 0x7bff).ram(); //$7600 seems watchdog
289 map(0x7c00, 0x7c00).w(FUNC(supdrapo_state::debug7c00_w));
290 map(0x8000, 0x8000).portr("IN4").w(FUNC(supdrapo_state::wdog8000_w));
291 map(0x8001, 0x8001).portr("IN0");
292 map(0x8002, 0x8002).portr("IN1").w(FUNC(supdrapo_state::payout_w));
293 map(0x8003, 0x8003).portr("IN2").w(FUNC(supdrapo_state::coinin_w));
294 map(0x8004, 0x8004).portr("IN3").w(FUNC(supdrapo_state::debug8004_w));
295 map(0x8005, 0x8005).portr("SW1");
296 map(0x8006, 0x8006).portr("SW2");
297 map(0x9000, 0x90ff).ram().share("nvram");
298 map(0x9400, 0x9400).r(FUNC(supdrapo_state::rng_r));
299 map(0x9800, 0x9801).w("aysnd", FUNC(ay8910_device::data_address_w));
300 }
301
302
303 /*********************************************************************
304 Input Ports
305 **********************************************************************/
306
307 static INPUT_PORTS_START( supdrapo )
308 PORT_START("IN0")
309 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON9 ) PORT_NAME("P1 Win/Take") PORT_CODE(KEYCODE_4) PORT_PLAYER(1)
310 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("P1 Cancel") PORT_CODE(KEYCODE_N) PORT_PLAYER(1)
311 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("P1 Deal") PORT_CODE(KEYCODE_2) PORT_PLAYER(1)
312 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON11 ) PORT_NAME("P1 Bet/Play") PORT_CODE(KEYCODE_1) PORT_PLAYER(1)
313 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN4 ) PORT_NAME("Coin 4: 10")
314 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_NAME("Coin 3: 5")
315 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_NAME("Coin 2: 2")
316 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_NAME("Coin 1: 1")
317
318 PORT_START("IN1")
319 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("P1 Hold 5") PORT_CODE(KEYCODE_B) PORT_PLAYER(1)
320 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("P1 Hold 4") PORT_CODE(KEYCODE_V) PORT_PLAYER(1)
321 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P1 Hold 3") PORT_CODE(KEYCODE_C) PORT_PLAYER(1)
322 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 Hold 2") PORT_CODE(KEYCODE_X) PORT_PLAYER(1)
323 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 Hold 1") PORT_CODE(KEYCODE_Z) PORT_PLAYER(1)
324 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("P1 Black") PORT_CODE(KEYCODE_A) PORT_PLAYER(1)
325 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("P1 Red") PORT_CODE(KEYCODE_S) PORT_PLAYER(1)
326 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON10 ) PORT_NAME("P1 Double Up") PORT_CODE(KEYCODE_3) PORT_PLAYER(1)
327
328 PORT_START("IN2")
329 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Win/Take") PORT_PLAYER(2)
330 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Cancel") PORT_PLAYER(2)
331 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Deal") PORT_PLAYER(2)
332 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Bet/Play") PORT_PLAYER(2)
333 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Coin 4: 10")
334 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Coin 3: 5")
335 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Coin 2: 2")
336 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Coin 1: 1")
337
338 PORT_START("IN3")
339 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Hold 5") PORT_PLAYER(2)
340 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Hold 4") PORT_PLAYER(2)
341 PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Hold 3") PORT_PLAYER(2)
342 PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Hold 2") PORT_PLAYER(2)
343 PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Hold 1") PORT_PLAYER(2)
344 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Black") PORT_PLAYER(2)
345 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Red") PORT_PLAYER(2)
346 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Double Up") PORT_PLAYER(2)
347
348 PORT_START("IN4")
349 PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P1 Flip") PORT_PLAYER(1)
350 PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P2 Flip") PORT_PLAYER(2)
351 PORT_BIT( 0x1c, IP_ACTIVE_HIGH, IPT_UNKNOWN )
352 PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Payout") PORT_CODE(KEYCODE_W)
353 PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_HIGH )
354 PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) )
355 PORT_DIPSETTING( 0x00, "1 Player" )
356 PORT_DIPSETTING( 0x80, "2 Players" )
357
358 PORT_START("SW1") // Bank 1 @ 8A
359 PORT_DIPNAME( 0x0f, 0x02, "Payout Percentage" ) PORT_DIPLOCATION("SW1:1,2,3,4")
360 PORT_DIPSETTING( 0x00, "25%" )
361 PORT_DIPSETTING( 0x01, "30%" )
362 PORT_DIPSETTING( 0x02, "35%" )
363 PORT_DIPSETTING( 0x03, "40%" )
364 PORT_DIPSETTING( 0x04, "45%" )
365 PORT_DIPSETTING( 0x05, "50%" )
366 PORT_DIPSETTING( 0x06, "55%" )
367 PORT_DIPSETTING( 0x07, "60%" )
368 PORT_DIPSETTING( 0x08, "65%" )
369 PORT_DIPSETTING( 0x09, "70%" )
370 PORT_DIPSETTING( 0x0a, "75%" )
371 PORT_DIPSETTING( 0x0b, "80%" )
372 PORT_DIPSETTING( 0x0c, "85%" )
373 PORT_DIPSETTING( 0x0d, "90%" )
374 PORT_DIPSETTING( 0x0e, "95%" )
375 PORT_DIPSETTING( 0x0f, "100%" )
376 PORT_DIPNAME( 0x30, 0x10, "Maximum Payout Points" ) PORT_DIPLOCATION("SW1:5,6")
377 PORT_DIPSETTING( 0x00, "0" )
378 PORT_DIPSETTING( 0x10, "200" )
379 PORT_DIPSETTING( 0x20, "500" )
380 PORT_DIPSETTING( 0x30, "1000" )
381 PORT_DIPNAME( 0xc0, 0xc0, "Maximum Bet Points" ) PORT_DIPLOCATION("SW1:7,8")
382 PORT_DIPSETTING( 0x00, "5" )
383 PORT_DIPSETTING( 0x40, "10" )
384 PORT_DIPSETTING( 0x80, "15" )
385 PORT_DIPSETTING( 0xc0, "30" )
386
387 PORT_START("SW2") // Bank 2 @ 9A
388 PORT_DIPNAME( 0x01, 0x01, "Deal Play Last Amount" ) PORT_DIPLOCATION("SW2:1")
389 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
390 PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
391 PORT_DIPNAME( 0x02, 0x02, "Allow Raise" ) PORT_DIPLOCATION("SW2:2")
392 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
393 PORT_DIPSETTING( 0x02, DEF_STR( Yes ) )
394 PORT_DIPNAME( 0x04, 0x04, "Red/Black Double-Up" ) PORT_DIPLOCATION("SW2:3")
395 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
396 PORT_DIPSETTING( 0x04, DEF_STR( Yes ) )
397 PORT_DIPNAME( 0x08, 0x08, "Minimum Winning Hand" ) PORT_DIPLOCATION("SW2:4")
398 PORT_DIPSETTING( 0x08, "Jacks or Better" )
399 PORT_DIPSETTING( 0x00, "Two Pair or Better" )
400 PORT_DIPNAME( 0x10, 0x10, "Deal Speed" ) PORT_DIPLOCATION("SW2:5")
401 PORT_DIPSETTING( 0x00, "Slow" )
402 PORT_DIPSETTING( 0x10, "Fast" )
403 PORT_DIPNAME( 0x20, 0x20, "Flash Buttons" ) PORT_DIPLOCATION("SW2:6")
404 PORT_DIPSETTING( 0x00, DEF_STR( No ) )
405 PORT_DIPSETTING( 0x20, DEF_STR( Yes ) )
406 PORT_DIPNAME( 0x40, 0x00, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:7")
407 PORT_DIPSETTING( 0x00, DEF_STR( English ) )
408 PORT_DIPSETTING( 0x40, DEF_STR( French ) )
409 PORT_DIPNAME( 0x80, 0x00, "Cards Deck Type" ) PORT_DIPLOCATION("SW2:8")
410 PORT_DIPSETTING( 0x00, "English Cards" )
411 PORT_DIPSETTING( 0x80, "French Cards" )
412 INPUT_PORTS_END
413
414
415 /*********************************************************************
416 Graphics Decode / Layout
417 **********************************************************************/
418
419 static const gfx_layout charlayout =
420 {
421 8,8,
422 RGN_FRAC(1,4),
423 4,
424 { 0, RGN_FRAC(1,4), RGN_FRAC(2,4), RGN_FRAC(3,4) },
425 { 0, 1, 2, 3, 4, 5, 6, 7 },
426 { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
427 8*8
428 };
429
430 static GFXDECODE_START( gfx_supdrapo )
431 GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
432 GFXDECODE_END
433
434
435 /*********************************************************************
436 Sound Interface
437 **********************************************************************/
438
ay8910_outputa_w(uint8_t data)439 void supdrapo_state::ay8910_outputa_w(uint8_t data)
440 {
441 // popmessage("ay8910_outputa_w %02x",data);
442 }
443
ay8910_outputb_w(uint8_t data)444 void supdrapo_state::ay8910_outputb_w(uint8_t data)
445 {
446 // popmessage("ay8910_outputb_w %02x",data);
447 }
448
449
450 /*********************************************************************
451 Machine Driver
452 **********************************************************************/
453
supdrapo(machine_config & config)454 void supdrapo_state::supdrapo(machine_config &config)
455 {
456 Z80(config, m_maincpu, CPU_CLOCK); /* guess */
457 m_maincpu->set_addrmap(AS_PROGRAM, &supdrapo_state::sdpoker_mem);
458 m_maincpu->set_vblank_int("screen", FUNC(supdrapo_state::irq0_line_hold));
459
460 WATCHDOG_TIMER(config, m_watchdog);
461
462 NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
463
464 /* video hardware */
465 screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
466 screen.set_refresh_hz(60);
467 screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
468 screen.set_size(256, 256);
469 screen.set_visarea(0*8, 32*8-1, 0*8, 32*8-1);
470 screen.set_screen_update(FUNC(supdrapo_state::screen_update));
471 screen.set_palette(m_palette);
472
473 GFXDECODE(config, m_gfxdecode, m_palette, gfx_supdrapo);
474 PALETTE(config, m_palette, FUNC(supdrapo_state::supdrapo_palette), 0x100);
475
476 SPEAKER(config, "mono").front_center();
477
478 ay8910_device &aysnd(AY8910(config, "aysnd", SND_CLOCK)); /* guess */
479 aysnd.port_a_write_callback().set(FUNC(supdrapo_state::ay8910_outputa_w));
480 aysnd.port_b_write_callback().set(FUNC(supdrapo_state::ay8910_outputb_w));
481 aysnd.add_route(ALL_OUTPUTS, "mono", 0.50);
482 }
483
484
485 /*********************************************************************
486 ROMs Load
487 **********************************************************************/
488
489 /*
490 A2-1C 8910
491 A2-1D Z80
492 A1-1E
493 A1-1H
494 A3-1J
495
496 A1-4K
497 A1-4L
498 A1-4N
499 A1-4P A1-9N (6301)
500 A1-9P
501 */
502 ROM_START( supdrapo )
503 ROM_REGION( 0x010000, "maincpu", 0 )
504 ROM_LOAD( "a2-1c", 0x0000, 0x1000, CRC(b65af689) SHA1(b45cd15ca8f9c931d83a90f3cdbebf218070b195) )
505 ROM_LOAD( "a2-1d", 0x1000, 0x1000, CRC(9ccc4347) SHA1(ea8f4d17aaacc7091ca0a66247b55eb12155c9d7) )
506 ROM_LOAD( "a1-1e", 0x2000, 0x1000, CRC(44f2b75d) SHA1(615d0acd3f8a109334f415732b6b4fe7b810d91c) ) //a2-1e
507 ROM_LOAD( "a1-1h", 0x3000, 0x1000, CRC(9c1a10ff) SHA1(243dd64f0b29f9bed4cfa8ecb801ddd973d9e3c3) )
508 ROM_LOAD( "a3-1j", 0x4000, 0x1000, CRC(71c2bf1c) SHA1(cb98bbf88b8a410075a074ec8619c6e703c6c582) )
509
510 ROM_REGION( 0x04000, "gfx1", 0 )
511 ROM_LOAD( "a1-4p", 0x0000, 0x1000, CRC(5ac096cc) SHA1(60173a83d0e60fd4d0eb40b7b4e80a74ac5fb23d) )
512 ROM_LOAD( "a1-4n", 0x1000, 0x1000, CRC(6985fac9) SHA1(c6357fe0f042b67f8559ec9da03106d1ff08dc66) )
513 ROM_LOAD( "a1-4l", 0x2000, 0x1000, CRC(534f7b94) SHA1(44b83053827b27b9e45f6fc50d3878984ef5c5cc) )
514 ROM_LOAD( "a1-4k", 0x3000, 0x1000, CRC(3d881f5b) SHA1(53d8800a098e4393224de0b82f8e516f73fd6b62) )
515
516 ROM_REGION( 0x00200, "proms", 0 )
517 ROM_LOAD( "a1-9n", 0x0000, 0x0100, CRC(e62529e3) SHA1(176f2069b0c06c1d088909e81658652af06c8eec) )
518 ROM_LOAD( "a1-9p", 0x0100, 0x0100, CRC(a0547746) SHA1(747c8aef5afa26124fe0763e7f96c4ff6be31863) )
519 ROM_END
520
521 /*
522 ------------------------------------------
523
524 Jeutel (bootleg?)
525
526 1x MOSTEK 8236 / MK3880N-IRL / Z80-CPU
527 1x SOUND AY-3-8910
528 1x X-TAL 12,000
529 2x 8 DIP switches banks.
530
531 ------------------------------------------
532 */
533 ROM_START( supdrapoa )
534 ROM_REGION( 0x10000, "maincpu", 0 )
535 ROM_LOAD( "0.c1", 0x0000, 0x1000, CRC(63e2775a) SHA1(742e8db5378631fd93a22d2131f9523ee74c03a5) )
536 ROM_LOAD( "1.d1", 0x1000, 0x1000, CRC(aa1578de) SHA1(8f1a33864b2c8e09a25c7603522ebfc7e0757d56) )
537 ROM_LOAD( "2.e1", 0x2000, 0x1000, CRC(ffe0415c) SHA1(0233d192814ced0b32abd4b7d2e93431a339732f) )
538 ROM_LOAD( "3.h1", 0x3000, 0x1000, CRC(1bae52fa) SHA1(f89d48d67e52d0fca51eb23fee2d5cb94afcf7f4) )
539 ROM_LOAD( "4.j1", 0x4000, 0x1000, CRC(7af26f63) SHA1(aeeca69ef1c21acae4283183e4b073ec0d303f4a) )
540
541 ROM_REGION( 0x4000, "gfx1", 0 )
542 ROM_LOAD( "8.p4", 0x0000, 0x1000, CRC(ef0700c5) SHA1(53f49d99f310fdf675e3b7339bdca1115e4a1935) )
543 ROM_LOAD( "7.n4", 0x1000, 0x1000, CRC(3f77031b) SHA1(2d282d39ea568aa44af8b56228b6e096c2713a15) )
544 ROM_LOAD( "6.l4", 0x2000, 0x1000, CRC(d70cd50e) SHA1(c3e3dcf79f8a25df5b878ef8734a6d0dc22004ba) )
545 ROM_LOAD( "5.k4", 0x3000, 0x1000, CRC(34564917) SHA1(90b49fe8a5371159388839d42913352cf58c60e6) )
546
547 ROM_REGION( 0x00200, "proms", 0 ) /* using the color PROMs from the parent set - no reason to think they differ */
548 ROM_LOAD( "a1-9n", 0x0000, 0x0100, CRC(e62529e3) SHA1(176f2069b0c06c1d088909e81658652af06c8eec) )
549 ROM_LOAD( "a1-9p", 0x0100, 0x0100, CRC(a0547746) SHA1(747c8aef5afa26124fe0763e7f96c4ff6be31863) )
550 ROM_END
551
552 /*
553 Poker Relance Gamble
554 EMU Infos dumper f205v
555 manufacturer Valadon Automation
556
557 Technical references
558
559 CPUs
560 QTY Type clock position function
561 1x NEC D780C 2c 8-bit Microprocessor - main
562 1x AY-3-8910 2a Programmable Sound Generator - sound
563 1x LM380N 10b Audio Amplifier - sound
564 1x oscillator 12.000MHz 5b
565
566 ROMs
567 QTY Type position status
568 9x ET2732Q 0-8 dumped
569 1x DM74S287N 9n,9p dumped
570
571 RAMs
572 QTY Type position
573 8x MM2114N-3 1k,1l,1m,1n,2f,3f,3h,3j
574 1x MWS5101AEL2 2p
575
576 Others
577
578 1x 22x2 edge connector
579 1x 31x2 thin edge connector
580 1x trimmer (volume)(10a)
581 2x 8x2 switches DIP (8a,9a)
582
583 Notes
584
585 At 2l there is an empty space with "batt." handwritten on the PCB
586 At 1p there is an unmarked DIP20 mil.300 chip.
587
588 */
589
590 ROM_START( supdrapob )
591 ROM_REGION( 0x10000, "maincpu", 0 )
592 ROM_LOAD( "pok0.1c", 0x0000, 0x1000, CRC(b53f0470) SHA1(79003cc957e22d5bde720b6f4caed5481edd2c7e) )
593 ROM_LOAD( "pok1.1d", 0x1000, 0x1000, CRC(9797a42d) SHA1(65446317e6f1a2de53dd10146338fb63bd5b0a99) )
594 ROM_LOAD( "pok2.1ef", 0x2000, 0x1000, CRC(2b7a5baa) SHA1(dd86bb35692eabc1482768cf0bc082f3e0bd90fe) )
595 ROM_LOAD( "pok3.1h", 0x3000, 0x1000, CRC(9c3ea609) SHA1(612f455515f367b7d59608528d06221665da8876) )
596 ROM_LOAD( "pok4.1j", 0x4000, 0x1000, CRC(52025ba3) SHA1(923de6110a3608698a31baf552d4854b1053cc0e) )
597
598 ROM_REGION( 0x4000, "gfx1", 0 )
599 ROM_LOAD( "pok8.4p", 0x0000, 0x1000, CRC(82b387e1) SHA1(d7b7e4f7b5b8082438444ce1fa585917ae737bcf) )
600 ROM_LOAD( "pok7.4n", 0x1000, 0x1000, CRC(6ab0ad02) SHA1(86b22ab3ceb69f981aa32247c93411631c33a6e8) )
601 ROM_LOAD( "pok6.4lm", 0x2000, 0x1000, CRC(c8eab65c) SHA1(c4d37fed9675d8bb051e6f97e56f27450a24ddb8) )
602 ROM_LOAD( "pok5.4k", 0x3000, 0x1000, CRC(2c0bb656) SHA1(aa2f309afcdefda5e40be0a354d0b3e5548c44bb) )
603
604 ROM_REGION( 0x00200, "proms", 0 )
605 ROM_LOAD( "dm74s287n.9n", 0x0000, 0x0100, CRC(e62529e3) SHA1(176f2069b0c06c1d088909e81658652af06c8eec) )
606 ROM_LOAD( "dm74s287n.9p", 0x0100, 0x0100, CRC(a0547746) SHA1(747c8aef5afa26124fe0763e7f96c4ff6be31863) )
607 ROM_END
608
609
610 /*********************************************************************
611 Games Drivers
612 **********************************************************************/
613
614 // YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS
615 GAME( 1983, supdrapo, 0, supdrapo, supdrapo, supdrapo_state, empty_init, ROT90, "Valadon Automation (Stern Electronics license)", "Super Draw Poker (set 1)", MACHINE_SUPPORTS_SAVE )
616 GAME( 1983, supdrapoa, supdrapo, supdrapo, supdrapo, supdrapo_state, empty_init, ROT90, "Valadon Automation / Jeutel", "Super Draw Poker (set 2)", MACHINE_SUPPORTS_SAVE )
617 GAME( 1983, supdrapob, supdrapo, supdrapo, supdrapo, supdrapo_state, empty_init, ROT90, "bootleg", "Super Draw Poker (bootleg)", MACHINE_SUPPORTS_SAVE )
618