Previous 199869 Revisions Next

r32582 Wednesday 8th October, 2014 at 16:42:01 UTC by Fabio Priuli
(MESS) intv: converted the driver to use slot devices for
cartridges and implemented the IntelliVoice expansion and
the Entertainment Computer System expansion as passthru
devices. The official syntax to launch games requiring the
speech expansion is now
 mess intv -cart voice -cart2 gamename
which corresponds to mounting the IntelliVoice and plugging
the game cart in its subslot.  The official syntax to launch games
requiring the ECS expansion is now instead
 mess intv -cart ecs -cart2 gamename
and
 mess intv -cart ecs -cart2 voice -cart3 gamename
if the game requires both expansions at once. For additional user
friendliness, we also offer intvecs (which emulates an Intellivision
unit with both expansions added) and intvoice (which emulates
an Intellivision with Intellivoice expansion added) drivers, where
games can simply be mounted with the -cart media switch. [Fabio
Priuli]
[hash]intv.xml intvecs.xml
[src/emu/bus]bus.mak
[src/emu/bus/intv]ecs.c* ecs.h* rom.c* rom.h* slot.c* slot.h* voice.c* voice.h*
[src/mess]mess.lst mess.mak
[src/mess/drivers]intv.c
[src/mess/includes]intv.h
[src/mess/machine]intv.c

