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