1 // license:BSD-3-Clause
2 // copyright-holders:
3 
4 /*
5 Crazy Balls by E.G.S. (Electronic Games Systems)
6 
7 http://www.tilt.it/deb/egs-en.html
8 
9 Entirely TTL. Believed to be the first arcade game to have high score initials entry.
10 This was achieved via a keyboard on the control panel: http://www.citylan.it/wiki/images/c/c3/1698_control_panel_%2B_ingame.jpg
11 
12 main PCB is marked: "EGS 113 [S]" on component side
13 sub PCB is marked: "EGS 114 [S]" on component side
14 27.025 OSC on main PCB
15 
16 A PCB set is available for tracing.
17 */
18 
19 
20 #include "emu.h"
21 
22 #include "machine/netlist.h"
23 #include "netlist/devices/net_lib.h"
24 #include "video/fixfreq.h"
25 
26 // copied by Pong, not accurate for this driver!
27 // start
28 #define MASTER_CLOCK    7159000
29 #define V_TOTAL         (0x105+1)       // 262
30 #define H_TOTAL         (0x1C6+1)       // 454
31 
32 #define HBSTART                 (H_TOTAL)
33 #define HBEND                   (80)
34 #define VBSTART                 (V_TOTAL)
35 #define VBEND                   (16)
36 
37 #define HRES_MULT                   (1)
38 // end
39 
40 
41 class crazybal_state : public driver_device
42 {
43 public:
crazybal_state(const machine_config & mconfig,device_type type,const char * tag)44 	crazybal_state(const machine_config &mconfig, device_type type, const char *tag)
45 	: driver_device(mconfig, type, tag),
46 		m_maincpu(*this, "maincpu"),
47 		m_video(*this, "fixfreq")
48 	{
49 	}
50 
51 	void crazybal(machine_config &config);
52 
53 protected:
54 
55 	// driver_device overrides
56 	virtual void machine_start() override;
57 	virtual void machine_reset() override;
58 
59 	virtual void video_start() override;
60 
61 private:
62 	// devices
63 	required_device<netlist_mame_device> m_maincpu;
64 	required_device<fixedfreq_device> m_video;
65 };
66 
67 
68 static NETLIST_START(crazybal)
69 	SOLVER(Solver, 48000)
70 //  PARAM(Solver.FREQ, 48000)
71 	PARAM(Solver.ACCURACY, 1e-4)
72 
73 	// schematics
74 	//...
NETLIST_END()75 NETLIST_END()
76 
77 
78 
79 void crazybal_state::machine_start()
80 {
81 }
82 
machine_reset()83 void crazybal_state::machine_reset()
84 {
85 }
86 
87 
video_start()88 void crazybal_state::video_start()
89 {
90 }
91 
crazybal(machine_config & config)92 void crazybal_state::crazybal(machine_config &config)
93 {
94 	/* basic machine hardware */
95 	NETLIST_CPU(config, m_maincpu, netlist::config::DEFAULT_CLOCK()).set_source(netlist_crazybal);
96 
97 	/* video hardware */
98 	SCREEN(config, "screen", SCREEN_TYPE_RASTER);
99 	FIXFREQ(config, m_video).set_screen("screen");
100 	m_video->set_monitor_clock(MASTER_CLOCK);
101 	m_video->set_horz_params(H_TOTAL-67,H_TOTAL-40,H_TOTAL-8,H_TOTAL);
102 	m_video->set_vert_params(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL);
103 	m_video->set_fieldcount(1);
104 	m_video->set_threshold(0.30);
105 }
106 
107 
108 ROM_START( crazybal )
109 	ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASE00 )
110 
111 	ROM_REGION( 0x0600, "mainpcb_proms", ROMREGION_ERASE00 ) // all Sn74S287N
112 	ROM_LOAD( "1.6c",      0x000, 0x100, CRC(d5700b52) SHA1(372b011de9eb2dab80df589103a860bf63dd7e7d) )
113 	ROM_LOAD( "2.1a",      0x100, 0x100, CRC(09cfacf9) SHA1(7f9f8424d92d1d5a6ccf8c041ad6547ca4984622) )
114 	ROM_LOAD( "4.8e",      0x200, 0x100, CRC(f1c02c73) SHA1(6d1c61a77514497f95457f7056e0efe342483d46) )
115 	ROM_LOAD( "5.11g",     0x300, 0x100, CRC(65c6cfc9) SHA1(a327d0ee9cc101f5bdc970108e4378140ebbd765) )
116 	ROM_LOAD( "5.4h",      0x400, 0x100, CRC(65c6cfc9) SHA1(a327d0ee9cc101f5bdc970108e4378140ebbd765) )
117 	ROM_LOAD( "6.11a",     0x500, 0x100, CRC(4c83ffa3) SHA1(2a9f9e88b6fc3334a5e7cba52d39ae567043d8be) )
118 
119 	ROM_REGION( 0x100, "subpcb_proms", ROMREGION_ERASE00 )
120 	ROM_LOAD( "3.12l",     0x000, 0x100, CRC(e2ca8670) SHA1(60bc4be4185c50a9afd3a28d1fb9e8f46c93764a) ) // Sn74S287N
121 ROM_END
122 
123 
124 GAME( 1978, crazybal, 0, crazybal, 0, crazybal_state, empty_init, ROT0, "Electronic Games Systems", "Crazy Balls [TTL]", MACHINE_IS_SKELETON )
125