trunk/hash/intv.xml
r32581r32582
1919      <publisher>Mattel Electronics</publisher>
2020      <info name="serial" value="1119"/>
2121      <part name="cart" interface="intv_cart">
22         <feature name="slot" value="intv_rom" />
2223         <dataarea name="5000" size="0x2000">
23            <rom name="abpa backgammon.50" size="0x2000" crc="a60e25fc" sha1="71b305f30283a11ccd594071a7e9ea06db6a2071" offset="0000"/>
24            <rom name="abpa backgammon.50" size="0x2000" crc="a60e25fc" sha1="71b305f30283a11ccd594071a7e9ea06db6a2071" offset="0x0000"/>
2425         </dataarea>
2526      </part>
2627   </software>
r32581r32582
3132      <publisher>Mattel Electronics</publisher>
3233      <info name="serial" value="3410"/>
3334      <part name="cart" interface="intv_cart">
35         <feature name="slot" value="intv_rom" />
3436         <dataarea name="5000" size="0x3000">
35            <rom name="advanced dungeons and dragons.50" size="0x3000" crc="9d4355aa" sha1="4783cf6d52748e1cc4eb463033b79aee72db28cf" offset="0000"/>
37            <rom name="advanced dungeons and dragons.50" size="0x3000" crc="9d4355aa" sha1="4783cf6d52748e1cc4eb463033b79aee72db28cf" offset="0x0000"/>
3638         </dataarea>
3739      </part>
3840   </software>
r32581r32582
4345      <publisher>Mattel Electronics</publisher>
4446      <info name="serial" value="5300"/>
4547      <part name="cart" interface="intv_cart">
48         <feature name="slot" value="intv_rom" />
4649         <dataarea name="5000" size="0x4000">
47            <rom name="add - treasure of tarmin.50" size="0x4000" crc="16c3b62f" sha1="deffe81ac52caa93401ca2aaed734a1fb69c498d" offset="0000"/>
50            <rom name="add - treasure of tarmin.50" size="0x4000" crc="16c3b62f" sha1="deffe81ac52caa93401ca2aaed734a1fb69c498d" offset="0x0000"/>
4851         </dataarea>
4952      </part>
5053   </software>
r32581r32582
5558      <publisher>Mattel Electronics</publisher>
5659      <info name="serial" value="1121"/>
5760      <part name="cart" interface="intv_cart">
61         <feature name="slot" value="intv_rom" />
5862         <dataarea name="5000" size="0x2000">
59            <rom name="armor battle.50" size="0x2000" crc="6f91fbc1" sha1="8bf07ba83bd0de42393187c6a3df60b8e341505d" offset="0000"/>
63            <rom name="armor battle.50" size="0x2000" crc="6f91fbc1" sha1="8bf07ba83bd0de42393187c6a3df60b8e341505d" offset="0x0000"/>
6064         </dataarea>
6165      </part>
6266   </software>
r32581r32582
6771      <publisher>Mattel Electronics</publisher>
6872      <info name="serial" value="3605"/>
6973      <part name="cart" interface="intv_cart">
74         <feature name="slot" value="intv_rom" />
7075         <dataarea name="5000" size="0x2000">
71            <rom name="astro smash.50" size="0x2000" crc="fab2992c" sha1="d3529cad339b3fd5c67b4f503e9360188be9d3e8" offset="0000"/>
76            <rom name="astro smash.50" size="0x2000" crc="fab2992c" sha1="d3529cad339b3fd5c67b4f503e9360188be9d3e8" offset="0x0000"/>
7277         </dataarea>
7378      </part>
7479   </software>
r32581r32582
7984      <publisher>Imagic</publisher>
8085      <info name="serial" value="720006"/>
8186      <part name="cart" interface="intv_cart">
87         <feature name="slot" value="intv_rom" />
8288         <dataarea name="4800" size="0x4000">
83            <rom name="atlantis.48" size="0x4000" crc="13ff363c" sha1="094b207668c03a6d903270490f495ddc237cd8d7" offset="0000"/>
89            <rom name="atlantis.48" size="0x4000" crc="13ff363c" sha1="094b207668c03a6d903270490f495ddc237cd8d7" offset="0x0000"/>
8490         </dataarea>
8591      </part>
8692   </software>
r32581r32582
9197      <publisher>Mattel Electronics</publisher>
9298      <info name="serial" value="1113"/>
9399      <part name="cart" interface="intv_cart">
100         <feature name="slot" value="intv_rom" />
94101         <dataarea name="5000" size="0x2000">
95            <rom name="auto racing.50" size="0x2000" crc="b35c1101" sha1="2e3461853f60a1928c5c93bb23deb9229e0230c9" offset="0000"/>
102            <rom name="auto racing.50" size="0x2000" crc="b35c1101" sha1="2e3461853f60a1928c5c93bb23deb9229e0230c9" offset="0x0000"/>
96103         </dataarea>
97104      </part>
98105   </software>
r32581r32582
104111      <info name="serial" value="3884"/>
105112      <info name="usage" value="Uses Intellivoice"/>
106113      <part name="cart" interface="intv_cart">
114         <feature name="slot" value="intv_rom" />
107115         <dataarea name="5000" size="0x4000">
108            <rom name="b-17 bomber.50" size="0x4000" crc="5f612afb" sha1="8b9b7d938590ede5fe651f165f405ffc9e41cabd" offset="0000"/>
116            <rom name="b-17 bomber.50" size="0x4000" crc="5f612afb" sha1="8b9b7d938590ede5fe651f165f405ffc9e41cabd" offset="0x0000"/>
109117         </dataarea>
110118         <dataarea name="D000" size="0x2000">
111            <rom name="b-17 bomber.d0" size="0x2000" crc="3e932009" sha1="f0fcc934ba19a9e88b470a99a2d984820369c57c" offset="0000"/>
119            <rom name="b-17 bomber.d0" size="0x2000" crc="3e932009" sha1="f0fcc934ba19a9e88b470a99a2d984820369c57c" offset="0x0000"/>
112120         </dataarea>
113121      </part>
114122   </software>
r32581r32582
119127      <publisher>Mattel Electronics</publisher>
120128      <info name="serial" value="2614"/>
121129      <part name="cart" interface="intv_cart">
130         <feature name="slot" value="intv_rom" />
122131         <dataarea name="5000" size="0x2000">
123            <rom name="baseball.50" size="0x2000" crc="dab36628" sha1="5e83a945f231f55d5ddfa9527f9b94da06e77058" offset="0000"/>
132            <rom name="baseball.50" size="0x2000" crc="dab36628" sha1="5e83a945f231f55d5ddfa9527f9b94da06e77058" offset="0x0000"/>
124133         </dataarea>
125134      </part>
126135   </software>
r32581r32582
131140      <publisher>Mattel Electronics</publisher>
132141      <info name="serial" value="2615"/>
133142      <part name="cart" interface="intv_cart">
143         <feature name="slot" value="intv_rom" />
134144         <dataarea name="5000" size="0x2000">
135            <rom name="basketball.50" size="0x2000" crc="81e7fb8c" sha1="9c855e864cf926dfd3d09c071e499d7ccd537908" offset="0000"/>
145            <rom name="basketball.50" size="0x2000" crc="81e7fb8c" sha1="9c855e864cf926dfd3d09c071e499d7ccd537908" offset="0x0000"/>
136146         </dataarea>
137147      </part>
138148   </software>
r32581r32582
143153      <publisher>Activision</publisher>
144154      <info name="serial" value="M-005-03"/>
145155      <part name="cart" interface="intv_cart">
156         <feature name="slot" value="intv_rom" />
146157         <dataarea name="5000" size="0x4000">
147            <rom name="beamrider.50" size="0x4000" crc="eaf650cc" sha1="1faa1d401bc7484492f3e1de433ed73019cbb5b5" offset="0000"/>
158            <rom name="beamrider.50" size="0x4000" crc="eaf650cc" sha1="1faa1d401bc7484492f3e1de433ed73019cbb5b5" offset="0x0000"/>
148159         </dataarea>
149160      </part>
150161   </software>
r32581r32582
155166      <publisher>Imagic</publisher>
156167      <info name="serial" value="720007"/>
157168      <part name="cart" interface="intv_cart">
169         <feature name="slot" value="intv_rom" />
158170         <dataarea name="4800" size="0x4000">
159            <rom name="beauty and the beast.48" size="0x4000" crc="c047d487" sha1="1b6fd19e745e50e8ea679bd5adfb719d1f276bc5" offset="0000"/>
171            <rom name="beauty and the beast.48" size="0x4000" crc="c047d487" sha1="1b6fd19e745e50e8ea679bd5adfb719d1f276bc5" offset="0x0000"/>
160172         </dataarea>
161173      </part>
162174   </software>
r32581r32582
167179      <publisher>Interphase</publisher>
168180      <info name="serial" value="8010001"/>
169181      <part name="cart" interface="intv_cart">
182         <feature name="slot" value="intv_rom" />
170183         <dataarea name="5000" size="0x4000">
171            <rom name="blockade runner.50" size="0x4000" crc="b03f739b" sha1="c82058d9678fe2453b0f9b7a4a0864af802f6eb9" offset="0000"/>
184            <rom name="blockade runner.50" size="0x4000" crc="b03f739b" sha1="c82058d9678fe2453b0f9b7a4a0864af802f6eb9" offset="0x0000"/>
172185         </dataarea>
173186      </part>
174187   </software>
r32581r32582
179192      <publisher>INTV</publisher>
180193      <info name="serial" value="9009"/>
181194      <part name="cart" interface="intv_cart">
195         <feature name="slot" value="intv_rom" />
182196         <dataarea name="5000" size="0x4000">
183            <rom name="body slam - super pro wrestling.50" size="0x4000" crc="6b0e89c8" sha1="18193484e0a4995d3ffd9826a9dc3b6579950acf" offset="0000"/>
197            <rom name="body slam - super pro wrestling.50" size="0x4000" crc="6b0e89c8" sha1="18193484e0a4995d3ffd9826a9dc3b6579950acf" offset="0x0000"/>
184198         </dataarea>
185199         <dataarea name="9000" size="0x4000">
186            <rom name="body slam - super pro wrestling.90" size="0x4000" crc="79800b37" sha1="abc79afabc4273c01657de04de567e34b479bc70" offset="0000"/>
200            <rom name="body slam - super pro wrestling.90" size="0x4000" crc="79800b37" sha1="abc79afabc4273c01657de04de567e34b479bc70" offset="0x0000"/>
187201         </dataarea>
188202      </part>
189203   </software>
r32581r32582
195209      <info name="serial" value="3883"/>
196210      <info name="usage" value="Uses Intellivoice"/>
197211      <part name="cart" interface="intv_cart">
212         <feature name="slot" value="intv_rom" />
198213         <dataarea name="5000" size="0x4000">
199            <rom name="bomb squad.50" size="0x4000" crc="6f34430f" sha1="2c101e5241856691debc75b8012e35e696689c3d" offset="0000"/>
214            <rom name="bomb squad.50" size="0x4000" crc="6f34430f" sha1="2c101e5241856691debc75b8012e35e696689c3d" offset="0x0000"/>
200215         </dataarea>
201216         <dataarea name="D000" size="0x2000">
202            <rom name="bomb squad.d0" size="0x2000" crc="f99180e1" sha1="8d4a7ca33fc9ac5db8b1bdcf8806d899c898ae03" offset="0000"/>
217            <rom name="bomb squad.d0" size="0x2000" crc="f99180e1" sha1="8d4a7ca33fc9ac5db8b1bdcf8806d899c898ae03" offset="0x0000"/>
203218         </dataarea>
204219      </part>
205220   </software>
r32581r32582
210225      <publisher>Mattel Electronics</publisher>
211226      <info name="serial" value="3333"/>
212227      <part name="cart" interface="intv_cart">
228         <feature name="slot" value="intv_rom" />
213229         <dataarea name="5000" size="0x2000">
214            <rom name="bowling.50" size="0x2000" crc="169e3584" sha1="71a2bf83f18fdbf4db3af66681fcfa506bf0d31c" offset="0000"/>
230            <rom name="bowling.50" size="0x2000" crc="169e3584" sha1="71a2bf83f18fdbf4db3af66681fcfa506bf0d31c" offset="0x0000"/>
215231         </dataarea>
216232      </part>
217233   </software>
r32581r32582
222238      <publisher>Mattel Electronics</publisher>
223239      <info name="serial" value="1819"/>
224240      <part name="cart" interface="intv_cart">
241         <feature name="slot" value="intv_rom" />
225242         <dataarea name="5000" size="0x2000">
226            <rom name="boxing.50" size="0x2000" crc="ab87c16f" sha1="24a10945009acadfe502a5bd5fb5b960885716f4" offset="0000"/>
243            <rom name="boxing.50" size="0x2000" crc="ab87c16f" sha1="24a10945009acadfe502a5bd5fb5b960885716f4" offset="0x0000"/>
227244         </dataarea>
228245      </part>
229246   </software>
r32581r32582
234251      <publisher>Mattel Electronics</publisher>
235252      <info name="serial" value="4688"/>
236253      <part name="cart" interface="intv_cart">
254         <feature name="slot" value="intv_rom" />
237255         <dataarea name="5000" size="0x4000">
238            <rom name="bump n jump.50" size="0x4000" crc="6f667338" sha1="bdb657130dc9421fad842bbbc9ba7ac380ed0c86" offset="0000"/>
256            <rom name="bump n jump.50" size="0x4000" crc="6f667338" sha1="bdb657130dc9421fad842bbbc9ba7ac380ed0c86" offset="0x0000"/>
239257         </dataarea>
240258         <dataarea name="D000" size="0x2000">
241            <rom name="bump n jump.d0" size="0x2000" crc="96265252" sha1="3919925e229e7ec57d726245f13c034f78b7d863" offset="0000"/>
259            <rom name="bump n jump.d0" size="0x2000" crc="96265252" sha1="3919925e229e7ec57d726245f13c034f78b7d863" offset="0x0000"/>
242260         </dataarea>
243261         <dataarea name="F000" size="0x2000">
244            <rom name="bump n jump.f0" size="0x2000" crc="038df644" sha1="cb60703bffcbfaec77098a9525136c32cbe260f8" offset="0000"/>
262            <rom name="bump n jump.f0" size="0x2000" crc="038df644" sha1="cb60703bffcbfaec77098a9525136c32cbe260f8" offset="0x0000"/>
245263         </dataarea>
246264      </part>
247265   </software>
r32581r32582
252270      <publisher>Mattel Electronics</publisher>
253271      <info name="serial" value="4549"/>
254272      <part name="cart" interface="intv_cart">
273         <feature name="slot" value="intv_rom" />
255274         <dataarea name="5000" size="0x4000">
256            <rom name="burgertime.50" size="0x4000" crc="43806375" sha1="eacd83365da40a1a3d6c77ca2da4a0393460e02f" offset="0000"/>
275            <rom name="burgertime.50" size="0x4000" crc="43806375" sha1="eacd83365da40a1a3d6c77ca2da4a0393460e02f" offset="0x0000"/>
257276         </dataarea>
258277      </part>
259278   </software>
r32581r32582
264283      <publisher>Mattel Electronics</publisher>
265284      <info name="serial" value="4436"/>
266285      <part name="cart" interface="intv_cart">
286         <feature name="slot" value="intv_rom" />
267287         <dataarea name="5000" size="0x4000">
268            <rom name="buzz bombers.50" size="0x4000" crc="fa492bbd" sha1="a0ef9a23976de6ee88c1f970a6585ded2a2b8c04" offset="0000"/>
288            <rom name="buzz bombers.50" size="0x4000" crc="fa492bbd" sha1="a0ef9a23976de6ee88c1f970a6585ded2a2b8c04" offset="0x0000"/>
269289         </dataarea>
270290      </part>
271291   </software>
r32581r32582
277297      <info name="serial" value="2488"/>
278298      <info name="usage" value="Will not run on Intellivision 2"/>
279299      <part name="cart" interface="intv_cart">
300         <feature name="slot" value="intv_rom" />
280301         <dataarea name="5000" size="0x2000">
281            <rom name="carnival.50" size="0x2000" crc="43870908" sha1="13aa104e884701d74e144b85b9583579d1980e80" offset="0000"/>
302            <rom name="carnival.50" size="0x2000" crc="43870908" sha1="13aa104e884701d74e144b85b9583579d1980e80" offset="0x0000"/>
282303         </dataarea>
283304      </part>
284305   </software>
r32581r32582
289310      <publisher>Atarisoft</publisher>
290311      <info name="serial" value="70254"/>
291312      <part name="cart" interface="intv_cart">
313         <feature name="slot" value="intv_rom" />
292314         <dataarea name="6000" size="0x4000">
293            <rom name="centipede.60" size="0x4000" crc="d5363b8c" sha1="97c69dc3da5aee80e6ef1baf90b6c3ec8025abff" offset="0000"/>
315            <rom name="centipede.60" size="0x4000" crc="d5363b8c" sha1="97c69dc3da5aee80e6ef1baf90b6c3ec8025abff" offset="0x0000"/>
294316         </dataarea>
295317      </part>
296318   </software>
r32581r32582
301323      <publisher>INTV</publisher>
302324      <info name="serial" value="8200"/>
303325      <part name="cart" interface="intv_cart">
326         <feature name="slot" value="intv_rom" />
304327         <dataarea name="5000" size="0x4000">
305            <rom name="championship tennis.50" size="0x4000" crc="59d1eaf3" sha1="e836a9712238843a2e319d8d9618b58373ebacbd" offset="0000"/>
328            <rom name="championship tennis.50" size="0x4000" crc="59d1eaf3" sha1="e836a9712238843a2e319d8d9618b58373ebacbd" offset="0x0000"/>
306329         </dataarea>
307330         <dataarea name="D000" size="0x4000">
308            <rom name="championship tennis.d0" size="0x4000" crc="c7dd6388" sha1="446514366065262ea9658e4ba399e84b2a249fb8" offset="0000"/>
331            <rom name="championship tennis.d0" size="0x4000" crc="c7dd6388" sha1="446514366065262ea9658e4ba399e84b2a249fb8" offset="0x0000"/>
309332         </dataarea>
310333      </part>
311334   </software>
r32581r32582
316339      <publisher>Mattel Electronics</publisher>
317340      <info name="serial" value="1120"/>
318341      <part name="cart" interface="intv_cart">
342         <feature name="slot" value="intv_rom" />
319343         <dataarea name="5000" size="0x4000">
320            <rom name="checkers.50" size="0x2000" crc="36e1d858" sha1="4fef3342c0e7100113b4022e4395ad552fddacf1" offset="0000"/>
344            <rom name="checkers.50" size="0x2000" crc="36e1d858" sha1="4fef3342c0e7100113b4022e4395ad552fddacf1" offset="0x0000"/>
321345         </dataarea>
322346      </part>
323347   </software>
r32581r32582
329353      <info name="serial" value="3412"/>
330354      <info name="usage" value="This cart has unique Left and Right overlays"/>
331355      <part name="cart" interface="intv_cart">
356         <feature name="slot" value="intv_ram" />
332357         <dataarea name="5000" size="0x4000">
333            <rom name="ro-3-9505-359 + ro-3-9506-011.50" size="0x4000" crc="752fd927" sha1="4ccf494f9664d5b9e05237d1bc2eee8a7830f067" offset="0000"/>
358            <rom name="ro-3-9505-359 + ro-3-9506-011.50" size="0x4000" crc="752fd927" sha1="4ccf494f9664d5b9e05237d1bc2eee8a7830f067" offset="0x0000"/>
334359         </dataarea>
335         <dataarea name="D000_RAM8" size="0x400">
360         <dataarea name="ram" size="0x400">
336361         </dataarea>
337362      </part>
338363   </software>
r32581r32582
343368      <publisher>INTV</publisher>
344369      <info name="serial" value="8900"/>
345370      <part name="cart" interface="intv_cart">
371         <feature name="slot" value="intv_rom" />
346372         <dataarea name="5000" size="0x4000">
347            <rom name="chip shot - super pro golf.50" size="0x4000" crc="0488dc76" sha1="9094f89777e7aa4d4caea7f35c91ee5403e14877" offset="0000"/>
373            <rom name="chip shot - super pro golf.50" size="0x4000" crc="0488dc76" sha1="9094f89777e7aa4d4caea7f35c91ee5403e14877" offset="0x0000"/>
348374         </dataarea>
349375         <dataarea name="9000" size="0x4000">
350            <rom name="chip shot - super pro golf.90" size="0x4000" crc="6089038d" sha1="23390658f2c634ba5a3d1f40d72854c44ba3deb0" offset="0000"/>
376            <rom name="chip shot - super pro golf.90" size="0x4000" crc="6089038d" sha1="23390658f2c634ba5a3d1f40d72854c44ba3deb0" offset="0x0000"/>
351377         </dataarea>
352378      </part>
353379   </software>
r32581r32582
358384      <publisher>INTV</publisher>
359385      <info name="serial" value="9000"/>
360386      <part name="cart" interface="intv_cart">
387         <feature name="slot" value="intv_rom" />
361388         <dataarea name="5000" size="0x4000">
362            <rom name="commando.50" size="0x4000" crc="2b6d633d" sha1="777e5a0e7033b5f80197eb069cd204e62d09eb63" offset="0000"/>
389            <rom name="commando.50" size="0x4000" crc="2b6d633d" sha1="777e5a0e7033b5f80197eb069cd204e62d09eb63" offset="0x0000"/>
363390         </dataarea>
364391         <dataarea name="9000" size="0x4000">
365            <rom name="commando.90" size="0x4000" crc="fc44ea3c" sha1="5a95ea2924d3b0bfc4e353d6ffc4966f4bdfcd58" offset="0000"/>
392            <rom name="commando.90" size="0x4000" crc="fc44ea3c" sha1="5a95ea2924d3b0bfc4e353d6ffc4966f4bdfcd58" offset="0x0000"/>
366393         </dataarea>
367394      </part>
368395   </software>
r32581r32582
373400      <publisher>Sega</publisher>
374401      <info name="serial" value="006-06"/>
375402      <part name="cart" interface="intv_cart">
403         <feature name="slot" value="intv_rom" />
376404         <dataarea name="5000" size="0x6000">
377            <rom name="congo bongo.50" size="0x6000" crc="4b23a757" sha1="3d467d13e34e231971e8aef86968f199c145b9b2" offset="0000"/>
405            <rom name="congo bongo.50" size="0x6000" crc="4b23a757" sha1="3d467d13e34e231971e8aef86968f199c145b9b2" offset="0x0000"/>
378406         </dataarea>
379407      </part>
380408   </software>
r32581r32582
385413      <publisher>Atarisoft</publisher>
386414      <info name="serial" value="70252"/>
387415      <part name="cart" interface="intv_cart">
416         <feature name="slot" value="intv_rom" />
388417         <dataarea name="5000" size="0x6000">
389            <rom name="defender.50" size="0x6000" crc="d8f99aa2" sha1="85af8649c04198b00cecdea2661192db6631dc80" offset="0000"/>
418            <rom name="defender.50" size="0x6000" crc="d8f99aa2" sha1="85af8649c04198b00cecdea2661192db6631dc80" offset="0x0000"/>
390419         </dataarea>
391420      </part>
392421   </software>
r32581r32582
397426      <publisher>Imagic</publisher>
398427      <info name="serial" value="720005"/>
399428      <part name="cart" interface="intv_cart">
429         <feature name="slot" value="intv_rom" />
400430         <dataarea name="4800" size="0x4000">
401            <rom name="demon attack.48" size="0x4000" crc="5e6a8cd8" sha1="d6054e8ead16f3e076c26880fe641543e8519e18" offset="0000"/>
431            <rom name="demon attack.48" size="0x4000" crc="5e6a8cd8" sha1="d6054e8ead16f3e076c26880fe641543e8519e18" offset="0x0000"/>
402432         </dataarea>
403433      </part>
404434   </software>
r32581r32582
409439      <publisher>Mattel Electronics</publisher>
410440      <info name="serial" value="1682-0950"/>
411441      <part name="cart" interface="intv_cart">
442         <feature name="slot" value="intv_rom" />
412443         <dataarea name="5000" size="0x3000">
413            <rom name="blue demo cart.50" size="0x3000" crc="c99e7554" sha1="faa9b42fabc84f26ca15d296f9a5e16f36e465c2" offset="0000"/>
444            <rom name="blue demo cart.50" size="0x3000" crc="c99e7554" sha1="faa9b42fabc84f26ca15d296f9a5e16f36e465c2" offset="0x0000"/>
414445         </dataarea>
415446      </part>
416447   </software>
r32581r32582
421452      <publisher>Mattel Electronics</publisher>
422453      <info name="serial" value="5032-0710"/>
423454      <part name="cart" interface="intv_cart">
455         <feature name="slot" value="intv_rom" />
424456         <dataarea name="5000" size="0x4000">
425            <rom name="red revised demo cart.50" size="0x4000" crc="0487675c" sha1="1744dd7db17b715cd2ef1c1b315d412ea6e20163" offset="0000"/>
457            <rom name="red revised demo cart.50" size="0x4000" crc="0487675c" sha1="1744dd7db17b715cd2ef1c1b315d412ea6e20163" offset="0x0000"/>
426458         </dataarea>
427459      </part>
428460   </software>
r32581r32582
433465      <publisher>Mattel Electronics</publisher>
434466      <info name="serial" value="5823-0210"/>
435467      <part name="cart" interface="intv_cart">
468         <feature name="slot" value="intv_rom" />
436469         <dataarea name="5000" size="0x4000">
437            <rom name="green demo cart.50" size="0x4000" crc="52609fec" sha1="780183183d4d1fc1a23a9a0435788c3b750003d1" offset="0000"/>
470            <rom name="green demo cart.50" size="0x4000" crc="52609fec" sha1="780183183d4d1fc1a23a9a0435788c3b750003d1" offset="0x0000"/>
438471         </dataarea>
439472         <dataarea name="D000" size="0x4000">
440            <rom name="green demo cart.d0" size="0x4000" crc="9b37afbe" sha1="ad5d06b040f2ddea2b4ab9f0e98d77ee7c310498" offset="0000"/>
473            <rom name="green demo cart.d0" size="0x4000" crc="9b37afbe" sha1="ad5d06b040f2ddea2b4ab9f0e98d77ee7c310498" offset="0x0000"/>
441474         </dataarea>
442475      </part>
443476   </software>
r32581r32582
447480      <year>1982</year>
448481      <publisher>Mattel Electronics</publisher>
449482      <part name="cart" interface="intv_cart">
483         <feature name="slot" value="intv_rom" />
450484         <dataarea name="5000" size="0x4000">
451            <rom name="international demo cart.50" size="0x4000" crc="5d575728" sha1="b663031fff53ff36942c5f325d25e913dd8367f1" offset="0000"/>
485            <rom name="international demo cart.50" size="0x4000" crc="5d575728" sha1="b663031fff53ff36942c5f325d25e913dd8367f1" offset="0x0000"/>
452486         </dataarea>
453487         <dataarea name="D000" size="0x2000">
454            <rom name="international demo cart.d0" size="0x2000" crc="7a837bc9" sha1="dcc708901b391fc62bf799fa2e9db4551f93ba8f" offset="0000"/>
488            <rom name="international demo cart.d0" size="0x2000" crc="7a837bc9" sha1="dcc708901b391fc62bf799fa2e9db4551f93ba8f" offset="0x0000"/>
455489         </dataarea>
456490      </part>
457491   </software>
r32581r32582
462496      <publisher>INTV</publisher>
463497      <info name="serial" value="9005"/>
464498      <part name="cart" interface="intv_cart">
499         <feature name="slot" value="intv_rom" />
465500         <dataarea name="5000" size="0x4000">
466            <rom name="dig dug.50" size="0x4000" crc="dcee5827" sha1="0cd925a9e42c8cba27462b10e8925a0d64aa8870" offset="0000"/>
501            <rom name="dig dug.50" size="0x4000" crc="dcee5827" sha1="0cd925a9e42c8cba27462b10e8925a0d64aa8870" offset="0x0000"/>
467502         </dataarea>
468503         <dataarea name="7000" size="0x2000">
469            <rom name="dig dug.70" size="0x2000" crc="42e97dbe" sha1="5c8181af208daa76c0b992ce4d78fb918f752cae" offset="0000"/>
504            <rom name="dig dug.70" size="0x2000" crc="42e97dbe" sha1="5c8181af208daa76c0b992ce4d78fb918f752cae" offset="0x0000"/>
470505         </dataarea>
471506         <dataarea name="9000" size="0x2000">
472            <rom name="dig dug.90" size="0x2000" crc="04ff025d" sha1="52e4f152b68238b3a102aeec4efa789462de2cc5" offset="0000"/>
507            <rom name="dig dug.90" size="0x2000" crc="04ff025d" sha1="52e4f152b68238b3a102aeec4efa789462de2cc5" offset="0x0000"/>
473508         </dataarea>
474509      </part>
475510   </software>
r32581r32582
480515      <publisher>INTV</publisher>
481516      <info name="serial" value="8800"/>
482517      <part name="cart" interface="intv_cart">
518         <feature name="slot" value="intv_rom" />
483519         <dataarea name="5000" size="0x4000">
484            <rom name="diner.50" size="0x4000" crc="1190a27c" sha1="594b1474396a5414d40d367a8d7c8f783eae701c" offset="0000"/>
520            <rom name="diner.50" size="0x4000" crc="1190a27c" sha1="594b1474396a5414d40d367a8d7c8f783eae701c" offset="0x0000"/>
485521         </dataarea>
486522         <dataarea name="9000" size="0x4000">
487            <rom name="diner.90" size="0x4000" crc="16e17499" sha1="e2b5569606030ba26d0dcd0a6e3c3e338f23d70a" offset="0000"/>
523            <rom name="diner.90" size="0x4000" crc="16e17499" sha1="e2b5569606030ba26d0dcd0a6e3c3e338f23d70a" offset="0x0000"/>
488524         </dataarea>
489525      </part>
490526   </software>
r32581r32582
496532      <info name="serial" value="2471"/>
497533      <info name="usage" value="Will not run on Intellivision 2"/>
498534      <part name="cart" interface="intv_cart">
535         <feature name="slot" value="intv_rom" />
499536         <dataarea name="5000" size="0x2000">
500            <rom name="donkey kong.50" size="0x2000" crc="c30f61c0" sha1="93807afeee023ce6c787b073705c8bf32bbd8abf" offset="0000"/>
537            <rom name="donkey kong.50" size="0x2000" crc="c30f61c0" sha1="93807afeee023ce6c787b073705c8bf32bbd8abf" offset="0x0000"/>
501538         </dataarea>
502539      </part>
503540   </software>
r32581r32582
508545      <publisher>Coleco</publisher>
509546      <info name="serial" value="2671"/>
510547      <part name="cart" interface="intv_cart">
548         <feature name="slot" value="intv_rom" />
511549         <dataarea name="5000" size="0x4000">
512            <rom name="donkey kong jr.50" size="0x4000" crc="6df61a9f" sha1="9d983308ef7051eef0c324e696776a6f9b9c38d4" offset="0000"/>
550            <rom name="donkey kong jr.50" size="0x4000" crc="6df61a9f" sha1="9d983308ef7051eef0c324e696776a6f9b9c38d4" offset="0x0000"/>
513551         </dataarea>
514552      </part>
515553   </software>
r32581r32582
520558      <publisher>Imagic</publisher>
521559      <info name="serial" value="720018"/>
522560      <part name="cart" interface="intv_cart">
561         <feature name="slot" value="intv_rom" />
523562         <dataarea name="5000" size="0x4000">
524            <rom name="dracula.50" size="0x4000" crc="84bedcc1" sha1="d211da07ab620854ee7a2de3bc103d71d649612f" offset="0000"/>
563            <rom name="dracula.50" size="0x4000" crc="84bedcc1" sha1="d211da07ab620854ee7a2de3bc103d71d649612f" offset="0x0000"/>
525564         </dataarea>
526565      </part>
527566   </software>
r32581r32582
532571      <publisher>Imagic</publisher>
533572      <info name="serial" value="720010"/>
534573      <part name="cart" interface="intv_cart">
574         <feature name="slot" value="intv_rom" />
535575         <dataarea name="5000" size="0x2000">
536            <rom name="dragonfire.50" size="0x2000" crc="af8718a1" sha1="dd6b105c7de9f29e98f11466b063b477af7c3260" offset="0000"/>
576            <rom name="dragonfire.50" size="0x2000" crc="af8718a1" sha1="dd6b105c7de9f29e98f11466b063b477af7c3260" offset="0x0000"/>
537577         </dataarea>
538578      </part>
539579   </software>
r32581r32582
544584      <publisher>Activision</publisher>
545585      <info name="serial" value="M-004-03"/>
546586      <part name="cart" interface="intv_cart">
587         <feature name="slot" value="intv_rom" />
547588         <dataarea name="5000" size="0x4000">
548            <rom name="dreadnaught factor.50" size="0x4000" crc="3b99b889" sha1="f8a3224023b0dd27bc4a38b722e2d8016b08ce73" offset="0000"/>
589            <rom name="dreadnaught factor.50" size="0x4000" crc="3b99b889" sha1="f8a3224023b0dd27bc4a38b722e2d8016b08ce73" offset="0x0000"/>
549590         </dataarea>
550591      </part>
551592   </software>
r32581r32582
556597      <publisher>Mattel Electronics</publisher>
557598      <info name="serial" value="2613"/>
558599      <part name="cart" interface="intv_cart">
600         <feature name="slot" value="intv_rom" />
559601         <dataarea name="5000" size="0x2000">
560            <rom name="electric company - math fun.50" size="0x2000" crc="54a3fc11" sha1="6cdb18d1dd3cd57058263904934b37d4713342e6" offset="0000"/>
602            <rom name="electric company - math fun.50" size="0x2000" crc="54a3fc11" sha1="6cdb18d1dd3cd57058263904934b37d4713342e6" offset="0x0000"/>
561603         </dataarea>
562604      </part>
563605   </software>
r32581r32582
569611      <info name="serial" value="1122"/>
570612      <info name="usage" value="Will not run on Intellivision 2"/>
571613      <part name="cart" interface="intv_cart">
614         <feature name="slot" value="intv_rom" />
572615         <dataarea name="5000" size="0x2000">
573            <rom name="electric company - word fun.50" size="0x2000" crc="c9eaacab" sha1="d3934c328465f0fb423e6a43fcc57018b78da6b9" offset="0000"/>
616            <rom name="electric company - word fun.50" size="0x2000" crc="c9eaacab" sha1="d3934c328465f0fb423e6a43fcc57018b78da6b9" offset="0x0000"/>
574617         </dataarea>
575618      </part>
576619   </software>
r32581r32582
581624      <publisher>Imagic</publisher>
582625      <info name="serial" value="720026"/>
583626      <part name="cart" interface="intv_cart">
627         <feature name="slot" value="intv_rom" />
584628         <dataarea name="5000" size="0x4000">
585            <rom name="fathom.50" size="0x4000" crc="4221ede7" sha1="49646878c9698c9749b3665110acde0906b8f69c" offset="0000"/>
629            <rom name="fathom.50" size="0x4000" crc="4221ede7" sha1="49646878c9698c9749b3665110acde0906b8f69c" offset="0x0000"/>
586630         </dataarea>
587631      </part>
588632   </software>
r32581r32582
593637      <publisher>Mattel Electronics</publisher>
594638      <info name="serial" value="2610"/>
595639      <part name="cart" interface="intv_cart">
640         <feature name="slot" value="intv_rom" />
596641         <dataarea name="5000" size="0x2000">
597            <rom name="football.50" size="0x2000" crc="4b91cf16" sha1="525dffeb7b53c88bd2e8076c421388ed72e2c90d" offset="0000"/>
642            <rom name="football.50" size="0x2000" crc="4b91cf16" sha1="525dffeb7b53c88bd2e8076c421388ed72e2c90d" offset="0x0000"/>
598643         </dataarea>
599644      </part>
600645   </software>
r32581r32582
605650      <publisher>Mattel Electronics</publisher>
606651      <info name="serial" value="5301"/>
607652      <part name="cart" interface="intv_cart">
653         <feature name="slot" value="intv_rom" />
608654         <dataarea name="5000" size="0x2000">
609            <rom name="frog bog.50" size="0x2000" crc="37222762" sha1="58842e4425ad5a8f6ec65528c4b485039057f289" offset="0000"/>
655            <rom name="frog bog.50" size="0x2000" crc="37222762" sha1="58842e4425ad5a8f6ec65528c4b485039057f289" offset="0x0000"/>
610656         </dataarea>
611657      </part>
612658   </software>
r32581r32582
617663      <publisher>Parker Brothers</publisher>
618664      <info name="serial" value="PB6300"/>
619665      <part name="cart" interface="intv_cart">
666         <feature name="slot" value="intv_rom" />
620667         <dataarea name="5000" size="0x2000">
621            <rom name="frogger.50" size="0x2000" crc="d27495e9" sha1="c84f2a2f0007de06057f7e22a489f76def482c86" offset="0000"/>
668            <rom name="frogger.50" size="0x2000" crc="d27495e9" sha1="c84f2a2f0007de06057f7e22a489f76def482c86" offset="0x0000"/>
622669         </dataarea>
623670      </part>
624671   </software>
r32581r32582
629676      <publisher>Mattel Electronics</publisher>
630677      <info name="serial" value="1816"/>
631678      <part name="cart" interface="intv_cart">
679         <feature name="slot" value="intv_rom" />
632680         <dataarea name="5000" size="0x2000">
633            <rom name="golf.50" size="0x2000" crc="ff87faec" sha1="5bbbdadb74fe62546594a4778928cf1287016083" offset="0000"/>
681            <rom name="golf.50" size="0x2000" crc="ff87faec" sha1="5bbbdadb74fe62546594a4778928cf1287016083" offset="0x0000"/>
634682         </dataarea>
635683      </part>
636684   </software>
r32581r32582
641689      <publisher>Activision</publisher>
642690      <info name="serial" value="M-003-03"/>
643691      <part name="cart" interface="intv_cart">
692         <feature name="slot" value="intv_rom" />
644693         <dataarea name="5000" size="0x2000">
645            <rom name="happy trails.50" size="0x2000" crc="4b8c5932" sha1="5bd74fd0246da1441f4af76dc9592f7809f8a821" offset="0000"/>
694            <rom name="happy trails.50" size="0x2000" crc="4b8c5932" sha1="5bd74fd0246da1441f4af76dc9592f7809f8a821" offset="0x0000"/>
646695         </dataarea>
647696      </part>
648697   </software>
r32581r32582
653702      <publisher>Mattel Electronics</publisher>
654703      <info name="serial" value="1114"/>
655704      <part name="cart" interface="intv_cart">
705         <feature name="slot" value="intv_rom" />
656706         <dataarea name="5000" size="0x2000">
657            <rom name="hockey.50" size="0x2000" crc="76564a13" sha1="3395c6764f60d90d96966b28ee96742b5782d59f" offset="0000"/>
707            <rom name="hockey.50" size="0x2000" crc="76564a13" sha1="3395c6764f60d90d96966b28ee96742b5782d59f" offset="0x0000"/>
658708         </dataarea>
659709      </part>
660710   </software>
r32581r32582
665715      <publisher>Mattel Electronics</publisher>
666716      <info name="serial" value="1123"/>
667717      <part name="cart" interface="intv_cart">
718         <feature name="slot" value="intv_rom" />
668719         <dataarea name="5000" size="0x2000">
669            <rom name="horse racing.50" size="0x2000" crc="b5c7f25d" sha1="bd024190395a6d5c9aecadb49d59511e265ff7b3" offset="0000"/>
720            <rom name="horse racing.50" size="0x2000" crc="b5c7f25d" sha1="bd024190395a6d5c9aecadb49d59511e265ff7b3" offset="0x0000"/>
670721         </dataarea>
671722      </part>
672723   </software>
r32581r32582
677728      <publisher>INTV</publisher>
678729      <info name="serial" value="8500"/>
679730      <part name="cart" interface="intv_cart">
731         <feature name="slot" value="intv_rom" />
680732         <dataarea name="5000" size="0x4000">
681            <rom name="hover force.50" size="0x4000" crc="4c3644b8" sha1="4cf770275315480d11c2bb8506fe49175e4f1a68" offset="0000"/>
733            <rom name="hover force.50" size="0x4000" crc="4c3644b8" sha1="4cf770275315480d11c2bb8506fe49175e4f1a68" offset="0x0000"/>
682734         </dataarea>
683735         <dataarea name="9000" size="0x6000">
684            <rom name="hover force.90" size="0x6000" crc="75d45110" sha1="f7d9d7c932be1cbf65dcfff0cfdab9e8b8f86661" offset="0000"/>
736            <rom name="hover force.90" size="0x6000" crc="75d45110" sha1="f7d9d7c932be1cbf65dcfff0cfdab9e8b8f86661" offset="0x0000"/>
685737         </dataarea>
686738         <dataarea name="D000" size="0x2000">
687            <rom name="hover force.d0" size="0x2000" crc="ed7c8fac" sha1="140986d67ba22e5c344e27ac74fa3e14f35097e7" offset="0000"/>
739            <rom name="hover force.d0" size="0x2000" crc="ed7c8fac" sha1="140986d67ba22e5c344e27ac74fa3e14f35097e7" offset="0x0000"/>
688740         </dataarea>
689741      </part>
690742   </software>
r32581r32582
695747      <publisher>Imagic</publisher>
696748      <info name="serial" value="720012"/>
697749      <part name="cart" interface="intv_cart">
750         <feature name="slot" value="intv_rom" />
698751         <dataarea name="5000" size="0x4000">
699            <rom name="ice trek.50" size="0x4000" crc="4f3e3f69" sha1="d70bd2d71227faba51de575df110818ed50bdee7" offset="0000"/>
752            <rom name="ice trek.50" size="0x4000" crc="4f3e3f69" sha1="d70bd2d71227faba51de575df110818ed50bdee7" offset="0x0000"/>
700753         </dataarea>
701754      </part>
702755   </software>
r32581r32582
707760      <publisher>Mattel Electronics</publisher>
708761      <info name="serial" value="4675"/>
709762      <part name="cart" interface="intv_cart">
763         <feature name="slot" value="intv_rom" />
710764         <dataarea name="5000" size="0x4000">
711            <rom name="kool-aid man.50" size="0x4000" crc="8c9819a2" sha1="9ceab1a49090c4d8b55b3e85c845b1d3a5537ddb" offset="0000"/>
765            <rom name="kool-aid man.50" size="0x4000" crc="8c9819a2" sha1="9ceab1a49090c4d8b55b3e85c845b1d3a5537ddb" offset="0x0000"/>
712766         </dataarea>
713767      </part>
714768   </software>
r32581r32582
719773      <publisher>Coleco</publisher>
720774      <info name="serial" value="2483"/>
721775      <part name="cart" interface="intv_cart">
776         <feature name="slot" value="intv_rom" />
722777         <dataarea name="5000" size="0x4000">
723            <rom name="lady bug.50" size="0x4000" crc="a6840736" sha1="ca3f0d52fc077c98becefe3e566895807840152a" offset="0000"/>
778            <rom name="lady bug.50" size="0x4000" crc="a6840736" sha1="ca3f0d52fc077c98becefe3e566895807840152a" offset="0x0000"/>
724779         </dataarea>
725780      </part>
726781   </software>
r32581r32582
731786      <publisher>INTV</publisher>
732787      <info name="serial" value="9002"/>
733788      <part name="cart" interface="intv_cart">
789         <feature name="slot" value="intv_rom" />
734790         <dataarea name="5000" size="0x4000">
735            <rom name="learning fun i.50" size="0x4000" crc="2c5fd5fa" sha1="6eeaeb4ca39d30b6255814cd9f92cf8d092c393d" offset="0000"/>
791            <rom name="learning fun i.50" size="0x4000" crc="2c5fd5fa" sha1="6eeaeb4ca39d30b6255814cd9f92cf8d092c393d" offset="0x0000"/>
736792         </dataarea>
737793      </part>
738794   </software>
r32581r32582
743799      <publisher>INTV</publisher>
744800      <info name="serial" value="9006"/>
745801      <part name="cart" interface="intv_cart">
802         <feature name="slot" value="intv_rom" />
746803         <dataarea name="5000" size="0x4000">
747            <rom name="learning fun ii.50" size="0x4000" crc="632f6adf" sha1="134af61bc7b06489d35a7474f8a29ef80db6f332" offset="0000"/>
804            <rom name="learning fun ii.50" size="0x4000" crc="632f6adf" sha1="134af61bc7b06489d35a7474f8a29ef80db6f332" offset="0x0000"/>
748805         </dataarea>
749806      </part>
750807   </software>
r32581r32582
755812      <publisher>Mattel Electronics</publisher>
756813      <info name="serial" value="5637"/>
757814      <part name="cart" interface="intv_cart">
815         <feature name="slot" value="intv_rom" />
758816         <dataarea name="5000" size="0x3000">
759            <rom name="lock n chase (6k).50" size="0x3000" crc="04977992" sha1="08454a5f7b44730aa8249623785dd7a6471ab98f" offset="0000"/>
817            <rom name="lock n chase (6k).50" size="0x3000" crc="04977992" sha1="08454a5f7b44730aa8249623785dd7a6471ab98f" offset="0x0000"/>
760818         </dataarea>
761819      </part>
762820   </software>
r32581r32582
767825      <publisher>Mattel Electronics</publisher>
768826      <info name="serial" value="5637"/>
769827      <part name="cart" interface="intv_cart">
828         <feature name="slot" value="intv_rom" />
770829         <dataarea name="5000" size="0x4000">
771            <rom name="lock n chase (later version).50" size="0x4000" crc="5c7e9848" sha1="ac889a1d76b40be1a7e7562c8cb8b3f9d00f3728" offset="0000"/>
830            <rom name="lock n chase (later version).50" size="0x4000" crc="5c7e9848" sha1="ac889a1d76b40be1a7e7562c8cb8b3f9d00f3728" offset="0x0000"/>
772831         </dataarea>
773832      </part>
774833   </software>
r32581r32582
779838      <publisher>Mattel Electronics</publisher>
780839      <info name="serial" value="4438"/>
781840      <part name="cart" interface="intv_cart">
841         <feature name="slot" value="intv_rom" />
782842         <dataarea name="5000" size="0x4000">
783            <rom name="loco-motion.50" size="0x4000" crc="6b6e80ee" sha1="a5479d68f90d77234b6acc4d7ee93a356d5fd961" offset="0000"/>
843            <rom name="loco-motion.50" size="0x4000" crc="6b6e80ee" sha1="a5479d68f90d77234b6acc4d7ee93a356d5fd961" offset="0x0000"/>
784844         </dataarea>
785845      </part>
786846   </software>
r32581r32582
791851      <publisher>Mattel Electronics</publisher>
792852      <info name="serial" value="4689"/>
793853      <part name="cart" interface="intv_cart">
854         <feature name="slot" value="intv_rom" />
794855         <dataarea name="5000" size="0x4000">
795            <rom name="masters of the universe.50" size="0x4000" crc="143e8ca2" sha1="0f54ee719269ac96443ceab78f96224ce1516296" offset="0000"/>
856            <rom name="masters of the universe.50" size="0x4000" crc="143e8ca2" sha1="0f54ee719269ac96443ceab78f96224ce1516296" offset="0x0000"/>
796857         </dataarea>
797858         <dataarea name="D000" size="0x2000">
798            <rom name="masters of the universe.d0" size="0x2000" crc="9c94b9f8" sha1="b18daefc51c709e7f0e20df0b937faded3a51fe9" offset="0000"/>
859            <rom name="masters of the universe.d0" size="0x2000" crc="9c94b9f8" sha1="b18daefc51c709e7f0e20df0b937faded3a51fe9" offset="0x0000"/>
799860         </dataarea>
800861         <dataarea name="F000" size="0x2000">
801            <rom name="masters of the universe.f0" size="0x2000" crc="7655e78a" sha1="c11533e250ab71ea27d0fec0225ddfbd69b17c41" offset="0000"/>
862            <rom name="masters of the universe.f0" size="0x2000" crc="7655e78a" sha1="c11533e250ab71ea27d0fec0225ddfbd69b17c41" offset="0x0000"/>
802863         </dataarea>
803864      </part>
804865   </software>
r32581r32582
809870      <publisher>Mattel Electronics</publisher>
810871      <info name="serial" value="4437"/>
811872      <part name="cart" interface="intv_cart">
873         <feature name="slot" value="intv_rom" />
812874         <dataarea name="5000" size="0x4000">
813            <rom name="mission x.50" size="0x4000" crc="11fb9974" sha1="2e6760f418f4e54a244fe1baa57e573573cc1b7d" offset="0000"/>
875            <rom name="mission x.50" size="0x4000" crc="11fb9974" sha1="2e6760f418f4e54a244fe1baa57e573573cc1b7d" offset="0x0000"/>
814876         </dataarea>
815877      </part>
816878   </software>
r32581r32582
822884      <info name="serial" value="720013"/>
823885      <info name="usage" value="This cart has unique Left and Right overlays"/>
824886      <part name="cart" interface="intv_cart">
887         <feature name="slot" value="intv_rom" />
825888         <dataarea name="4800" size="0x4000">
826            <rom name="microsurgeon.48" size="0x4000" crc="e806ad91" sha1="1390f0076470504037720b20f84404d502988231" offset="0000"/>
889            <rom name="microsurgeon.48" size="0x4000" crc="e806ad91" sha1="1390f0076470504037720b20f84404d502988231" offset="0x0000"/>
827890         </dataarea>
828891      </part>
829892   </software>
r32581r32582
834897      <publisher>Mattel Electronics</publisher>
835898      <info name="serial" value="3411"/>
836899      <part name="cart" interface="intv_cart">
900         <feature name="slot" value="intv_rom" />
837901         <dataarea name="5000" size="0x4000">
838            <rom name="motocross.50" size="0x4000" crc="5f6e1af6" sha1="109e0a05e73239962ded327827c7957960802744" offset="0000"/>
902            <rom name="motocross.50" size="0x4000" crc="5f6e1af6" sha1="109e0a05e73239962ded327827c7957960802744" offset="0x0000"/>
839903         </dataarea>
840904      </part>
841905   </software>
r32581r32582
846910      <publisher>INTV</publisher>
847911      <info name="serial" value="9007"/>
848912      <part name="cart" interface="intv_cart">
913         <feature name="slot" value="intv_rom" />
849914         <dataarea name="5000" size="0x4000">
850            <rom name="mountain madness - super pro skiing.50" size="0x4000" crc="6b5ea9c4" sha1="7cbb5fce8b9d44412b98d32a5ea752ec51590785" offset="0000"/>
915            <rom name="mountain madness - super pro skiing.50" size="0x4000" crc="6b5ea9c4" sha1="7cbb5fce8b9d44412b98d32a5ea752ec51590785" offset="0x0000"/>
851916         </dataarea>
852917      </part>
853918   </software>
r32581r32582
859924      <info name="serial" value="2479"/>
860925      <info name="usage" value="Will not run on Intellivision 2"/>
861926      <part name="cart" interface="intv_cart">
927         <feature name="slot" value="intv_rom" />
862928         <dataarea name="5000" size="0x2000">
863            <rom name="mouse trap.50" size="0x2000" crc="598662f2" sha1="fd942dde74c6006a70dbc6902a2e0ed416edaa55" offset="0000"/>
929            <rom name="mouse trap.50" size="0x2000" crc="598662f2" sha1="fd942dde74c6006a70dbc6902a2e0ed416edaa55" offset="0x0000"/>
864930         </dataarea>
865931      </part>
866932   </software>
r32581r32582
871937      <publisher>Mattel Electronics</publisher>
872938      <info name="serial" value="5305"/>
873939      <part name="cart" interface="intv_cart">
940         <feature name="slot" value="intv_rom" />
874941         <dataarea name="5000" size="0x2000">
875            <rom name="night stalker.50" size="0x2000" crc="7334cd44" sha1="13e321593daf93c2e3e964a05e43e4bb21da6ea6" offset="0000"/>
942            <rom name="night stalker.50" size="0x2000" crc="7334cd44" sha1="13e321593daf93c2e3e964a05e43e4bb21da6ea6" offset="0x0000"/>
876943         </dataarea>
877944      </part>
878945   </software>
r32581r32582
883950      <publisher>Imagic</publisher>
884951      <info name="serial" value="720022"/>
885952      <part name="cart" interface="intv_cart">
953         <feature name="slot" value="intv_rom" />
886954         <dataarea name="5000" size="0x4000">
887            <rom name="nova blast.50" size="0x4000" crc="5ee2cc2a" sha1="ca18f2938168ec681ee34cb25a08c87b752a5024" offset="0000"/>
955            <rom name="nova blast.50" size="0x4000" crc="5ee2cc2a" sha1="ca18f2938168ec681ee34cb25a08c87b752a5024" offset="0x0000"/>
888956         </dataarea>
889957      </part>
890958   </software>
r32581r32582
895963      <publisher>Atarisoft</publisher>
896964      <info name="serial" value="70251"/>
897965      <part name="cart" interface="intv_cart">
966         <feature name="slot" value="intv_rom" />
898967         <dataarea name="5000" size="0x6000">
899            <rom name="pac-man.50" size="0x6000" crc="a21c31c3" sha1="66ddc9c56edee06564c1252c7c6bc3123da8c31d" offset="0000"/>
968            <rom name="pac-man.50" size="0x6000" crc="a21c31c3" sha1="66ddc9c56edee06564c1252c7c6bc3123da8c31d" offset="0x0000"/>
900969         </dataarea>
901970      </part>
902971   </software>
r32581r32582
907976      <publisher>INTV</publisher>
908977      <info name="serial" value="8000"/>
909978      <part name="cart" interface="intv_cart">
979         <feature name="slot" value="intv_rom" />
910980         <dataarea name="5000" size="0x6000">
911            <rom name="pac-man - intv.50" size="0x6000" crc="6e4e8eb4" sha1="48023975e4ba875b745b5b9aac0fb562922b50c3" offset="0000"/>
981            <rom name="pac-man - intv.50" size="0x6000" crc="6e4e8eb4" sha1="48023975e4ba875b745b5b9aac0fb562922b50c3" offset="0x0000"/>
912982         </dataarea>
913983      </part>
914984   </software>
r32581r32582
919989      <publisher>Mattel Electronics</publisher>
920990      <info name="serial" value="5356"/>
921991      <part name="cart" interface="intv_cart">
992         <feature name="slot" value="intv_rom" />
922993         <dataarea name="5000" size="0x4000">
923            <rom name="pinball.50" size="0x4000" crc="eea1a9a7" sha1="89a725d2c404a27ce5f931a896c1f411ea6707bd" offset="0000"/>
994            <rom name="pinball.50" size="0x4000" crc="eea1a9a7" sha1="89a725d2c404a27ce5f931a896c1f411ea6707bd" offset="0x0000"/>
924995         </dataarea>
925996         <dataarea name="D000" size="0x2000">
926            <rom name="pinball.d0" size="0x2000" crc="ce21806d" sha1="532cb88d9a6797ca218c5364275cb57691eb1322" offset="0000"/>
997            <rom name="pinball.d0" size="0x2000" crc="ce21806d" sha1="532cb88d9a6797ca218c5364275cb57691eb1322" offset="0x0000"/>
927998         </dataarea>
928999      </part>
9291000   </software>
r32581r32582
9341005      <publisher>Activision</publisher>
9351006      <info name="serial" value="M-002-03"/>
9361007      <part name="cart" interface="intv_cart">
1008         <feature name="slot" value="intv_rom" />
9371009         <dataarea name="5000" size="0x2000">
938            <rom name="pitfall.50" size="0x2000" crc="9c75efcc" sha1="1f4087be2c0a51ed08e49e6498794a9d26dc0d65" offset="0000"/>
1010            <rom name="pitfall.50" size="0x2000" crc="9c75efcc" sha1="1f4087be2c0a51ed08e49e6498794a9d26dc0d65" offset="0x0000"/>
9391011         </dataarea>
9401012      </part>
9411013   </software>
r32581r32582
9461018      <publisher>Mattel Electronics</publisher>
9471019      <info name="serial" value="2611"/>
9481020      <part name="cart" interface="intv_cart">
1021         <feature name="slot" value="intv_rom" />
9491022         <dataarea name="5000" size="0x2000">
950            <rom name="poker and blackjack.50" size="0x2000" crc="604611c0" sha1="a6c03e253e615a06f838e623df5f557636fdf8e1" offset="0000"/>
1023            <rom name="poker and blackjack.50" size="0x2000" crc="604611c0" sha1="a6c03e253e615a06f838e623df5f557636fdf8e1" offset="0x0000"/>
9511024         </dataarea>
9521025      </part>
9531026   </software>
r32581r32582
9581031      <publisher>INTV</publisher>
9591032      <info name="serial" value="9004"/>
9601033      <part name="cart" interface="intv_cart">
1034         <feature name="slot" value="intv_rom" />
9611035         <dataarea name="5000" size="0x4000">
962            <rom name="pole position.50" size="0x4000" crc="f57537c2" sha1="2fe2c9f0823c0040ba7731749d84063f41032da6" offset="0000"/>
1036            <rom name="pole position.50" size="0x4000" crc="f57537c2" sha1="2fe2c9f0823c0040ba7731749d84063f41032da6" offset="0x0000"/>
9631037         </dataarea>
9641038         <dataarea name="9000" size="0x4000">
965            <rom name="pole position.90" size="0x4000" crc="ee3027cc" sha1="90dbe6347c50e83c330c4dd526ecddd54fa174dc" offset="0000"/>
1039            <rom name="pole position.90" size="0x4000" crc="ee3027cc" sha1="90dbe6347c50e83c330c4dd526ecddd54fa174dc" offset="0x0000"/>
9661040         </dataarea>
9671041      </part>
9681042   </software>
r32581r32582
9731047      <publisher>Parker Brothers</publisher>
9741048      <info name="serial" value="PB6370"/>
9751049      <part name="cart" interface="intv_cart">
1050         <feature name="slot" value="intv_rom" />
9761051         <dataarea name="5000" size="0x4000">
977            <rom name="popeye.50" size="0x4000" crc="c51464e0" sha1="fc468df3ab11c52f157a0c6b881c61f43cb5c88a" offset="0000"/>
1052            <rom name="popeye.50" size="0x4000" crc="c51464e0" sha1="fc468df3ab11c52f157a0c6b881c61f43cb5c88a" offset="0x0000"/>
9781053         </dataarea>
9791054      </part>
9801055   </software>
r32581r32582
9851060      <publisher>Parker Brothers</publisher>
9861061      <info name="serial" value="PB6360"/>
9871062      <part name="cart" interface="intv_cart">
1063         <feature name="slot" value="intv_rom" />
9881064         <dataarea name="5000" size="0x4000">
989            <rom name="q-bert.50" size="0x4000" crc="d8c9856a" sha1="60132870a1bf5f5b9d0aa19b4dd9c13a94702f70" offset="0000"/>
1065            <rom name="q-bert.50" size="0x4000" crc="d8c9856a" sha1="60132870a1bf5f5b9d0aa19b4dd9c13a94702f70" offset="0x0000"/>
9901066         </dataarea>
9911067      </part>
9921068   </software>
r32581r32582
9971073      <publisher>Mattel Electronics</publisher>
9981074      <info name="serial" value="5304"/>
9991075      <part name="cart" interface="intv_cart">
1076         <feature name="slot" value="intv_rom" />
10001077         <dataarea name="5000" size="0x2000">
1001            <rom name="reversi.50" size="0x2000" crc="c7bb1b0e" sha1="3eea6f5c02942eb3ac96967e3b667911459d09f8" offset="0000"/>
1078            <rom name="reversi.50" size="0x2000" crc="c7bb1b0e" sha1="3eea6f5c02942eb3ac96967e3b667911459d09f8" offset="0x0000"/>
10021079         </dataarea>
10031080      </part>
10041081   </software>
r32581r32582
10091086      <publisher>Activision</publisher>
10101087      <info name="serial" value="M-007-03"/>
10111088      <part name="cart" interface="intv_cart">
1089         <feature name="slot" value="intv_rom" />
10121090         <dataarea name="5000" size="0x4000">
1013            <rom name="river raid.50" size="0x4000" crc="8910c37a" sha1="6c1aa94983c25ed484cc85dadabf0102b5c46726" offset="0000"/>
1091            <rom name="river raid.50" size="0x4000" crc="8910c37a" sha1="6c1aa94983c25ed484cc85dadabf0102b5c46726" offset="0x0000"/>
10141092         </dataarea>
10151093      </part>
10161094   </software>
r32581r32582
10211099      <publisher>Mattel Electronics</publisher>
10221100      <info name="serial" value="1118"/>
10231101      <part name="cart" interface="intv_cart">
1102         <feature name="slot" value="intv_rom" />
10241103         <dataarea name="5000" size="0x2000">
1025            <rom name="roulette.50" size="0x2000" crc="48d74d3c" sha1="b7773c3cc93afe4820287c3f1c14345a1a14e1ee" offset="0000"/>
1104            <rom name="roulette.50" size="0x2000" crc="48d74d3c" sha1="b7773c3cc93afe4820287c3f1c14345a1a14e1ee" offset="0x0000"/>
10261105         </dataarea>
10271106      </part>
10281107   </software>
r32581r32582
10331112      <publisher>Mattel Electronics</publisher>
10341113      <info name="serial" value="5303"/>
10351114      <part name="cart" interface="intv_cart">
1115         <feature name="slot" value="intv_rom" />
10361116         <dataarea name="5000" size="0x3000">
1037            <rom name="royal dealer.50" size="0x3000" crc="0458a491" sha1="918e59d79672577b8b327c5d00c95d03e5e0c920" offset="0000"/>
1117            <rom name="royal dealer.50" size="0x3000" crc="0458a491" sha1="918e59d79672577b8b327c5d00c95d03e5e0c920" offset="0x0000"/>
10381118         </dataarea>
10391119      </part>
10401120   </software>
r32581r32582
10451125      <publisher>Imagic</publisher>
10461126      <info name="serial" value="720025"/>
10471127      <part name="cart" interface="intv_cart">
1128         <feature name="slot" value="intv_rom" />
10481129         <dataarea name="5000" size="0x4000">
1049            <rom name="safecracker.50" size="0x4000" crc="47aa7977" sha1="a6a60d4c17866a790351eebec9603890deeda0ff" offset="0000"/>
1130            <rom name="safecracker.50" size="0x4000" crc="47aa7977" sha1="a6a60d4c17866a790351eebec9603890deeda0ff" offset="0x0000"/>
10501131         </dataarea>
10511132      </part>
10521133   </software>
r32581r32582
10571138      <publisher>Mattel Electronics</publisher>
10581139      <info name="serial" value="1818"/>
10591140      <part name="cart" interface="intv_cart">
1141         <feature name="slot" value="intv_rom" />
10601142         <dataarea name="5000" size="0x2000">
1061            <rom name="sea battle.50" size="0x2000" crc="99ae29a9" sha1="ccb48a11f3cbfa580f2c6a1012c8d794eee9a5ec" offset="0000"/>
1143            <rom name="sea battle.50" size="0x2000" crc="99ae29a9" sha1="ccb48a11f3cbfa580f2c6a1012c8d794eee9a5ec" offset="0x0000"/>
10621144         </dataarea>
10631145      </part>
10641146   </software>
r32581r32582
10691151      <publisher>Interphase</publisher>
10701152      <info name="serial" value="8010002"/>
10711153      <part name="cart" interface="intv_cart">
1154         <feature name="slot" value="intv_rom" />
10721155         <dataarea name="5000" size="0x4000">
1073            <rom name="sewer sam.50" size="0x4000" crc="e0f0d3da" sha1="e7c2aff48dac09f2c04b867c00a587c00c0c541f" offset="0000"/>
1156            <rom name="sewer sam.50" size="0x4000" crc="e0f0d3da" sha1="e7c2aff48dac09f2c04b867c00a587c00c0c541f" offset="0x0000"/>
10741157         </dataarea>
10751158      </part>
10761159   </software>
r32581r32582
10811164      <publisher>Mattel Electronics</publisher>
10821165      <info name="serial" value="5387"/>
10831166      <part name="cart" interface="intv_cart">
1167         <feature name="slot" value="intv_rom" />
10841168         <dataarea name="5000" size="0x4000">
1085            <rom name="shark shark.50" size="0x4000" crc="2a4c761d" sha1="53d10e890571ef67d39874582f3668b29c580590" offset="0000"/>
1169            <rom name="shark shark.50" size="0x4000" crc="2a4c761d" sha1="53d10e890571ef67d39874582f3668b29c580590" offset="0x0000"/>
10861170         </dataarea>
10871171      </part>
10881172   </software>
r32581r32582
10931177      <publisher>Mattel Electronics</publisher>
10941178      <info name="serial" value="5638"/>
10951179      <part name="cart" interface="intv_cart">
1180         <feature name="slot" value="intv_rom" />
10961181         <dataarea name="5000" size="0x2000">
1097            <rom name="sharp shot.50" size="0x2000" crc="ff7cb79e" sha1="0a0230a5c06f3593d683458aec3d81654904f16d" offset="0000"/>
1182            <rom name="sharp shot.50" size="0x2000" crc="ff7cb79e" sha1="0a0230a5c06f3593d683458aec3d81654904f16d" offset="0x0000"/>
10981183         </dataarea>
10991184      </part>
11001185   </software>
r32581r32582
11051190      <publisher>Mattel Electronics</publisher>
11061191      <info name="serial" value="1817"/>
11071192      <part name="cart" interface="intv_cart">
1193         <feature name="slot" value="intv_rom" />
11081194         <dataarea name="5000" size="0x2000">
1109            <rom name="skiing.50" size="0x2000" crc="f093e801" sha1="f93df55f45ee9b589db5763cefe6742860b38e79" offset="0000"/>
1195            <rom name="skiing.50" size="0x2000" crc="f093e801" sha1="f93df55f45ee9b589db5763cefe6742860b38e79" offset="0x0000"/>
11101196         </dataarea>
11111197      </part>
11121198   </software>
r32581r32582
11171203      <publisher>INTV</publisher>
11181204      <info name="serial" value="9001"/>
11191205      <part name="cart" interface="intv_cart">
1206         <feature name="slot" value="intv_rom" />
11201207         <dataarea name="5000" size="0x4000">
1121            <rom name="slam dunk - super pro basketball.50" size="0x4000" crc="e090be37" sha1="f9d1d53968f99372aa5923164e68a648308682ec" offset="0000"/>
1208            <rom name="slam dunk - super pro basketball.50" size="0x4000" crc="e090be37" sha1="f9d1d53968f99372aa5923164e68a648308682ec" offset="0x0000"/>
11221209         </dataarea>
11231210         <dataarea name="9000" size="0x4000">
1124            <rom name="slam dunk - super pro basketball.90" size="0x4000" crc="7e596f89" sha1="c508ca7e7ac6f1fe65a345ccda0ae333872a7624" offset="0000"/>
1211            <rom name="slam dunk - super pro basketball.90" size="0x4000" crc="7e596f89" sha1="c508ca7e7ac6f1fe65a345ccda0ae333872a7624" offset="0x0000"/>
11251212         </dataarea>
11261213      </part>
11271214   </software>
r32581r32582
11321219      <publisher>INTV</publisher>
11331220      <info name="serial" value="9003"/>
11341221      <part name="cart" interface="intv_cart">
1222         <feature name="slot" value="intv_rom" />
11351223         <dataarea name="5000" size="0x4000">
1136            <rom name="slap shot - super pro hockey.50" size="0x4000" crc="ba68ff28" sha1="35e27d918cad45129fcc3924fbb4f2fef8f31776" offset="0000"/>
1224            <rom name="slap shot - super pro hockey.50" size="0x4000" crc="ba68ff28" sha1="35e27d918cad45129fcc3924fbb4f2fef8f31776" offset="0x0000"/>
11371225         </dataarea>
11381226      </part>
11391227   </software>
r32581r32582
11441232      <publisher>Mattel Electronics</publisher>
11451233      <info name="serial" value="3758"/>
11461234      <part name="cart" interface="intv_cart">
1235         <feature name="slot" value="intv_rom" />
11471236         <dataarea name="5000" size="0x2000">
1148            <rom name="snafu.50" size="0x2000" crc="8f959a6e" sha1="9d5c237c7fb1cf3c444f916e84ee4180d9732c4c" offset="0000"/>
1237            <rom name="snafu.50" size="0x2000" crc="8f959a6e" sha1="9d5c237c7fb1cf3c444f916e84ee4180d9732c4c" offset="0x0000"/>
11491238         </dataarea>
11501239      </part>
11511240   </software>
r32581r32582
11561245      <publisher>Mattel Electronics</publisher>
11571246      <info name="serial" value="1683"/>
11581247      <part name="cart" interface="intv_cart">
1248         <feature name="slot" value="intv_rom" />
11591249         <dataarea name="5000" size="0x2000">
1160            <rom name="soccer.50" size="0x2000" crc="dbab54ca" sha1="3524384c2e096f22b7cb9608e0a8b9c78f4ef458" offset="0000"/>
1250            <rom name="soccer.50" size="0x2000" crc="dbab54ca" sha1="3524384c2e096f22b7cb9608e0a8b9c78f4ef458" offset="0x0000"/>
11611251         </dataarea>
11621252      </part>
11631253   </software>
r32581r32582
11681258      <publisher>Mattel Electronics</publisher>
11691259      <info name="serial" value="3759"/>
11701260      <part name="cart" interface="intv_cart">
1261         <feature name="slot" value="intv_rom" />
11711262         <dataarea name="5000" size="0x2000">
1172            <rom name="space armada.50" size="0x2000" crc="e8b8eba5" sha1="2d8ddc0881b63b2f691a97eab182ed4c3ca56816" offset="0000"/>
1263            <rom name="space armada.50" size="0x2000" crc="e8b8eba5" sha1="2d8ddc0881b63b2f691a97eab182ed4c3ca56816" offset="0x0000"/>
11731264         </dataarea>
11741265      </part>
11751266   </software>
r32581r32582
11801271      <publisher>Mattel Electronics</publisher>
11811272      <info name="serial" value="2612"/>
11821273      <part name="cart" interface="intv_cart">
1274         <feature name="slot" value="intv_rom" />
11831275         <dataarea name="5000" size="0x2000">
1184            <rom name="space battle.50" size="0x2000" crc="f95504e0" sha1="d6036c7e7c0da20878fd7acc9f6b476135d1e8d1" offset="0000"/>
1276            <rom name="space battle.50" size="0x2000" crc="f95504e0" sha1="d6036c7e7c0da20878fd7acc9f6b476135d1e8d1" offset="0x0000"/>
11851277         </dataarea>
11861278      </part>
11871279   </software>
r32581r32582
11921284      <publisher>Mattel Electronics</publisher>
11931285      <info name="serial" value="5136"/>
11941286      <part name="cart" interface="intv_cart">
1287         <feature name="slot" value="intv_rom" />
11951288         <dataarea name="5000" size="0x2000">
1196            <rom name="space hawk.50" size="0x2000" crc="39d3b895" sha1="e7e4b8ad30ee69cd9e75f2b3e3d94b75e7288110" offset="0000"/>
1289            <rom name="space hawk.50" size="0x2000" crc="39d3b895" sha1="e7e4b8ad30ee69cd9e75f2b3e3d94b75e7288110" offset="0x0000"/>
11971290         </dataarea>
11981291      </part>
11991292   </software>
r32581r32582
12051298      <info name="serial" value="3416"/>
12061299      <info name="usage" value="Uses Intellivoice"/>
12071300      <part name="cart" interface="intv_cart">
1301         <feature name="slot" value="intv_rom" />
12081302         <dataarea name="5000" size="0x4000">
1209            <rom name="space spartans.50" size="0x4000" crc="3784dc52" sha1="954d5911a3a41e8f9b4664ab4f60484b2d2648b3" offset="0000"/>
1303            <rom name="space spartans.50" size="0x4000" crc="3784dc52" sha1="954d5911a3a41e8f9b4664ab4f60484b2d2648b3" offset="0x0000"/>
12101304         </dataarea>
12111305      </part>
12121306   </software>
r32581r32582
12171311      <publisher>INTV</publisher>
12181312      <info name="serial" value="9102"/>
12191313      <part name="cart" interface="intv_cart">
1314         <feature name="slot" value="intv_rom" />
12201315         <dataarea name="5000" size="0x4000">
1221            <rom name="spiker super pro volleyball.50" size="0x4000" crc="e9648c61" sha1="f36b7b8b69d5dea70a769ed44efee67f2df3cb7e" offset="0000"/>
1316            <rom name="spiker super pro volleyball.50" size="0x4000" crc="e9648c61" sha1="f36b7b8b69d5dea70a769ed44efee67f2df3cb7e" offset="0x0000"/>
12221317         </dataarea>
12231318         <dataarea name="9000" size="0x4000">
1224            <rom name="spiker super pro volleyball.90" size="0x4000" crc="0e0653ec" sha1="5c87a1b43bd88358e91efa8bd72f4121c96e63a2" offset="0000"/>
1319            <rom name="spiker super pro volleyball.90" size="0x4000" crc="0e0653ec" sha1="5c87a1b43bd88358e91efa8bd72f4121c96e63a2" offset="0x0000"/>
12251320         </dataarea>
12261321      </part>
12271322   </software>
r32581r32582
12321327      <publisher>INTV</publisher>
12331328      <info name="serial" value="9100"/>
12341329      <part name="cart" interface="intv_cart">
1330         <feature name="slot" value="intv_rom" />
12351331         <dataarea name="5000" size="0x4000">
1236            <rom name="stadium mud buggies.50" size="0x4000" crc="dbad22a8" sha1="774264e61849e9dbfb111f618a07296ff8399b52" offset="0000"/>
1332            <rom name="stadium mud buggies.50" size="0x4000" crc="dbad22a8" sha1="774264e61849e9dbfb111f618a07296ff8399b52" offset="0x0000"/>
12371333         </dataarea>
12381334         <dataarea name="9000" size="0x4000">
1239            <rom name="stadium mud buggies.90" size="0x4000" crc="c526a9d0" sha1="0a1b012719f4b7a89fa57ef6ee4d7f8e556b10f7" offset="0000"/>
1335            <rom name="stadium mud buggies.90" size="0x4000" crc="c526a9d0" sha1="0a1b012719f4b7a89fa57ef6ee4d7f8e556b10f7" offset="0x0000"/>
12401336         </dataarea>
12411337      </part>
12421338   </software>
r32581r32582
12471343      <publisher>Activision</publisher>
12481344      <info name="serial" value="M-001-03"/>
12491345      <part name="cart" interface="intv_cart">
1346         <feature name="slot" value="intv_rom" />
12501347         <dataarea name="5000" size="0x2000">
1251            <rom name="stampede.50" size="0x2000" crc="2deacd15" sha1="31cf8f77d889c48d2b31670e58b2ec38187f2748" offset="0000"/>
1348            <rom name="stampede.50" size="0x2000" crc="2deacd15" sha1="31cf8f77d889c48d2b31670e58b2ec38187f2748" offset="0x0000"/>
12521349         </dataarea>
12531350      </part>
12541351   </software>
r32581r32582
12591356      <publisher>Mattel Electronics</publisher>
12601357      <info name="serial" value="5161"/>
12611358      <part name="cart" interface="intv_cart">
1359         <feature name="slot" value="intv_rom" />
12621360         <dataarea name="5000" size="0x2000">
1263            <rom name="star strike.50" size="0x2000" crc="72e11fca" sha1="17c37fbc5ff14c55931ae27e21603dff3db66dbe" offset="0000"/>
1361            <rom name="star strike.50" size="0x2000" crc="72e11fca" sha1="17c37fbc5ff14c55931ae27e21603dff3db66dbe" offset="0x0000"/>
12641362         </dataarea>
12651363      </part>
12661364   </software>
r32581r32582
12711369      <publisher>Parker Brothers</publisher>
12721370      <info name="serial" value="PB6050"/>
12731371      <part name="cart" interface="intv_cart">
1372         <feature name="slot" value="intv_rom" />
12741373         <dataarea name="5000" size="0x2000">
1275            <rom name="star wars - the empire strikes back.50" size="0x2000" crc="d5b0135a" sha1="b2995abe45c57e85c36927ba82c428bfbe06cb70" offset="0000"/>
1374            <rom name="star wars - the empire strikes back.50" size="0x2000" crc="d5b0135a" sha1="b2995abe45c57e85c36927ba82c428bfbe06cb70" offset="0x0000"/>
12761375         </dataarea>
12771376      </part>
12781377   </software>
r32581r32582
12831382      <publisher>Mattel Electronics</publisher>
12841383      <info name="serial" value="3408"/>
12851384      <part name="cart" interface="intv_cart">
1385         <feature name="slot" value="intv_rom" />
12861386         <dataarea name="5000" size="0x4000">
1287            <rom name="sub hunt.50" size="0x4000" crc="3d9949ea" sha1="8b09884a69f4aa8663f42a201dd70df98f4da0fc" offset="0000"/>
1387            <rom name="sub hunt.50" size="0x4000" crc="3d9949ea" sha1="8b09884a69f4aa8663f42a201dd70df98f4da0fc" offset="0x0000"/>
12881388         </dataarea>
12891389      </part>
12901390   </software>
r32581r32582
12951395      <publisher>Parker Brothers</publisher>
12961396      <info name="serial" value="PB6320"/>
12971397      <part name="cart" interface="intv_cart">
1398         <feature name="slot" value="intv_rom" />
12981399         <dataarea name="5000" size="0x4000">
1299            <rom name="super cobra.50" size="0x4000" crc="7c32c9b8" sha1="9eced3a6d0ca3a303793d96050dbec2ab1f35df6" offset="0000"/>
1400            <rom name="super cobra.50" size="0x4000" crc="7c32c9b8" sha1="9eced3a6d0ca3a303793d96050dbec2ab1f35df6" offset="0x0000"/>
13001401         </dataarea>
13011402      </part>
13021403   </software>
r32581r32582
13071408      <publisher>INTV</publisher>
13081409      <info name="serial" value="9008"/>
13091410      <part name="cart" interface="intv_cart">
1411         <feature name="slot" value="intv_rom" />
13101412         <dataarea name="5000" size="0x4000">
1311            <rom name="super pro decathlon.50" size="0x4000" crc="f128951f" sha1="e8ab54118bebfeb0f9385c9ec200a4b95a9ad280" offset="0000"/>
1413            <rom name="super pro decathlon.50" size="0x4000" crc="f128951f" sha1="e8ab54118bebfeb0f9385c9ec200a4b95a9ad280" offset="0x0000"/>
13121414         </dataarea>
13131415         <dataarea name="9000" size="0x4000">
1314            <rom name="super pro decathlon.90" size="0x4000" crc="fd979dc9" sha1="b0529b35e78a945df2e874bebbe770e3929d2f97" offset="0000"/>
1416            <rom name="super pro decathlon.90" size="0x4000" crc="fd979dc9" sha1="b0529b35e78a945df2e874bebbe770e3929d2f97" offset="0x0000"/>
13151417         </dataarea>
13161418      </part>
13171419   </software>
r32581r32582
13221424      <publisher>INTV</publisher>
13231425      <info name="serial" value="8400"/>
13241426      <part name="cart" interface="intv_cart">
1427         <feature name="slot" value="intv_rom" />
13251428         <dataarea name="5000" size="0x4000">
1326            <rom name="super pro football.50" size="0x4000" crc="33f5103f" sha1="8322893973edbb4d9a231b5a8931914b72294d29" offset="0000"/>
1429            <rom name="super pro football.50" size="0x4000" crc="33f5103f" sha1="8322893973edbb4d9a231b5a8931914b72294d29" offset="0x0000"/>
13271430         </dataarea>
13281431         <dataarea name="9000" size="0x4000">
1329            <rom name="super pro football.90" size="0x4000" crc="c9227e76" sha1="dd85452f73f1d97c7871fd26eec334bc6cb1caa2" offset="0000"/>
1432            <rom name="super pro football.90" size="0x4000" crc="c9227e76" sha1="dd85452f73f1d97c7871fd26eec334bc6cb1caa2" offset="0x0000"/>
13301433         </dataarea>
13311434      </part>
13321435   </software>
r32581r32582
13381441      <info name="serial" value="720009"/>
13391442      <info name="usage" value="This cart has unique Left and Right overlays"/>
13401443      <part name="cart" interface="intv_cart">
1444         <feature name="slot" value="intv_rom" />
13411445         <dataarea name="5000" size="0x4000">
1342            <rom name="swords and serpents.50" size="0x4000" crc="15e88fce" sha1="6beb8682f75e2616009faeabc08e88871fc172bd" offset="0000"/>
1446            <rom name="swords and serpents.50" size="0x4000" crc="15e88fce" sha1="6beb8682f75e2616009faeabc08e88871fc172bd" offset="0x0000"/>
13431447         </dataarea>
13441448      </part>
13451449   </software>
r32581r32582
13501454      <publisher>Mattel Electronics</publisher>
13511455      <info name="serial" value="1814"/>
13521456      <part name="cart" interface="intv_cart">
1457         <feature name="slot" value="intv_rom" />
13531458         <dataarea name="5000" size="0x2000">
1354            <rom name="tennis.50" size="0x2000" crc="03e9e62e" sha1="e500b803cba6e73228a919fdedc109f0022cee3a" offset="0000"/>
1459            <rom name="tennis.50" size="0x2000" crc="03e9e62e" sha1="e500b803cba6e73228a919fdedc109f0022cee3a" offset="0x0000"/>
13551460         </dataarea>
13561461      </part>
13571462   </software>
r32581r32582
13621467      <publisher>INTV</publisher>
13631468      <info name="serial" value="8300"/>
13641469      <part name="cart" interface="intv_cart">
1470         <feature name="slot" value="intv_rom" />
13651471         <dataarea name="5000" size="0x4000">
1366            <rom name="thin ice.50" size="0x4000" crc="0d2e9e57" sha1="211c6012c7d1a1216282bead1b01c58101dd11be" offset="0000"/>
1472            <rom name="thin ice.50" size="0x4000" crc="0d2e9e57" sha1="211c6012c7d1a1216282bead1b01c58101dd11be" offset="0x0000"/>
13671473         </dataarea>
13681474         <dataarea name="D000" size="0x2000">
1369            <rom name="thin ice.d0" size="0x2000" crc="ab5d151b" sha1="807276b1180f8c90e10f5ba4c1a7cdec2b08e458" offset="0000"/>
1475            <rom name="thin ice.d0" size="0x2000" crc="ab5d151b" sha1="807276b1180f8c90e10f5ba4c1a7cdec2b08e458" offset="0x0000"/>
13701476         </dataarea>
13711477         <dataarea name="F000" size="0x2000">
1372            <rom name="thin ice.f0" size="0x2000" crc="bc59178e" sha1="72d7ccbc4e00becae6ad0887da76f583eafbb895" offset="0000"/>
1478            <rom name="thin ice.f0" size="0x2000" crc="bc59178e" sha1="72d7ccbc4e00becae6ad0887da76f583eafbb895" offset="0x0000"/>
13731479         </dataarea>
13741480      </part>
13751481   </software>
r32581r32582
13801486      <publisher>INTV</publisher>
13811487      <info name="serial" value="4469"/>
13821488      <part name="cart" interface="intv_cart">
1489         <feature name="slot" value="intv_rom" />
13831490         <dataarea name="5000" size="0x4000">
1384            <rom name="thunder castle.50" size="0x4000" crc="f77a5612" sha1="9a0b509b328aa0e9feff16cc0ce42150c8619e6c" offset="0000"/>
1491            <rom name="thunder castle.50" size="0x4000" crc="f77a5612" sha1="9a0b509b328aa0e9feff16cc0ce42150c8619e6c" offset="0x0000"/>
13851492         </dataarea>
13861493         <dataarea name="D000" size="0x2000">
1387            <rom name="thunder castle.d0" size="0x2000" crc="b2e18fed" sha1="2a6ba9e022bd5684eb7c2c38bdc267dee3e5b85a" offset="0000"/>
1494            <rom name="thunder castle.d0" size="0x2000" crc="b2e18fed" sha1="2a6ba9e022bd5684eb7c2c38bdc267dee3e5b85a" offset="0x0000"/>
13881495         </dataarea>
13891496         <dataarea name="F000" size="0x2000">
1390            <rom name="thunder castle.f0" size="0x2000" crc="f305da4e" sha1="9be241701112e5fe9a3cbec874e64826fd02e25c" offset="0000"/>
1497            <rom name="thunder castle.f0" size="0x2000" crc="f305da4e" sha1="9be241701112e5fe9a3cbec874e64826fd02e25c" offset="0x0000"/>
13911498         </dataarea>
13921499      </part>
13931500   </software>
r32581r32582
13981505      <publisher>INTV</publisher>
13991506      <info name="serial" value="8600"/>
14001507      <part name="cart" interface="intv_cart">
1508         <feature name="slot" value="intv_rom" />
14011509         <dataarea name="5000" size="0x4000">
1402            <rom name="tower of doom.50" size="0x4000" crc="fc49ce10" sha1="5de3bb1ec6f1a30d94b58abb3a594e3f6202e9f0" offset="0000"/>
1510            <rom name="tower of doom.50" size="0x4000" crc="fc49ce10" sha1="5de3bb1ec6f1a30d94b58abb3a594e3f6202e9f0" offset="0x0000"/>
14031511         </dataarea>
14041512         <dataarea name="9000" size="0x4000">
1405            <rom name="tower of doom.90" size="0x4000" crc="df232856" sha1="7a612c7316b6fa56171fcfc6243cae5b097429db" offset="0000"/>
1513            <rom name="tower of doom.90" size="0x4000" crc="df232856" sha1="7a612c7316b6fa56171fcfc6243cae5b097429db" offset="0x0000"/>
14061514         </dataarea>
14071515         <dataarea name="D000" size="0x2000">
1408            <rom name="tower of doom.d0" size="0x2000" crc="67a60cee" sha1="3b30d44d0b61bedb167f517440eb2662a2df69cf" offset="0000"/>
1516            <rom name="tower of doom.d0" size="0x2000" crc="67a60cee" sha1="3b30d44d0b61bedb167f517440eb2662a2df69cf" offset="0x0000"/>
14091517         </dataarea>
14101518         <dataarea name="F000" size="0x2000">
1411            <rom name="tower of doom.f0" size="0x2000" crc="f683cbe6" sha1="6bea72aab5398dd0cd5c13eab57fc2f9d23fb952" offset="0000"/>
1519            <rom name="tower of doom.f0" size="0x2000" crc="f683cbe6" sha1="6bea72aab5398dd0cd5c13eab57fc2f9d23fb952" offset="0x0000"/>
14121520         </dataarea>
14131521      </part>
14141522   </software>
r32581r32582
14191527      <publisher>Mattel Electronics</publisher>
14201528      <info name="serial" value="3760"/>
14211529      <part name="cart" interface="intv_cart">
1530         <feature name="slot" value="intv_rom" />
14221531         <dataarea name="5000" size="0x2000">
1423            <rom name="triple action.50" size="0x2000" crc="1ac989e2" sha1="6c1011b98ac76653632fd13e93466802f7d4dea9" offset="0000"/>
1532            <rom name="triple action.50" size="0x2000" crc="1ac989e2" sha1="6c1011b98ac76653632fd13e93466802f7d4dea9" offset="0x0000"/>
14241533         </dataarea>
14251534      </part>
14261535   </software>
r32581r32582
14311540      <publisher>INTV</publisher>
14321541      <info name="serial" value="8700"/>
14331542      <part name="cart" interface="intv_cart">
1543         <feature name="slot" value="intv_ram" />
14341544         <dataarea name="5000" size="0x4000">
1435            <rom name="triple challenge.50" size="0x4000" crc="29e67951" sha1="b843bda4e0be8e2a11e766961d4145e2e6d8c199" offset="0000"/>
1545            <rom name="triple challenge.50" size="0x4000" crc="29e67951" sha1="b843bda4e0be8e2a11e766961d4145e2e6d8c199" offset="0x0000"/>
14361546         </dataarea>
14371547         <dataarea name="9000" size="0x4000">
1438            <rom name="triple challenge.90" size="0x4000" crc="52ad0eda" sha1="cfe303f4942e8f1fe64510ac74839e47b5d2d8dc" offset="0000"/>
1548            <rom name="triple challenge.90" size="0x4000" crc="52ad0eda" sha1="cfe303f4942e8f1fe64510ac74839e47b5d2d8dc" offset="0x0000"/>
14391549         </dataarea>
1440         <dataarea name="D000_RAM8" size="0x400">
1550         <dataarea name="ram" size="0x400">
14411551         </dataarea>
14421552      </part>
14431553   </software>
r32581r32582
14481558      <publisher>Mattel Electronics</publisher>
14491559      <info name="serial" value="5391"/>
14501560      <part name="cart" interface="intv_cart">
1561         <feature name="slot" value="intv_rom" />
14511562         <dataarea name="5000" size="0x2000">
1452            <rom name="tron - deadly discs.50" size="0x2000" crc="ca447bbd" sha1="a84392c29a69a7bff5f1b521a0e836622405180a" offset="0000"/>
1563            <rom name="tron - deadly discs.50" size="0x2000" crc="ca447bbd" sha1="a84392c29a69a7bff5f1b521a0e836622405180a" offset="0x0000"/>
14531564         </dataarea>
14541565      </part>
14551566   </software>
r32581r32582
14601571      <publisher>Mattel Electronics</publisher>
14611572      <info name="serial" value="5392"/>
14621573      <part name="cart" interface="intv_cart">
1574         <feature name="slot" value="intv_rom" />
14631575         <dataarea name="5000" size="0x4000">
1464            <rom name="tron - maze-a-tron.50" size="0x4000" crc="7a558cf5" sha1="8d4eba89b8edb4c51ff0e2e4914e73f2a07bc9a6" offset="0000"/>
1576            <rom name="tron - maze-a-tron.50" size="0x4000" crc="7a558cf5" sha1="8d4eba89b8edb4c51ff0e2e4914e73f2a07bc9a6" offset="0x0000"/>
14651577         </dataarea>
14661578      </part>
14671579   </software>
r32581r32582
14731585      <info name="serial" value="5393"/>
14741586      <info name="usage" value="Uses Intellivoice"/>
14751587      <part name="cart" interface="intv_cart">
1588         <feature name="slot" value="intv_rom" />
14761589         <dataarea name="5000" size="0x4000">
1477            <rom name="tron - solar sailer.50" size="0x4000" crc="96b2681e" sha1="08880cf77ed6ab9a20b9a2161ac2bb998b42bc78" offset="0000"/>
1590            <rom name="tron - solar sailer.50" size="0x4000" crc="96b2681e" sha1="08880cf77ed6ab9a20b9a2161ac2bb998b42bc78" offset="0x0000"/>
14781591         </dataarea>
14791592         <dataarea name="D000" size="0x2000">
1480            <rom name="tron - solar sailer.d0" size="0x2000" crc="0e45e775" sha1="a6d317c3e342c53d6ddbbf7bd774a84a6b44dfb8" offset="0000"/>
1593            <rom name="tron - solar sailer.d0" size="0x2000" crc="0e45e775" sha1="a6d317c3e342c53d6ddbbf7bd774a84a6b44dfb8" offset="0x0000"/>
14811594         </dataarea>
14821595      </part>
14831596   </software>
r32581r32582
14881601      <publisher>Imagic</publisher>
14891602      <info name="serial" value="720017"/>
14901603      <part name="cart" interface="intv_cart">
1604         <feature name="slot" value="intv_rom" />
14911605         <dataarea name="5000" size="0x4000">
1492            <rom name="tropical trouble.50" size="0x4000" crc="6f23a741" sha1="63fadc61f9fe850bead7df76ed915ea00e569cb5" offset="0000"/>
1606            <rom name="tropical trouble.50" size="0x4000" crc="6f23a741" sha1="63fadc61f9fe850bead7df76ed915ea00e569cb5" offset="0x0000"/>
14931607         </dataarea>
14941608      </part>
14951609   </software>
r32581r32582
15001614      <publisher>Imagic</publisher>
15011615      <info name="serial" value="720023"/>
15021616      <part name="cart" interface="intv_cart">
1617         <feature name="slot" value="intv_rom" />
15031618         <dataarea name="5000" size="0x4000">
1504            <rom name="truckin.50" size="0x4000" crc="734f3260" sha1="b4ca75d4b6c4e937aa021e23e0fb98ef707705c7" offset="0000"/>
1619            <rom name="truckin.50" size="0x4000" crc="734f3260" sha1="b4ca75d4b6c4e937aa021e23e0fb98ef707705c7" offset="0x0000"/>
15051620         </dataarea>
15061621      </part>
15071622   </software>
r32581r32582
15121627      <publisher>Coleco</publisher>
15131628      <info name="serial" value="2473"/>
15141629      <part name="cart" interface="intv_cart">
1630         <feature name="slot" value="intv_rom" />
15151631         <dataarea name="5000" size="0x4000">
1516            <rom name="turbo.50" size="0x4000" crc="275f3512" sha1="23a4aafcbf5449ef0f8a684e2f87e85761e83af7" offset="0000"/>
1632            <rom name="turbo.50" size="0x4000" crc="275f3512" sha1="23a4aafcbf5449ef0f8a684e2f87e85761e83af7" offset="0x0000"/>
15171633         </dataarea>
15181634      </part>
15191635   </software>
r32581r32582
15241640      <publisher>Parker Brothers</publisher>
15251641      <info name="serial" value="PB6340"/>
15261642      <part name="cart" interface="intv_cart">
1643         <feature name="slot" value="intv_rom" />
15271644         <dataarea name="5000" size="0x4000">
1528            <rom name="tutankham.50" size="0x4000" crc="6fa698b3" sha1="12a96e4111082f1cf5bee27f850f28e20009681b" offset="0000"/>
1645            <rom name="tutankham.50" size="0x4000" crc="6fa698b3" sha1="12a96e4111082f1cf5bee27f850f28e20009681b" offset="0x0000"/>
15291646         </dataarea>
15301647      </part>
15311648   </software>
r32581r32582
15361653      <publisher>Mattel Electronics</publisher>
15371654      <info name="serial" value="5149"/>
15381655      <part name="cart" interface="intv_cart">
1656         <feature name="slot" value="intv_rom" />
15391657         <dataarea name="5000" size="0x2000">
1540            <rom name="utopia.50" size="0x2000" crc="f9e0789e" sha1="d72d2a9817e75039d57b1ec877dfe2b96a306b61" offset="0000"/>
1658            <rom name="utopia.50" size="0x2000" crc="f9e0789e" sha1="d72d2a9817e75039d57b1ec877dfe2b96a306b61" offset="0x0000"/>
15411659         </dataarea>
15421660      </part>
15431661   </software>
r32581r32582
15481666      <publisher>Mattel Electronics</publisher>
15491667      <info name="serial" value="5788"/>
15501668      <part name="cart" interface="intv_cart">
1669         <feature name="slot" value="intv_rom" />
15511670         <dataarea name="5000" size="0x4000">
1552            <rom name="vectron.50" size="0x4000" crc="9ac88229" sha1="937300637b3fba2126be4ee119b9f1e902b9f15b" offset="0000"/>
1671            <rom name="vectron.50" size="0x4000" crc="9ac88229" sha1="937300637b3fba2126be4ee119b9f1e902b9f15b" offset="0x0000"/>
15531672         </dataarea>
15541673         <dataarea name="D000" size="0x2000">
1555            <rom name="vectron.d0" size="0x2000" crc="eeaed70a" sha1="ef78c2159eb810853ba0e2c2bd0f27d15de8f7c3" offset="0000"/>
1674            <rom name="vectron.d0" size="0x2000" crc="eeaed70a" sha1="ef78c2159eb810853ba0e2c2bd0f27d15de8f7c3" offset="0x0000"/>
15561675         </dataarea>
15571676      </part>
15581677   </software>
r32581r32582
15641683      <info name="serial" value="2477"/>
15651684      <info name="usage" value="Will not run on Intellivision 2"/>
15661685      <part name="cart" interface="intv_cart">
1686         <feature name="slot" value="intv_rom" />
15671687         <dataarea name="5000" size="0x4000">
1568            <rom name="venture.50" size="0x4000" crc="6efa67b2" sha1="ec7c70dbec461c9ec5ce0d37290c5ed7116d537c" offset="0000"/>
1688            <rom name="venture.50" size="0x4000" crc="6efa67b2" sha1="ec7c70dbec461c9ec5ce0d37290c5ed7116d537c" offset="0x0000"/>
15691689         </dataarea>
15701690      </part>
15711691   </software>
r32581r32582
15761696      <publisher>Imagic</publisher>
15771697      <info name="serial" value="720024"/>
15781698      <part name="cart" interface="intv_cart">
1699         <feature name="slot" value="intv_rom" />
15791700         <dataarea name="5000" size="0x4000">
1580            <rom name="white water.50" size="0x4000" crc="f1ed7d27" sha1="b3c429b046a75384e02568708b7029e725073dc7" offset="0000"/>
1701            <rom name="white water.50" size="0x4000" crc="f1ed7d27" sha1="b3c429b046a75384e02568708b7029e725073dc7" offset="0x0000"/>
15811702         </dataarea>
15821703      </part>
15831704   </software>
r32581r32582
15881709      <publisher>INTV</publisher>
15891710      <info name="serial" value="8100"/>
15901711      <part name="cart" interface="intv_cart">
1712         <feature name="slot" value="intv_rom" />
15911713         <dataarea name="5000" size="0x4000">
1592            <rom name="world cup football.50" size="0x4000" crc="ec17636c" sha1="f96ce3b97e2250d5a37710c55f59e29319f2cf28" offset="0000"/>
1714            <rom name="world cup football.50" size="0x4000" crc="ec17636c" sha1="f96ce3b97e2250d5a37710c55f59e29319f2cf28" offset="0x0000"/>
15931715         </dataarea>
15941716         <dataarea name="D000" size="0x2000">
1595            <rom name="world cup football.d0" size="0x2000" crc="0d5be7c7" sha1="9a03652e525316ec9e889b0989d22a35fb6a8358" offset="0000"/>
1717            <rom name="world cup football.d0" size="0x2000" crc="0d5be7c7" sha1="9a03652e525316ec9e889b0989d22a35fb6a8358" offset="0x0000"/>
15961718         </dataarea>
15971719         <dataarea name="F000" size="0x2000">
1598            <rom name="world cup football.f0" size="0x2000" crc="4bb2b777" sha1="82ae81c3eb35e7e7e53c4f81a86bdf5ac3d925ff" offset="0000"/>
1720            <rom name="world cup football.f0" size="0x2000" crc="4bb2b777" sha1="82ae81c3eb35e7e7e53c4f81a86bdf5ac3d925ff" offset="0x0000"/>
15991721         </dataarea>
16001722      </part>
16011723   </software>
r32581r32582
16061728      <publisher>Activision</publisher>
16071729      <info name="serial" value="M-006-03"/>
16081730      <part name="cart" interface="intv_cart">
1731         <feature name="slot" value="intv_rom" />
16091732         <dataarea name="5000" size="0x2000">
1610            <rom name="worm whomper.50" size="0x2000" crc="24b667b9" sha1="e1f3c3aab41cb1850771cd566acd6fe4c1161041" offset="0000"/>
1733            <rom name="worm whomper.50" size="0x2000" crc="24b667b9" sha1="e1f3c3aab41cb1850771cd566acd6fe4c1161041" offset="0x0000"/>
16111734         </dataarea>
16121735      </part>
16131736   </software>
r32581r32582
16191742      <info name="serial" value="2487"/>
16201743      <info name="usage" value="Will not run on Intellivision 2"/>
16211744      <part name="cart" interface="intv_cart">
1745         <feature name="slot" value="intv_rom" />
16221746         <dataarea name="5000" size="0x4000">
1623            <rom name="zaxxon.50" size="0x4000" crc="15c65dc5" sha1="e46a7e8d118b33a0a17130cf27bc8a4b1d2f93e2" offset="0000"/>
1747            <rom name="zaxxon.50" size="0x4000" crc="15c65dc5" sha1="e46a7e8d118b33a0a17130cf27bc8a4b1d2f93e2" offset="0x0000"/>
16241748         </dataarea>
16251749      </part>
16261750   </software>
16271751
1752
1753
1754<!-- Expansions -->
1755
1756   <software name="voice">
1757      <description>Intellivoice</description>
1758      <year>19??</year>
1759      <publisher>Mattel</publisher>
1760      <part name="cart" interface="intv_cart">
1761         <feature name="slot" value="intv_voice" />
1762         <dataarea name="5000" size="0x4000">
1763         <!-- This should load the speech rom, but it is currently handled as device rom -->
1764         </dataarea>
1765      </part>
1766   </software>
1767
1768
1769   <software name="ecs">
1770      <description>Entertainment Computer System</description>
1771      <year>19??</year>
1772      <publisher>Mattel</publisher>
1773      <part name="cart" interface="intv_cart">
1774         <feature name="slot" value="intv_ecs" />
1775         <dataarea name="2000" size="0x2000">
1776            <rom name="ecs_rom.20" size="0x2000" crc="5f9d05e5" sha1="083a3e7405b8f8b4b8a5003ca9c31b8d824b535c" offset="0x0000" />
1777         </dataarea>
1778         <dataarea name="7000" size="0x2000">
1779            <rom name="ecs_rom.70" size="0x2000" crc="46bb1f48" sha1="eda44a8476fdada1ae90fba0d0287611e2efa074" offset="0x0000" />
1780         </dataarea>
1781         <dataarea name="E000" size="0x2000">
1782            <rom name="ecs_rom.e0" size="0x2000" crc="c2ebcd90" sha1="b3c14955f56c57e6f0d8fbb695771946cfcf6582" offset="0x0000" />
1783         </dataarea>
1784         <dataarea name="ram" size="0x800">
1785         </dataarea>
1786      </part>
1787   </software>
1788
1789
1790
16281791<!-- Unreleased / Prototypes / Homebrew -->
16291792
16301793   <software name="allstar">
r32581r32582
16321795      <year>1983</year>
16331796      <publisher>Mattel Electronics</publisher>
16341797      <part name="cart" interface="intv_cart">
1798         <feature name="slot" value="intv_rom" />
16351799         <dataarea name="5000" size="0x4000">
1636            <rom name="all star major league baseball.50" size="0x4000" crc="4a7e080a" sha1="ee2edd084c371d39dfcd725ed4aa5679e0c34a27" offset="0000"/>
1800            <rom name="all star major league baseball.50" size="0x4000" crc="4a7e080a" sha1="ee2edd084c371d39dfcd725ed4aa5679e0c34a27" offset="0x0000"/>
16371801         </dataarea>
16381802         <dataarea name="D000" size="0x2000">
1639            <rom name="all star major league baseball.d0" size="0x2000" crc="31325854" sha1="fe7b5f3969e214ac23d20c5c137dc23f4515108d" offset="0000"/>
1803            <rom name="all star major league baseball.d0" size="0x2000" crc="31325854" sha1="fe7b5f3969e214ac23d20c5c137dc23f4515108d" offset="0x0000"/>
16401804         </dataarea>
16411805      </part>
16421806   </software>
r32581r32582
16461810      <year>1982</year>
16471811      <publisher>Mattel Electronics</publisher>
16481812      <part name="cart" interface="intv_cart">
1813         <feature name="slot" value="intv_rom" />
16491814         <dataarea name="5000" size="0x2000">
1650            <rom name="air strike.50" size="0x2000" crc="2c668249" sha1="45d4cc27ccb966b007c3c2d32766f568f613319f" offset="0000"/>
1815            <rom name="air strike.50" size="0x2000" crc="2c668249" sha1="45d4cc27ccb966b007c3c2d32766f568f613319f" offset="0x0000"/>
16511816         </dataarea>
16521817      </part>
16531818   </software>
r32581r32582
16571822      <year>1981</year>
16581823      <publisher>Mattel Electronics</publisher>
16591824      <part name="cart" interface="intv_cart">
1825         <feature name="slot" value="intv_rom" />
16601826         <dataarea name="5000" size="0x2000">
1661            <rom name="brickout.50" size="0x2000" crc="9f85015b" sha1="12895e3e9ce094e393fe996383be1d48ba5be77f" offset="0000"/>
1827            <rom name="brickout.50" size="0x2000" crc="9f85015b" sha1="12895e3e9ce094e393fe996383be1d48ba5be77f" offset="0x0000"/>
16621828         </dataarea>
16631829      </part>
16641830   </software>
r32581r32582
16681834      <year>1983</year>
16691835      <publisher>Mattel Electronics</publisher>
16701836      <part name="cart" interface="intv_cart">
1837         <feature name="slot" value="intv_rom" />
16711838         <dataarea name="5000" size="0x4000">
1672            <rom name="choplifter.50" size="0x4000" crc="b05cd576" sha1="61205b84aa3673d7a50da4f92ed0ed78e34ac951" offset="0000"/>
1839            <rom name="choplifter.50" size="0x4000" crc="b05cd576" sha1="61205b84aa3673d7a50da4f92ed0ed78e34ac951" offset="0x0000"/>
16731840         </dataarea>
16741841         <dataarea name="D000" size="0x3000">
1675            <rom name="choplifter.d0" size="0x3000" crc="9b09666e" sha1="a024e5189e52ae07aa666fdcba612a6e9d7da4bc" offset="0000"/>
1842            <rom name="choplifter.d0" size="0x3000" crc="9b09666e" sha1="a024e5189e52ae07aa666fdcba612a6e9d7da4bc" offset="0x0000"/>
16761843         </dataarea>
16771844      </part>
16781845   </software>
r32581r32582
16821849      <year>1990</year>
16831850      <publisher>Mattel Electronics</publisher>
16841851      <part name="cart" interface="intv_cart">
1852         <feature name="slot" value="intv_rom" />
16851853         <dataarea name="5000" size="0x4000">
1686            <rom name="deep pockets - super pro pool and billiards.50" size="0x4000" crc="4f4fb03f" sha1="ce0bd5a79474dadf9f025edf121c466c2686ce75" offset="0000"/>
1854            <rom name="deep pockets - super pro pool and billiards.50" size="0x4000" crc="4f4fb03f" sha1="ce0bd5a79474dadf9f025edf121c466c2686ce75" offset="0x0000"/>
16871855         </dataarea>
16881856         <dataarea name="9000" size="0x4000">
1689            <rom name="deep pockets - super pro pool and billiards.90" size="0x4000" crc="233c364d" sha1="e87a81345822f3417830f181169970c9aefaf9e3" offset="0000"/>
1857            <rom name="deep pockets - super pro pool and billiards.90" size="0x4000" crc="233c364d" sha1="e87a81345822f3417830f181169970c9aefaf9e3" offset="0x0000"/>
16901858         </dataarea>
16911859      </part>
16921860   </software>
r32581r32582
16961864      <year>1983</year>
16971865      <publisher>Mattel Electronics</publisher>
16981866      <part name="cart" interface="intv_cart">
1867         <feature name="slot" value="intv_rom" />
16991868         <dataarea name="5000" size="0x4000">
1700            <rom name="go for the gold.50" size="0x4000" crc="dbca82c5" sha1="d68c49bdc62674f51fa26218a4e1422ec46bd41d" offset="0000"/>
1869            <rom name="go for the gold.50" size="0x4000" crc="dbca82c5" sha1="d68c49bdc62674f51fa26218a4e1422ec46bd41d" offset="0x0000"/>
17011870         </dataarea>
17021871      </part>
17031872   </software>
r32581r32582
17071876      <year>1982</year>
17081877      <publisher>Mattel Electronics</publisher>
17091878      <part name="cart" interface="intv_cart">
1879         <feature name="slot" value="intv_rom" />
17101880         <dataarea name="5000" size="0x2000">
1711            <rom name="grid shock.50" size="0x2000" crc="291ac826" sha1="b7a811a854dacd5e1b8e809baa5ce6ca1168ab53" offset="0000"/>
1881            <rom name="grid shock.50" size="0x2000" crc="291ac826" sha1="b7a811a854dacd5e1b8e809baa5ce6ca1168ab53" offset="0x0000"/>
17121882         </dataarea>
17131883      </part>
17141884   </software>
r32581r32582
17181888      <year>1981</year>
17191889      <publisher>Mattel Electronics</publisher>
17201890      <part name="cart" interface="intv_cart">
1891         <feature name="slot" value="intv_rom" />
17211892         <dataarea name="5000" size="0x2000">
1722            <rom name="happy holidays - easter eggcitement.50" size="0x2000" crc="20ace89d" sha1="b5d4e3b153a79fe34b07281a033e87445af6dbd0" offset="0000"/>
1893            <rom name="happy holidays - easter eggcitement.50" size="0x2000" crc="20ace89d" sha1="b5d4e3b153a79fe34b07281a033e87445af6dbd0" offset="0x0000"/>
17231894         </dataarea>
17241895      </part>
17251896   </software>
r32581r32582
17291900      <year>1983</year>
17301901      <publisher>Mattel Electronics</publisher>
17311902      <part name="cart" interface="intv_cart">
1903         <feature name="slot" value="intv_rom" />
17321904         <dataarea name="5000" size="0x2000">
1733            <rom name="happy holidays - santas helper.50" size="0x2000" crc="e221808c" sha1="58c55d4708155e687bf4d359a5a1a66ff97a7ca7" offset="0000"/>
1905            <rom name="happy holidays - santas helper.50" size="0x2000" crc="e221808c" sha1="58c55d4708155e687bf4d359a5a1a66ff97a7ca7" offset="0x0000"/>
17341906         </dataarea>
17351907      </part>
17361908   </software>
r32581r32582
17401912      <year>1981</year>
17411913      <publisher>Mattel Electronics</publisher>
17421914      <part name="cart" interface="intv_cart">
1915         <feature name="slot" value="intv_rom" />
17431916         <dataarea name="5000" size="0x2000">
1744            <rom name="happy holidays - trick or treat.50" size="0x2000" crc="4830f720" sha1="c94a09bd76b65366717c39cbf42c60afb34b37cc" offset="0000"/>
1917            <rom name="happy holidays - trick or treat.50" size="0x2000" crc="4830f720" sha1="c94a09bd76b65366717c39cbf42c60afb34b37cc" offset="0x0000"/>
17451918         </dataarea>
17461919      </part>
17471920   </software>
r32581r32582
17511924      <year>1981</year>
17521925      <publisher>Mattel Electronics</publisher>
17531926      <part name="cart" interface="intv_cart">
1927         <feature name="slot" value="intv_rom" />
17541928         <dataarea name="5000" size="0x2000">
1755            <rom name="hypnotic lights.50" size="0x2000" crc="a3147630" sha1="7aa48d1249d52a51223e99a98799b01f46cfc3d9" offset="0000"/>
1929            <rom name="hypnotic lights.50" size="0x2000" crc="a3147630" sha1="7aa48d1249d52a51223e99a98799b01f46cfc3d9" offset="0x0000"/>
17561930         </dataarea>
17571931      </part>
17581932   </software>
r32581r32582
17621936      <year>1982</year>
17631937      <publisher>Mattel Electronics</publisher>
17641938      <part name="cart" interface="intv_cart">
1939         <feature name="slot" value="intv_rom" />
17651940         <dataarea name="5000" size="0x4000">
1766            <rom name="king of the mountain.50" size="0x4000" crc="3b689be9" sha1="794f7fbf5592a1c4962264db3b21d543763462ad" offset="0000"/>
1941            <rom name="king of the mountain.50" size="0x4000" crc="3b689be9" sha1="794f7fbf5592a1c4962264db3b21d543763462ad" offset="0x0000"/>
17671942         </dataarea>
17681943         <dataarea name="D000" size="0x4000">
1769            <rom name="king of the mountain.d0" size="0x4000" crc="45e7021d" sha1="3e6c17470ce5a92b28fa476c94ae0b84ab01e9c2" offset="0000"/>
1944            <rom name="king of the mountain.d0" size="0x4000" crc="45e7021d" sha1="3e6c17470ce5a92b28fa476c94ae0b84ab01e9c2" offset="0x0000"/>
17701945         </dataarea>
17711946      </part>
17721947   </software>
r32581r32582
17761951      <year>1982</year>
17771952      <publisher>Mattel Electronics</publisher>
17781953      <part name="cart" interface="intv_cart">
1954         <feature name="slot" value="intv_ram" />
17791955         <dataarea name="5000" size="0x4000">
1780            <rom name="land battle.50" size="0x4000" crc="3825c25b" sha1="97073f31a8c9b5b04e773fcb145c4235a4712ff7" offset="0000"/>
1956            <rom name="land battle.50" size="0x4000" crc="3825c25b" sha1="97073f31a8c9b5b04e773fcb145c4235a4712ff7" offset="0x0000"/>
17811957         </dataarea>
1782         <dataarea name="D000_RAM8" size="0x800">
1958         <dataarea name="ram" size="0x800">
17831959         </dataarea>
17841960      </part>
17851961   </software>
r32581r32582
17891965      <year>1983</year>
17901966      <publisher>Activision</publisher>
17911967      <part name="cart" interface="intv_cart">
1968         <feature name="slot" value="intv_rom" />
17921969         <dataarea name="5000" size="0x4000">
1793            <rom name="league of light.50" size="0x4000" crc="b4287b95" sha1="ea729d124f02b87e3357ae62cce0f49242073141" offset="0000"/>
1970            <rom name="league of light.50" size="0x4000" crc="b4287b95" sha1="ea729d124f02b87e3357ae62cce0f49242073141" offset="0x0000"/>
17941971         </dataarea>
17951972      </part>
17961973   </software>
r32581r32582
18011978      <publisher>INTV</publisher>
18021979      <info name="usage" value="Uses Intellivoice"/>
18031980      <part name="cart" interface="intv_cart">
1981         <feature name="slot" value="intv_rom" />
18041982         <dataarea name="5000" size="0x4000">
1805            <rom name="magic carousel.50" size="0x4000" crc="a1b985d2" sha1="2fdeb148f4376f1fa8eeff3a887465dfd8ffbb7d" offset="0000"/>
1983            <rom name="magic carousel.50" size="0x4000" crc="a1b985d2" sha1="2fdeb148f4376f1fa8eeff3a887465dfd8ffbb7d" offset="0x0000"/>
18061984         </dataarea>
18071985         <dataarea name="D000" size="0x4000">
1808            <rom name="magic carousel.d0" size="0x4000" crc="86bc2541" sha1="997a9b9ecb88df4f90f1f8c3cbf817c057c4a933" offset="0000"/>
1986            <rom name="magic carousel.d0" size="0x4000" crc="86bc2541" sha1="997a9b9ecb88df4f90f1f8c3cbf817c057c4a933" offset="0x0000"/>
18091987         </dataarea>
18101988      </part>
18111989   </software>
r32581r32582
18151993      <year>1982</year>
18161994      <publisher>Mattel Electronics</publisher>
18171995      <part name="cart" interface="intv_cart">
1996         <feature name="slot" value="intv_rom" />
18181997         <dataarea name="5000" size="0x4000">
1819            <rom name="masters of the universe ii.50" size="0x4000" crc="bab638f2" sha1="a7ab293fc906d18db415f647634be2f2bed1e93a" offset="0000"/>
1998            <rom name="masters of the universe ii.50" size="0x4000" crc="bab638f2" sha1="a7ab293fc906d18db415f647634be2f2bed1e93a" offset="0x0000"/>
18201999         </dataarea>
18212000      </part>
18222001   </software>
r32581r32582
18262005      <year>1983</year>
18272006      <publisher>Mattel Electronics</publisher>
18282007      <part name="cart" interface="intv_cart">
2008         <feature name="slot" value="intv_rom" />
18292009         <dataarea name="5000" size="0x2000">
1830            <rom name="blowout.50" size="0x2000" crc="f98d2330" sha1="20db3279fb6b792799722e5157c20d5b5227e059" offset="0000"/>
2010            <rom name="blowout.50" size="0x2000" crc="f98d2330" sha1="20db3279fb6b792799722e5157c20d5b5227e059" offset="0x0000"/>
18312011         </dataarea>
18322012         <dataarea name="D000" size="0x2000">
1833            <rom name="blowout.d0" size="0x2000" crc="f257a189" sha1="3bfc013252af2b05c35be21b01ebaeadd5ce4d0b" offset="0000"/>
2013            <rom name="blowout.d0" size="0x2000" crc="f257a189" sha1="3bfc013252af2b05c35be21b01ebaeadd5ce4d0b" offset="0x0000"/>
18342014         </dataarea>
18352015      </part>
18362016   </software>
r32581r32582
18402020      <year>1983</year>
18412021      <publisher>Mattel Electronics</publisher>
18422022      <part name="cart" interface="intv_cart">
2023         <feature name="slot" value="intv_rom" />
18432024         <dataarea name="5000" size="0x4000">
1844            <rom name="hard hat.50" size="0x4000" crc="b6a3d4de" sha1="88c68c9766932df8ef11f5110881fa9b6954d965" offset="0000"/>
2025            <rom name="hard hat.50" size="0x4000" crc="b6a3d4de" sha1="88c68c9766932df8ef11f5110881fa9b6954d965" offset="0x0000"/>
18452026         </dataarea>
18462027      </part>
18472028   </software>
r32581r32582
18512032      <year>1983</year>
18522033      <publisher>Activision</publisher>
18532034      <part name="cart" interface="intv_cart">
2035         <feature name="slot" value="intv_rom" />
18542036         <dataarea name="5000" size="0x4000">
1855            <rom name="robot rubble.50" size="0x4000" crc="243b0812" sha1="d2d93bb89701906793a696b8b07a514fcff7428b" offset="0000"/>
2037            <rom name="robot rubble.50" size="0x4000" crc="243b0812" sha1="d2d93bb89701906793a696b8b07a514fcff7428b" offset="0x0000"/>
18562038         </dataarea>
18572039      </part>
18582040   </software>
r32581r32582
18622044      <year>1983</year>
18632045      <publisher>Mattel Electronics</publisher>
18642046      <part name="cart" interface="intv_cart">
2047         <feature name="slot" value="intv_rom" />
18652048         <dataarea name="5000" size="0x4000">
1866            <rom name="space cadet.50" size="0x4000" crc="f8ef3e5a" sha1="f3cfbe285a12194ef2f6087fc70d0ed887c4ec91" offset="0000"/>
2049            <rom name="space cadet.50" size="0x4000" crc="f8ef3e5a" sha1="f3cfbe285a12194ef2f6087fc70d0ed887c4ec91" offset="0x0000"/>
18672050         </dataarea>
18682051      </part>
18692052   </software>
r32581r32582
18732056      <year>1981</year>
18742057      <publisher>Mattel Electronics</publisher>
18752058      <part name="cart" interface="intv_cart">
2059         <feature name="slot" value="intv_rom" />
18762060         <dataarea name="5000" size="0x4000">
1877            <rom name="space shuttle.50" size="0x4000" crc="b16905d6" sha1="ec276c57a954c9bbe032ed166de660e77a7087be" offset="0000"/>
2061            <rom name="space shuttle.50" size="0x4000" crc="b16905d6" sha1="ec276c57a954c9bbe032ed166de660e77a7087be" offset="0x0000"/>
18782062         </dataarea>
18792063         <dataarea name="D000" size="0x4000">
1880            <rom name="space shuttle.d0" size="0x4000" crc="4b497d5e" sha1="1bc4d9af71b01cae44099297aeb0f00056463b03" offset="0000"/>
2064            <rom name="space shuttle.d0" size="0x4000" crc="4b497d5e" sha1="1bc4d9af71b01cae44099297aeb0f00056463b03" offset="0x0000"/>
18812065         </dataarea>
18822066      </part>
18832067   </software>
r32581r32582
18872071      <year>1983</year>
18882072      <publisher>Mattel Electronics</publisher>
18892073      <part name="cart" interface="intv_cart">
2074         <feature name="slot" value="intv_rom" />
18902075         <dataarea name="5000" size="0x4000">
1891            <rom name="super soccer.50" size="0x4000" crc="02a2fb6c" sha1="b7f75755f019f5f89f99942924bc22bb2c78bd1e" offset="0000"/>
2076            <rom name="super soccer.50" size="0x4000" crc="02a2fb6c" sha1="b7f75755f019f5f89f99942924bc22bb2c78bd1e" offset="0x0000"/>
18922077         </dataarea>
18932078         <dataarea name="D000" size="0x2000">
1894            <rom name="super soccer.d0" size="0x2000" crc="fd061aff" sha1="2425e6bb365d3d617e80e29580f098eeb5af779b" offset="0000"/>
2079            <rom name="super soccer.d0" size="0x2000" crc="fd061aff" sha1="2425e6bb365d3d617e80e29580f098eeb5af779b" offset="0x0000"/>
18952080         </dataarea>
18962081         <dataarea name="F000" size="0x2000">
1897            <rom name="super soccer.f0" size="0x2000" crc="3348dc4b" sha1="c723206a8f5b8e445b7ca45ad4bf05d1b36a5ab9" offset="0000"/>
2082            <rom name="super soccer.f0" size="0x2000" crc="3348dc4b" sha1="c723206a8f5b8e445b7ca45ad4bf05d1b36a5ab9" offset="0x0000"/>
18982083         </dataarea>
18992084      </part>
19002085   </software>
r32581r32582
19042089      <year>1982</year>
19052090      <publisher>Mattel Electronics</publisher>
19062091      <part name="cart" interface="intv_cart">
2092         <feature name="slot" value="intv_rom" />
19072093         <dataarea name="5000" size="0x2000">
1908            <rom name="takeover.50" size="0x2000" crc="1f584a69" sha1="47057bd3811689692ac9ef3deed7248e01a5f4f5" offset="0000"/>
2094            <rom name="takeover.50" size="0x2000" crc="1f584a69" sha1="47057bd3811689692ac9ef3deed7248e01a5f4f5" offset="0x0000"/>
19092095         </dataarea>
19102096      </part>
19112097   </software>
r32581r32582
19152101      <year>1978</year>
19162102      <publisher>Mattel Electronics</publisher>
19172103      <part name="cart" interface="intv_cart">
2104         <feature name="slot" value="intv_rom" />
19182105         <dataarea name="7000" size="0x2000">
1919            <rom name="imi test cart.70" size="0x2000" crc="7217ca7b" sha1="2ca1ef7426e62c50dfd5b375428cf09e76600944" offset="0000"/>
2106            <rom name="imi test cart.70" size="0x2000" crc="7217ca7b" sha1="2ca1ef7426e62c50dfd5b375428cf09e76600944" offset="0x0000"/>
19202107         </dataarea>
19212108      </part>
19222109   </software>
r32581r32582
19262113      <year>1978</year>
19272114      <publisher>Mattel Electronics</publisher>
19282115      <part name="cart" interface="intv_cart">
2116         <feature name="slot" value="intv_rom" />
19292117         <dataarea name="5000" size="0x2000">
1930            <rom name="mte-201.50" size="0x2000" crc="dab36628" sha1="5e83a945f231f55d5ddfa9527f9b94da06e77058" offset="0000"/>
2118            <rom name="mte-201.50" size="0x2000" crc="dab36628" sha1="5e83a945f231f55d5ddfa9527f9b94da06e77058" offset="0x0000"/>
19312119         </dataarea>
19322120         <dataarea name="7000" size="0x2000">
1933            <rom name="mte-201.70" size="0x2000" crc="5f0d7486" sha1="f4174fdbcd4639bc7356f93552dda913d86e18ac" offset="0000"/>
2121            <rom name="mte-201.70" size="0x2000" crc="5f0d7486" sha1="f4174fdbcd4639bc7356f93552dda913d86e18ac" offset="0x0000"/>
19342122         </dataarea>
19352123      </part>
19362124   </software>
r32581r32582
19412129      <publisher>IntelligentVision</publisher>
19422130      <info name="serial" value="9111"/>
19432131      <part name="cart" interface="intv_cart">
2132         <feature name="slot" value="intv_rom" />
19442133         <dataarea name="5000" size="0x4000">
1945            <rom name="4-tris.50" size="0x4000" crc="b91488e2" sha1="d3d1ea456991a5dd71804f62f59e88debd9cd86f" offset="0000"/>
2134            <rom name="4-tris.50" size="0x4000" crc="b91488e2" sha1="d3d1ea456991a5dd71804f62f59e88debd9cd86f" offset="0x0000"/>
19462135         </dataarea>
19472136      </part>
19482137   </software>
r32581r32582
19532142      <publisher>IntelligentVision</publisher>
19542143      <info name="serial" value="9113"/>
19552144      <part name="cart" interface="intv_cart">
2145         <feature name="slot" value="intv_rom" />
19562146         <dataarea name="5000" size="0x4000">
1957            <rom name="minehunter.50" size="0x4000" crc="a9f1d874" sha1="4bbac2b5264f4d357e7223b2373b078c622c08a9" offset="0000"/>
2147            <rom name="minehunter.50" size="0x4000" crc="a9f1d874" sha1="4bbac2b5264f4d357e7223b2373b078c622c08a9" offset="0x0000"/>
19582148         </dataarea>
19592149      </part>
19602150   </software>
r32581r32582
19652155      <publisher>IntelligentVision</publisher>
19662156      <info name="serial" value="9114"/>
19672157      <part name="cart" interface="intv_cart">
2158         <feature name="slot" value="intv_rom" />
19682159         <dataarea name="5000" size="0x4000">
1969            <rom name="samegame and robots.50" size="0x4000" crc="9092f2e6" sha1="0c29a0b4de011874f27c517f1f9ef16b16fdb4fc" offset="0000"/>
2160            <rom name="samegame and robots.50" size="0x4000" crc="9092f2e6" sha1="0c29a0b4de011874f27c517f1f9ef16b16fdb4fc" offset="0x0000"/>
19702161         </dataarea>
19712162         <dataarea name="D000" size="0x2000">
1972            <rom name="samegame and robots.d0" size="0x2000" crc="675698d3" sha1="dbcc9090a3614a86dfa9747079857fe6e0c65b97" offset="0000"/>
2163            <rom name="samegame and robots.d0" size="0x2000" crc="675698d3" sha1="dbcc9090a3614a86dfa9747079857fe6e0c65b97" offset="0x0000"/>
19732164         </dataarea>
19742165         <dataarea name="F000" size="0x2000">
1975            <rom name="samegame and robots.f0" size="0x2000" crc="1a198ae9" sha1="8553cdaae55e2c0d579a0f06f857c79323d7efb6" offset="0000"/>
2166            <rom name="samegame and robots.f0" size="0x2000" crc="1a198ae9" sha1="8553cdaae55e2c0d579a0f06f857c79323d7efb6" offset="0x0000"/>
19762167         </dataarea>
19772168      </part>
19782169   </software>
r32581r32582
19832174      <publisher>IntelligentVision</publisher>
19842175      <info name="serial" value="9112"/>
19852176      <part name="cart" interface="intv_cart">
2177         <feature name="slot" value="intv_rom" />
19862178         <dataarea name="5000" size="0x4000">
1987            <rom name="stonix.50" size="0x4000" crc="9af3ca58" sha1="46302bcdc15afc28968649cbdeb804e0190c251e" offset="0000"/>
2179            <rom name="stonix.50" size="0x4000" crc="9af3ca58" sha1="46302bcdc15afc28968649cbdeb804e0190c251e" offset="0x0000"/>
19882180         </dataarea>
19892181         <dataarea name="D000" size="0x2000">
1990            <rom name="stonix.d0" size="0x2000" crc="9c5c4301" sha1="3eb7cb8a62080ff8ac2ac83c888cf5155a97d991" offset="0000"/>
2182            <rom name="stonix.d0" size="0x2000" crc="9c5c4301" sha1="3eb7cb8a62080ff8ac2ac83c888cf5155a97d991" offset="0x0000"/>
19912183         </dataarea>
19922184         <dataarea name="F000" size="0x2000">
1993            <rom name="stonix.f0" size="0x2000" crc="baea7cb2" sha1="83a49852a6612be840e8ae75302784b99251946f" offset="0000"/>
2185            <rom name="stonix.f0" size="0x2000" crc="baea7cb2" sha1="83a49852a6612be840e8ae75302784b99251946f" offset="0x0000"/>
19942186         </dataarea>
19952187      </part>
19962188   </software>
1997</softwarelist>
No newline at end of file
2189</softwarelist>
trunk/hash/intvecs.xml
r32581r32582
1111      <info name="serial" value="4543"/>
1212      <info name="usage" value="Requires ECS and Keyboard"/>
1313      <part name="cart" interface="intv_cart">
14         <feature name="slot" value="intv_rom" />
1415         <dataarea name="5000" size="0x4000">
15            <rom name="jetsons ways with words.50" size="0x4000" crc="3fc55c1e" sha1="35b92617f6ff725e1b7f5d255c21a4e7fa8a3bc7" offset="0000"/>
16            <rom name="jetsons ways with words.50" size="0x4000" crc="3fc55c1e" sha1="35b92617f6ff725e1b7f5d255c21a4e7fa8a3bc7" offset="0x0000"/>
1617         </dataarea>
1718         <dataarea name="D000" size="0x2000">
18            <rom name="jetsons ways with words.d0" size="0x2000" crc="e089cb46" sha1="275ac1f258aaa611163398d9b95a84bad69cd1ae" offset="0000"/>
19            <rom name="jetsons ways with words.d0" size="0x2000" crc="e089cb46" sha1="275ac1f258aaa611163398d9b95a84bad69cd1ae" offset="0x0000"/>
1920         </dataarea>
2021      </part>
2122   </software>
r32581r32582
2728      <info name="serial" value="4540"/>
2829      <info name="usage" value="Requires ECS and Music Synthesizer"/>
2930      <part name="cart" interface="intv_cart">
31         <feature name="slot" value="intv_rom" />
3032         <dataarea name="5000" size="0x4000">
31            <rom name="melody blaster.50" size="0x4000" crc="52b96271" sha1="0a1557a2d5720b7116fab60d7ab528189a23be03" offset="0000"/>
33            <rom name="melody blaster.50" size="0x4000" crc="52b96271" sha1="0a1557a2d5720b7116fab60d7ab528189a23be03" offset="0x0000"/>
3234         </dataarea>
3335         <dataarea name="D000" size="0x2000">
34            <rom name="melody blaster.d0" size="0x2000" crc="7be551d9" sha1="ff2280d8894b996f6561e75544b62ec81b195e65" offset="0000"/>
36            <rom name="melody blaster.d0" size="0x2000" crc="7be551d9" sha1="ff2280d8894b996f6561e75544b62ec81b195e65" offset="0x0000"/>
3537         </dataarea>
3638      </part>
3739   </software>
r32581r32582
4345      <info name="serial" value="4531"/>
4446      <info name="usage" value="Requires ECS and Keyboard"/>
4547      <part name="cart" interface="intv_cart">
48         <feature name="slot" value="intv_rom" />
4649         <dataarea name="5000" size="0x4000">
47            <rom name="mind strike.50" size="0x4000" crc="604ba84a" sha1="b3e84a8decdf0cc6fe6471671c256a18dc61f34a" offset="0000"/>
50            <rom name="mind strike.50" size="0x4000" crc="604ba84a" sha1="b3e84a8decdf0cc6fe6471671c256a18dc61f34a" offset="0x0000"/>
4851         </dataarea>
4952         <dataarea name="D000" size="0x2000">
50            <rom name="mind strike.d0" size="0x2000" crc="297717bd" sha1="e38fd12edffe278a283e08b42965fab6fd65b03d" offset="0000"/>
53            <rom name="mind strike.d0" size="0x2000" crc="297717bd" sha1="e38fd12edffe278a283e08b42965fab6fd65b03d" offset="0x0000"/>
5154         </dataarea>
5255      </part>
5356   </software>
r32581r32582
5962      <info name="serial" value="4536"/>
6063      <info name="usage" value="Requires ECS and Keyboard"/>
6164      <part name="cart" interface="intv_cart">
65         <feature name="slot" value="intv_rom" />
6266         <dataarea name="5000" size="0x4000">
63            <rom name="mr basic meets bits n bytes.50" size="0x4000" crc="b11a5c27" sha1="66dc40f0cf3d6326452620912ac6aec0f21a0484" offset="0000"/>
67            <rom name="mr basic meets bits n bytes.50" size="0x4000" crc="b11a5c27" sha1="66dc40f0cf3d6326452620912ac6aec0f21a0484" offset="0x0000"/>
6468         </dataarea>
6569         <dataarea name="D000" size="0x2000">
66            <rom name="mr basic meets bits n bytes.d0" size="0x2000" crc="e6f08b02" sha1="b879b3ee76315b5369593cf142da6dab8eaebf71" offset="0000"/>
70            <rom name="mr basic meets bits n bytes.d0" size="0x2000" crc="e6f08b02" sha1="b879b3ee76315b5369593cf142da6dab8eaebf71" offset="0x0000"/>
6771         </dataarea>
6872      </part>
6973   </software>
r32581r32582
7579      <info name="serial" value="4533"/>
7680      <info name="usage" value="Requires ECS and Keyboard"/>
7781      <part name="cart" interface="intv_cart">
82         <feature name="slot" value="intv_rom" />
7883         <dataarea name="5000" size="0x4000">
79            <rom name="scooby doo maze chase.50" size="0x4000" crc="e9e3f60d" sha1="4e8b7c7308162f58d36b4afe748a408f8e40c63b" offset="0000"/>
84            <rom name="scooby doo maze chase.50" size="0x4000" crc="e9e3f60d" sha1="4e8b7c7308162f58d36b4afe748a408f8e40c63b" offset="0x0000"/>
8085         </dataarea>
8186      </part>
8287   </software>
r32581r32582
8893      <info name="serial" value="4537"/>
8994      <info name="usage" value="Requires ECS and Intellivoice"/>
9095      <part name="cart" interface="intv_cart">
96         <feature name="slot" value="intv_wsmlb" />
9197         <dataarea name="5000" size="0x4000">
92            <rom name="world series major league baseball.50" size="0x4000" crc="cc7ffde7" sha1="926971342db595baab8c352b6179935774ccbcdb" offset="0000"/>
98            <rom name="world series major league baseball.50" size="0x4000" crc="cc7ffde7" sha1="926971342db595baab8c352b6179935774ccbcdb" offset="0x0000"/>
9399         </dataarea>
94100         <dataarea name="D000" size="0x4000">
95            <rom name="world series major league baseball.d0" size="0x4000" crc="839fa5c7" sha1="1ef12665079d1ce50bd2419b668344a08c9a872f" offset="0000"/>
101            <rom name="world series major league baseball.d0" size="0x4000" crc="839fa5c7" sha1="1ef12665079d1ce50bd2419b668344a08c9a872f" offset="0x0000"/>
96102         </dataarea>
97         <dataarea name="F000" size="0x2000">
98            <rom name="world series major league baseball (page 0).f0" size="0x2000" crc="a0f2fe49" sha1="fab397b49c5a7db53a501caea42fce169da5a31a" offset="0000"/>
103            <!-- two ROM pages -->
104         <dataarea name="F000" size="0x4000">
105            <rom name="world series major league baseball (page 0).f0" size="0x2000" crc="a0f2fe49" sha1="fab397b49c5a7db53a501caea42fce169da5a31a" offset="0x0000"/>
106            <rom name="world series major league baseball (page 1).f0" size="0x2000" crc="94d6b056" sha1="df2a8c950dd1c398db901a624c04322d2b4f2782" offset="0x2000"/>
99107         </dataarea>
100         <dataarea name="F000_bank1" size="0x2000">
101            <rom name="world series major league baseball (page 1).f0" size="0x2000" crc="94d6b056" sha1="df2a8c950dd1c398db901a624c04322d2b4f2782" offset="0000"/>
102         </dataarea>
103108      </part>
104109   </software>
105110
r32581r32582
109114      <publisher>Mattel Electronics</publisher>
110115      <info name="usage" value="Requires ECS and Keyboard"/>
111116      <part name="cart" interface="intv_cart">
117         <feature name="slot" value="intv_gfact" />
112118         <dataarea name="5000" size="0x4000">
113            <rom name="game factory.50" size="0x4000" crc="0838f681" sha1="f15230e32f4ee7e6371d8c4e214b8562044cfebf" offset="0000"/>
119            <rom name="game factory.50" size="0x4000" crc="0838f681" sha1="f15230e32f4ee7e6371d8c4e214b8562044cfebf" offset="0x0000"/>
114120         </dataarea>
115121         <dataarea name="9000" size="0x4000">
116            <rom name="game factory.90" size="0x4000" crc="5e491625" sha1="464798a8fefb6bf6e91f81ff6fd6caed4cfa002e" offset="0000"/>
122            <rom name="game factory.90" size="0x4000" crc="5e491625" sha1="464798a8fefb6bf6e91f81ff6fd6caed4cfa002e" offset="0x0000"/>
117123         </dataarea>
118124         <dataarea name="D000" size="0x2000">
119            <rom name="game factory.d0" size="0x2000" crc="71f48e85" sha1="3a8327cf2aee60a5ad98bf124784b50a8aff2fab" offset="0000"/>
125            <rom name="game factory.d0" size="0x2000" crc="71f48e85" sha1="3a8327cf2aee60a5ad98bf124784b50a8aff2fab" offset="0x0000"/>
120126         </dataarea>
121127         <dataarea name="F000" size="0x2000">
122            <rom name="game factory.f0" size="0x2000" crc="7a8585e8" sha1="691ece0f6426ea5ada71f8615ca6eed24bef4578" offset="0000"/>
128            <rom name="game factory.f0" size="0x2000" crc="7a8585e8" sha1="691ece0f6426ea5ada71f8615ca6eed24bef4578" offset="0x0000"/>
123129         </dataarea>
124         <dataarea name="8800_RAM8" size="0x800">
130         <dataarea name="ram" size="0x800">
125131         </dataarea>
126132      </part>
127133   </software>
r32581r32582
132138      <publisher>Mattel Electronics</publisher>
133139      <info name="usage" value="Requires ECS and Keyboard"/>
134140      <part name="cart" interface="intv_cart">
141         <feature name="slot" value="intv_rom" />
135142         <dataarea name="5000" size="0x4000">
136            <rom name="number jumble.50" size="0x4000" crc="56ac640c" sha1="4cd87295b6c473a6d48b836c11e29169a2a28d11" offset="0000"/>
143            <rom name="number jumble.50" size="0x4000" crc="56ac640c" sha1="4cd87295b6c473a6d48b836c11e29169a2a28d11" offset="0x0000"/>
137144         </dataarea>
138145         <dataarea name="D000" size="0x2000">
139            <rom name="number jumble.d0" size="0x2000" crc="2be04ed6" sha1="d86953713d178c287f502955458f9943d1dfe0a1" offset="0000"/>
146            <rom name="number jumble.d0" size="0x2000" crc="2be04ed6" sha1="d86953713d178c287f502955458f9943d1dfe0a1" offset="0x0000"/>
140147         </dataarea>
141148         <dataarea name="F000" size="0x2000">
142            <rom name="number jumble.f0" size="0x2000" crc="c5dac500" sha1="ff4a42b95f99f02cabcf8018b55f4d113404833a" offset="0000"/>
149            <rom name="number jumble.f0" size="0x2000" crc="c5dac500" sha1="ff4a42b95f99f02cabcf8018b55f4d113404833a" offset="0x0000"/>
143150         </dataarea>
144151      </part>
145152   </software>
trunk/src/mess/drivers/intv.c
r32581r32582
5252#include "cpu/m6502/m6502.h"
5353#include "cpu/cp1610/cp1610.h"
5454#include "includes/intv.h"
55#include "imagedev/cartslot.h"
5655#include "sound/ay8910.h"
5756
5857#ifndef VERBOSE
r32581r32582
136135
137136static INPUT_PORTS_START( intv )
138137
139   PORT_START("KEYPAD1")   /* Left Player Controller Starts Here */
138   /* Left Player Controller */
139   PORT_START("KEYPAD1")
140140   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Left/1") PORT_CODE(KEYCODE_1_PAD)
141141   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Left/2") PORT_CODE(KEYCODE_2_PAD)
142142   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Left/3") PORT_CODE(KEYCODE_3_PAD)
r32581r32582
178178   PORT_START("DISCY1")
179179   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_Y ) PORT_NAME("Left/Y") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_CODE_DEC(KEYCODE_UP) PORT_CODE_INC(KEYCODE_DOWN) PORT_PLAYER(1) PORT_CONDITION("OPTIONS",0x01,EQUALS,0x01)
180180
181   PORT_START("KEYPAD2")   /* Right Player Controller Starts Here */
181   /* Right Player Controller */
182   PORT_START("KEYPAD2")
182183   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Right/1")
183184   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Right/2")
184185   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Right/3")
r32581r32582
229230   PORT_CONFSETTING(    0x02, "Analog" )
230231INPUT_PORTS_END
231232
232static INPUT_PORTS_START( intv_ecs_kbd )
233/*
234ECS matrix scanned by setting 0xFE bits to output and reading 0xFF
235ECS Keyboard Layout:
236 FF\FE  Bit 7   Bit 6   Bit 5   Bit 4   Bit 3   Bit 2   Bit 1   Bit 0
237 Bit 0  NC      RTN     0       ESC     P       ;       .       (left)
238 Bit 1  L       O       8       9       I       K       M       ,
239 Bit 2  J       U       6       7       Y       H       B       N
240 Bit 3  G       T       4       5       R       F       C       V
241 Bit 4  D       E       2       3       W       S       Z       X
242 Bit 5  A       CTL     (right) 1       Q       (up)    (down)  (space)
243 Bit 6  SHIFT   NC      NC      NC      NC      NC      NC      NC
244233
245Shifted keys that differ from pc:
246Key        : 1 2 5 6 7 (left) (right) (up) (down)
247Shift + key: = " + - /  %      '       ^    ?
248*/
249
250   PORT_START("ECS_ROW0")
251   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
252   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RTN")               PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
253   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)           PORT_CHAR('0') PORT_CHAR(')') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
254   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)     PORT_CHAR(UCHAR_MAMEKEY(ESC)) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
255   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)           PORT_CHAR('P') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
256   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)   PORT_CHAR(';') PORT_CHAR(':') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
257   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)        PORT_CHAR('.') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
258   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT)        PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR('%') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
259
260   PORT_START("ECS_ROW1")
261   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)           PORT_CHAR('L') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
262   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)           PORT_CHAR('O') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
263   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)           PORT_CHAR('8') PORT_CHAR('*') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
264   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)           PORT_CHAR('9') PORT_CHAR('(') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
265   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)           PORT_CHAR('I') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
266   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)           PORT_CHAR('K') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
267   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)           PORT_CHAR('M') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
268   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)   PORT_CHAR(',') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
269
270   PORT_START("ECS_ROW2")
271   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)           PORT_CHAR('J') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
272   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)           PORT_CHAR('U') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
273   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)           PORT_CHAR('6') PORT_CHAR('-') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
274   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)           PORT_CHAR('7') PORT_CHAR('/') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
275   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)           PORT_CHAR('Y') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
276   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)           PORT_CHAR('H') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
277   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)           PORT_CHAR('B') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
278   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)           PORT_CHAR('N') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
279
280   PORT_START("ECS_ROW3")
281   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)           PORT_CHAR('G') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
282   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)           PORT_CHAR('T') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
283   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)           PORT_CHAR('4') PORT_CHAR('$') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
284   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)           PORT_CHAR('5') PORT_CHAR('%') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
285   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)           PORT_CHAR('R') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
286   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)           PORT_CHAR('F') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
287   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)           PORT_CHAR('C') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
288   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)           PORT_CHAR('V') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
289
290   PORT_START("ECS_ROW4")
291   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)           PORT_CHAR('D') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
292   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)           PORT_CHAR('E') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
293   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)           PORT_CHAR('2') PORT_CHAR('"') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
294   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)           PORT_CHAR('3') PORT_CHAR('#') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
295   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)           PORT_CHAR('W') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
296   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)           PORT_CHAR('S') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
297   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)           PORT_CHAR('Z') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
298   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)           PORT_CHAR('X') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
299
300   PORT_START("ECS_ROW5")
301   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)           PORT_CHAR('A') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
302   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTL") PORT_CODE(KEYCODE_RCONTROL) PORT_CODE(KEYCODE_LCONTROL) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
303   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT)   PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR('\'') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
304   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)           PORT_CHAR('1') PORT_CHAR('=') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
305   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)           PORT_CHAR('Q') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
306   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP)      PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHAR('^') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
307   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN)        PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR('?') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
308   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)   PORT_CHAR(' ') PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
309
310   PORT_START("ECS_ROW6")
311   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)  PORT_CHAR(UCHAR_SHIFT_1) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x02)
312   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
313   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
314   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
315   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
316   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
317   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
318   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
319INPUT_PORTS_END
320
321static INPUT_PORTS_START( intv_ecs_synth )
322234/*
323ECS Synthesizer Layout:
324 FF\FE  Bit 7   Bit 6   Bit 5   Bit 4   Bit 3   Bit 2   Bit 1   Bit 0
325 Bit 0  G2      Gb2     F2      E2      Eb2     D2      Db2     C2
326 Bit 1  Eb3     D3      Db3     C3      B2      Bb2     A2      Ab2
327 Bit 2  B3      Bb3     A3      Ab3     G3      Gb3     F3      E3
328 Bit 3  G4      Gb4     F4      E4      Eb4     D4      Db4     C4
329 Bit 4  Eb5     D5      Db5     C5      B4      Bb4     A4      Ab4
330 Bit 5  B5      Bb5     A5      Ab5     G5      Gb5     F5      E5
331 Bit 6  C6      NC      NC      NC      NC      NC      NC      NC
332*/
333   PORT_START("ECS_SYNTH_ROW0")
334   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
335   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
336   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
337   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
338   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
339   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
340   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
341   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
342
343   PORT_START("ECS_SYNTH_ROW1")
344   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
345   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
346   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
347   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
348   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
349   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
350   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
351   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab2")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
352
353   PORT_START("ECS_SYNTH_ROW2")
354   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
355   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
356   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
357   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
358   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
359   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
360   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
361   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E3")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
362
363   PORT_START("ECS_SYNTH_ROW3")
364   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
365   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
366   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
367   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
368   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
369   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
370   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
371   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
372
373   PORT_START("ECS_SYNTH_ROW4")
374   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
375   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
376   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
377   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
378   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
379   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
380   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
381   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab4")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
382
383   PORT_START("ECS_SYNTH_ROW5")
384   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
385   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
386   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
387   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
388   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
389   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
390   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
391   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E5")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
392
393   PORT_START("ECS_SYNTH_ROW6")
394   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C6")  PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x01)
395   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
396   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
397   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
398   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
399   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
400   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
401   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
402INPUT_PORTS_END
403
404static INPUT_PORTS_START( intv_ecs_pads )
405// First ECS Hand Controller
406   PORT_START("KEYPAD3")
407   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/1") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
408   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/2") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
409   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/3") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
410   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/4") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
411   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/5") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
412   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/6") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
413   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/7") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
414   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/8") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
415   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/9") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
416   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/Clear") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
417   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/0") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
418   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/Enter") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
419   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P3/Upper") PORT_PLAYER(3) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
420   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P3/Lower-Left") PORT_PLAYER(3) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
421   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P3/Lower-Right") PORT_PLAYER(3) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
422   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
423
424   PORT_START("DISC3")
425   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("P3/Up") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
426   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Up-Up-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
427   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
428   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Right-Up-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
429   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P3/Right") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
430   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Right-Down-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
431   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
432   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Down-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
433   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("P3/Down") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
434   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Down-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
435   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
436   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Left-Down-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
437   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("P3/Left") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
438   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Left-Up-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
439   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Up-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
440   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Up-Up-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
441
442   PORT_START("DISCX3")
443   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_X ) PORT_NAME("P3/X") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x04) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
444
445   PORT_START("DISCY3")
446   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_Y ) PORT_NAME("P3/Y") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x04) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
447
448// Second ECS Hand Controller
449   PORT_START("KEYPAD4")
450   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/1") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
451   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/2") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
452   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/3") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
453   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/4") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
454   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/5") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
455   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/6") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
456   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/7") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
457   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/8") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
458   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/9") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
459   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/Clear") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
460   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/0") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
461   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/Enter") PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
462   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P4/Upper") PORT_PLAYER(4) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
463   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P4/Lower-Left") PORT_PLAYER(4) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
464   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P4/Lower-Right") PORT_PLAYER(4) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
465   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
466
467   PORT_START("DISC4")
468   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("P4/Up") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
469   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Up-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
470   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
471   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Right-Up-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
472   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P4/Right") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
473   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Right-Down-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
474   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
475   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Down-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
476   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("P4/Down") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
477   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Down-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
478   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
479   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Left-Down-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
480   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("P4/Left") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
481   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Left-Up-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
482   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
483   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Up-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
484
485   PORT_START("DISCX4")
486   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_X ) PORT_NAME("Right/X") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_CODE_DEC(KEYCODE_D) PORT_CODE_INC(KEYCODE_G) PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x08) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
487
488   PORT_START("DISCY4")
489   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_Y ) PORT_NAME("Right/Y") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_CODE_DEC(KEYCODE_R) PORT_CODE_INC(KEYCODE_F) PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x08) PORT_CONDITION("ECS_CNTRLSEL",0x0f,EQUALS,0x00)
490INPUT_PORTS_END
491
492static INPUT_PORTS_START( intvecs )
493   PORT_INCLUDE( intv )
494   PORT_INCLUDE( intv_ecs_pads )
495   PORT_INCLUDE( intv_ecs_synth )
496   PORT_INCLUDE( intv_ecs_kbd )
497
498   PORT_MODIFY("OPTIONS")
499   PORT_CONFNAME( 0x04, 0x00, "ECS_P3 Disc" )
500   PORT_CONFSETTING(    0x00, "Digital" )
501   PORT_CONFSETTING(    0x04, "Analog" )
502   PORT_CONFNAME( 0x08, 0x00, "ECS_P4 Disc" )
503   PORT_CONFSETTING(    0x00, "Digital" )
504   PORT_CONFSETTING(    0x08, "Analog" )
505
506   PORT_START("ECS_CNTRLSEL")
507   PORT_CONFNAME( 0x0F, 0x02, "ECS Controller")
508   PORT_CONFSETTING(  0x00, "Gamepads" )
509   PORT_CONFSETTING(  0x01, "Piano" )
510   PORT_CONFSETTING(  0x02, "Keyboard" )
511INPUT_PORTS_END
512
513/*
514235        Bit 7   Bit 6   Bit 5   Bit 4   Bit 3   Bit 2   Bit 1   Bit 0
515236
516237 Row 0  NC      NC      NC      NC      NC      NC      CTRL    SHIFT
r32581r32582
653374   PORT_INCLUDE( intv )
654375INPUT_PORTS_END
655376
656static ADDRESS_MAP_START(intv_mem, AS_PROGRAM, 16, intv_state)
657   AM_RANGE(0x0000, 0x003f) AM_READWRITE( intv_stic_r, intv_stic_w )
658   AM_RANGE(0x0080, 0x0081) AM_DEVREADWRITE("sp0256_speech", sp0256_device, spb640_r, spb640_w) /* Intellivoice */
659   AM_RANGE(0x0100, 0x01ef) AM_READWRITE( intv_ram8_r, intv_ram8_w )
660   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914.1", ay8914_device, read, write, 0x00ff )
661   AM_RANGE(0x0200, 0x035f) AM_READWRITE( intv_ram16_r, intv_ram16_w )
662   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000<<1) /* Exec ROM, 10-bits wide */
663   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read) /* GROM,     8-bits wide */
664   AM_RANGE(0x3800, 0x39ff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM,     8-bits wide */
665   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM Alias,     8-bits wide */
666   AM_RANGE(0x4800, 0x7fff) AM_ROM AM_REGION("maincpu", 0x4800<<1)
667   AM_RANGE(0x9000, 0xBfff) AM_ROM AM_REGION("maincpu", 0x9000<<1)
668   AM_RANGE(0xC000, 0xCfff) AM_ROM AM_REGION("maincpu", 0xC000<<1)
669   AM_RANGE(0xD000, 0xDfff) AM_ROM AM_REGION("maincpu", 0xD000<<1)
670   AM_RANGE(0xE000, 0xFfff) AM_ROM AM_REGION("maincpu", 0xE000<<1)
377static ADDRESS_MAP_START( intv_mem, AS_PROGRAM, 16, intv_state )
378   AM_RANGE(0x0000, 0x003f) AM_READWRITE(intv_stic_r, intv_stic_w)
379   AM_RANGE(0x0100, 0x01ef) AM_READWRITE(intv_ram8_r, intv_ram8_w)
380   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914", ay8914_device, read, write, 0x00ff)
381   AM_RANGE(0x0200, 0x035f) AM_READWRITE(intv_ram16_r, intv_ram16_w)
382   AM_RANGE(0x0400, 0x04ff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom04)
383   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000 << 1)   // Exec ROM, 10-bits wide
384   AM_RANGE(0x2000, 0x2fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom20)
385   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read) // GROM,     8-bits wide
386   AM_RANGE(0x3800, 0x39ff) AM_READWRITE(intv_gram_r, intv_gram_w)      // GRAM,     8-bits wide
387   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE(intv_gram_r, intv_gram_w)      // GRAM Alias, 8-bits wide
388   AM_RANGE(0x4000, 0x47ff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom40)
389   AM_RANGE(0x4800, 0x4fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom48)
390   AM_RANGE(0x5000, 0x5fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom50)
391   AM_RANGE(0x6000, 0x6fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom60)
392   AM_RANGE(0x7000, 0x7fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom70)
393   AM_RANGE(0x8000, 0x8fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom80)
394   AM_RANGE(0x9000, 0x9fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom90)
395   AM_RANGE(0xa000, 0xafff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_roma0)
396   AM_RANGE(0xb000, 0xbfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romb0)
397   AM_RANGE(0xc000, 0xcfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romc0)
398   AM_RANGE(0xd000, 0xdfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romd0)
399   AM_RANGE(0xe000, 0xefff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rome0)
400   AM_RANGE(0xf000, 0xffff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romf0)
671401ADDRESS_MAP_END
672402
673static ADDRESS_MAP_START( intv2_mem , AS_PROGRAM, 16, intv_state)
674   AM_RANGE(0x0000, 0x003f) AM_READWRITE( intv_stic_r, intv_stic_w )
675   AM_RANGE(0x0080, 0x0081) AM_DEVREADWRITE("sp0256_speech", sp0256_device, spb640_r, spb640_w) /* Intellivoice */
676   AM_RANGE(0x0100, 0x01ef) AM_READWRITE( intv_ram8_r, intv_ram8_w )
677   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914.1", ay8914_device, read, write, 0x00ff )
678   AM_RANGE(0x0200, 0x035f) AM_READWRITE( intv_ram16_r, intv_ram16_w )
679   AM_RANGE(0x0400, 0x04ff) AM_ROM AM_REGION("maincpu", 0x400<<1)  /* Exec ROM, 10-bits wide */
680   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000<<1) /* Exec ROM, 10-bits wide */
681   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read) /* GROM,     8-bits wide */
682   AM_RANGE(0x3800, 0x39ff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM,     8-bits wide */
683   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM Alias,     8-bits wide */
684   AM_RANGE(0x4800, 0x7fff) AM_ROM AM_REGION("maincpu", 0x4800<<1)
685   AM_RANGE(0x9000, 0xBfff) AM_ROM AM_REGION("maincpu", 0x9000<<1)
686   AM_RANGE(0xC000, 0xCfff) AM_ROM AM_REGION("maincpu", 0xC000<<1)
687   AM_RANGE(0xD000, 0xDfff) AM_ROM AM_REGION("maincpu", 0xD000<<1)
688   AM_RANGE(0xE000, 0xFfff) AM_ROM AM_REGION("maincpu", 0xE000<<1)
403static ADDRESS_MAP_START( intvoice_mem, AS_PROGRAM, 16, intv_state )
404   AM_RANGE(0x0000, 0x003f) AM_READWRITE(intv_stic_r, intv_stic_w)
405   AM_RANGE(0x0080, 0x0081) AM_DEVREADWRITE("voice", intv_voice_device, read_speech, write_speech) // Intellivoice
406   AM_RANGE(0x0100, 0x01ef) AM_READWRITE(intv_ram8_r, intv_ram8_w)
407   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914", ay8914_device, read, write, 0x00ff)
408   AM_RANGE(0x0200, 0x035f) AM_READWRITE(intv_ram16_r, intv_ram16_w)
409   AM_RANGE(0x0400, 0x04ff) AM_DEVREAD("voice", intv_voice_device, read_rom04)
410   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000 << 1)   // Exec ROM, 10-bits wide
411   AM_RANGE(0x2000, 0x2fff) AM_DEVREAD("voice", intv_voice_device, read_rom20)
412   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read) // GROM,     8-bits wide
413   AM_RANGE(0x3800, 0x39ff) AM_READWRITE(intv_gram_r, intv_gram_w)      // GRAM,     8-bits wide
414   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE(intv_gram_r, intv_gram_w)      // GRAM Alias, 8-bits wide
415   AM_RANGE(0x4000, 0x47ff) AM_DEVREAD("voice", intv_voice_device, read_rom40)
416   AM_RANGE(0x4800, 0x4fff) AM_DEVREAD("voice", intv_voice_device, read_rom48)
417   AM_RANGE(0x5000, 0x5fff) AM_DEVREAD("voice", intv_voice_device, read_rom50)
418   AM_RANGE(0x6000, 0x6fff) AM_DEVREAD("voice", intv_voice_device, read_rom60)
419   AM_RANGE(0x7000, 0x7fff) AM_DEVREAD("voice", intv_voice_device, read_rom70)
420   AM_RANGE(0x8000, 0x8fff) AM_DEVREAD("voice", intv_voice_device, read_rom80)
421   AM_RANGE(0x9000, 0x9fff) AM_DEVREAD("voice", intv_voice_device, read_rom90)
422   AM_RANGE(0xa000, 0xafff) AM_DEVREAD("voice", intv_voice_device, read_roma0)
423   AM_RANGE(0xb000, 0xbfff) AM_DEVREAD("voice", intv_voice_device, read_romb0)
424   AM_RANGE(0xc000, 0xcfff) AM_DEVREAD("voice", intv_voice_device, read_romc0)
425   AM_RANGE(0xd000, 0xdfff) AM_DEVREAD("voice", intv_voice_device, read_romd0)
426   AM_RANGE(0xe000, 0xefff) AM_DEVREAD("voice", intv_voice_device, read_rome0)
427   AM_RANGE(0xf000, 0xffff) AM_DEVREAD("voice", intv_voice_device, read_romf0)
689428ADDRESS_MAP_END
690429
691static ADDRESS_MAP_START( intvecs_mem , AS_PROGRAM, 16, intv_state)
692   AM_RANGE(0x0000, 0x003f) AM_READWRITE( intv_stic_r, intv_stic_w )
693   AM_RANGE(0x0080, 0x0081) AM_DEVREADWRITE("sp0256_speech", sp0256_device, spb640_r, spb640_w) /* Intellivoice */
430static ADDRESS_MAP_START( intv2_mem , AS_PROGRAM, 16, intv_state )
431   AM_RANGE(0x0000, 0x003f) AM_READWRITE(intv_stic_r, intv_stic_w)
432   AM_RANGE(0x0100, 0x01ef) AM_READWRITE(intv_ram8_r, intv_ram8_w)
433   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914", ay8914_device, read, write, 0x00ff)
434   AM_RANGE(0x0200, 0x035f) AM_READWRITE(intv_ram16_r, intv_ram16_w)
435   AM_RANGE(0x0400, 0x04ff) AM_ROM AM_REGION("maincpu", 0x400 << 1)   // Exec ROM, 10-bits wide
436   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000 << 1)   // Exec ROM, 10-bits wide
437   AM_RANGE(0x2000, 0x2fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom20)
438   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read)   // GROM,     8-bits wide
439   AM_RANGE(0x3800, 0x39ff) AM_READWRITE(intv_gram_r, intv_gram_w)   // GRAM,     8-bits wide
440   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE(intv_gram_r, intv_gram_w)   // GRAM Alias, 8-bits wide
441   AM_RANGE(0x4000, 0x47ff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom40)
442   AM_RANGE(0x4800, 0x4fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom48)
443   AM_RANGE(0x5000, 0x5fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom50)
444   AM_RANGE(0x6000, 0x6fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom60)
445   AM_RANGE(0x7000, 0x7fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom70)
446   AM_RANGE(0x8000, 0x8fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom80)
447   AM_RANGE(0x9000, 0x9fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom90)
448   AM_RANGE(0xa000, 0xafff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_roma0)
449   AM_RANGE(0xb000, 0xbfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romb0)
450   AM_RANGE(0xc000, 0xcfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romc0)
451   AM_RANGE(0xd000, 0xdfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romd0)
452   AM_RANGE(0xe000, 0xefff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rome0)
453   AM_RANGE(0xf000, 0xffff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romf0)
454ADDRESS_MAP_END
455
456static ADDRESS_MAP_START( intvecs_mem , AS_PROGRAM, 16, intv_state )
457   AM_RANGE(0x0000, 0x003f) AM_READWRITE(intv_stic_r, intv_stic_w)
458   AM_RANGE(0x0080, 0x0081) AM_DEVREADWRITE("speech", sp0256_device, spb640_r, spb640_w) /* Intellivoice */
694459   // AM_RANGE(0x00E0, 0x00E3) AM_READWRITE( intv_ecs_uart_r, intv_ecs_uart_w )
695   AM_RANGE(0x00f0, 0x00ff) AM_DEVREADWRITE8("ay8914.2", ay8914_device, read, write, 0x00ff ) /* ecs psg */
696   AM_RANGE(0x0100, 0x01ef) AM_READWRITE( intv_ram8_r, intv_ram8_w )
697   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914.1", ay8914_device, read, write, 0x00ff )
698   AM_RANGE(0x0200, 0x035f) AM_READWRITE( intv_ram16_r, intv_ram16_w )
460   AM_RANGE(0x00f0, 0x00ff) AM_DEVREADWRITE("ecs", intv_ecs_device, read_ay, write_ay) /* ecs psg */
461   AM_RANGE(0x0100, 0x01ef) AM_READWRITE(intv_ram8_r, intv_ram8_w)
462   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914", ay8914_device, read, write, 0x00ff)
463   AM_RANGE(0x0200, 0x035f) AM_READWRITE(intv_ram16_r, intv_ram16_w)
464   AM_RANGE(0x0400, 0x04ff) AM_DEVREAD("ecs", intv_ecs_device, read_rom04)
699465   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000<<1) /* Exec ROM, 10-bits wide */
700   AM_RANGE(0x2000, 0x2fff) AM_READ_BANK("bank1") AM_WRITE( ecs_bank1_page_select );
466   AM_RANGE(0x2000, 0x2fff) AM_DEVREADWRITE("ecs", intv_ecs_device, read_rom20, write_rom20)
701467   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read) /* GROM,     8-bits wide */
702   AM_RANGE(0x3800, 0x39ff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM,     8-bits wide */
703   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM Alias,     8-bits wide */
704   AM_RANGE(0x4000, 0x47ff) AM_READWRITE( intv_ecs_ram8_r, intv_ecs_ram8_w )
705   AM_RANGE(0x4800, 0x6fff) AM_ROM AM_REGION("maincpu", 0x4800<<1)
706   AM_RANGE(0x7000, 0x7fff) AM_READ_BANK("bank2") AM_WRITE( ecs_bank2_page_select );
707   //AM_RANGE(0x8800, 0x8fff) AM_RAM_BANK("bank5") // cart rom / game factory ram
708   AM_RANGE(0x9000, 0xBfff) AM_ROM AM_REGION("maincpu", 0x9000<<1)
709   AM_RANGE(0xC000, 0xCfff) AM_ROM AM_REGION("maincpu", 0xC000<<1)
710   AM_RANGE(0xD000, 0xDfff) AM_ROM AM_REGION("maincpu", 0xD000<<1)
711   AM_RANGE(0xE000, 0xEfff) AM_READ_BANK("bank3") AM_WRITE( ecs_bank3_page_select );
712   AM_RANGE(0xF000, 0xFfff) AM_READ_BANK("bank4") AM_WRITE( wsmlb_bank_page_select ); // World Series Major League Baseball Banking
468   AM_RANGE(0x3800, 0x39ff) AM_READWRITE(intv_gram_r, intv_gram_w)       /* GRAM,     8-bits wide */
469   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE(intv_gram_r, intv_gram_w)       /* GRAM Alias,     8-bits wide */
470   AM_RANGE(0x4000, 0x47ff) AM_DEVREADWRITE("ecs", intv_ecs_device, read_ram, write_ram)
471   AM_RANGE(0x4800, 0x4fff) AM_DEVREAD("ecs", intv_ecs_device, read_rom48)
472   AM_RANGE(0x5000, 0x5fff) AM_DEVREAD("ecs", intv_ecs_device, read_rom50)
473   AM_RANGE(0x6000, 0x6fff) AM_DEVREAD("ecs", intv_ecs_device, read_rom60)
474   AM_RANGE(0x7000, 0x7fff) AM_DEVREADWRITE("ecs", intv_ecs_device, read_rom70, write_rom70)
475   AM_RANGE(0x8000, 0x8fff) AM_DEVREAD("ecs", intv_ecs_device, read_rom80)
476   AM_RANGE(0x9000, 0x9fff) AM_DEVREAD("ecs", intv_ecs_device, read_rom90)
477   AM_RANGE(0xa000, 0xafff) AM_DEVREAD("ecs", intv_ecs_device, read_roma0)
478   AM_RANGE(0xb000, 0xbfff) AM_DEVREAD("ecs", intv_ecs_device, read_romb0)
479   AM_RANGE(0xc000, 0xcfff) AM_DEVREAD("ecs", intv_ecs_device, read_romc0)
480   AM_RANGE(0xd000, 0xdfff) AM_DEVREAD("ecs", intv_ecs_device, read_romd0)
481   AM_RANGE(0xe000, 0xefff) AM_DEVREADWRITE("ecs", intv_ecs_device, read_rome0, write_rome0)
482   AM_RANGE(0xf000, 0xffff) AM_DEVREADWRITE("ecs", intv_ecs_device, read_romf0, write_romf0)
713483ADDRESS_MAP_END
714484
715static ADDRESS_MAP_START( intvkbd_mem , AS_PROGRAM, 16, intv_state)
716   AM_RANGE(0x0000, 0x003f) AM_READWRITE( intv_stic_r, intv_stic_w )
717   AM_RANGE(0x0080, 0x0081) AM_DEVREADWRITE("sp0256_speech", sp0256_device, spb640_r, spb640_w) /* Intellivoice */
718   AM_RANGE(0x0100, 0x01ef) AM_READWRITE( intv_ram8_r, intv_ram8_w )
719   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914.1", ay8914_device, read, write, 0x00ff )
720   AM_RANGE(0x0200, 0x035f) AM_READWRITE( intv_ram16_r, intv_ram16_w )
485static ADDRESS_MAP_START( intvkbd_mem , AS_PROGRAM, 16, intv_state )
486   AM_RANGE(0x0000, 0x003f) AM_READWRITE(intv_stic_r, intv_stic_w)
487   AM_RANGE(0x0100, 0x01ef) AM_READWRITE(intv_ram8_r, intv_ram8_w)
488   AM_RANGE(0x01f0, 0x01ff) AM_DEVREADWRITE8("ay8914", ay8914_device, read, write, 0x00ff)
489   AM_RANGE(0x0200, 0x035f) AM_READWRITE(intv_ram16_r, intv_ram16_w)
490   AM_RANGE(0x0400, 0x04ff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom04)
721491   AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("maincpu", 0x1000<<1) /* Exec ROM, 10-bits wide */
492   AM_RANGE(0x2000, 0x2fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom20)
722493   AM_RANGE(0x3000, 0x37ff) AM_DEVREAD("stic", stic_device, grom_read) /* GROM,     8-bits wide */
723   AM_RANGE(0x3800, 0x39ff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM,     8-bits wide */
724   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE( intv_gram_r, intv_gram_w )       /* GRAM Alias,     8-bits wide */
725   AM_RANGE(0x4800, 0x6fff) AM_ROM     /* Cartridges? */
494   AM_RANGE(0x3800, 0x39ff) AM_READWRITE(intv_gram_r, intv_gram_w)       /* GRAM,     8-bits wide */
495   AM_RANGE(0x3a00, 0x3bff) AM_READWRITE(intv_gram_r, intv_gram_w)       /* GRAM Alias,     8-bits wide */
496   AM_RANGE(0x4000, 0x47ff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom40)
497   AM_RANGE(0x4800, 0x4fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom48)
498   AM_RANGE(0x5000, 0x5fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom50)
499   AM_RANGE(0x6000, 0x6fff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rom60)
726500   AM_RANGE(0x7000, 0x7fff) AM_ROM AM_REGION("maincpu", 0x7000<<1) /* Keyboard ROM */
727   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE( intvkbd_dualport16_w ) AM_SHARE("dualport_ram")  /* Dual-port RAM */
501   AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE(intvkbd_dualport16_w) AM_SHARE("dualport_ram")  /* Dual-port RAM */
502   AM_RANGE(0xc000, 0xcfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romc0)
503   AM_RANGE(0xd000, 0xdfff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romd0)
504   AM_RANGE(0xe000, 0xefff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_rome0)
505   AM_RANGE(0xf000, 0xffff) AM_DEVREAD("cartslot", intv_cart_slot_device, read_romf0)
728506ADDRESS_MAP_END
729507
730static ADDRESS_MAP_START( intvkbd2_mem , AS_PROGRAM, 8, intv_state)
508static ADDRESS_MAP_START( intvkbd2_mem , AS_PROGRAM, 8, intv_state )
731509   ADDRESS_MAP_UNMAP_HIGH  /* Required because of probing */
732   AM_RANGE( 0x0000, 0x3fff) AM_READWRITE( intvkbd_dualport8_lsb_r, intvkbd_dualport8_lsb_w )  /* Dual-port RAM */
733   AM_RANGE( 0x4000, 0x7fff) AM_READWRITE( intvkbd_dualport8_msb_r, intvkbd_dualport8_msb_w )  /* Dual-port RAM */
734   AM_RANGE( 0xb7f8, 0xb7ff) AM_RAM    /* ??? */
735   AM_RANGE( 0xb800, 0xbfff) AM_RAM AM_SHARE("videoram") /* Text Display */
736   AM_RANGE( 0xc000, 0xffff) AM_ROM
510   AM_RANGE(0x0000, 0x3fff) AM_READWRITE(intvkbd_dualport8_lsb_r, intvkbd_dualport8_lsb_w)  /* Dual-port RAM */
511   AM_RANGE(0x4000, 0x7fff) AM_READWRITE(intvkbd_dualport8_msb_r, intvkbd_dualport8_msb_w)  /* Dual-port RAM */
512   AM_RANGE(0xb7f8, 0xb7ff) AM_RAM    /* ??? */
513   AM_RANGE(0xb800, 0xbfff) AM_RAM AM_SHARE("videoram") /* Text Display */
514   AM_RANGE(0xc000, 0xdfff) AM_ROM
515   AM_RANGE(0xe000, 0xffff) AM_READ(intvkb_iocart_r)
737516ADDRESS_MAP_END
738517
739518void intv_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
r32581r32582
769548   timer_set(m_keyboard->cycles_to_attotime(100), TIMER_INTV_INTERRUPT2_COMPLETE);
770549}
771550
551
772552static MACHINE_CONFIG_START( intv, intv_state )
773553   /* basic machine hardware */
774554   MCFG_CPU_ADD("maincpu", CP1610, XTAL_3_579545MHz/4)        /* Colorburst/4 */
r32581r32582
793573
794574   /* sound hardware */
795575   MCFG_SPEAKER_STANDARD_MONO("mono")
796   MCFG_SOUND_ADD("ay8914.1", AY8914, XTAL_3_579545MHz/2)
576   MCFG_SOUND_ADD("ay8914", AY8914, XTAL_3_579545MHz/2)
797577   MCFG_AY8910_PORT_A_READ_CB(READ8(intv_state, intv_right_control_r))
798578   MCFG_AY8910_PORT_B_READ_CB(READ8(intv_state, intv_left_control_r))
799579   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
800580
801   MCFG_SOUND_ADD("sp0256_speech", SP0256, 3120000)
802   /* The Intellivoice uses a speaker with its own volume control so the relative volumes to use are subjective */
803   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
804
805581   /* cartridge */
806   MCFG_CARTSLOT_ADD("cart")
807   MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv")
808   MCFG_CARTSLOT_LOAD(intv_state,intv_cart)
809   MCFG_CARTSLOT_INTERFACE("intv_cart")
582   MCFG_INTV_CARTRIDGE_ADD("cartslot", intv_cart, NULL)
583
810584   /* software lists */
811   MCFG_SOFTWARE_LIST_ADD("cart_list","intv")
585   MCFG_SOFTWARE_LIST_ADD("cart_list", "intv")
586   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("ecs_list", "intvecs")
812587MACHINE_CONFIG_END
813588
814589static MACHINE_CONFIG_DERIVED( intv2, intv )
r32581r32582
816591   MCFG_CPU_PROGRAM_MAP(intv2_mem)
817592MACHINE_CONFIG_END
818593
594static MACHINE_CONFIG_DERIVED( intvoice, intv )
595   MCFG_CPU_MODIFY( "maincpu" )
596   MCFG_CPU_PROGRAM_MAP(intvoice_mem)
597
598   MCFG_DEVICE_REMOVE("cartslot")
599   MCFG_DEVICE_ADD("voice", INTV_ROM_VOICE, 0)
600MACHINE_CONFIG_END
601
819602static MACHINE_CONFIG_DERIVED( intvecs, intv )
820603   MCFG_CPU_MODIFY( "maincpu" )
821604   MCFG_CPU_PROGRAM_MAP(intvecs_mem)
822   MCFG_SOFTWARE_LIST_ADD("cart_list_ecs","intvecs")
823605
824   MCFG_SOUND_ADD("ay8914.2", AY8914, XTAL_3_579545MHz/2)
825   MCFG_AY8910_PORT_A_READ_CB(READ8(intv_state, intv_ecs_porta_r))
826   MCFG_AY8910_PORT_B_READ_CB(READ8(intv_state, intv_ecs_portb_r))
827   MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(intv_state, intv_ecs_porta_w))
828   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
606   MCFG_DEVICE_REMOVE("cartslot")
607   MCFG_DEVICE_ADD("ecs", INTV_ROM_ECS, 0)
829608
609   MCFG_SOUND_ADD("speech", SP0256, 3120000)
610   /* The Intellivoice uses a speaker with its own volume control so the relative volumes to use are subjective */
611   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
612
830613   /* cassette */
831614   //MCFG_CASSETTE_ADD( "cassette" )
832615
616   /* software lists */
617   MCFG_DEVICE_REMOVE("cart_list")
618   MCFG_DEVICE_REMOVE("ecs_list")
619   MCFG_SOFTWARE_LIST_ADD("cart_list", "intvecs")
620   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("intv_list", "intv")
833621MACHINE_CONFIG_END
834622
835623static MACHINE_CONFIG_DERIVED( intvkbd, intv )
r32581r32582
852640   MCFG_SCREEN_VISIBLE_AREA(0, (STIC_OVERSCAN_LEFT_WIDTH+STIC_BACKTAB_WIDTH*STIC_CARD_WIDTH-1+STIC_OVERSCAN_RIGHT_WIDTH)*STIC_X_SCALE*INTVKBD_X_SCALE-1, 0, (STIC_OVERSCAN_TOP_HEIGHT+STIC_BACKTAB_HEIGHT*STIC_CARD_HEIGHT+STIC_OVERSCAN_BOTTOM_HEIGHT)*STIC_Y_SCALE*INTVKBD_Y_SCALE-1)
853641   MCFG_SCREEN_UPDATE_DRIVER(intv_state, screen_update_intvkbd)
854642
855   /* cartridge */
856   MCFG_DEVICE_REMOVE("cart")
857   MCFG_CARTSLOT_ADD("cart1")
858   MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv")
859   MCFG_CARTSLOT_NOT_MANDATORY
860   MCFG_CARTSLOT_LOAD(intv_state,intvkbd_cart)
861   MCFG_CARTSLOT_INTERFACE("intv_cart")
862
863   MCFG_CARTSLOT_ADD("cart2")
864   MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv")
865   MCFG_CARTSLOT_NOT_MANDATORY
866   MCFG_CARTSLOT_LOAD(intv_state,intvkbd_cart)
867   MCFG_CARTSLOT_INTERFACE("intv_cart")
643   /* I/O cartslots for BASIC */
644   MCFG_GENERIC_CARTSLOT_ADD("ioslot1", generic_plain_slot, "intbasic_cart")
645   MCFG_GENERIC_CARTSLOT_ADD("ioslot2", generic_plain_slot, "intbasic_cart")
868646MACHINE_CONFIG_END
869647
870648ROM_START(intv) // the intv1 exec rom should be two roms: RO-3-9502-011.U5 and RO-3-9504-021.U6
871649   ROM_REGION(0x10000<<1,"maincpu", ROMREGION_ERASEFF)
872650   ROM_LOAD16_WORD( "exec.bin", (0x1000<<1)+0, 0x2000, CRC(cbce86f7) SHA1(5a65b922b562cb1f57dab51b73151283f0e20c7a))
873
874   ROM_REGION( 0x10000<<1, "sp0256_speech", 0 )
875   /* SP0256-012 Speech chip w/2KiB mask rom */
876   ROM_LOAD( "sp0256-012.bin",   0x1000, 0x0800, CRC(0de7579d) SHA1(618563e512ff5665183664f52270fa9606c9d289) )
877651ROM_END
878652
653#define rom_intvoice rom_intv
654
879655// the later intellivision 2's exec rom is a single ro-3-9506-010 at location ic6 holding 8k plus 512 bytes; the 1st 512 bytes are at 0x400 and the 8k at 0x1000
880656ROM_START(intv2)
881657   ROM_REGION(0x10000<<1,"maincpu", ROMREGION_ERASEFF)
882658   ROM_LOAD16_WORD_SWAP( "ro-3-9506-010.ic6", (0x400<<1)+0, 0x200, CRC(DD7E1237) SHA1(FB821A643B7714ED4C812553CD3F668766FD44AB))
883659   ROM_CONTINUE( (0x1000<<1)+0, 0x2000 )
884
885   ROM_REGION( 0x10000<<1, "sp0256_speech", 0 )
886   /* SP0256-012 Speech chip w/2KiB mask rom */
887   ROM_LOAD( "sp0256-012.bin",   0x1000, 0x0800, CRC(0de7579d) SHA1(618563e512ff5665183664f52270fa9606c9d289) )
888660ROM_END
889661
890662ROM_START(intvsrs) // the intv1 sears exec rom should be two roms: RO-3-9502-???.U5 and RO-3-9504-???.U6 but the correct names are unknown as of yet
891663   ROM_REGION(0x10000<<1,"maincpu", ROMREGION_ERASEFF)
892664   ROM_LOAD16_WORD( "searsexc.bin", (0x1000<<1)+0, 0x2000, CRC(ea552a22) SHA1(834339de056d42a35571cae7fd5b04d1344001e9))
893
894   ROM_REGION( 0x10000<<1, "sp0256_speech", 0 )
895   /* SP0256-012 Speech chip w/2KiB mask rom */
896   ROM_LOAD( "sp0256-012.bin",   0x1000, 0x0800, CRC(0de7579d) SHA1(618563e512ff5665183664f52270fa9606c9d289) )
897665ROM_END
898666
899667ROM_START(intvecs) // the intv1 exec rom should be two roms: RO-3-9502-011.U5 and RO-3-9504-021.U6
900668   ROM_REGION(0x10000<<1,"maincpu", ROMREGION_ERASEFF)
901669   ROM_LOAD16_WORD( "exec.bin", (0x1000<<1)+0, 0x2000, CRC(cbce86f7) SHA1(5a65b922b562cb1f57dab51b73151283f0e20c7a))
902670
903   ROM_REGION( 0x10000<<1, "sp0256_speech", 0 )
671   ROM_REGION( 0x10000<<1, "speech", 0 )
904672   /* SP0256-012 Speech chip w/2KiB mask rom */
905673   ROM_LOAD( "sp0256-012.bin",   0x1000, 0x0800, CRC(0de7579d) SHA1(618563e512ff5665183664f52270fa9606c9d289) )
906
907   ROM_REGION( 0x10000<<1, "ecs_rom", ROMREGION_ERASEFF)
908   ROM_LOAD16_WORD_SWAP( "ecs_rom.bin", 0x2000<<1, 0x2000, CRC(ea790a06) SHA1(b7ccb38b881d7f8426cd6f1f8a7aabbd31784fc5))
909   ROM_CONTINUE( 0x7000<<1, 0x2000 )
910   ROM_CONTINUE( 0xE000<<1, 0x2000 )
911674ROM_END
912675
913676ROM_START(intvkbd) // the intv1 exec rom should be two roms: RO-3-9502-011.U5 and RO-3-9504-021.U6
r32581r32582
932695   m_stic->set_x_scale(INTV_X_SCALE);
933696   m_stic->set_y_scale(INTV_Y_SCALE);
934697   m_is_keybd = 0;
935   m_is_ecs = 0;
936698}
937699
938700DRIVER_INIT_MEMBER(intv_state,intvkbd)
r32581r32582
940702   m_stic->set_x_scale(INTVKBD_X_SCALE);
941703   m_stic->set_y_scale(INTVKBD_Y_SCALE);
942704   m_is_keybd = 1;
943   m_is_ecs = 0;
944705}
945706
946DRIVER_INIT_MEMBER(intv_state,intvecs)
947{
948   m_stic->set_x_scale(INTV_X_SCALE);
949   m_stic->set_y_scale(INTV_Y_SCALE);
950   m_is_keybd = 0;
951   m_is_ecs = 1;
952}
953707
954
955708/***************************************************************************
956709
957710  Game driver(s)
r32581r32582
963716CONS( 1981, intvsrs,    intv,   0,      intv,       intv,       intv_state,    intv,       "Sears",  "Super Video Arcade", GAME_SUPPORTS_SAVE )
964717COMP( 1981, intvkbd,    intv,   0,      intvkbd,    intvkbd,    intv_state,    intvkbd,    "Mattel", "Intellivision Keyboard Component (Unreleased)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
965718CONS( 1982, intv2,      intv,   0,      intv2,      intv,       intv_state,    intv,       "Mattel", "Intellivision II", GAME_SUPPORTS_SAVE )
966COMP( 1983, intvecs,    intv,   0,      intvecs,    intvecs,    intv_state,    intvecs,    "Mattel", "Intellivision Entertainment Computer System", GAME_SUPPORTS_SAVE )
719
720// made up, user friendlier machines with pre-mounted passthu expansions
721COMP( 1982, intvoice,   intv,   0,      intvoice,   intv,       intv_state,    intv,       "Mattel", "Intellivision w/IntelliVoice expansion", GAME_SUPPORTS_SAVE )
722COMP( 1983, intvecs,    intv,   0,      intvecs,    intv,       intv_state,    intv,       "Mattel", "Intellivision w/Entertainment Computer System + Intellivoice expansions", GAME_SUPPORTS_SAVE )
trunk/src/mess/mess.mak
r32581r32582
592592BUSES += GENERIC
593593BUSES += IEEE488
594594BUSES += IMI7000
595BUSES += INTV
595596BUSES += IQ151
596597BUSES += ISA
597598BUSES += ISBX
trunk/src/mess/machine/intv.c
r32581r32582
22#include "video/stic.h"
33#include "includes/intv.h"
44#include "cpu/cp1610/cp1610.h"
5#include "hashfile.h"
65
7#define INTELLIVOICE_MASK   0x02
8#define ECS_MASK            0x01
96
107
118WRITE16_MEMBER( intv_state::intvkbd_dualport16_w )
r32581r32582
288285   m_ram8[offset] = data&0xff;
289286}
290287
291READ16_MEMBER( intv_state::intv_ecs_ram8_r )
292{
293   return (int)m_ecs_ram8[offset];
294}
295
296WRITE16_MEMBER( intv_state::intv_ecs_ram8_w )
297{
298   m_ecs_ram8[offset] = data&0xff;
299}
300
301READ16_MEMBER( intv_state::intv_cart_ram8_r )
302{
303   return (int)m_cart_ram8[offset];
304}
305WRITE16_MEMBER( intv_state::intv_cart_ram8_w )
306{
307   m_cart_ram8[offset] = data&0xff;
308}
309
310288READ16_MEMBER( intv_state::intv_ram16_r )
311289{
312290   //logerror("%x = ram16_r(%x)\n",state->m_ram16[offset],offset);
r32581r32582
320298   m_ram16[offset] = data & 0xffff;
321299}
322300
323// ECS and Wsmlb bank switching register handlers
324WRITE16_MEMBER( intv_state::ecs_bank1_page_select )
301READ8_MEMBER( intv_state::intvkb_iocart_r )
325302{
326   if (offset == 0xfff)
327   {
328      if (data == 0x2a50)
329      {
330         m_ecs_bank_src[0] = 0;
331         m_bank1->set_base(m_bank_base[m_ecs_bank_src[0]] + (0x2000 << 1));
332      }
333      else if (data == 0x2a51)
334      {
335         m_ecs_bank_src[0] = 1;
336         m_bank1->set_base(m_bank_base[m_ecs_bank_src[0]] + (0x2000 << 1));
337      }
338   }
339}
340
341WRITE16_MEMBER( intv_state::ecs_bank2_page_select )
342{
343   if (offset == 0xfff)
344   {
345      if (data == 0x7a50)
346      {
347         m_ecs_bank_src[1] = 1;
348         m_bank2->set_base(m_bank_base[m_ecs_bank_src[1]] + (0x7000 << 1));      // ECS ROM at 0x7000 is on page 1
349      }
350      else if (data == 0x7a51 )
351      {
352         m_ecs_bank_src[1] = 0;
353         m_bank2->set_base(m_bank_base[m_ecs_bank_src[1]] + (0x7000 << 1));
354      }
355   }
356}
357
358WRITE16_MEMBER( intv_state::ecs_bank3_page_select )
359{
360   if (offset == 0xfff)
361   {
362      if (data == 0xea50)
363      {
364         m_ecs_bank_src[2] = 0;
365         m_bank3->set_base(m_bank_base[m_ecs_bank_src[2]] + (0xe000 << 1));
366      }
367      else if (data == 0xea51)
368      {
369         m_ecs_bank_src[2] = 1;
370         m_bank3->set_base(m_bank_base[m_ecs_bank_src[2]] + (0xe000 << 1));
371      }
372   }
373}
374
375WRITE16_MEMBER( intv_state::wsmlb_bank_page_select )
376{
377   logerror("offset %x data %x\n", offset, data);
378   if (offset == 0xfff)
379   {
380      if (data == 0xfa50)
381      {
382         m_ecs_bank_src[3] = 0;
383         m_bank4->set_base(m_bank_base[m_ecs_bank_src[3]] + (0xf000 << 1));
384      }
385      else if (data == 0xfa51)
386      {
387         m_ecs_bank_src[3] = 1;
388         m_bank4->set_base(m_bank_base[m_ecs_bank_src[3]] + (0xf000 << 1));
389      }
390   }
391}
392
393int intv_state::intv_load_rom_file(device_image_interface &image)
394{
395   int i,j;
396
397   UINT8 temp;
398   UINT8 num_segments;
399   UINT8 start_seg;
400   UINT8 end_seg;
401
402   UINT32 current_address;
403   UINT32 end_address;
404
405   UINT8 high_byte;
406   UINT8 low_byte;
407
408   UINT8 *memory = m_region_maincpu->base();
409   address_space &program = m_maincpu->space(AS_PROGRAM);
410   const char *filetype = image.filetype();
411
412   /* if it is in .rom format, we enter here */
413   if (!core_stricmp (filetype, "rom"))
414   {
415      image.fread( &temp, 1);         /* header */
416      if (temp != 0xa8)
417      {
418         return IMAGE_INIT_FAIL;
419      }
420
421      image.fread( &num_segments, 1);
422
423      image.fread( &temp, 1);
424      if (temp != (num_segments ^ 0xff))
425      {
426         return IMAGE_INIT_FAIL;
427      }
428
429      for (i = 0; i < num_segments; i++)
430      {
431         image.fread( &start_seg, 1);
432         current_address = start_seg * 0x100;
433
434         image.fread( &end_seg, 1);
435         end_address = end_seg * 0x100 + 0xff;
436
437         while (current_address <= end_address)
438         {
439            image.fread( &low_byte, 1);
440            memory[(current_address << 1) + 1] = low_byte;
441            image.fread( &high_byte, 1);
442            memory[current_address << 1] = high_byte;
443            current_address++;
444         }
445
446         /* Here we should calculate and compare the CRC16... */
447         image.fread( &temp, 1);
448         image.fread( &temp, 1);
449      }
450
451      /* Access tables and fine address restriction tables are not supported ATM */
452      for (i = 0; i < (16 + 32 + 2); i++)
453      {
454         image.fread( &temp, 1);
455      }
456      return IMAGE_INIT_PASS;
457   }
458   /* otherwise, we load it as a .bin file, using extrainfo from intv.hsi in place of .cfg */
303   if (m_iocart1->exists())
304      return m_iocart1->read_rom(space, offset, mem_mask);
305   else if (m_iocart2->exists())
306      return m_iocart2->read_rom(space, offset, mem_mask);
459307   else
460   {
461      /* This code is a blatant hack, due to impossibility to load a separate .cfg file in MESS. */
462      /* It shall be eventually replaced by the .xml loading */
463
464      /* extrainfo format */
465      // 1. mapper number (to deal with bankswitch). no bankswitch is mapper 0 (most games).
466      // 2.->5. current images have at most 4 chunks of data. we store here block size and location to load
467      //  (value & 0xf0) >> 4 is the location / 0x1000
468      //  (value & 0x0f) is the size / 0x800
469      // 6. some images have a ram chunk. as above we store location and size in 8 bits
470      // 7. extra = 1 ECS, 2 Intellivoice
471      int start, size;
472      int mapper, rom[5], ram, extra;
473      astring extrainfo;
474      if (!hashfile_extrainfo(image, extrainfo))
475      {
476         /* If no extrainfo, we assume a single 0x2000 chunk at 0x5000 */
477         for (i = 0; i < 0x2000; i++ )
478         {
479            image.fread( &low_byte, 1);
480            memory[((0x5000 + i) << 1) + 1] = low_byte;
481            image.fread( &high_byte, 1);
482            memory[(0x5000 + i) << 1] = high_byte;
483         }
484      }
485      else
486      {
487         sscanf(extrainfo.cstr() ,"%d %d %d %d %d %d %d", &mapper, &rom[0], &rom[1], &rom[2],
488                                                &rom[3], &ram, &extra);
489
490//          logerror("extrainfo: %d %d %d %d %d %d %d \n", mapper, rom[0], rom[1], rom[2],
491//                                                              rom[3], ram, extra);
492
493         if (mapper)
494         {
495            logerror("Bankswitch not yet implemented! \n");
496         }
497
498         if (ram)
499         {
500            start = (( ram & 0xf0 ) >> 4) * 0x1000;
501            size = ( ram & 0x0f ) * 0x800;
502
503            program.install_readwrite_handler(start, start + size,
504               read16_delegate( FUNC( intv_state::intv_cart_ram8_r ), this),
505               write16_delegate( FUNC( intv_state::intv_cart_ram8_w ), this));
506         }
507         /* For now intellivoice always active
508         if (extra & INTELLIVOICE_MASK)
509         {
510             // tbd
511         }
512         */
513
514         if (extra & ECS_MASK)
515         {
516            logerror("Requires ECS Module\n");
517         }
518
519         for (j = 0; j < 4; j++)
520         {
521            start = (( rom[j] & 0xf0 ) >> 4) * 0x1000;
522            size = ( rom[j] & 0x0f ) * 0x800;
523
524            /* some cart has to be loaded to 0x4800, but none goes to 0x4000. Hence, we use */
525            /* 0x04 << 4 in extrainfo (to reduce the stored values) and fix the value here. */
526            if (start == 0x4000) start += 0x800;
527
528//              logerror("step %d: %d %d \n", j, start / 0x1000, size / 0x1000);
529
530            for (i = 0; i < size; i++ )
531            {
532               image.fread( &low_byte, 1);
533               memory[((start + i) << 1) + 1] = low_byte;
534               image.fread( &high_byte, 1);
535               memory[(start + i) << 1] = high_byte;
536            }
537         }
538      }
539
540      return IMAGE_INIT_PASS;
541   }
308      return m_region_keyboard->u8(offset + 0xe000);
542309}
543310
544DEVICE_IMAGE_LOAD_MEMBER( intv_state, intv_cart )
545{
546   if (image.software_entry() == NULL)
547      return intv_load_rom_file(image);
548   else
549   {
550      UINT16 offset[] = {0x4800, 0x5000, 0x6000, 0x7000, 0x9000, 0xa000, 0xc000, 0xd000, 0xf000};
551      const char* region_name[] = {"4800", "5000", "6000", "7000", "9000", "A000", "C000", "D000", "F000"};
552      UINT8 *memory = m_region_maincpu->base();
553      address_space &program = m_maincpu->space(AS_PROGRAM);
554311
555      UINT32 size=0;
556      UINT16 address = 0;
557      UINT8 *region;
558      for(int i = 0; i < 9; i++)
559      {
560         address = offset[i];
561         size = image.get_software_region_length(region_name[i]);
562         if (size)
563         {
564            region = image.get_software_region(region_name[i]);
565            for (int j = 0; j < (size>>1); j++)
566            {
567               memory[((address + j) << 1) + 1] = region[2*j];
568               memory[(address + j) << 1] = region[2*j+1];
569            }
570         }
571      }
572      // deal with wsmlb paged rom
573
574      size = image.get_software_region_length("F000_bank1");
575      if (size && m_region_ecs_rom) // only load if ecs is plugged in (should probably be done a different way)
576      {
577         UINT8 *ecs_rom_region = m_region_ecs_rom->base();
578
579         region = image.get_software_region("F000_bank1");
580         for (int j = 0; j < (size>>1); j++)
581         {
582            ecs_rom_region[((address + j) << 1) + 1] = region[2*j];
583            ecs_rom_region[(address + j) << 1] = region[2*j+1];
584         }
585      }
586
587      // Cartridge 8bit ram support
588      size = image.get_software_region_length("D000_RAM8");
589      if (size)
590      {
591         program.install_readwrite_handler(0xD000, 0xD000 + size,
592            read16_delegate( FUNC( intv_state::intv_cart_ram8_r ), this),
593            write16_delegate( FUNC( intv_state::intv_cart_ram8_w ), this));
594      }
595
596      size = image.get_software_region_length("8800_RAM8");
597      if (size)
598      {
599         program.install_readwrite_handler(0x8800, 0x8800 + size,
600            read16_delegate( FUNC( intv_state::intv_cart_ram8_r ), this),
601            write16_delegate( FUNC( intv_state::intv_cart_ram8_w ), this));
602      }
603      return IMAGE_INIT_PASS;
604   }
605}
606
607312/* Set Reset and INTR/INTRM Vector */
608313void intv_state::machine_reset()
609314{
r32581r32582
615320
616321   /* Set initial PC */
617322   m_maincpu->set_state_int(CP1610_R7, 0x1000);
618
619   if (m_is_ecs)
620   {
621      // ECS can switch between the maincpu and the ecs roms
622      m_ecs_bank_src[0] = 0;  // CPU
623      m_ecs_bank_src[1] = 1;  // ECS
624      m_ecs_bank_src[2] = 0;  // CPU
625      m_ecs_bank_src[3] = 0;  // CPU
626      m_bank_base[0] = m_region_maincpu->base();
627      m_bank_base[1] = m_region_ecs_rom->base();
628      m_bank1->set_base(m_bank_base[m_ecs_bank_src[0]] + (0x2000 << 1));
629      m_bank2->set_base(m_bank_base[m_ecs_bank_src[1]] + (0x7000 << 1));
630      m_bank3->set_base(m_bank_base[m_ecs_bank_src[2]] + (0xe000 << 1));
631      m_bank4->set_base(m_bank_base[m_ecs_bank_src[3]] + (0xf000 << 1));
632   }
633323}
634324
635325void intv_state::machine_start()
r32581r32582
661351   save_item(NAME(m_ram16));
662352   save_item(NAME(m_sr1_int_pending));
663353   save_item(NAME(m_ram8));
664   save_item(NAME(m_cart_ram8));
665
666   // ecs
667   if (m_is_ecs)
668   {
669      for (int i = 0; i < 7; i++)
670      {
671         char str[9];
672         sprintf(str, "ECS_ROW%i", i);
673         m_ecs_keyboard[i] = ioport(str);
674      }
675      for (int i = 0; i < 7; i++)
676      {
677         char str[15];
678         sprintf(str, "ECS_SYNTH_ROW%i", i);
679         m_ecs_synth[i] = ioport(str);
680      }
681
682      save_item(NAME(m_ecs_ram8));
683      save_item(NAME(m_ecs_psg_porta));
684      save_item(NAME(m_ecs_bank_src));
685      machine().save().register_postload(save_prepost_delegate(FUNC(intv_state::ecs_banks_restore), this));
686   }
687
354   
688355   // intvkbd
689356   if (m_is_keybd)
690357   {
r32581r32582
706373      save_item(NAME(m_tms9927_cursor_row));
707374      save_item(NAME(m_tms9927_last_row));
708375   }
709}
710376
711void intv_state::ecs_banks_restore()
712{
713   m_bank1->set_base(m_bank_base[m_ecs_bank_src[0]] + (0x2000 << 1));
714   m_bank2->set_base(m_bank_base[m_ecs_bank_src[1]] + (0x7000 << 1));
715   m_bank3->set_base(m_bank_base[m_ecs_bank_src[2]] + (0xe000 << 1));
716   m_bank4->set_base(m_bank_base[m_ecs_bank_src[3]] + (0xf000 << 1));
377   if (m_cart && m_cart->exists())
378   {
379      // RAM
380      switch (m_cart->get_type())
381      {
382         case INTV_RAM:
383            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xd000, 0xd7ff, read16_delegate(FUNC(intv_cart_slot_device::read_ram),(intv_cart_slot_device*)m_cart), write16_delegate(FUNC(intv_cart_slot_device::write_ram),(intv_cart_slot_device*)m_cart));
384            break;
385         case INTV_GFACT:
386            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x8800, 0x8fff, read16_delegate(FUNC(intv_cart_slot_device::read_ram),(intv_cart_slot_device*)m_cart), write16_delegate(FUNC(intv_cart_slot_device::write_ram),(intv_cart_slot_device*)m_cart));
387            break;
388         case INTV_VOICE:
389            m_cart->late_subslot_setup();
390            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0080, 0x0081, read16_delegate(FUNC(intv_cart_slot_device::read_speech),(intv_cart_slot_device*)m_cart), write16_delegate(FUNC(intv_cart_slot_device::write_speech),(intv_cart_slot_device*)m_cart));
391           
392            // passthru for RAM-equipped carts
393            m_maincpu->space(AS_PROGRAM).install_write_handler(0x8800, 0x8fff, write16_delegate(FUNC(intv_cart_slot_device::write_88),(intv_cart_slot_device*)m_cart));
394            m_maincpu->space(AS_PROGRAM).install_write_handler(0xd000, 0xd7ff, write16_delegate(FUNC(intv_cart_slot_device::write_d0),(intv_cart_slot_device*)m_cart));
395            break;
396         case INTV_ECS:
397            m_cart->late_subslot_setup();
398            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x00f0, 0x00ff, read16_delegate(FUNC(intv_cart_slot_device::read_ay),(intv_cart_slot_device*)m_cart), write16_delegate(FUNC(intv_cart_slot_device::write_ay),(intv_cart_slot_device*)m_cart));
399            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x4000, 0x47ff, read16_delegate(FUNC(intv_cart_slot_device::read_ram),(intv_cart_slot_device*)m_cart), write16_delegate(FUNC(intv_cart_slot_device::write_ram),(intv_cart_slot_device*)m_cart));
400
401            m_maincpu->space(AS_PROGRAM).install_write_handler(0x2000, 0x2fff, write16_delegate(FUNC(intv_cart_slot_device::write_rom20),(intv_cart_slot_device*)m_cart));
402            m_maincpu->space(AS_PROGRAM).install_write_handler(0x7000, 0x7fff, write16_delegate(FUNC(intv_cart_slot_device::write_rom70),(intv_cart_slot_device*)m_cart));
403            m_maincpu->space(AS_PROGRAM).install_write_handler(0xe000, 0xefff, write16_delegate(FUNC(intv_cart_slot_device::write_rome0),(intv_cart_slot_device*)m_cart));
404            m_maincpu->space(AS_PROGRAM).install_write_handler(0xf000, 0xffff, write16_delegate(FUNC(intv_cart_slot_device::write_romf0),(intv_cart_slot_device*)m_cart));
405           
406            // passthru for Intellivoice expansion
407            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0080, 0x0081, read16_delegate(FUNC(intv_cart_slot_device::read_speech),(intv_cart_slot_device*)m_cart), write16_delegate(FUNC(intv_cart_slot_device::write_speech),(intv_cart_slot_device*)m_cart));
408           
409            // passthru for RAM-equipped carts
410            m_maincpu->space(AS_PROGRAM).install_write_handler(0x8800, 0x8fff, write16_delegate(FUNC(intv_cart_slot_device::write_88),(intv_cart_slot_device*)m_cart));
411            m_maincpu->space(AS_PROGRAM).install_write_handler(0xd000, 0xd7ff, write16_delegate(FUNC(intv_cart_slot_device::write_d0),(intv_cart_slot_device*)m_cart));
412            break;
413      }
414
415      m_cart->save_ram();
416   }
717417}
718418
719419
r32581r32582
828528{
829529   return intv_control_r(1);
830530}
831
832READ8_MEMBER( intv_state::intv_ecs_porta_r )
833{
834   if (m_io_ecs_cntrlsel->read() == 0)
835      return intv_control_r(2);
836   else
837      return 0xff; // not sure what to return here, maybe it should be last output?
838}
839
840READ8_MEMBER( intv_state::intv_ecs_portb_r )
841{
842   switch (m_io_ecs_cntrlsel->read())
843   {
844      case 0x00: // hand controller
845      {
846         return intv_control_r(3);
847      }
848      case 0x01: // synthesizer keyboard
849      {
850         UINT8 rv = 0xff;
851         // return correct result if more than one bit of 0xFE is set
852         for (int i = 0; i < 7; i++)
853         {
854            if (BIT(m_ecs_psg_porta, i))
855               rv &= m_ecs_synth[i]->read();
856         }
857         return rv;
858      }
859      case 0x02: // ecs keyboard
860      {
861         UINT8 rv = 0xff;
862         // return correct result if more than one bit of 0xFE is set
863         for (int i = 0; i < 7; i++)
864         {
865            if (BIT(m_ecs_psg_porta, i))
866               rv &= m_ecs_keyboard[i]->read();
867         }
868         return rv;
869      }
870      default:
871         return 0xff;
872   }
873}
874
875WRITE8_MEMBER( intv_state::intv_ecs_porta_w )
876{
877   m_ecs_psg_porta = (~data) & 0xff;
878}
879
880/* Intellivision console + keyboard component */
881
882DEVICE_IMAGE_LOAD_MEMBER( intv_state,intvkbd_cart )
883{
884   if (strcmp(image.device().tag(),":cart1") == 0) /* Legacy cartridge slot */
885   {
886      /* First, initialize these as empty so that the intellivision
887       * will think that the playcable is not attached */
888      UINT8 *memory = m_region_maincpu->base();
889
890      /* assume playcable is absent */
891      memory[0x4800 << 1] = 0xff;
892      memory[(0x4800 << 1) + 1] = 0xff;
893
894      if (image.software_entry() == NULL)
895      {
896         return intv_load_rom_file(image);
897      }
898      // Shouldn't we report failure here???
899   }
900
901   if (strcmp(image.device().tag(),":cart2") == 0) /* Keyboard component cartridge slot */
902   {
903      UINT8 *memory = m_region_keyboard->base();
904
905      /* Assume an 8K cart, like BASIC */
906      image.fread(&memory[0xe000], 0x2000);
907   }
908
909   return IMAGE_INIT_PASS;
910
911}
trunk/src/mess/includes/intv.h
r32581r32582
88#define INTV_H_
99
1010#include "sound/ay8910.h"
11#include "sound/sp0256.h"
1211#include "video/stic.h"
12#include "bus/intv/slot.h"
13#include "bus/intv/voice.h"
14#include "bus/intv/ecs.h"
15#include "bus/intv/keycomp.h"
1316
1417class intv_state : public driver_device
1518{
r32581r32582
2427   intv_state(const machine_config &mconfig, device_type type, const char *tag)
2528      : driver_device(mconfig, type, tag),
2629      m_maincpu(*this, "maincpu"),
27      m_intellivoice(*this, "sp0256_speech"),
28      m_sound(*this, "ay8914.1"),
29      m_ecs_sound(*this, "ay8914.2"),
30      m_sound(*this, "ay8914"),
3031      m_stic(*this, "stic"),
32      m_cart(*this, "cartslot"),
3133      m_intvkbd_dualport_ram(*this, "dualport_ram"),
3234      m_videoram(*this, "videoram"),
3335      m_keyboard(*this, "keyboard"),
36      m_iocart1(*this, "ioslot1"),
37      m_iocart2(*this, "ioslot2"),
3438      m_region_maincpu(*this, "maincpu"),
35      m_region_ecs_rom(*this, "ecs_rom"),
3639      m_region_keyboard(*this, "keyboard"),
37      m_bank1(*this, "bank1"),
38      m_bank2(*this, "bank2"),
39      m_bank3(*this, "bank3"),
40      m_bank4(*this, "bank4"),
4140      m_io_options(*this, "OPTIONS"),
42      m_io_ecs_cntrlsel(*this, "ECS_CNTRLSEL"),
4341      m_io_test(*this, "TEST"),
4442      m_gfxdecode(*this, "gfxdecode"),
45      m_palette(*this, "palette")  { }
43      m_palette(*this, "palette") 
44   { }
4645
4746   required_device<cpu_device> m_maincpu;
48   required_device<sp0256_device> m_intellivoice;
4947   required_device<ay8914_device> m_sound;
50   optional_device<ay8914_device> m_ecs_sound;
5148   required_device<stic_device> m_stic;
49   optional_device<intv_cart_slot_device> m_cart;
5250   optional_shared_ptr<UINT16> m_intvkbd_dualport_ram;
5351   optional_shared_ptr<UINT8> m_videoram;
5452
r32581r32582
6058   DECLARE_WRITE16_MEMBER(intv_ram8_w);
6159   DECLARE_READ16_MEMBER(intv_ram16_r);
6260   DECLARE_WRITE16_MEMBER(intv_ram16_w);
61   DECLARE_READ8_MEMBER(intvkb_iocart_r);
6362
64   DECLARE_READ16_MEMBER(intv_cart_ram8_r);
65   DECLARE_WRITE16_MEMBER(intv_cart_ram8_w);
66
67   DECLARE_READ8_MEMBER( intv_right_control_r );
68   DECLARE_READ8_MEMBER( intv_left_control_r );
69
63   DECLARE_READ8_MEMBER(intv_right_control_r);
64   DECLARE_READ8_MEMBER(intv_left_control_r);
65   
7066   UINT8 m_bus_copy_mode;
7167   UINT8 m_backtab_row;
7268   UINT16 m_ram16[0x160];
7369   int m_sr1_int_pending;
7470   UINT8 m_ram8[256];
75   UINT8 m_cart_ram8[2048];
7671
77   // ecs
78   DECLARE_WRITE16_MEMBER(ecs_bank1_page_select);
79   DECLARE_WRITE16_MEMBER(ecs_bank2_page_select);
80   DECLARE_WRITE16_MEMBER(ecs_bank3_page_select);
81   DECLARE_WRITE16_MEMBER(wsmlb_bank_page_select);
82   DECLARE_READ16_MEMBER(intv_ecs_ram8_r);
83   DECLARE_WRITE16_MEMBER(intv_ecs_ram8_w);
84
85   DECLARE_READ8_MEMBER(intv_ecs_porta_r);
86   DECLARE_WRITE8_MEMBER(intv_ecs_porta_w);
87   DECLARE_READ8_MEMBER(intv_ecs_portb_r);
88
89   UINT8 m_ecs_ram8[2048];
90   UINT8 m_ecs_psg_porta;
91   int m_ecs_bank_src[4];
92
9372   // Keyboard Component
9473   DECLARE_READ8_MEMBER(intvkbd_tms9927_r);
9574   DECLARE_WRITE8_MEMBER(intvkbd_tms9927_w);
r32581r32582
125104   TIMER_CALLBACK_MEMBER(intv_interrupt2_complete);
126105   TIMER_CALLBACK_MEMBER(intv_interrupt_complete);
127106   TIMER_CALLBACK_MEMBER(intv_btb_fill);
128   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(intv_cart);
129   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(intvkbd_cart);
130107
131108protected:
132   int m_is_keybd, m_is_ecs;
109   int m_is_keybd;
133110
134111   optional_device<cpu_device> m_keyboard;
112   optional_device<generic_slot_device> m_iocart1;
113   optional_device<generic_slot_device> m_iocart2;
135114   required_memory_region m_region_maincpu;
136   optional_memory_region m_region_ecs_rom;
137115   optional_memory_region m_region_keyboard;
138   optional_memory_bank m_bank1;
139   optional_memory_bank m_bank2;
140   optional_memory_bank m_bank3;
141   optional_memory_bank m_bank4;
142116   required_ioport m_io_options;
143   optional_ioport m_io_ecs_cntrlsel;
144117   optional_ioport m_io_test;
145118
146119   optional_device<gfxdecode_device> m_gfxdecode;
r32581r32582
151124   ioport_port *m_discx[4];
152125   ioport_port *m_discy[4];
153126   ioport_port *m_intv_keyboard[10];
154   ioport_port *m_ecs_keyboard[7];
155   ioport_port *m_ecs_synth[7];
156   UINT8 *m_bank_base[2];
157127
158128   int intv_load_rom_file(device_image_interface &image);
159129   UINT8 intv_control_r(int hand);
trunk/src/mess/mess.lst
r32581r32582
293293intv      // Mattel Intellivision - 1979 AKA INTV
294294intv2     // Mattel Intellivision II- 1982?
295295intvsrs   // Intellivision (Sears License) - 19??
296intvoice      // Mattel Intellivision + IntelliVoice expansion - 1982
296297
297298// Milton Bradley
298299microvsn  // MicroVision - 1979
r32581r32582
16371638// Mattel
16381639intvkbd   // 1981 - Mattel Intellivision Keyboard Component
16391640// (Test marketed, later recalled)
1640intvecs   // 1983 - Mattel Intellivision ECS
1641intvecs   // 1983 - Mattel Intellivision w/ECS and IntelliVoice expansions
16411642aquarius  // 1983 Aquarius
16421643//aquariu2  // 1984 Aquarius II
16431644juicebox
trunk/src/emu/bus/intv/rom.c
r0r32582
1/***********************************************************************************************************
2
3
4 Mattel Intellivision cart emulation
5
6
7 ***********************************************************************************************************/
8
9
10#include "emu.h"
11#include "rom.h"
12
13
14//-------------------------------------------------
15//  intv_rom_device - constructor
16//-------------------------------------------------
17
18const device_type INTV_ROM_STD = &device_creator<intv_rom_device>;
19const device_type INTV_ROM_RAM = &device_creator<intv_ram_device>;
20const device_type INTV_ROM_GFACT = &device_creator<intv_gfact_device>;
21const device_type INTV_ROM_WSMLB = &device_creator<intv_wsmlb_device>;
22
23
24intv_rom_device::intv_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
25               : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
26                  device_intv_cart_interface( mconfig, *this )
27{
28}
29
30intv_rom_device::intv_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
31               : device_t(mconfig, INTV_ROM_STD, "Intellivision Standard Carts", tag, owner, clock, "intv_rom", __FILE__),
32                  device_intv_cart_interface( mconfig, *this )
33{
34}
35
36intv_ram_device::intv_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
37               : intv_rom_device(mconfig, INTV_ROM_RAM, "Intellivision Carts w/RAM", tag, owner, clock, "intv_ram", __FILE__)
38{
39}
40
41intv_gfact_device::intv_gfact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
42               : intv_rom_device(mconfig, INTV_ROM_GFACT, "Intellivision Game Factory Cart", tag, owner, clock, "intv_gfact", __FILE__)
43{
44}
45
46intv_wsmlb_device::intv_wsmlb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
47               : intv_rom_device(mconfig, INTV_ROM_WSMLB, "Intellivision World Series Baseball Cart", tag, owner, clock, "intv_wsmlb", __FILE__)
48{
49}
50
Property changes on: trunk/src/emu/bus/intv/rom.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/ecs.h
r0r32582
1#ifndef __INTV_ECS_H
2#define __INTV_ECS_H
3
4#include "slot.h"
5#include "rom.h"
6#include "sound/ay8910.h"
7
8
9
10// ======================> intv_ecs_device
11
12class intv_ecs_device : public intv_rom_device
13{
14public:
15   // construction/destruction
16   intv_ecs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
17   
18   // device-level overrides
19   virtual void device_start();
20   virtual void device_reset();
21   virtual machine_config_constructor device_mconfig_additions() const;
22   virtual ioport_constructor device_input_ports() const;
23   virtual const rom_entry *device_rom_region() const;
24   
25   // reading and writing
26
27   // actual ECS accesses
28   // paged ROMs
29   virtual DECLARE_READ16_MEMBER(read_rom20);
30   virtual DECLARE_READ16_MEMBER(read_rom70);
31   virtual DECLARE_READ16_MEMBER(read_rome0);
32   virtual DECLARE_READ16_MEMBER(read_romf0);
33   // RAM
34   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
35   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }   
36   // AY8914
37   virtual DECLARE_READ16_MEMBER(read_ay);
38   virtual DECLARE_WRITE16_MEMBER(write_ay);
39   DECLARE_READ8_MEMBER(ay_porta_r);
40   DECLARE_READ8_MEMBER(ay_portb_r);
41   DECLARE_WRITE8_MEMBER(ay_porta_w);
42   
43   // passthru accesses
44   virtual DECLARE_READ16_MEMBER(read_rom04) { return m_subslot->read_rom04(space, offset, mem_mask); }
45   virtual DECLARE_READ16_MEMBER(read_rom40) { return m_subslot->read_rom40(space, offset, mem_mask); }
46   virtual DECLARE_READ16_MEMBER(read_rom48) { return m_subslot->read_rom48(space, offset, mem_mask); }
47   virtual DECLARE_READ16_MEMBER(read_rom50) { return m_subslot->read_rom50(space, offset, mem_mask); }
48   virtual DECLARE_READ16_MEMBER(read_rom60) { return m_subslot->read_rom60(space, offset, mem_mask); }
49   virtual DECLARE_READ16_MEMBER(read_rom80)
50   {
51      if (m_ram88_enabled && offset >= 0x800)
52         return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
53      else
54         return m_subslot->read_rom80(space, offset, mem_mask);
55   }
56   virtual DECLARE_READ16_MEMBER(read_rom90) { return m_subslot->read_rom90(space, offset, mem_mask); }
57   virtual DECLARE_READ16_MEMBER(read_roma0) { return m_subslot->read_roma0(space, offset, mem_mask); }
58   virtual DECLARE_READ16_MEMBER(read_romb0) { return m_subslot->read_romb0(space, offset, mem_mask); }
59   virtual DECLARE_READ16_MEMBER(read_romc0) { return m_subslot->read_romc0(space, offset, mem_mask); }
60   virtual DECLARE_READ16_MEMBER(read_romd0)
61   {
62      if (m_ramd0_enabled && offset < 0x800)
63         return m_subslot->read_ram(space, offset, mem_mask);
64      else
65         return m_subslot->read_romd0(space, offset, mem_mask);
66   }
67
68   // paged ROM banking
69   virtual DECLARE_WRITE16_MEMBER(write_rom20)
70   {
71      if (offset == 0xfff)
72      {
73         if (data == 0x2a50)
74            m_bank_base[2] = 0;
75         else if (data == 0x2a51)
76            m_bank_base[2] = 1;
77      }
78   }
79   virtual DECLARE_WRITE16_MEMBER(write_rom70)
80   {
81      if (offset == 0xfff)
82      {
83         if (data == 0x7a50)
84            m_bank_base[7] = 0;
85         else if (data == 0x7a51)
86            m_bank_base[7] = 1;
87      }
88   }
89   virtual DECLARE_WRITE16_MEMBER(write_rome0)
90   {
91      if (offset == 0xfff)
92      {
93         if (data == 0xea50)
94            m_bank_base[14] = 0;
95         else if (data == 0xea51)
96            m_bank_base[14] = 1;
97      }
98   }
99   virtual DECLARE_WRITE16_MEMBER(write_romf0)
100   {
101      if (offset == 0xfff)
102      {
103         if (data == 0xfa50)
104            m_bank_base[15] = 0;
105         else if (data == 0xfa51)
106            m_bank_base[15] = 1;
107      }
108   }
109   // RAM passthru write
110   virtual DECLARE_WRITE16_MEMBER(write_88) { if (m_ram88_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
111   virtual DECLARE_WRITE16_MEMBER(write_d0) { if (m_ramd0_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
112   // IntelliVoice passthru
113   virtual DECLARE_READ16_MEMBER(read_speech) { if (m_voice_enabled) return m_subslot->read_speech(space, offset, mem_mask); else return 0xffff; }
114   virtual DECLARE_WRITE16_MEMBER(write_speech) { if (m_voice_enabled) m_subslot->write_speech(space, offset, data, mem_mask); }
115   
116   virtual void late_subslot_setup();
117
118   UINT8 intv_control_r(int hand);
119   
120private:
121
122   required_device<ay8914_device> m_snd;
123   required_device<intv_cart_slot_device> m_subslot;
124   required_ioport_array<7> m_keybd;
125   required_ioport_array<7> m_synth;
126   required_ioport m_cntrlsel;
127   required_ioport m_options;
128   required_ioport_array<2> m_keypad;
129   required_ioport_array<2> m_disc;
130   required_ioport_array<2> m_discx;
131   required_ioport_array<2> m_discy;
132
133   int m_bank_base[0x10];
134   UINT8 m_psg_porta;
135   bool m_voice_enabled, m_ramd0_enabled, m_ram88_enabled;
136};
137
138
139
140
141
142// device type definition
143extern const device_type INTV_ROM_ECS;
144
145#endif
Property changes on: trunk/src/emu/bus/intv/ecs.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/slot.c
r0r32582
1/***********************************************************************************************************
2
3    Mattel Intellivision cart emulation
4    (through slot devices)
5
6 
7    This is a strange beast, because INTV carts had potentially access to
8    a *LOT* of memory ranges!
9    Quoting Joe Zbiciak's documentation for his emu (jzIntv):
10 
11 
12      The Intellivision leaves many addresses available to cartridges.  However,
13      several address ranges come with caveats, such as interactions with other
14      devices in the system, or incompatibilities with various peripherals. 
15 
16      Below is a summary.
17 
18      ADDRESSES      NOTES
19      -------------- --------------------------------------------------------------
20      $0400 - $04FF  RAM/ROM ok on all but Intellivision 2.
21      $0500 - $06FF  RAM/ROM ok.
22      $0700 - $0CFF  RAM/ROM ok if no Intellivoice.
23      $0D00 - $0FFF  RAM/ROM ok.
24      $2000 - $2FFF  RAM/ROM ok if no ECS.
25      $4000 - $47FF  RAM/ROM ok if no ECS.
26      $4800          ROM ok.  RAM ok only if boot ROM at $7000.
27      $4801 - $4FFF  RAM/ROM ok.
28      $5000 - $5014  ROM ok.  RAM ok only if boot ROM at $7000 or $4800.
29      $5015 - $6FFF  RAM/ROM ok. 
30      $7000          ROM ok if no ECS.  RAM at $7000 confuses EXEC boot sequence.
31      $7001 - $77FF  RAM/ROM ok if no ECS.
32      $7800 - $7FFF  ROM ok if no ECS.  Do not map RAM here due to GRAM alias.
33      $8000 - $8FFF  RAM/ROM ok.  Avoid STIC alias at $8000 - $803F.
34      $9000 - $B7FF  RAM/ROM ok.
35      $B800 - $BFFF  ROM ok.  Do not map RAM here due to GRAM alias.
36      $C000 - $CFFF  RAM/ROM ok.  Avoid STIC alias at $C000 - $C03F.
37      $D000 - $DFFF  RAM/ROM ok.
38      $E000 - $EFFF  RAM/ROM ok if no ECS.
39      $F000 - $F7FF  RAM/ROM ok.
40      $F800 - $FFFF  ROM ok.  Do not map RAM here due to GRAM alias.
41 
42 
43    We handle this, by always creating a 0x10000 wide ROM region to load the
44    cart image and exposing the following (long list of) read handlers:
45      read_rom04
46      read_rom20
47      read_rom40
48      read_rom48
49      read_rom50
50      read_rom60
51      read_rom70
52      read_rom80
53      read_rom90
54      read_roma0
55      read_romb0
56      read_romc0
57      read_romd0
58      read_rome0
59      read_romf0
60    Each pcb types will then use the correct ones for its wiring setup.
61 
62    The BIN+CFG format introduced by INTVPC emulator includes metadata about where to
63    load ROM into memory in the CFG file, but we don't support it (because we don't parse
64    the CFG at all) and we rely instead on the intv.hsi metadata for fullpath loading of
65    these.
66    Alternatively, we support the .ROM format used by jzIntv.
67
68
69 TODO:
70    - Convert also the keyboard component to be a passthru slot device
71    - Merge some of the ROM accessor above, once it is clear which ones can be merged
72 
73 ***********************************************************************************************************/
74
75
76#include "emu.h"
77#include "slot.h"
78#include "hashfile.h"
79
80#define INTELLIVOICE_MASK   0x02
81#define ECS_MASK            0x01
82
83//**************************************************************************
84//  GLOBAL VARIABLES
85//**************************************************************************
86
87const device_type INTV_CART_SLOT = &device_creator<intv_cart_slot_device>;
88
89//**************************************************************************
90//    Intellivision Cartridges Interface
91//**************************************************************************
92
93//-------------------------------------------------
94//  device_intv_cart_interface - constructor
95//-------------------------------------------------
96
97device_intv_cart_interface::device_intv_cart_interface(const machine_config &mconfig, device_t &device)
98   : device_slot_card_interface(mconfig, device),
99      m_rom(NULL),
100      m_rom_size(0)
101{
102}
103
104
105//-------------------------------------------------
106//  ~device_intv_cart_interface - destructor
107//-------------------------------------------------
108
109device_intv_cart_interface::~device_intv_cart_interface()
110{
111}
112
113//-------------------------------------------------
114//  rom_alloc - alloc the space for the cart
115//-------------------------------------------------
116
117void device_intv_cart_interface::rom_alloc(UINT32 size, const char *tag)
118{
119   if (m_rom == NULL)
120   {
121      astring tempstring(tag);
122      tempstring.cat(INTVSLOT_ROM_REGION_TAG);
123      m_rom = device().machine().memory().region_alloc(tempstring, size, 1, ENDIANNESS_LITTLE)->base();
124      memset(m_rom, 0xff, size);
125      m_rom_size = size;
126   }
127}
128
129
130//-------------------------------------------------
131//  ram_alloc - alloc the space for the ram
132//-------------------------------------------------
133
134void device_intv_cart_interface::ram_alloc(UINT32 size)
135{
136   m_ram.resize(size);
137}
138
139
140//**************************************************************************
141//  LIVE DEVICE
142//**************************************************************************
143
144//-------------------------------------------------
145//  intv_cart_slot_device - constructor
146//-------------------------------------------------
147intv_cart_slot_device::intv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
148                  device_t(mconfig, INTV_CART_SLOT, "Intellivision Cartridge Slot", tag, owner, clock, "intv_cart_slot", __FILE__),
149                  device_image_interface(mconfig, *this),
150                  device_slot_interface(mconfig, *this),
151                  m_type(INTV_STD)
152{
153}
154
155
156//-------------------------------------------------
157//  intv_cart_slot_device - destructor
158//-------------------------------------------------
159
160intv_cart_slot_device::~intv_cart_slot_device()
161{
162}
163
164//-------------------------------------------------
165//  device_start - device-specific startup
166//-------------------------------------------------
167
168void intv_cart_slot_device::device_start()
169{
170   m_cart = dynamic_cast<device_intv_cart_interface *>(get_card_device());
171}
172
173//-------------------------------------------------
174//  device_config_complete - perform any
175//  operations now that the configuration is
176//  complete
177//-------------------------------------------------
178
179void intv_cart_slot_device::device_config_complete()
180{
181   // set brief and instance name
182   update_names();
183}
184
185
186//-------------------------------------------------
187//  INTV PCB
188//-------------------------------------------------
189
190struct intv_slot
191{
192   int                     pcb_id;
193   const char              *slot_option;
194};
195
196// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
197static const intv_slot slot_list[] =
198{
199   { INTV_STD,     "intv_rom" },
200   { INTV_RAM,     "intv_ram" },
201   { INTV_GFACT,   "intv_gfact" },
202   { INTV_WSMLB,   "intv_wsmlb" },
203   { INTV_VOICE,   "intv_voice" },
204   { INTV_ECS,     "intv_ecs" },
205   { INTV_KEYCOMP, "intv_keycomp" }
206};
207
208static int intv_get_pcb_id(const char *slot)
209{
210   for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
211   {
212      if (!core_stricmp(slot_list[i].slot_option, slot))
213         return slot_list[i].pcb_id;
214   }
215
216   return 0;
217}
218
219#if 1
220static const char *intv_get_slot(int type)
221{
222   for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
223   {
224      if (slot_list[i].pcb_id == type)
225         return slot_list[i].slot_option;
226   }
227
228   return "intv_rom";
229}
230#endif
231
232/*-------------------------------------------------
233 call load
234 -------------------------------------------------*/
235
236int intv_cart_slot_device::load_fullpath()
237{
238   UINT8 temp;
239   UINT8 num_segments;
240   UINT8 start_seg;
241   UINT8 end_seg;
242   
243   UINT32 current_address;
244   UINT32 end_address;
245   
246   UINT8 high_byte;
247   UINT8 low_byte;
248   
249   UINT8 *ROM;
250   const char *file_type = filetype();
251   
252   /* if it is in .rom format, we enter here */
253   if (!core_stricmp (file_type, "rom"))
254   {
255      // header
256      fread(&temp, 1);
257      if (temp != 0xa8)
258         return IMAGE_INIT_FAIL;
259     
260      fread(&num_segments, 1);
261     
262      fread(&temp, 1);
263      if (temp != (num_segments ^ 0xff))
264         return IMAGE_INIT_FAIL;
265
266      m_cart->rom_alloc(0x10000, tag());
267      ROM = (UINT8 *)m_cart->get_rom_base();
268
269      for (int i = 0; i < num_segments; i++)
270      {
271         fread(&start_seg, 1);
272         current_address = start_seg * 0x100;
273         
274         fread(&end_seg, 1);
275         end_address = end_seg * 0x100 + 0xff;
276         
277         while (current_address <= end_address)
278         {
279            fread(&low_byte, 1);
280            ROM[(current_address << 1) + 1] = low_byte;
281            fread(&high_byte, 1);
282            ROM[current_address << 1] = high_byte;
283            current_address++;
284         }
285         
286         // Here we should calculate and compare the CRC16...
287         fread(&temp, 1);
288         fread(&temp, 1);
289      }
290     
291      // Access tables and fine address restriction tables are not supported ATM
292      for (int i = 0; i < (16 + 32 + 2); i++)
293      {
294         fread(&temp, 1);
295      }
296      return IMAGE_INIT_PASS;
297   }
298   /* otherwise, we load it as a .bin file, using extrainfo from intv.hsi in place of .cfg */
299   else
300   {
301      // This code is a blatant hack, due to impossibility to load a separate .cfg file in MESS.
302      // It shall be eventually replaced by the .xml loading
303     
304      // extrainfo format
305      // 1. mapper number (to deal with bankswitch). no bankswitch is mapper 0 (most games).
306      // 2.->5. current images have at most 4 chunks of data. we store here block size and location to load
307      //  (value & 0xf0) >> 4 is the location / 0x1000
308      //  (value & 0x0f) is the size / 0x800
309      // 6. some images have a ram chunk. as above we store location and size in 8 bits
310      // 7. extra = 1 ECS, 2 Intellivoice
311      int start, size;
312      int mapper, rom[5], ram, extra;
313      astring extrainfo;
314
315      m_cart->rom_alloc(0x10000, tag());
316      ROM = (UINT8 *)m_cart->get_rom_base();
317     
318      if (!hashfile_extrainfo(*this, extrainfo))
319      {
320         // If no extrainfo, we assume a single 0x2000 chunk at 0x5000
321         for (int i = 0; i < 0x2000; i++ )
322         {
323            fread(&low_byte, 1);
324            ROM[((0x5000 + i) << 1) + 1] = low_byte;
325            fread(&high_byte, 1);
326            ROM[(0x5000 + i) << 1] = high_byte;
327         }
328      }
329      else
330      {
331         sscanf(extrainfo.cstr() ,"%d %d %d %d %d %d %d", &mapper, &rom[0], &rom[1], &rom[2],
332               &rom[3], &ram, &extra);         
333         //printf("extrainfo: %d %d %d %d %d %d %d \n", mapper, rom[0], rom[1], rom[2], rom[3], ram, extra);
334         
335         if (mapper)
336            logerror("Bankswitch not yet implemented!\n");
337         
338         if (ram)
339         {
340            start = ((ram & 0xf0) >> 4) * 0x1000;
341            size = (ram & 0x0f) * 0x800;
342
343            if (start == 0xd000 && size == 0x800)
344            {
345               m_type = INTV_RAM;
346               m_cart->ram_alloc(0x800);
347            }
348            else if (start == 0x8800 && size == 0x800)
349            {
350               m_type = INTV_GFACT;
351               m_cart->ram_alloc(0x800);
352            }
353            else
354               printf("Unrecognized RAM setup [Start 0x%X - End 0x%X]. Please contact MESSdevs.\n", start, start + size);
355         }
356         if (extra & INTELLIVOICE_MASK)
357         {
358             printf("WARNING: This game requires emulation of the IntelliVoice module.\n");
359         }
360         
361         if (extra & ECS_MASK)
362         {
363            printf("WARNING: This game requires emulation of the ECS module.\n");
364         }
365         
366         for (int j = 0; j < 4; j++)
367         {
368            start = ((rom[j] & 0xf0) >> 4) * 0x1000;
369            size = (rom[j] & 0x0f) * 0x800;
370
371            // some cart has to be loaded to 0x4800, but none of the available ones goes to 0x4000.
372            // Hence, we use 0x04 << 4 in extrainfo (to reduce the stored values) and fix the value here.
373            if (start == 0x4000) start += 0x800;
374           
375//              logerror("step %d: %d %d \n", j, start / 0x1000, size / 0x1000);
376           
377            for (int i = 0; i < size; i++)
378            {
379               fread(&low_byte, 1);
380               ROM[((start + i) << 1) + 1] = low_byte;
381               fread(&high_byte, 1);
382               ROM[(start + i) << 1] = high_byte;
383            }
384         }
385      }
386     
387      return IMAGE_INIT_PASS;
388   }
389}
390
391bool intv_cart_slot_device::call_load()
392{
393   if (m_cart)
394   {
395      if (software_entry() == NULL)
396         return load_fullpath();
397      else
398      {
399         UINT16 offset[] = { 0x400, 0x2000, 0x4000, 0x4800, 0x5000, 0x6000, 0x7000, 0x8000, 0x9000, 0xa000, 0xb000, 0xc000, 0xd000, 0xe000, 0xf000};
400         const char* region_name[] = {"0400", "2000", "4000", "4800", "5000", "6000", "7000", "8000", "9000", "A000", "B000", "C000", "D000", "E000", "F000"};
401         const char *pcb_name = get_feature("slot");
402         bool extra_bank = false;
403
404         if (pcb_name)
405            m_type = intv_get_pcb_id(pcb_name);
406
407         // these two carts have paged roms, which does not work well with our 0x10000 rom region
408         // so if we are loading one of these, we allocate additional 0x2000 bytes for the paged bank
409         if (m_type == INTV_WSMLB)
410            extra_bank = true;
411         
412         UINT32 size = 0;
413         UINT16 address = 0;
414         UINT8 *ROM, *region;
415
416         m_cart->rom_alloc(extra_bank ? 0x22000 : 0x20000, tag());
417         ROM = m_cart->get_rom_base();
418
419         for (int i = 0; i < 15; i++)
420         {
421            address = offset[i];
422            size = get_software_region_length(region_name[i]);
423            if (size)
424            {
425               region = get_software_region(region_name[i]);
426               
427               for (int j = 0; j < size / 2; j++)
428               {
429                  ROM[((address + j) << 1) + 1] = region[2 * j];
430                  ROM[(address + j) << 1] = region[2 * j + 1];
431               }
432            }
433         }
434
435         if (m_type == INTV_RAM || m_type == INTV_GFACT || m_type == INTV_ECS)
436            m_cart->ram_alloc(get_software_region_length("ram"));
437
438         //printf("Type: %s\n", intv_get_slot(m_type));
439         return IMAGE_INIT_PASS;
440      }
441   }
442
443   return IMAGE_INIT_PASS;
444}
445
446
447/*-------------------------------------------------
448 call softlist load
449 -------------------------------------------------*/
450
451bool intv_cart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
452{
453   load_software_part_region(*this, swlist, swname, start_entry);
454   return TRUE;
455}
456
457
458/*-------------------------------------------------
459 get default card software
460 -------------------------------------------------*/
461
462void intv_cart_slot_device::get_default_card_software(astring &result)
463{
464   if (open_image_file(mconfig().options()))
465   {
466      const char *slot_string = "intv_rom";
467      UINT32 len = core_fsize(m_file);
468      dynamic_buffer rom(len);
469      int type = INTV_STD;
470     
471      core_fread(m_file, rom, len);
472
473      if (rom[0] == 0xa8 && (rom[1] == rom[2] ^ 0xff ))
474      {
475         // it's .ROM file, so that we don't have currently any way to distinguish RAM-equipped carts
476      }
477      else
478      {
479         // assume it's .BIN and try to use .hsi file to determine type (just RAM)
480         int start;
481         int mapper, rom[5], ram, extra;
482         astring extrainfo;
483         
484         if (hashfile_extrainfo(*this, extrainfo))
485         {
486            sscanf(extrainfo.cstr() ,"%d %d %d %d %d %d %d", &mapper, &rom[0], &rom[1], &rom[2],
487                  &rom[3], &ram, &extra);         
488           
489            if (ram)
490            {
491               start = ((ram & 0xf0) >> 4) * 0x1000;
492               if (start == 0xd000)
493                  type = INTV_RAM;
494               if (start == 0x8800)
495                  type = INTV_GFACT;
496            }
497         }
498           
499      }
500
501      slot_string = intv_get_slot(type);
502
503      //printf("type: %s\n", slot_string);
504      clear();
505
506      result.cpy(slot_string);
507      return;
508   }
509   software_get_default_slot(result, "intv_rom");
510}
511
512/*-------------------------------------------------
513 read_ay
514 -------------------------------------------------*/
515
516READ16_MEMBER(intv_cart_slot_device::read_ay)
517{
518   if (m_cart)
519      return m_cart->read_ay(space, offset, mem_mask);
520   else
521      return 0xffff;
522}
523
524/*-------------------------------------------------
525 write_ay
526 -------------------------------------------------*/
527
528WRITE16_MEMBER(intv_cart_slot_device::write_ay)
529{
530   if (m_cart)
531      m_cart->write_ay(space, offset, data, mem_mask);
532}
533
534/*-------------------------------------------------
535 read_speech
536 -------------------------------------------------*/
537
538READ16_MEMBER(intv_cart_slot_device::read_speech)
539{
540   if (m_cart)
541      return m_cart->read_speech(space, offset, mem_mask);
542   else
543      return 0xffff;
544}
545
546/*-------------------------------------------------
547 write_speech
548 -------------------------------------------------*/
549
550WRITE16_MEMBER(intv_cart_slot_device::write_speech)
551{
552   if (m_cart)
553      m_cart->write_speech(space, offset, data, mem_mask);
554}
555
556
557
558#include "bus/intv/rom.h"
559#include "bus/intv/ecs.h"
560//#include "bus/intv/keycomp.h"
561#include "bus/intv/voice.h"
562
563SLOT_INTERFACE_START(intv_cart)
564   SLOT_INTERFACE_INTERNAL("intv_rom",     INTV_ROM_STD)
565   SLOT_INTERFACE_INTERNAL("intv_ram",     INTV_ROM_RAM)
566   SLOT_INTERFACE_INTERNAL("intv_gfact",   INTV_ROM_GFACT)
567   SLOT_INTERFACE_INTERNAL("intv_wsmlb",   INTV_ROM_WSMLB)
568   SLOT_INTERFACE_INTERNAL("intv_voice",   INTV_ROM_VOICE)
569   SLOT_INTERFACE_INTERNAL("intv_ecs",     INTV_ROM_ECS)
570//   SLOT_INTERFACE_INTERNAL("intv_keycomp", INTV_ROM_KEYCOMP)
571SLOT_INTERFACE_END
572
Property changes on: trunk/src/emu/bus/intv/slot.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/rom.h
r0r32582
1#ifndef __INTV_ROM_H
2#define __INTV_ROM_H
3
4#include "slot.h"
5
6
7// ======================> intv_rom_device
8
9class intv_rom_device : public device_t,
10                  public device_intv_cart_interface
11{
12public:
13   // construction/destruction
14   intv_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
15   intv_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
16   
17   // reading and writing
18   virtual DECLARE_READ16_MEMBER(read_rom04) { return INTV_ROM16_READ(offset + 0x0400); }
19   virtual DECLARE_READ16_MEMBER(read_rom20) { return INTV_ROM16_READ(offset + 0x2000); }
20   virtual DECLARE_READ16_MEMBER(read_rom40) { return INTV_ROM16_READ(offset + 0x4000); }
21   virtual DECLARE_READ16_MEMBER(read_rom48) { return INTV_ROM16_READ(offset + 0x4800); }
22   virtual DECLARE_READ16_MEMBER(read_rom50) { return INTV_ROM16_READ(offset + 0x5000); }
23   virtual DECLARE_READ16_MEMBER(read_rom60) { return INTV_ROM16_READ(offset + 0x6000); }
24   virtual DECLARE_READ16_MEMBER(read_rom70) { return INTV_ROM16_READ(offset + 0x7000); }
25   virtual DECLARE_READ16_MEMBER(read_rom80) { return INTV_ROM16_READ(offset + 0x8000); }
26   virtual DECLARE_READ16_MEMBER(read_rom90) { return INTV_ROM16_READ(offset + 0x9000); }
27   virtual DECLARE_READ16_MEMBER(read_roma0) { return INTV_ROM16_READ(offset + 0xa000); }
28   virtual DECLARE_READ16_MEMBER(read_romb0) { return INTV_ROM16_READ(offset + 0xb000); }
29   virtual DECLARE_READ16_MEMBER(read_romc0) { return INTV_ROM16_READ(offset + 0xc000); }
30   virtual DECLARE_READ16_MEMBER(read_romd0) { return INTV_ROM16_READ(offset + 0xd000); }
31   virtual DECLARE_READ16_MEMBER(read_rome0) { return INTV_ROM16_READ(offset + 0xe000); }
32   virtual DECLARE_READ16_MEMBER(read_romf0) { return INTV_ROM16_READ(offset + 0xf000); }
33   
34   // device-level overrides
35   virtual void device_start() {}
36   virtual void device_reset() {}
37};
38
39// ======================> intv_ram_device
40
41class intv_ram_device : public intv_rom_device
42{
43public:
44   // construction/destruction
45   intv_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
46   
47   // reading and writing
48   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
49   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
50};
51
52// ======================> intv_gfact_device
53
54class intv_gfact_device : public intv_rom_device
55{
56public:
57   // construction/destruction
58   intv_gfact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
59   
60   // reading and writing
61   virtual DECLARE_READ16_MEMBER(read_ram) { return (int)m_ram[offset & (m_ram.count() - 1)]; }
62   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_ram[offset & (m_ram.count() - 1)] = data & 0xff; }
63};
64
65// ======================> intv_wsmlb_device
66
67class intv_wsmlb_device : public intv_rom_device
68{
69public:
70   // construction/destruction
71   intv_wsmlb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
72};
73
74
75
76// device type definition
77extern const device_type INTV_ROM_STD;
78extern const device_type INTV_ROM_RAM;
79extern const device_type INTV_ROM_GFACT;
80extern const device_type INTV_ROM_WSMLB;
81
82#endif
Property changes on: trunk/src/emu/bus/intv/rom.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/voice.c
r0r32582
1/***********************************************************************************************************
2
3
4 Mattel Intellivoice cart emulation
5
6 TODO:
7   - speech ROM shall be loaded from softlist
8
9 ***********************************************************************************************************/
10
11
12#include "emu.h"
13#include "voice.h"
14
15
16//-------------------------------------------------
17//  intv_voice_device - constructor
18//-------------------------------------------------
19
20const device_type INTV_ROM_VOICE = &device_creator<intv_voice_device>;
21
22intv_voice_device::intv_voice_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
23            : intv_rom_device(mconfig, INTV_ROM_VOICE, "Intellivision Intellivoice Expansion", tag, owner, clock, "intv_voice", __FILE__),
24            m_speech(*this, "sp0256_speech"),
25            m_subslot(*this, "subslot"),
26            m_ramd0_enabled(false),
27            m_ram88_enabled(false)
28{
29}
30
31//-------------------------------------------------
32//  device_start - device-specific startup
33//-------------------------------------------------
34
35void intv_voice_device::device_start()
36{
37}
38
39void intv_voice_device::late_subslot_setup()
40{
41   switch (m_subslot->get_type())
42   {
43      case INTV_RAM:
44         m_ramd0_enabled = true;
45         break;
46      case INTV_GFACT:
47         m_ram88_enabled = true;
48         break;
49      case INTV_VOICE:
50         printf("WARNING: You cannot connect serially multiple IntelliVoice units.\n");
51         printf("WARNING: Emulation will likely misbehave.\n");
52         break;
53      case INTV_ECS:
54         printf("WARNING: You cannot connect ECS to IntelliVoice in this manner.\n");
55         printf("WARNING: Emulation will likely misbehave.\n");
56         break;
57      case INTV_KEYCOMP:
58         printf("WARNING: You cannot connect the Keyboard component to the IntelliVoice unit.\n");
59         printf("WARNING: Emulation will likely misbehave.\n");
60         break;
61   }
62}
63
64
65//-------------------------------------------------
66//  MACHINE_CONFIG_FRAGMENT( intellivoice )
67//-------------------------------------------------
68
69static MACHINE_CONFIG_FRAGMENT( intellivoice )
70   MCFG_SPEAKER_STANDARD_MONO("mono_voice")
71
72   MCFG_SOUND_ADD("sp0256_speech", SP0256, 3120000)
73   /* The Intellivoice uses a speaker with its own volume control so the relative volumes to use are subjective */
74   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono_voice", 1.00)
75
76   MCFG_INTV_CARTRIDGE_ADD("subslot", intv_cart, NULL)
77MACHINE_CONFIG_END
78
79
80//-------------------------------------------------
81//  machine_config_additions - device-specific
82//  machine configurations
83//-------------------------------------------------
84
85machine_config_constructor intv_voice_device::device_mconfig_additions() const
86{
87   return MACHINE_CONFIG_NAME( intellivoice );
88}
89
90
91ROM_START( intellivoice )
92   ROM_REGION( 0x10000, "sp0256_speech", 0 )
93   /* SP0256-012 Speech chip w/2KiB mask rom */
94   ROM_LOAD( "sp0256-012.bin",   0x1000, 0x0800, CRC(0de7579d) SHA1(618563e512ff5665183664f52270fa9606c9d289) )
95ROM_END
96
97const rom_entry *intv_voice_device::device_rom_region() const
98{
99   return ROM_NAME( intellivoice );
100}
101
102/*-------------------------------------------------
103 read_audio
104 -------------------------------------------------*/
105
106READ16_MEMBER(intv_voice_device::read_speech)
107{
108   if (ACCESSING_BITS_0_7)
109      return m_speech->spb640_r(space, offset, mem_mask);
110   else
111      return 0xff;
112}
113
114/*-------------------------------------------------
115 write_audio
116 -------------------------------------------------*/
117
118WRITE16_MEMBER(intv_voice_device::write_speech)
119{
120   if (ACCESSING_BITS_0_7)
121      return m_speech->spb640_w(space, offset, data, mem_mask);
122}
Property changes on: trunk/src/emu/bus/intv/voice.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/slot.h
r0r32582
1#ifndef __INTV_SLOT_H
2#define __INTV_SLOT_H
3
4/***************************************************************************
5 TYPE DEFINITIONS
6 ***************************************************************************/
7
8
9/* PCB */
10enum
11{
12   INTV_STD = 0,
13   INTV_RAM,
14   INTV_GFACT,   // has RAM too but at diff offset
15   INTV_WSMLB,
16   INTV_VOICE,
17   INTV_ECS,
18   INTV_KEYCOMP
19};
20
21
22#define INTV_ROM16_READ(addr) \
23   (UINT16) (m_rom[(addr) << 1] | (m_rom[((addr) << 1) + 1] << 8))
24
25
26// ======================> device_intv_cart_interface
27
28class device_intv_cart_interface : public device_slot_card_interface
29{
30public:
31   // construction/destruction
32   device_intv_cart_interface(const machine_config &mconfig, device_t &device);
33   virtual ~device_intv_cart_interface();
34
35   // reading and writing
36   virtual DECLARE_READ16_MEMBER(read_rom04) { return 0xffff; }
37   virtual DECLARE_READ16_MEMBER(read_rom20) { return 0xffff; }
38   virtual DECLARE_READ16_MEMBER(read_rom40) { return 0xffff; }
39   virtual DECLARE_READ16_MEMBER(read_rom48) { return 0xffff; }
40   virtual DECLARE_READ16_MEMBER(read_rom50) { return 0xffff; }
41   virtual DECLARE_READ16_MEMBER(read_rom60) { return 0xffff; }
42   virtual DECLARE_READ16_MEMBER(read_rom70) { return 0xffff; }
43   virtual DECLARE_READ16_MEMBER(read_rom80) { return 0xffff; }
44   virtual DECLARE_READ16_MEMBER(read_rom90) { return 0xffff; }
45   virtual DECLARE_READ16_MEMBER(read_roma0) { return 0xffff; }
46   virtual DECLARE_READ16_MEMBER(read_romb0) { return 0xffff; }
47   virtual DECLARE_READ16_MEMBER(read_romc0) { return 0xffff; }
48   virtual DECLARE_READ16_MEMBER(read_romd0) { return 0xffff; }
49   virtual DECLARE_READ16_MEMBER(read_rome0) { return 0xffff; }
50   virtual DECLARE_READ16_MEMBER(read_romf0) { return 0xffff; }
51
52   virtual DECLARE_READ16_MEMBER(read_ram) { return 0xffff; }
53   virtual DECLARE_WRITE16_MEMBER(write_ram) {}
54   
55   // Used by IntelliVoice & ECS
56   virtual DECLARE_READ16_MEMBER(read_ay) { return 0xffff; }
57   virtual DECLARE_WRITE16_MEMBER(write_ay) {}
58   virtual DECLARE_READ16_MEMBER(read_speech) { return 0xffff; }
59   virtual DECLARE_WRITE16_MEMBER(write_speech) {}
60   virtual DECLARE_WRITE16_MEMBER(write_d0) {}
61   virtual DECLARE_WRITE16_MEMBER(write_88) {}
62   virtual DECLARE_WRITE16_MEMBER(write_rom20) {}
63   virtual DECLARE_WRITE16_MEMBER(write_rom70) {}
64   virtual DECLARE_WRITE16_MEMBER(write_rome0) {}
65   virtual DECLARE_WRITE16_MEMBER(write_romf0) {}
66
67   void rom_alloc(UINT32 size, const char *tag);
68   void ram_alloc(UINT32 size);
69   UINT8* get_rom_base() { return m_rom; }
70   UINT8* get_ram_base() { return m_ram; }
71   UINT32 get_rom_size() { return m_rom_size; }
72   UINT32 get_ram_size() { return m_ram.count(); }
73
74   void save_ram()   { device().save_item(NAME(m_ram)); }
75   virtual void late_subslot_setup() {}
76
77protected:
78   // internal state
79   UINT8 *m_rom;
80   UINT32 m_rom_size;
81   dynamic_buffer m_ram;
82};
83
84
85// ======================> intv_cart_slot_device
86
87class intv_cart_slot_device : public device_t,
88                        public device_image_interface,
89                        public device_slot_interface
90{
91public:
92   // construction/destruction
93   intv_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
94   virtual ~intv_cart_slot_device();
95
96   // device-level overrides
97   virtual void device_start();
98   virtual void device_config_complete();
99
100   // image-level overrides
101   virtual bool call_load();
102   virtual void call_unload() {}
103   virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry);
104
105   int get_type() { return m_type; }
106   int load_fullpath();
107
108   void save_ram()   { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
109
110   virtual iodevice_t image_type() const { return IO_CARTSLOT; }
111   virtual bool is_readable()  const { return 1; }
112   virtual bool is_writeable() const { return 0; }
113   virtual bool is_creatable() const { return 0; }
114   virtual bool must_be_loaded() const { return 0; }
115   virtual bool is_reset_on_load() const { return 1; }
116   virtual const option_guide *create_option_guide() const { return NULL; }
117   virtual const char *image_interface() const { return "intv_cart"; }
118   virtual const char *file_extensions() const { return "bin,int,rom,itv"; }
119
120   // slot interface overrides
121   virtual void get_default_card_software(astring &result);
122
123   // reading and writing
124   virtual DECLARE_READ16_MEMBER(read_rom04) { if (m_cart) return m_cart->read_rom04(space, offset, mem_mask); else return 0xffff; }
125   virtual DECLARE_READ16_MEMBER(read_rom20) { if (m_cart) return m_cart->read_rom20(space, offset, mem_mask); else return 0xffff; }
126   virtual DECLARE_READ16_MEMBER(read_rom40) { if (m_cart) return m_cart->read_rom40(space, offset, mem_mask); else return 0xffff; }
127   virtual DECLARE_READ16_MEMBER(read_rom48) { if (m_cart) return m_cart->read_rom48(space, offset, mem_mask); else return 0xffff; }
128   virtual DECLARE_READ16_MEMBER(read_rom50) { if (m_cart) return m_cart->read_rom50(space, offset, mem_mask); else return 0xffff; }
129   virtual DECLARE_READ16_MEMBER(read_rom60) { if (m_cart) return m_cart->read_rom60(space, offset, mem_mask); else return 0xffff; }
130   virtual DECLARE_READ16_MEMBER(read_rom70) { if (m_cart) return m_cart->read_rom70(space, offset, mem_mask); else return 0xffff; }
131   virtual DECLARE_READ16_MEMBER(read_rom80) { if (m_cart) return m_cart->read_rom80(space, offset, mem_mask); else return 0xffff; }
132   virtual DECLARE_READ16_MEMBER(read_rom90) { if (m_cart) return m_cart->read_rom90(space, offset, mem_mask); else return 0xffff; }
133   virtual DECLARE_READ16_MEMBER(read_roma0) { if (m_cart) return m_cart->read_roma0(space, offset, mem_mask); else return 0xffff; }
134   virtual DECLARE_READ16_MEMBER(read_romb0) { if (m_cart) return m_cart->read_romb0(space, offset, mem_mask); else return 0xffff; }
135   virtual DECLARE_READ16_MEMBER(read_romc0) { if (m_cart) return m_cart->read_romc0(space, offset, mem_mask); else return 0xffff; }
136   virtual DECLARE_READ16_MEMBER(read_romd0) { if (m_cart) return m_cart->read_romd0(space, offset, mem_mask); else return 0xffff; }
137   virtual DECLARE_READ16_MEMBER(read_rome0) { if (m_cart) return m_cart->read_rome0(space, offset, mem_mask); else return 0xffff; }
138   virtual DECLARE_READ16_MEMBER(read_romf0) { if (m_cart) return m_cart->read_romf0(space, offset, mem_mask); else return 0xffff; }
139   
140   virtual DECLARE_READ16_MEMBER(read_ay);
141   virtual DECLARE_WRITE16_MEMBER(write_ay);
142   virtual DECLARE_READ16_MEMBER(read_speech);
143   virtual DECLARE_WRITE16_MEMBER(write_speech);
144   virtual DECLARE_READ16_MEMBER(read_ram) { if (m_cart) return m_cart->read_ram(space, offset, mem_mask); else return 0xffff; }
145   virtual DECLARE_WRITE16_MEMBER(write_ram) { if (m_cart) m_cart->write_ram(space, offset, data, mem_mask); }
146
147   virtual void late_subslot_setup() { if (m_cart) return m_cart->late_subslot_setup(); }
148
149   // these RAM accessors are needed to deal with IntelliVoice and ECS mounting RAM-equipped carts
150   virtual DECLARE_WRITE16_MEMBER(write_d0) { if (m_cart) m_cart->write_d0(space, offset, data, mem_mask); }
151   virtual DECLARE_WRITE16_MEMBER(write_88) { if (m_cart) m_cart->write_88(space, offset, data, mem_mask); }
152
153   // ECS paged roms need these
154   virtual DECLARE_WRITE16_MEMBER(write_rom20) { if (m_cart) m_cart->write_rom20(space, offset, data, mem_mask); }
155   virtual DECLARE_WRITE16_MEMBER(write_rom70) { if (m_cart) m_cart->write_rom70(space, offset, data, mem_mask); }
156   virtual DECLARE_WRITE16_MEMBER(write_rome0) { if (m_cart) m_cart->write_rome0(space, offset, data, mem_mask); }
157   virtual DECLARE_WRITE16_MEMBER(write_romf0) { if (m_cart) m_cart->write_romf0(space, offset, data, mem_mask); }
158
159//protected:
160
161   int m_type;
162   device_intv_cart_interface*       m_cart;
163};
164
165
166
167// device type definition
168extern const device_type INTV_CART_SLOT;
169
170
171/***************************************************************************
172 DEVICE CONFIGURATION MACROS
173 ***************************************************************************/
174
175#define INTVSLOT_ROM_REGION_TAG ":cart:rom"
176
177#define MCFG_INTV_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
178   MCFG_DEVICE_ADD(_tag, INTV_CART_SLOT, 0) \
179   MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
180
181
182SLOT_INTERFACE_EXTERN(intv_cart);
183
184#endif
Property changes on: trunk/src/emu/bus/intv/slot.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/ecs.c
r0r32582
1/***********************************************************************************************************
2
3
4 Mattel Intellivision Entertainment Computer System expansion emulation
5
6 TODO:
7   - Make paged rom emulation more accurate (according to
8   http://spatula-city.org/~im14u2c/intv/tech/ecs.html
9   writes to $xa5y should be available for every x and every y, i.e. we shall
10   have writes to every 4K chunk of the memory map, and there shall be 16 pages
11   for each)
12   Current emulation is instead tailored around the minimal usage necessary to
13   make the main expansion and World Series Major League Baseball happy
14
15 ***********************************************************************************************************/
16
17
18#include "emu.h"
19#include "ecs.h"
20
21
22//-------------------------------------------------
23//  intv_ecs_device - constructor
24//-------------------------------------------------
25
26const device_type INTV_ROM_ECS = &device_creator<intv_ecs_device>;
27
28intv_ecs_device::intv_ecs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
29               : intv_rom_device(mconfig, INTV_ROM_ECS, "Intellivision ECS Expansion", tag, owner, clock, "intv_ecs", __FILE__),
30               m_snd(*this, "ay8914"),
31               m_subslot(*this, "subslot"),
32               m_keybd(*this, "ROW"),
33               m_synth(*this, "SYNTH"),
34               m_cntrlsel(*this, "CNTRLSEL"),
35               m_options(*this, "OPTIONS"),
36               m_keypad(*this, "KEYPAD"),
37               m_disc(*this, "DISC"),
38               m_discx(*this, "DISCX"),
39               m_discy(*this, "DISCY"),
40               m_psg_porta(0),
41               m_voice_enabled(false),
42               m_ramd0_enabled(false),
43               m_ram88_enabled(false)
44{
45}
46
47
48//-------------------------------------------------
49//  device_start - device-specific startup
50//-------------------------------------------------
51
52void intv_ecs_device::device_start()
53{
54   // if the ECS is mounted directly in the system, use device rom and alloc RAM
55   if (m_rom == NULL)
56   {
57      astring region_tag;
58      m_rom = memregion(region_tag.cpy(tag()).cat(":ecs"))->base();
59   }
60   if (!m_ram.count())
61   {
62      m_ram.resize(0x800);
63   }
64
65   save_item(NAME(m_bank_base));
66   save_item(NAME(m_psg_porta));
67}
68
69void intv_ecs_device::device_reset()
70{   
71   memset(m_bank_base, 0, sizeof(m_bank_base));
72}
73
74void intv_ecs_device::late_subslot_setup()
75{   
76   switch (m_subslot->get_type())
77   {
78      case INTV_RAM:
79         m_ramd0_enabled = true;
80         break;
81      case INTV_GFACT:
82         m_ram88_enabled = true;
83         break;
84      case INTV_VOICE:
85         m_voice_enabled = true;
86         m_subslot->late_subslot_setup();
87         break;
88      case INTV_ECS:
89         printf("WARNING: You cannot connect serially multiple ECS units.\n");
90         printf("WARNING: Emulation will likely misbehave.\n");
91         break;
92      case INTV_KEYCOMP:
93         printf("WARNING: You cannot connect the Keyboard component to the ECS unit.\n");
94         printf("WARNING: Emulation will likely misbehave.\n");
95         break;
96   }
97}
98
99//-------------------------------------------------
100//  MACHINE_CONFIG_FRAGMENT( sub_slot )
101//-------------------------------------------------
102
103UINT8 intv_ecs_device::intv_control_r(int hand)
104{
105   static const UINT8 keypad_table[] =
106   {
107      0xFF, 0x3F, 0x9F, 0x5F, 0xD7, 0xB7, 0x77, 0xDB,
108      0xBB, 0x7B, 0xDD, 0xBD, 0x7D, 0xDE, 0xBE, 0x7E
109   };
110   
111   static const UINT8 disc_table[] =
112   {
113      0xF3, 0xE3, 0xE7, 0xF7, 0xF6, 0xE6, 0xEE, 0xFE,
114      0xFC, 0xEC, 0xED, 0xFD, 0xF9, 0xE9, 0xEB, 0xFB
115   };
116   
117   static const UINT8 discyx_table[5][5] =
118   {
119      { 0xE3, 0xF3, 0xFB, 0xEB, 0xE9 },
120      { 0xE7, 0xE3, 0xFB, 0xE9, 0xF9 },
121      { 0xF7, 0xF7, 0xFF, 0xFD, 0xFD },
122      { 0xF6, 0xE6, 0xFE, 0xEC, 0xED },
123      { 0xE6, 0xEE, 0xFE, 0xFC, 0xEC }
124   };
125   
126   int x, y;
127   UINT8 val = 0xff;
128   
129   /* keypad */
130   x = m_keypad[hand]->read();
131   for (y = 0; y < 16; y++)
132   {
133      if (x & (1 << y))
134      {
135         val &= keypad_table[y];
136      }
137   }
138   
139   switch ((m_options->read() >> hand) & 4)
140   {
141      case 0: /* disc == digital */
142      default:
143         
144         x = m_disc[hand]->read();
145         for (y = 0; y < 16; y++)
146         {
147            if (x & (1 << y))
148            {
149               val &= disc_table[y];
150            }
151         }
152         break;
153         
154      case 1: /* disc == _fake_ analog */
155         
156         x = m_discx[hand]->read();
157         y = m_discy[hand]->read();
158         val &= discyx_table[y / 32][x / 32];
159   }
160   
161   return val;
162}
163
164READ8_MEMBER( intv_ecs_device::ay_porta_r )
165{
166   if (m_cntrlsel->read() == 0)
167      return intv_control_r(0);
168   else
169      return 0xff; // not sure what to return here, maybe it should be last output?
170}
171
172READ8_MEMBER( intv_ecs_device::ay_portb_r )
173{
174   switch (m_cntrlsel->read())
175   {
176      case 0x00: // hand controller
177         return intv_control_r(1);
178
179      case 0x01: // synthesizer keyboard
180      {
181         UINT8 val = 0xff;
182         // return correct result if more than one bit of 0xFE is set
183         for (int i = 0; i < 7; i++)
184         {
185            if (BIT(m_psg_porta, i))
186               val &= m_synth[i]->read();
187         }
188         return val;
189      }
190      case 0x02: // ecs keyboard
191      {
192         UINT8 val = 0xff;
193         // return correct result if more than one bit of 0xFE is set
194         for (int i = 0; i < 7; i++)
195         {
196            if (BIT(m_psg_porta, i))
197               val &= m_keybd[i]->read();
198         }
199         return val;
200      }
201      default:
202         return 0xff;
203   }
204}
205
206WRITE8_MEMBER( intv_ecs_device::ay_porta_w )
207{
208   m_psg_porta = (~data) & 0xff;
209}
210
211static MACHINE_CONFIG_FRAGMENT( sub_slot )
212   MCFG_SPEAKER_STANDARD_MONO("mono_ecs")
213
214   MCFG_SOUND_ADD("ay8914", AY8914, XTAL_3_579545MHz/2)
215   MCFG_AY8910_PORT_A_READ_CB(READ8(intv_ecs_device, ay_porta_r))
216   MCFG_AY8910_PORT_B_READ_CB(READ8(intv_ecs_device, ay_portb_r))
217   MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(intv_ecs_device, ay_porta_w))
218   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono_ecs", 0.33)
219
220   MCFG_INTV_CARTRIDGE_ADD("subslot", intv_cart, NULL)
221MACHINE_CONFIG_END
222
223
224machine_config_constructor intv_ecs_device::device_mconfig_additions() const
225{
226   return MACHINE_CONFIG_NAME( sub_slot );
227}
228
229
230ROM_START( ecs )
231   ROM_REGION( 0x20000, "ecs", ROMREGION_ERASEFF )
232   ROM_LOAD16_WORD_SWAP( "ecs_rom.20", 0x04000, 0x2000, CRC(5f9d05e5) SHA1(083a3e7405b8f8b4b8a5003ca9c31b8d824b535c))
233   ROM_LOAD16_WORD_SWAP( "ecs_rom.70", 0x0e000, 0x2000, CRC(46bb1f48) SHA1(eda44a8476fdada1ae90fba0d0287611e2efa074))
234   ROM_LOAD16_WORD_SWAP( "ecs_rom.e0", 0x1c000, 0x2000, CRC(c2ebcd90) SHA1(b3c14955f56c57e6f0d8fbb695771946cfcf6582))
235ROM_END
236
237const rom_entry *intv_ecs_device::device_rom_region() const
238{
239   return ROM_NAME( ecs );
240}
241
242
243static INPUT_PORTS_START( intv_ecs_kbd )
244/*
245 ECS matrix scanned by setting 0xFE bits to output and reading 0xFF
246 ECS Keyboard Layout:
247 FF\FE  Bit 7   Bit 6   Bit 5   Bit 4   Bit 3   Bit 2   Bit 1   Bit 0
248 Bit 0  NC      RTN     0       ESC     P       ;       .       (left)
249 Bit 1  L       O       8       9       I       K       M       ,
250 Bit 2  J       U       6       7       Y       H       B       N
251 Bit 3  G       T       4       5       R       F       C       V
252 Bit 4  D       E       2       3       W       S       Z       X
253 Bit 5  A       CTL     (right) 1       Q       (up)    (down)  (space)
254 Bit 6  SHIFT   NC      NC      NC      NC      NC      NC      NC
255 
256 Shifted keys that differ from pc:
257 Key        : 1 2 5 6 7 (left) (right) (up) (down)
258 Shift + key: = " + - /  %      '       ^    ?
259 */
260
261   PORT_START("ROW.0")
262   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
263   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RTN")               PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
264   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0)           PORT_CHAR('0') PORT_CHAR(')') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
265   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ESC)     PORT_CHAR(UCHAR_MAMEKEY(ESC)) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
266   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P)           PORT_CHAR('P') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
267   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON)   PORT_CHAR(';') PORT_CHAR(':') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
268   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP)        PORT_CHAR('.') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
269   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT)        PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR('%') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
270
271   PORT_START("ROW.1")
272   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L)           PORT_CHAR('L') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
273   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O)           PORT_CHAR('O') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
274   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8)           PORT_CHAR('8') PORT_CHAR('*') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
275   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9)           PORT_CHAR('9') PORT_CHAR('(') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
276   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I)           PORT_CHAR('I') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
277   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K)           PORT_CHAR('K') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
278   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M)           PORT_CHAR('M') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
279   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA)   PORT_CHAR(',') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
280
281   PORT_START("ROW.2")
282   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J)           PORT_CHAR('J') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
283   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U)           PORT_CHAR('U') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
284   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6)           PORT_CHAR('6') PORT_CHAR('-') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
285   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7)           PORT_CHAR('7') PORT_CHAR('/') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
286   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y)           PORT_CHAR('Y') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
287   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_H)           PORT_CHAR('H') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
288   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B)           PORT_CHAR('B') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
289   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N)           PORT_CHAR('N') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
290
291   PORT_START("ROW.3")
292   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_G)           PORT_CHAR('G') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
293   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_T)           PORT_CHAR('T') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
294   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4)           PORT_CHAR('4') PORT_CHAR('$') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
295   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5)           PORT_CHAR('5') PORT_CHAR('%') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
296   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R)           PORT_CHAR('R') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
297   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F)           PORT_CHAR('F') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
298   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C)           PORT_CHAR('C') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
299   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V)           PORT_CHAR('V') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
300
301   PORT_START("ROW.4")
302   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D)           PORT_CHAR('D') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
303   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E)           PORT_CHAR('E') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
304   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2)           PORT_CHAR('2') PORT_CHAR('"') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
305   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3)           PORT_CHAR('3') PORT_CHAR('#') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
306   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W)           PORT_CHAR('W') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
307   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S)           PORT_CHAR('S') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
308   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z)           PORT_CHAR('Z') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
309   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X)           PORT_CHAR('X') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
310
311   PORT_START("ROW.5")
312   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A)           PORT_CHAR('A') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
313   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CTL") PORT_CODE(KEYCODE_RCONTROL) PORT_CODE(KEYCODE_LCONTROL) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
314   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT)   PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR('\'') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
315   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1)           PORT_CHAR('1') PORT_CHAR('=') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
316   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q)           PORT_CHAR('Q') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
317   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP)      PORT_CHAR(UCHAR_MAMEKEY(UP)) PORT_CHAR('^') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
318   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN)        PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR('?') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
319   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE)   PORT_CHAR(' ') PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
320
321   PORT_START("ROW.6")
322   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_RSHIFT) PORT_CODE(KEYCODE_LSHIFT)  PORT_CHAR(UCHAR_SHIFT_1) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x02)
323   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
324   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
325   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
326   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
327   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
328   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
329   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
330INPUT_PORTS_END
331
332static INPUT_PORTS_START( intv_ecs_synth )
333/*
334 ECS Synthesizer Layout:
335 FF\FE  Bit 7   Bit 6   Bit 5   Bit 4   Bit 3   Bit 2   Bit 1   Bit 0
336 Bit 0  G2      Gb2     F2      E2      Eb2     D2      Db2     C2
337 Bit 1  Eb3     D3      Db3     C3      B2      Bb2     A2      Ab2
338 Bit 2  B3      Bb3     A3      Ab3     G3      Gb3     F3      E3
339 Bit 3  G4      Gb4     F4      E4      Eb4     D4      Db4     C4
340 Bit 4  Eb5     D5      Db5     C5      B4      Bb4     A4      Ab4
341 Bit 5  B5      Bb5     A5      Ab5     G5      Gb5     F5      E5
342 Bit 6  C6      NC      NC      NC      NC      NC      NC      NC
343 */
344   PORT_START("SYNTH.0")
345   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
346   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
347   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
348   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
349   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
350   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
351   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
352   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
353
354   PORT_START("SYNTH.1")
355   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
356   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
357   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
358   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
359   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
360   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
361   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
362   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab2")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
363
364   PORT_START("SYNTH.2")
365   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
366   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
367   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
368   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
369   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
370   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
371   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
372   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E3")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
373
374   PORT_START("SYNTH.3")
375   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
376   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
377   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
378   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
379   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
380   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
381   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
382   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
383
384   PORT_START("SYNTH.4")
385   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Eb5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
386   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
387   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Db5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
388   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
389   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
390   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
391   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
392   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab4")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
393
394   PORT_START("SYNTH.5")
395   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("B5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
396   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Bb5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
397   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("A5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
398   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Ab5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
399   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("G5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
400   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Gb5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
401   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("F5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
402   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("E5")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
403
404   PORT_START("SYNTH.6")
405   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("C6")  PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x01)
406   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
407   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
408   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
409   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
410   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
411   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
412   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
413INPUT_PORTS_END
414
415static INPUT_PORTS_START( intv_ecs_pads )
416   // First ECS Hand Controller
417   PORT_START("KEYPAD.0")
418   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/1") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
419   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/2") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
420   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/3") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
421   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/4") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
422   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/5") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
423   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/6") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
424   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/7") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
425   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/8") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
426   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/9") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
427   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/Clear") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
428   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/0") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
429   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P3/Enter") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
430   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P3/Upper") PORT_PLAYER(3) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
431   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P3/Lower-Left") PORT_PLAYER(3) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
432   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P3/Lower-Right") PORT_PLAYER(3) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
433   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
434
435   PORT_START("DISC.0")
436   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("P3/Up") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
437   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Up-Up-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
438   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
439   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Right-Up-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
440   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P3/Right") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
441   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Right-Down-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
442   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
443   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Down-Right") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
444   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("P3/Down") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
445   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Down-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
446   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Down-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
447   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Left-Down-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
448   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("P3/Left") PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
449   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Left-Up-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
450   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Up-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
451   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P3/Up-Up-Left") PORT_CONDITION("OPTIONS",0x04,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
452
453   PORT_START("DISCX.0")
454   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_X ) PORT_NAME("P3/X") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x04) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
455
456   PORT_START("DISCY.0")
457   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_Y ) PORT_NAME("P3/Y") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_PLAYER(3) PORT_CONDITION("OPTIONS",0x04,EQUALS,0x04) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
458
459   // Second ECS Hand Controller
460   PORT_START("KEYPAD.1")
461   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/1") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
462   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/2") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
463   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/3") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
464   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/4") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
465   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/5") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
466   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/6") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
467   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/7") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
468   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/8") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
469   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/9") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
470   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/Clear") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
471   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/0") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
472   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("P4/Enter") PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
473   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P4/Upper") PORT_PLAYER(4) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
474   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P4/Lower-Left") PORT_PLAYER(4) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
475   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("P4/Lower-Right") PORT_PLAYER(4) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
476   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED )
477
478   PORT_START("DISC.1")
479   PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("P4/Up") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
480   PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Up-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
481   PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
482   PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Right-Up-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
483   PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("P4/Right") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
484   PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Right-Down-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
485   PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
486   PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Down-Right") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
487   PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("P4/Down") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
488   PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Down-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
489   PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Down-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
490   PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Left-Down-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
491   PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("P4/Left") PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
492   PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Left-Up-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
493   PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
494   PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("P4/Up-Up-Left") PORT_CONDITION("OPTIONS",0x08,EQUALS,0x00) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
495
496   PORT_START("DISCX.1")
497   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_X ) PORT_NAME("P4/X") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_CODE_DEC(KEYCODE_D) PORT_CODE_INC(KEYCODE_G) PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x08) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
498
499   PORT_START("DISCY.1")
500   PORT_BIT( 0xff, 0x50, IPT_AD_STICK_Y ) PORT_NAME("P4/Y") PORT_MINMAX(0x00,0x9f) PORT_SENSITIVITY(100) PORT_KEYDELTA(0x50) PORT_CODE_DEC(KEYCODE_R) PORT_CODE_INC(KEYCODE_F) PORT_PLAYER(4) PORT_CONDITION("OPTIONS",0x08,EQUALS,0x08) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
501INPUT_PORTS_END
502
503static INPUT_PORTS_START( intv_ecs )
504   PORT_INCLUDE( intv_ecs_pads )
505   PORT_INCLUDE( intv_ecs_synth )
506   PORT_INCLUDE( intv_ecs_kbd )
507
508   PORT_START("OPTIONS")
509   PORT_CONFNAME( 0x04, 0x00, "ECS_P3 Disc" ) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
510   PORT_CONFSETTING(    0x00, "Digital" )
511   PORT_CONFSETTING(    0x04, "Analog" )
512   PORT_CONFNAME( 0x08, 0x00, "ECS_P4 Disc" ) PORT_CONDITION("CNTRLSEL",0x0f,EQUALS,0x00)
513   PORT_CONFSETTING(    0x00, "Digital" )
514   PORT_CONFSETTING(    0x08, "Analog" )
515
516   PORT_START("CNTRLSEL")
517   PORT_CONFNAME( 0x0F, 0x02, "ECS Controller")
518   PORT_CONFSETTING(  0x00, "Gamepads" )
519   PORT_CONFSETTING(  0x01, "Piano" )
520   PORT_CONFSETTING(  0x02, "Keyboard" )
521INPUT_PORTS_END
522
523ioport_constructor intv_ecs_device::device_input_ports() const
524{
525   return INPUT_PORTS_NAME( intv_ecs );
526}
527
528
529/*-------------------------------------------------
530 Paged ROM handling
531 -------------------------------------------------*/
532
533READ16_MEMBER(intv_ecs_device::read_rom20)
534{
535   if (m_bank_base[2])
536      return INTV_ROM16_READ(offset + 0x2000);
537   else
538      return 0xffff;
539}
540
541READ16_MEMBER(intv_ecs_device::read_rom70)
542{
543   if (m_bank_base[7])
544      return 0xffff;
545   else
546      return INTV_ROM16_READ(offset + 0x7000);
547}
548
549READ16_MEMBER(intv_ecs_device::read_rome0)
550{
551   if (m_bank_base[14])
552      return INTV_ROM16_READ(offset + 0xe000);
553   else   // if WSMLB is loaded, it shall go here, otherwise 0xffff
554      return m_subslot->read_rome0(space, offset, mem_mask);
555}
556
557READ16_MEMBER(intv_ecs_device::read_romf0)
558{
559   // only WSMLB should come here with bank_base = 1
560   if (m_bank_base[15])
561      return m_subslot->read_romf0(space, offset + 0x1000, mem_mask);
562   else
563      return m_subslot->read_romf0(space, offset, mem_mask);
564}
565
566
567/*-------------------------------------------------
568 read_audio
569 -------------------------------------------------*/
570
571READ16_MEMBER(intv_ecs_device::read_ay)
572{
573   if (ACCESSING_BITS_0_7)
574      return m_snd->read(space, offset, mem_mask);
575   else
576      return 0xffff;
577}
578
579/*-------------------------------------------------
580 write_audio
581 -------------------------------------------------*/
582
583WRITE16_MEMBER(intv_ecs_device::write_ay)
584{
585   if (ACCESSING_BITS_0_7)
586      return m_snd->write(space, offset, data, mem_mask);
587}
588
Property changes on: trunk/src/emu/bus/intv/ecs.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/intv/voice.h
r0r32582
1#ifndef __INTV_VOICE_H
2#define __INTV_VOICE_H
3
4#include "slot.h"
5#include "rom.h"
6#include "sound/sp0256.h"
7
8
9// ======================> intv_voice_device
10
11class intv_voice_device : public intv_rom_device
12{
13public:
14   // construction/destruction
15   intv_voice_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
16     
17   // device-level overrides
18   virtual void device_start();
19   virtual machine_config_constructor device_mconfig_additions() const;
20   virtual const rom_entry *device_rom_region() const;
21
22   // reading and writing
23   // actual IntelliVoice access
24   virtual DECLARE_READ16_MEMBER(read_speech);
25   virtual DECLARE_WRITE16_MEMBER(write_speech);
26   
27   // passthru access
28   virtual DECLARE_READ16_MEMBER(read_rom04) { return m_subslot->read_rom04(space, offset, mem_mask); }
29   virtual DECLARE_READ16_MEMBER(read_rom20) { return m_subslot->read_rom20(space, offset, mem_mask); }
30   virtual DECLARE_READ16_MEMBER(read_rom40) { return m_subslot->read_rom40(space, offset, mem_mask); }
31   virtual DECLARE_READ16_MEMBER(read_rom48) { return m_subslot->read_rom48(space, offset, mem_mask); }
32   virtual DECLARE_READ16_MEMBER(read_rom50) { return m_subslot->read_rom50(space, offset, mem_mask); }
33   virtual DECLARE_READ16_MEMBER(read_rom60) { return m_subslot->read_rom60(space, offset, mem_mask); }
34   virtual DECLARE_READ16_MEMBER(read_rom70) { return m_subslot->read_rom70(space, offset, mem_mask); }
35   virtual DECLARE_READ16_MEMBER(read_rom80)
36   {
37      if (m_ram88_enabled && offset >= 0x800)
38         return m_subslot->read_ram(space, offset & 0x7ff, mem_mask);
39      else
40         return m_subslot->read_rom80(space, offset, mem_mask);
41   }
42   virtual DECLARE_READ16_MEMBER(read_rom90) { return m_subslot->read_rom90(space, offset, mem_mask); }
43   virtual DECLARE_READ16_MEMBER(read_roma0) { return m_subslot->read_roma0(space, offset, mem_mask); }
44   virtual DECLARE_READ16_MEMBER(read_romb0) { return m_subslot->read_romb0(space, offset, mem_mask); }
45   virtual DECLARE_READ16_MEMBER(read_romc0) { return m_subslot->read_romc0(space, offset, mem_mask); }
46   virtual DECLARE_READ16_MEMBER(read_romd0)
47   {
48      if (m_ramd0_enabled && offset < 0x800)
49         return m_subslot->read_ram(space, offset, mem_mask);
50      else
51         return m_subslot->read_romd0(space, offset, mem_mask);
52   }
53   virtual DECLARE_READ16_MEMBER(read_rome0) { return m_subslot->read_rome0(space, offset, mem_mask); }
54   virtual DECLARE_READ16_MEMBER(read_romf0) { return m_subslot->read_romf0(space, offset, mem_mask); }
55   
56   // RAM passthru write
57   virtual DECLARE_WRITE16_MEMBER(write_88) { if (m_ram88_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
58   virtual DECLARE_WRITE16_MEMBER(write_d0) { if (m_ramd0_enabled) m_subslot->write_ram(space, offset, data, mem_mask); }
59   virtual DECLARE_READ16_MEMBER(read_ram) { return m_subslot->read_ram(space, offset, mem_mask); }
60   virtual DECLARE_WRITE16_MEMBER(write_ram) { m_subslot->write_ram(space, offset, data, mem_mask); }
61   
62   virtual void late_subslot_setup();
63   
64private:
65   required_device<sp0256_device> m_speech;
66   required_device<intv_cart_slot_device> m_subslot;
67   bool m_ramd0_enabled, m_ram88_enabled;
68};
69
70
71
72
73// device type definition
74extern const device_type INTV_ROM_VOICE;
75
76#endif
Property changes on: trunk/src/emu/bus/intv/voice.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/bus.mak
r32581r32582
415415
416416#-------------------------------------------------
417417#
418#@src/emu/bus/intv/slot.h,BUSES += INTV
419#-------------------------------------------------
420
421ifneq ($(filter INTV,$(BUSES)),)
422OBJDIRS += $(BUSOBJ)/intv
423BUSOBJS += $(BUSOBJ)/intv/slot.o
424BUSOBJS += $(BUSOBJ)/intv/rom.o
425BUSOBJS += $(BUSOBJ)/intv/voice.o
426BUSOBJS += $(BUSOBJ)/intv/ecs.o
427endif
428
429
430#-------------------------------------------------
431#
418432#@src/emu/bus/isa/isa.h,BUSES += ISA
419433#-------------------------------------------------
420434

Previous 199869 Revisions Next


© 1997-2024 The MAME Team