Previous 199869 Revisions Next

r36940 Saturday 4th April, 2015 at 21:38:34 UTC by hap
elecbowl wip
[src/mess/drivers]elecbowl.c
[src/mess/layout]elecbowl.lay

trunk/src/mess/drivers/elecbowl.c
r245451r245452
55  ** subclass of hh_tms1k_state (includes/hh_tms1k.h, drivers/hh_tms1k.c) **
66
77  Marx Series 300 Electronic Bowling Game
8  Main board:
89  * TMS1100NLL MP3403 DBS 7836 SINGAPORE
10  * 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer,
11    2*CD4043 quad r/s input latch
12  * 5 7seg LEDs, 15 lamps(10 lamps projected to bowling pins reflection),
13    1bit-sound with crude volume control
14  * edge connector to sensor board, inputs, ...?
915
10  10 lamps for bowling pins + 3 more bulbs, and 7segs for frame number and
11  scores. Board size is 10-12" by 6-8".
16  lamp translation table: SN74259.u5(mux 1) goes to MESS output lamp5x,
17  SN74259.u6(mux 2) goes to MESS output lamp6x. u1-u3 are SN75492 ICs,
18  where other: u1 A2 is N/C, u3 A1 is from O2 and goes to digits seg C.
1219
13  some clues:
14  - it's from 1978
15  - Merlin is MP3404, Amaze-A-Tron is MP3405, this one is MP3403
16  - it plays some short jingles (you need to be lucky with button mashing)
20    u5 Q0 -> u1 A4 -> L2 (pin #2)       u6 Q0 -> u3 A4 -> L1 (pin #1)
21    u5 Q1 -> u1 A5 -> L4 (pin #4)       u6 Q1 -> u3 A5 -> L5 (pin #5)
22    u5 Q2 -> u1 A6 -> L7 (pin #7)       u6 Q2 -> u2 A3 -> L11 (player 1)
23    u5 Q3 -> u1 A1 -> L8 (pin #8)       u6 Q3 -> u2 A2 -> L12 (player 2)
24    u5 Q4 -> u3 A2 -> L3 (pin #3)       u6 Q4 -> u2 A1 -> L15 (?)
25    u5 Q5 -> u2 A6 -> L6 (pin #6)       u6 Q5 -> u3 A6 -> L14 (?)
26    u5 Q6 -> u2 A5 -> L10 (pin #10)     u6 Q6 -> u1 A3 -> L13 (spare)
27    u5 Q7 -> u2 A4 -> L9 (pin #9)       u6 Q7 -> u3 A3 -> digit 4 B+C
1728
1829***************************************************************************/
1930
r245451r245452
2839      : hh_tms1k_state(mconfig, type, tag)
2940   { }
3041
42   void prepare_display();
3143   DECLARE_WRITE16_MEMBER(write_r);
3244   DECLARE_WRITE16_MEMBER(write_o);
3345   DECLARE_READ8_MEMBER(read_k);
34
35protected:
36   virtual void machine_start();
3746};
3847
3948
4049/***************************************************************************
4150
51  Display
52
53***************************************************************************/
54
55void elecbowl_state::prepare_display()
56{
57   // standard 7segs
58   for (int y = 0; y < 4; y++)
59   {
60      m_display_segmask[y] = 0x7f;
61      m_display_state[y] = (m_r >> (y + 4) & 1) ? m_o : 0;
62   }
63
64   // lamp muxes
65   UINT8 d = m_r >> 1 & 1;
66   m_display_state[5] = (m_r & 1) ? (d << (m_o & 7)) : 0;
67   m_display_state[6] = (m_r >> 2 & 1) ? (d << (m_o & 7)) : 0;
68   
69   // digit 4 is from u6 Q7
70   m_display_segmask[4] = 6;
71   m_display_state[4] = (m_display_state[6] & 0x80) ? 6 : 0;
72
73   set_display_size(8, 7);
74   display_update();
75}
76
77
78
79/***************************************************************************
80
4281  I/O
4382
4483***************************************************************************/
4584
4685WRITE16_MEMBER(elecbowl_state::write_r)
4786{
48   // R4-R7: input mux
49   m_inp_mux = data >> 4 & 0xf;
87   // R5-R7,R10: input mux
88   m_inp_mux = (data >> 5 & 7) | (data >> 7 & 8);
5089
5190   // R9: speaker out
91   // R3,R8: speaker volume..
5292   m_speaker->level_w(data >> 9 & 1);
5393
54   // R10: maybe a switch or other button row?
55   // others: ?
94   // R4-R7: select digit
95   // R0,R2: lamp muxes enable
96   // R1: lamp muxes state
97   m_r = data;
98   prepare_display();
5699}
57100
58101WRITE16_MEMBER(elecbowl_state::write_o)
59102{
60   // ?
103   // O0-O2: lamp mux
104   // O0-O6: digit segments A-G
105   // O7: N/C
106   //if (data & 0x80) printf("%X ",data&0x7f);
107   
108   m_o = data & 0x7f;
109   prepare_display();
61110}
62111
63112READ8_MEMBER(elecbowl_state::read_k)
r245451r245452
74123***************************************************************************/
75124
76125static INPUT_PORTS_START( elecbowl )
77   PORT_START("IN.0") // R4
126   PORT_START("IN.0") // R5
78127   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)
79128   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)
80129   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)
81130   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)
82131
83   PORT_START("IN.1") // R5
132   PORT_START("IN.1") // R6
84133   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)
85134   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)
86135   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)
87   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)
136   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) // reset/newgame?
88137
89   PORT_START("IN.2") // R6
138   PORT_START("IN.2") // R7
90139   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)
91140   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)
92141   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)
93   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) // reset/newgame?
142   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)
94143
95   PORT_START("IN.3") // R7
144   PORT_START("IN.3") // R10
96145   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)
97146   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)
98147   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)
r245451r245452
107156
108157***************************************************************************/
109158
110void elecbowl_state::machine_start()
111{
112   hh_tms1k_state::machine_start();
113}
114
115
159// output PLA is not dumped
116160static const UINT16 elecbowl_output_pla[0x20] =
117161{
118   /* O output PLA configuration currently unknown */
119   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
120   0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
121   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
122   0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
162   lA+lB+lC+lD+lE+lF,      // 0
163   lB+lC,                  // 1
164   lA+lB+lG+lE+lD,         // 2
165   lA+lB+lG+lC+lD,         // 3
166   lF+lB+lG+lC,            // 4
167   lA+lF+lG+lC+lD,         // 5
168   lA+lF+lG+lC+lD+lE,      // 6
169   lA+lB+lC,               // 7
170   lA+lB+lC+lD+lE+lF+lG,   // 8
171   lA+lB+lG+lF+lC+lD,      // 9
172   
173   0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
174   0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
175   0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
123176};
124177
125178static MACHINE_CONFIG_START( elecbowl, elecbowl_state )
126179
127180   /* basic machine hardware */
128   MCFG_CPU_ADD("maincpu", TMS1100, 300000) // approximation - unknown freq
181   MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
129182   MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla)
130183   MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k))
131184   MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r))
132185   MCFG_TMS1XXX_WRITE_O_CB(WRITE16(elecbowl_state, write_o))
133186
187   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_tms1k_state, display_decay_tick, attotime::from_msec(1))
134188   MCFG_DEFAULT_LAYOUT(layout_elecbowl)
135189
136190   /* no video! */
r245451r245452
151205
152206ROM_START( elecbowl )
153207   ROM_REGION( 0x0800, "maincpu", 0 )
154   ROM_LOAD( "mp3403", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
208   ROM_LOAD( "mp3403.u9", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
155209
156210   ROM_REGION( 867, "maincpu:mpla", 0 )
157211   ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
r245451r245452
160214ROM_END
161215
162216
163CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling (Marx)", GAME_SUPPORTS_SAVE | GAME_MECHANICAL | GAME_NOT_WORKING )
217CONS( 1978, elecbowl, 0, 0, elecbowl, elecbowl, driver_device, 0, "Marx", "Electronic Bowling (Marx)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_SOUND | GAME_MECHANICAL | GAME_NOT_WORKING )
trunk/src/mess/layout/elecbowl.lay
r245451r245452
99      <led7seg><color red="1.0" green="0.2" blue="0.2" /></led7seg>
1010   </element>
1111
12   <element name="lamp" defstate="0">
13      <disk state="0"><color red="0.2" green="0.18" blue="0.16" /></disk>
14      <disk state="1"><color red="1.0" green="0.95" blue="0.9" /></disk>
15   </element>
1216
1317
18
1419<!-- build screen -->
1520
1621   <view name="Internal Layout">
r245451r245452
1924         <bounds left="0" right="100" top="0" bottom="100" />
2025      </bezel>
2126
27      <bezel name="digit2" element="digit"><bounds x="0" y="0" width="10" height="15" /></bezel>
28      <bezel name="digit1" element="digit"><bounds x="10" y="0" width="10" height="15" /></bezel>
29      <bezel name="digit0" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
2230
31      <bezel name="digit4" element="digit"><bounds x="50" y="0" width="10" height="15" /></bezel>
32      <bezel name="digit3" element="digit"><bounds x="60" y="0" width="10" height="15" /></bezel>
33
34
35      <bezel name="lamp52" element="lamp"><bounds x="0" y="20" width="10" height="10" /></bezel>
36      <bezel name="lamp53" element="lamp"><bounds x="10" y="20" width="10" height="10" /></bezel>
37      <bezel name="lamp57" element="lamp"><bounds x="20" y="20" width="10" height="10" /></bezel>
38      <bezel name="lamp56" element="lamp"><bounds x="30" y="20" width="10" height="10" /></bezel>
39
40      <bezel name="lamp51" element="lamp"><bounds x="5" y="30" width="10" height="10" /></bezel>
41      <bezel name="lamp61" element="lamp"><bounds x="15" y="30" width="10" height="10" /></bezel>
42      <bezel name="lamp55" element="lamp"><bounds x="25" y="30" width="10" height="10" /></bezel>
43
44      <bezel name="lamp50" element="lamp"><bounds x="10" y="40" width="10" height="10" /></bezel>
45      <bezel name="lamp54" element="lamp"><bounds x="20" y="40" width="10" height="10" /></bezel>
46
47      <bezel name="lamp60" element="lamp"><bounds x="15" y="50" width="10" height="10" /></bezel>
48
49
50      <bezel name="lamp64" element="lamp"><bounds x="0" y="70" width="10" height="10" /></bezel>
51      <bezel name="lamp65" element="lamp"><bounds x="10" y="70" width="10" height="10" /></bezel>
52      <bezel name="lamp66" element="lamp"><bounds x="20" y="70" width="10" height="10" /></bezel>
53
54      <bezel name="lamp62" element="lamp"><bounds x="50" y="70" width="10" height="10" /></bezel>
55      <bezel name="lamp63" element="lamp"><bounds x="50" y="80" width="10" height="10" /></bezel>
56
57
2358   </view>
2459</mamelayout>


Previous 199869 Revisions Next


© 1997-2024 The MAME Team