1 // license:BSD-3-Clause
2 // copyright-holders:
3 
4 /*
5 Skeleton driver for early 80's slot machines manufactured by Hobby Play.
6 Hobby Play did about eight different machines, but they're mostly unknown.
7 
8 Most Hobby Play slot machines (Gran Gol, etc.) use three 5x7 dot-matrix displays:
9 
10   o o o o o    o o o o o    o o o o o
11   o o o o o    o o o o o    o o o o o
12   o o o o o    o o o o o    o o o o o
13   o o o o o    o o o o o    o o o o o
14   o o o o o    o o o o o    o o o o o
15   o o o o o    o o o o o    o o o o o
16   o o o o o    o o o o o    o o o o o
17 
18 
19 PCB marked Hobby Play CIC 003 B
20 
21 Z80 CPU
22 4'433'618 XTAL
23 2 x INS8255N (P8255)
24 1 x 8 dips bank
25 1 x NE555P (near the Z80)
26 2 x Intersil D2114 (SRAM)
27 various TTL chips
28 */
29 
30 #include "emu.h"
31 #include "emupal.h"
32 #include "speaker.h"
33 #include "cpu/z80/z80.h"
34 #include "machine/i8255.h"
35 
36 class hobbyplay_state : public driver_device
37 {
38 public:
hobbyplay_state(const machine_config & mconfig,device_type type,const char * tag)39 	hobbyplay_state(const machine_config &mconfig, device_type type, const char *tag)
40 		: driver_device(mconfig, type, tag),
41 		m_maincpu(*this, "maincpu")
42 	{
43 	}
44 
45 	void hobbyplay(machine_config &config);
46 
47 private:
48 	required_device<cpu_device> m_maincpu;
49 
50 	void prg_map(address_map &map);
51 };
52 
prg_map(address_map & map)53 void hobbyplay_state::prg_map(address_map &map)
54 {
55 	map(0x0000, 0x07ff).rom().region("maincpu", 0);
56 	map(0x0800, 0x0bff).ram();
57 	map(0x1000, 0x1003).rw("ppi0", FUNC(i8255_device::read), FUNC(i8255_device::write));
58 	map(0x1800, 0x1803).rw("ppi1", FUNC(i8255_device::read), FUNC(i8255_device::write));
59 }
60 
61 static INPUT_PORTS_START( hobbyplay )
62 	PORT_START("IN0")
63 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
64 
65 	PORT_START("IN1")
66 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
67 
68 	PORT_START("DSW0")
69 	PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW0:1")
70 	PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW0:2")
71 	PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW0:3")
72 	PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW0:4")
73 	PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW0:5")
74 	PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW0:6")
75 	PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW0:7")
76 	PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW0:8")
77 INPUT_PORTS_END
78 
79 
hobbyplay(machine_config & config)80 void hobbyplay_state::hobbyplay(machine_config &config)
81 {
82 	Z80(config, m_maincpu, 4'433'618);
83 	m_maincpu->set_addrmap(AS_PROGRAM, &hobbyplay_state::prg_map);
84 
85 	i8255_device &ppi0(I8255(config, "ppi0"));
86 	ppi0.in_pa_callback().set_ioport("IN0");
87 	ppi0.in_pb_callback().set_ioport("IN1");
88 	ppi0.in_pc_callback().set_ioport("DSW0");
89 	//ppi0.out_pc_callback().set(hobbyplay_state::);
90 
91 	I8255(config, "ppi1");
92 	//ppi1.out_pc_callback().set(hobbyplay_state::);
93 
94 	SPEAKER(config, "mono").front_center();
95 	// sound? possibly very simple discrete
96 }
97 
98 
99 ROM_START( unkhpslt )
100 	ROM_REGION(0x800, "maincpu", 0)
101 	ROM_LOAD( "hobby_play_661.bin", 0x0000, 0x0800, CRC(e721d720) SHA1(23d84d2013f1ec42b1bcf6983ee28093071d4b8e) )
102 ROM_END
103 
104 GAME( 198?, unkhpslt, 0, hobbyplay, hobbyplay, hobbyplay_state, empty_init, ROT0, "Hobby Play", "unknown Hobby Play slot machine", MACHINE_IS_SKELETON_MECHANICAL )
105